From 19d3522f3c5c3a7febb5f80884a2d137b7826f0d Mon Sep 17 00:00:00 2001 From: Francisco Perez Date: Sat, 21 Mar 2020 13:02:58 +0100 Subject: [PATCH] cleanup and new release --- CMakeLists.txt | 33 +- Deps/alut/CMakeLists.txt | 8 +- Deps/ardrone_sdk/CMakeLists.txt | 6 +- Deps/cuda/CMakeLists.txt | 4 +- Deps/fireware/CMakeLists.txt | 5 +- Deps/gazebo/CMakeLists.txt | 4 +- Deps/glog/CMakeLists.txt | 4 +- Deps/gtk3/CMakeLists.txt | 4 +- Deps/ice/CMakeLists.txt | 6 +- Deps/libfreenect2/CMakeLists.txt | 4 +- Deps/libusb/CMakeLists.txt | 4 +- Deps/libxml++/CMakeLists.txt | 4 +- Deps/libxml2/CMakeLists.txt | 14 +- Deps/mmal/CMakeLists.txt | 13 +- Deps/nite/CMakeLists.txt | 4 +- Deps/nite2/CMakeLists.txt | 4 +- Deps/nodejs/CMakeLists.txt | 4 +- Deps/ogre/CMakeLists.txt | 4 +- Deps/opencv/CMakeLists.txt | 8 +- Deps/opengl/CMakeLists.txt | 4 +- Deps/openni2/CMakeLists.txt | 4 +- Deps/python/CMakeLists.txt | 6 +- Deps/qfi/CMakeLists.txt | 9 +- Deps/qt/CMakeLists.txt | 4 +- Deps/ros/CMakeLists.txt | 4 +- Deps/tinyxml/CMakeLists.txt | 11 +- Deps/vtk/CMakeLists.txt | 6 +- Deps/xerces/CMakeLists.txt | 5 +- Deps/yaml-cpp/CMakeLists.txt | 4 +- Deps/youtube_dl/CMakeLists.txt | 4 +- README.md | 4 +- cmake/cpack_metainfo/drivers.cmake | 71 +- cmake/cpack_metainfo/tools.cmake | 135 - cmake/cpackit.cmake | 8 +- scripts/cmake/postinst | 2 +- scripts/metapackages/jderobot-drivers.info.in | 2 +- .../metapackages/jderobot-examples.info.in | 17 - scripts/metapackages/jderobot-tools.info.in | 17 - scripts/metapackages/jderobot.info.in | 2 +- scripts/metapackages/make_packages.sh | 2 +- src/CMakeLists.txt | 4 +- src/drivers/CMakeLists.txt | 2 +- .../MAVLinkServer/.idea/MAVLinkServer.iml | 11 - src/drivers/MAVLinkServer/.idea/misc.xml | 14 - src/drivers/MAVLinkServer/.idea/modules.xml | 8 - src/drivers/MAVLinkServer/.idea/workspace.xml | 634 - src/drivers/MAVLinkServer/CMakeLists.txt | 30 - src/drivers/MAVLinkServer/COPYING.txt | 674 - src/drivers/MAVLinkServer/MAVProxy/CMDVel.py | 55 - .../MAVLinkServer/MAVProxy/CMakeLists.txt | 20 - src/drivers/MAVLinkServer/MAVProxy/Extra.py | 52 - .../MAVLinkServer/MAVProxy/MAVLink.xml | 144 - .../MAVLinkServer/MAVProxy/MAVLinkServer.sh | 2 - src/drivers/MAVLinkServer/MAVProxy/Pose3D.py | 57 - .../MAVLinkServer/MAVProxy/__init__.py | 1 - src/drivers/MAVLinkServer/MAVProxy/mav.parm | 503 - src/drivers/MAVLinkServer/MAVProxy/mav.tlog | 0 .../MAVLinkServer/MAVProxy/mav.tlog.raw | 0 .../MAVLinkServer/MAVProxy/mavlinkserver.yml | 30 - .../MAVLinkServer/MAVProxy/mavproxy.py | 1689 - .../MAVProxy/modules/__init__.py | 1 - .../MAVProxy/modules/lib/ANUGA/README.txt | 6 - .../MAVProxy/modules/lib/ANUGA/__init__.py | 0 .../modules/lib/ANUGA/geo_reference.py | 469 - .../lib/ANUGA/lat_long_UTM_conversion.py | 251 - .../MAVProxy/modules/lib/ANUGA/redfearn.py | 243 - .../MAVProxy/modules/lib/__init__.py | 1 - .../MAVProxy/modules/lib/dumpstacks.py | 25 - .../MAVProxy/modules/lib/graphdefinition.py | 12 - .../MAVProxy/modules/lib/grapher.py | 367 - .../MAVProxy/modules/lib/live_graph.py | 88 - .../MAVProxy/modules/lib/live_graph_ui.py | 163 - .../MAVProxy/modules/lib/mavmemlog.py | 102 - .../MAVProxy/modules/lib/mp_checklist.py | 367 - .../MAVProxy/modules/lib/mp_image.py | 539 - .../MAVProxy/modules/lib/mp_menu.py | 365 - .../MAVProxy/modules/lib/mp_module.py | 112 - .../MAVProxy/modules/lib/mp_settings.py | 209 - .../MAVProxy/modules/lib/mp_util.py | 279 - .../MAVProxy/modules/lib/mp_widgets.py | 27 - .../modules/lib/multiprocessing_queue.py | 38 - .../modules/lib/optparse_gui/README.txt | 3 - .../modules/lib/optparse_gui/__init__.py | 323 - .../MAVProxy/modules/lib/rline.py | 221 - .../MAVLinkServer/MAVProxy/modules/lib/tcp.py | 39 - .../MAVProxy/modules/lib/textconsole.py | 57 - .../MAVLinkServer/MAVProxy/modules/lib/udp.py | 40 - .../MAVProxy/modules/lib/wx_loader.py | 9 - .../MAVProxy/modules/lib/wx_processguard.py | 6 - .../MAVProxy/modules/lib/wx_util.py | 7 - .../MAVProxy/modules/lib/wxconsole.py | 95 - .../MAVProxy/modules/lib/wxconsole_ui.py | 101 - .../MAVProxy/modules/lib/wxconsole_util.py | 15 - .../MAVProxy/modules/lib/wxgrapheditor.py | 76 - .../MAVProxy/modules/lib/wxsettings.py | 73 - .../MAVProxy/modules/lib/wxsettings_ui.py | 187 - .../MAVProxy/modules/mavproxy_DGPS.py | 45 - .../MAVProxy/modules/mavproxy_HIL.py | 146 - .../MAVProxy/modules/mavproxy_antenna.py | 56 - .../MAVProxy/modules/mavproxy_arm.py | 125 - .../MAVProxy/modules/mavproxy_auxopt.py | 100 - .../MAVProxy/modules/mavproxy_battery.py | 135 - .../MAVProxy/modules/mavproxy_calibration.py | 162 - .../MAVProxy/modules/mavproxy_cameraview.py | 149 - .../MAVProxy/modules/mavproxy_checklist.py | 113 - .../MAVProxy/modules/mavproxy_cmdlong.py | 269 - .../MAVProxy/modules/mavproxy_console.py | 354 - .../modules/mavproxy_dataflash_logger.py | 263 - .../MAVProxy/modules/mavproxy_fence.py | 303 - .../MAVProxy/modules/mavproxy_gasheli.py | 152 - .../MAVProxy/modules/mavproxy_gimbal.py | 227 - .../MAVProxy/modules/mavproxy_gopro.py | 86 - .../MAVProxy/modules/mavproxy_graph.py | 115 - .../MAVProxy/modules/mavproxy_help.py | 117 - .../MAVProxy/modules/mavproxy_joystick.py | 172 - .../MAVProxy/modules/mavproxy_link.py | 435 - .../MAVProxy/modules/mavproxy_log.py | 193 - .../MAVProxy/modules/mavproxy_map/GAreader.py | 199 - .../MAVProxy/modules/mavproxy_map/__init__.py | 539 - .../modules/mavproxy_map/data/barrell.png | Bin 1124 -> 0 bytes .../modules/mavproxy_map/data/blueantenna.png | Bin 312 -> 0 bytes .../modules/mavproxy_map/data/bluecopter.png | Bin 2191 -> 0 bytes .../modules/mavproxy_map/data/blueheli.png | Bin 1871 -> 0 bytes .../modules/mavproxy_map/data/blueplane.png | Bin 2386 -> 0 bytes .../modules/mavproxy_map/data/bluerover.png | Bin 1846 -> 0 bytes .../mavproxy_map/data/camera-small-red.png | Bin 3641 -> 0 bytes .../modules/mavproxy_map/data/flag.png | Bin 2676 -> 0 bytes .../mavproxy_map/data/greenantenna.png | Bin 314 -> 0 bytes .../modules/mavproxy_map/data/greencopter.png | Bin 2066 -> 0 bytes .../modules/mavproxy_map/data/greenheli.png | Bin 471 -> 0 bytes .../modules/mavproxy_map/data/greenplane.png | Bin 2329 -> 0 bytes .../modules/mavproxy_map/data/greenrover.png | Bin 1722 -> 0 bytes .../modules/mavproxy_map/data/hoop.png | Bin 616 -> 0 bytes .../modules/mavproxy_map/data/loading.jpg | Bin 5413 -> 0 bytes .../modules/mavproxy_map/data/orangeplane.png | Bin 2346 -> 0 bytes .../modules/mavproxy_map/data/purpleplane.png | Bin 2260 -> 0 bytes .../modules/mavproxy_map/data/rallypoint.png | Bin 1108 -> 0 bytes .../modules/mavproxy_map/data/ramp.png | Bin 880 -> 0 bytes .../modules/mavproxy_map/data/redantenna.png | Bin 316 -> 0 bytes .../modules/mavproxy_map/data/redcopter.png | Bin 2126 -> 0 bytes .../modules/mavproxy_map/data/redheli.png | Bin 1522 -> 0 bytes .../modules/mavproxy_map/data/redplane.png | Bin 3207 -> 0 bytes .../modules/mavproxy_map/data/redrover.png | Bin 1876 -> 0 bytes .../modules/mavproxy_map/data/unavailable.jpg | Bin 6903 -> 0 bytes .../modules/mavproxy_map/mp_elevation.py | 100 - .../modules/mavproxy_map/mp_slipmap.py | 230 - .../modules/mavproxy_map/mp_slipmap_ui.py | 577 - .../modules/mavproxy_map/mp_slipmap_util.py | 554 - .../MAVProxy/modules/mavproxy_map/mp_tile.py | 618 - .../MAVProxy/modules/mavproxy_map/srtm.py | 446 - .../MAVProxy/modules/mavproxy_misc.py | 222 - .../modules/mavproxy_misseditor/__init__.py | 265 - .../mavproxy_misseditor/button_renderer.py | 84 - .../modules/mavproxy_misseditor/me_defines.py | 68 - .../modules/mavproxy_misseditor/me_event.py | 51 - .../mavproxy_misseditor/missionEditor.wxg | 419 - .../mavproxy_misseditor/missionEditorFrame.py | 654 - .../modules/mavproxy_mmap/__init__.py | 45 - .../modules/mavproxy_mmap/mmap_app/bing.js | 68 - .../mavproxy_mmap/mmap_app/bluemarble.js | 10 - .../mavproxy_mmap/mmap_app/drone-md.png | Bin 880 -> 0 bytes .../mavproxy_mmap/mmap_app/drone-sm.png | Bin 603 -> 0 bytes .../modules/mavproxy_mmap/mmap_app/index.html | 342 - .../mavproxy_mmap/mmap_app/modestmaps.js | 2940 - .../modules/mavproxy_mmap/mmap_server.py | 61 - .../MAVProxy/modules/mavproxy_mode.py | 76 - .../MAVProxy/modules/mavproxy_nsh.py | 110 - .../MAVProxy/modules/mavproxy_output.py | 114 - .../MAVProxy/modules/mavproxy_param.py | 251 - .../MAVProxy/modules/mavproxy_ppp.py | 101 - .../MAVProxy/modules/mavproxy_rally.py | 325 - .../MAVProxy/modules/mavproxy_rc.py | 109 - .../MAVProxy/modules/mavproxy_rcsetup.py | 110 - .../MAVProxy/modules/mavproxy_relay.py | 78 - .../MAVProxy/modules/mavproxy_sensors.py | 138 - .../MAVProxy/modules/mavproxy_serial.py | 86 - .../modules/mavproxy_smartcamera/__init__.py | 464 - .../mavproxy_smartcamera/sc_SonyQX1.py | 582 - .../modules/mavproxy_smartcamera/sc_config.py | 146 - .../modules/mavproxy_smartcamera/sc_main.py | 240 - .../modules/mavproxy_smartcamera/sc_video.py | 196 - .../modules/mavproxy_smartcamera/sc_webcam.py | 112 - .../mavproxy_smartcamera/smart_camera.cnf | 11 - .../modules/mavproxy_smartcamera/ssdp.py | 63 - .../MAVProxy/modules/mavproxy_speech.py | 83 - .../MAVProxy/modules/mavproxy_terrain.py | 145 - .../MAVProxy/modules/mavproxy_test.py | 38 - .../MAVProxy/modules/mavproxy_tracker.py | 216 - .../MAVProxy/modules/mavproxy_tuneopt.py | 104 - .../MAVProxy/modules/mavproxy_wp.py | 553 - .../MAVProxy/pymavlink/DFReader.py | 703 - .../MAVLinkServer/MAVProxy/pymavlink/PKG-INFO | 17 - .../MAVProxy/pymavlink/README.txt | 11 - .../MAVProxy/pymavlink/__init__.py | 1 - .../MAVProxy/pymavlink/dialects/__init__.py | 0 .../MAVProxy/pymavlink/dialects/v10/ASLUAV.py | 12730 -- .../pymavlink/dialects/v10/ASLUAV.xml | 202 - .../pymavlink/dialects/v10/__init__.py | 0 .../pymavlink/dialects/v10/ardupilotmega.py | 15570 -- .../pymavlink/dialects/v10/ardupilotmega.xml | 1545 - .../pymavlink/dialects/v10/autoquad.py | 12126 -- .../pymavlink/dialects/v10/autoquad.xml | 169 - .../MAVProxy/pymavlink/dialects/v10/common.py | 11833 -- .../pymavlink/dialects/v10/common.xml | 3716 - .../pymavlink/dialects/v10/matrixpilot.py | 13198 -- .../pymavlink/dialects/v10/matrixpilot.xml | 284 - .../pymavlink/dialects/v10/minimal.py | 822 - .../pymavlink/dialects/v10/minimal.xml | 189 - .../pymavlink/dialects/v10/paparazzi.py | 12084 -- .../pymavlink/dialects/v10/paparazzi.xml | 38 - .../dialects/v10/python_array_test.py | 12261 -- .../dialects/v10/python_array_test.xml | 67 - .../MAVProxy/pymavlink/dialects/v10/slugs.py | 13030 -- .../MAVProxy/pymavlink/dialects/v10/slugs.xml | 339 - .../MAVProxy/pymavlink/dialects/v10/test.py | 715 - .../MAVProxy/pymavlink/dialects/v10/test.xml | 31 - .../pymavlink/dialects/v10/uAvionix.py | 753 - .../pymavlink/dialects/v10/uAvionix.xml | 123 - .../pymavlink/dialects/v10/ualberta.py | 12041 -- .../pymavlink/dialects/v10/ualberta.xml | 76 - .../MAVProxy/pymavlink/dialects/v20/ASLUAV.py | 12907 -- .../pymavlink/dialects/v20/ASLUAV.xml | 202 - .../pymavlink/dialects/v20/__init__.py | 0 .../pymavlink/dialects/v20/ardupilotmega.py | 15949 -- .../pymavlink/dialects/v20/ardupilotmega.xml | 1545 - .../pymavlink/dialects/v20/autoquad.py | 12303 -- .../pymavlink/dialects/v20/autoquad.xml | 169 - .../MAVProxy/pymavlink/dialects/v20/common.py | 12010 -- .../pymavlink/dialects/v20/common.xml | 3716 - .../pymavlink/dialects/v20/matrixpilot.py | 13375 -- .../pymavlink/dialects/v20/matrixpilot.xml | 284 - .../pymavlink/dialects/v20/minimal.py | 822 - .../pymavlink/dialects/v20/minimal.xml | 189 - .../pymavlink/dialects/v20/paparazzi.py | 12261 -- .../pymavlink/dialects/v20/paparazzi.xml | 38 - .../dialects/v20/python_array_test.py | 12438 -- .../dialects/v20/python_array_test.xml | 67 - .../MAVProxy/pymavlink/dialects/v20/slugs.py | 13207 -- .../MAVProxy/pymavlink/dialects/v20/slugs.xml | 339 - .../MAVProxy/pymavlink/dialects/v20/test.py | 715 - .../MAVProxy/pymavlink/dialects/v20/test.xml | 31 - .../pymavlink/dialects/v20/uAvionix.py | 952 - .../pymavlink/dialects/v20/uAvionix.xml | 123 - .../pymavlink/dialects/v20/ualberta.py | 12218 -- .../pymavlink/dialects/v20/ualberta.xml | 76 - .../MAVLinkServer/MAVProxy/pymavlink/fgFDM.py | 212 - .../generator/C/include_v1.0/checksum.h | 96 - .../C/include_v1.0/mavlink_conversions.h | 211 - .../C/include_v1.0/mavlink_helpers.h | 678 - .../generator/C/include_v1.0/mavlink_types.h | 228 - .../generator/C/include_v1.0/protocol.h | 339 - .../generator/C/include_v2.0/checksum.h | 93 - .../C/include_v2.0/mavlink_conversions.h | 209 - .../C/include_v2.0/mavlink_get_info.h | 37 - .../C/include_v2.0/mavlink_helpers.h | 1098 - .../generator/C/include_v2.0/mavlink_sha256.h | 244 - .../generator/C/include_v2.0/mavlink_types.h | 291 - .../generator/C/include_v2.0/protocol.h | 334 - .../MAVProxy/pymavlink/generator/__init__.py | 1 - .../java/lib/Messages/MAVLinkMessage.java | 28 - .../java/lib/Messages/MAVLinkPayload.java | 202 - .../java/lib/Messages/MAVLinkStats.java | 151 - .../pymavlink/generator/java/lib/Parser.java | 140 - .../MAVProxy/pymavlink/generator/mavcrc.py | 29 - .../MAVProxy/pymavlink/generator/mavgen.py | 207 - .../MAVProxy/pymavlink/generator/mavgen_c.py | 696 - .../MAVProxy/pymavlink/generator/mavgen_cs.py | 343 - .../pymavlink/generator/mavgen_java.py | 617 - .../pymavlink/generator/mavgen_javascript.py | 574 - .../pymavlink/generator/mavgen_objc.py | 436 - .../pymavlink/generator/mavgen_python.py | 845 - .../pymavlink/generator/mavgen_swift.py | 433 - .../pymavlink/generator/mavgen_wlua.py | 348 - .../MAVProxy/pymavlink/generator/mavparse.py | 491 - .../pymavlink/generator/mavschema.xsd | 148 - .../pymavlink/generator/mavtemplate.py | 131 - .../pymavlink/generator/mavtestgen.py | 138 - .../MAVProxy/pymavlink/mavexpression.py | 34 - .../MAVProxy/pymavlink/mavextra.py | 1008 - .../pymavlink/mavnative/mavlink_defaults.h | 22 - .../MAVProxy/pymavlink/mavnative/mavnative.c | 977 - .../MAVProxy/pymavlink/mavparm.py | 125 - .../MAVProxy/pymavlink/mavutil.py | 1782 - .../MAVLinkServer/MAVProxy/pymavlink/mavwp.py | 604 - .../v0.9/ardupilotmega.xml | 270 - .../message_definitions/v0.9/common.xml | 941 - .../message_definitions/v0.9/minimal.xml | 13 - .../message_definitions/v0.9/slugs.xml | 148 - .../message_definitions/v0.9/test.xml | 31 - .../message_definitions/v0.9/ualberta.xml | 54 - .../message_definitions/v1.0/ASLUAV.xml | 202 - .../v1.0/ardupilotmega.xml | 1545 - .../message_definitions/v1.0/autoquad.xml | 169 - .../message_definitions/v1.0/common.xml | 3716 - .../message_definitions/v1.0/matrixpilot.xml | 284 - .../message_definitions/v1.0/minimal.xml | 189 - .../message_definitions/v1.0/paparazzi.xml | 38 - .../v1.0/python_array_test.xml | 67 - .../message_definitions/v1.0/slugs.xml | 339 - .../message_definitions/v1.0/test.xml | 31 - .../message_definitions/v1.0/uAvionix.xml | 123 - .../message_definitions/v1.0/ualberta.xml | 76 - .../pymavlink/pymavlink.egg-info/PKG-INFO | 17 - .../pymavlink/pymavlink.egg-info/SOURCES.txt | 154 - .../pymavlink.egg-info/dependency_links.txt | 1 - .../pymavlink.egg-info/top_level.txt | 2 - .../MAVProxy/pymavlink/quaternion.py | 632 - .../MAVProxy/pymavlink/rotmat.py | 406 - .../MAVProxy/pymavlink/setup.cfg | 5 - .../MAVLinkServer/MAVProxy/pymavlink/setup.py | 133 - .../MAVProxy/pymavlink/tools/MPU6KSearch.py | 199 - .../MAVProxy/pymavlink/tools/magfit.py | 176 - .../MAVProxy/pymavlink/tools/magfit_delta.py | 137 - .../MAVProxy/pymavlink/tools/magfit_gps.py | 165 - .../MAVProxy/pymavlink/tools/magfit_motors.py | 150 - .../MAVProxy/pymavlink/tools/mavextract.py | 112 - .../MAVProxy/pymavlink/tools/mavfft.py | 82 - .../pymavlink/tools/mavflightmodes.py | 83 - .../MAVProxy/pymavlink/tools/mavflighttime.py | 79 - .../MAVProxy/pymavlink/tools/mavgen.py | 30 - .../MAVProxy/pymavlink/tools/mavgpslock.py | 64 - .../MAVProxy/pymavlink/tools/mavgraph.py | 311 - .../MAVProxy/pymavlink/tools/mavkml.py | 200 - .../MAVProxy/pymavlink/tools/mavlogdump.py | 228 - .../MAVProxy/pymavlink/tools/mavloss.py | 61 - .../MAVProxy/pymavlink/tools/mavmission.py | 52 - .../MAVProxy/pymavlink/tools/mavparmdiff.py | 23 - .../MAVProxy/pymavlink/tools/mavparms.py | 51 - .../MAVProxy/pymavlink/tools/mavplayback.py | 249 - .../MAVProxy/pymavlink/tools/mavsearch.py | 41 - .../MAVProxy/pymavlink/tools/mavsigloss.py | 57 - .../MAVProxy/pymavlink/tools/mavsummarize.py | 157 - .../MAVProxy/pymavlink/tools/mavtogpx.py | 106 - .../MAVProxy/pymavlink/tools/mavtomfile.py | 96 - .../MAVProxy/tools/MAVExplorer.py | 462 - .../MAVProxy/tools/graphs/ekfGraphs.xml | 304 - .../MAVProxy/tools/graphs/mavgraphs.xml | 244 - .../MAVProxy/tools/mavflightview.py | 348 - src/drivers/MAVLinkServer/README.md | 7 - src/drivers/MAVLinkServer/make | 5 - src/drivers/MAVLinkServer/mav.parm | 495 - src/drivers/MAVLinkServer/mav.tlog | 1 - src/drivers/MAVLinkServer/mav.tlog.raw | 1 - src/drivers/MAVLinkServer/mavLinkServer.in | 3 - src/drivers/MAVLinkServer/setup.py | 55 - .../MAVLinkServer/setupMAVLinkServer.in | 5 - src/drivers/YoutubeServer/.DS_Store | Bin 6148 -> 0 bytes src/drivers/YoutubeServer/.gitignore | 1 - src/drivers/YoutubeServer/CMakeLists.txt | 21 - src/drivers/YoutubeServer/JdeRobot/.DS_Store | Bin 6148 -> 0 bytes .../YoutubeServer/JdeRobot/ImageProviderI.py | 106 - .../YoutubeServer/JdeRobot/__init__.py | 0 .../YoutubeServer/videoTools/.DS_Store | Bin 6148 -> 0 bytes .../YoutubeServer/videoTools/__init__.py | 0 .../YoutubeServer/videoTools/processVideo.py | 95 - .../YoutubeServer/videoTools/threadFlow.py | 52 - src/drivers/YoutubeServer/youtubeserver.in | 3 - src/drivers/YoutubeServer/youtubeserver.py | 75 - src/drivers/YoutubeServer/youtubeserver.yml | 12 - .../ardrone_server/CMakeLists.txt.DISABLE | 119 - .../ardrone_server/ardrone_interfaces.cfg | 30 - src/drivers/ardrone_server/config/config.xml | 27 - .../include/ardrone_server/ardrone_config.h | 47 - .../ardrone_server/ardrone_driver.h.in | 75 - .../include/ardrone_server/ardrone_parser.h | 50 - .../include/ardrone_server/ardrone_sdk.h | 88 - .../ardrone_server/interfaces/ardroneextrai.h | 46 - .../interfaces/cameraserver.cpp | 299 - .../ardrone_server/interfaces/cmdveli.h | 39 - .../ardrone_server/interfaces/navdatagpsi.h | 44 - .../ardrone_server/interfaces/navdatai.h | 58 - .../ardrone_server/interfaces/pose3di.h | 62 - .../ardrone_server/interfaces/remoteconfigi.h | 44 - .../include/ardrone_server/teleop_twist.h | 64 - .../include/ardrone_server/video.h | 67 - .../ardrone_server/slice/navdatagps.ice | 103 - .../ardrone_server/src/ardrone_config.cpp | 90 - .../ardrone_server/src/ardrone_driver.cpp | 350 - .../ardrone_server/src/ardrone_parser.cpp | 113 - .../ardrone_server/src/ardrone_sdk.cpp | 232 - .../src/interfaces/ardroneextrai.cpp | 78 - .../ardrone_server/src/interfaces/cmdveli.cpp | 42 - .../src/interfaces/navdatagpsi.cpp | 96 - .../src/interfaces/navdatai.cpp | 230 - .../ardrone_server/src/interfaces/pose3di.cpp | 191 - .../src/interfaces/remoteconfigi.cpp | 93 - .../ardrone_server/src/teleop_twist.cpp | 258 - src/drivers/ardrone_server/src/video.cpp | 59 - .../ardrone_server/test/print_gps_data.cpp | 82 - .../ardrone_server/test/test_parser.cpp | 18 - src/drivers/camserver/CMakeLists.txt | 43 - src/drivers/camserver/camserver.cfg | 22 - src/drivers/camserver/camserver.cpp | 262 - src/drivers/camserverWeb/.DS_Store | Bin 6148 -> 0 bytes src/drivers/camserverWeb/main.js | 51 - src/drivers/camserverWeb/package-lock.json | 2222 - src/drivers/camserverWeb/package.json | 15 - src/drivers/camserverWeb/public/config.yml | 6 - .../camserverWeb/public/css/bootstrap.min.css | 14 - .../camserverWeb/public/css/cameraserver.css | 128 - src/drivers/camserverWeb/public/css/fondo.png | Bin 1549 -> 0 bytes .../fonts/glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 288 - .../fonts/glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes src/drivers/camserverWeb/public/index.html | 100 - .../camserverWeb/public/js/CamServer.js | 20 - .../camserverWeb/public/js/apiCamServer.js | 121 - .../camserverWeb/public/js/bootstrap.min.js | 7 - .../camserverWeb/public/js/camserverWeb.js | 62 - .../camserverWeb/public/js/jquery.min.js | 5 - .../camserverWeb/public/js/roslibjs.min.js | 2 - src/drivers/camserverWeb/run.js | 49 - src/drivers/camserver_py/CMakeLists.txt | 22 - src/drivers/camserver_py/camserver.py | 49 - src/drivers/camserver_py/camserver_py.in | 3 - src/drivers/camserver_py/camserver_py.yml | 5 - src/drivers/camserver_py/serverImage.py | 39 - src/drivers/emSensorDriver/CMakeLists.txt | 53 - src/drivers/emSensorDriver/emSensorDriver.cfg | 4 - src/drivers/emSensorDriver/emSensorDriver.cpp | 165 - src/drivers/emSensorDriver/emSensorI.cpp | 54 - src/drivers/emSensorDriver/emSensorI.h | 45 - src/drivers/emSensorDriver/gpio_reader.cpp | 108 - src/drivers/emSensorDriver/gpio_reader.h | 93 - src/drivers/emSensorDriver/pwm_analyzer.cpp | 178 - src/drivers/emSensorDriver/pwm_analyzer.h | 85 - src/drivers/emSensorDriver/sharer.cpp | 53 - src/drivers/emSensorDriver/sharer.h | 81 - src/drivers/evicam_driver/CMakeLists.txt | 46 - src/drivers/evicam_driver/EVILib/EVI-D100.c++ | 268 - src/drivers/evicam_driver/EVILib/EVI-D100.h | 75 - .../evicam_driver/EVILib/EVI-D100P.c++ | 268 - src/drivers/evicam_driver/EVILib/EVI-D100P.h | 75 - .../evicam_driver/EVILib/EVI-D100g.c++ | 1843 - src/drivers/evicam_driver/EVILib/EVI-D100g.h | 398 - src/drivers/evicam_driver/EVILib/EVI-D30.c++ | 318 - src/drivers/evicam_driver/EVILib/EVI-D30.h | 83 - src/drivers/evicam_driver/EVILib/EVI-D30g.c++ | 1996 - src/drivers/evicam_driver/EVILib/EVI-D30g.h | 498 - src/drivers/evicam_driver/EVILib/EVI-D31.c++ | 321 - src/drivers/evicam_driver/EVILib/EVI-D31.h | 83 - src/drivers/evicam_driver/EVILib/EVI-D70.c++ | 626 - src/drivers/evicam_driver/EVILib/EVI-D70.h | 133 - src/drivers/evicam_driver/EVILib/EVI-D70P.c++ | 626 - src/drivers/evicam_driver/EVILib/EVI-D70P.h | 133 - src/drivers/evicam_driver/EVILib/EVI-D70g.c++ | 2636 - src/drivers/evicam_driver/EVILib/EVI-D70g.h | 527 - src/drivers/evicam_driver/EVILib/EVILib.c++ | 2153 - src/drivers/evicam_driver/EVILib/EVILib.h | 711 - src/drivers/evicam_driver/evicam_driver.cfg | 2 - .../evicam_driver/interfaces/pantilti.hpp | 41 - .../evicam_driver/src/evicam_driver.cpp | 111 - .../evicam_driver/src/interfaces/pantilti.cpp | 75 - src/drivers/evicam_driver/src/test.cpp | 84 - src/drivers/evicam_driver/test.cfg | 1 - src/drivers/gazebo/plugins/CMakeLists.txt | 2 +- src/drivers/gazebo/plugins/car/carMotors.cc | 2 +- src/drivers/gazebo/plugins/car/pose3d.cc | 2 +- src/drivers/gazebo/plugins/f1/camera_dump.cc | 2 +- src/drivers/gazebo/plugins/f1/laser.cc | 2 +- src/drivers/gazebo/plugins/f1/motors.cc | 2 +- src/drivers/gazebo/plugins/f1/pose3d.cc | 2 +- .../plugins/flyingKinect/CMakeLists.txt | 65 - .../plugins/flyingKinect/flyingKinect2.cfg | 2 - .../flyingKinect/include/kinect/kinect.hh | 132 - .../include/kinect/pointcloudi.hpp | 47 - .../include/quadrotor/cameraproxy.hh | 72 - .../include/quadrotor/debugtools.h | 80 - .../include/quadrotor/interfaces/camerai.h | 58 - .../quadrotor/interfaces/cameraibase.h | 79 - .../quadrotor/interfaces/pushcamerai.h | 49 - .../include/quadrotor/quadrotorsensors.hh | 95 - .../plugins/flyingKinect/src/cameraproxy.cc | 113 - .../flyingKinect/src/interfaces/camerai.cpp | 72 - .../src/interfaces/cameraibase.cpp | 87 - .../src/interfaces/pushcamerai.cpp | 59 - .../gazebo/plugins/flyingKinect/src/kinect.cc | 294 - .../flyingKinect/src/quadrotorsensors.cc | 152 - .../plugins/formula1/src/formula1ice.cc | 10 +- .../src/interfaces/pose3dencoders.cpp | 8 +- .../gazebo/plugins/holo_car/holoCarMotors.cc | 2 +- .../gazebo/plugins/holo_car/holoCarPose3d.cc | 2 +- .../gazebo/plugins/kinect/CMakeLists.txt | 36 - .../plugins/kinect/build/CMakeLists.txt | 27 - .../gazebo/plugins/kinect/build/clean.sh | 17 - src/drivers/gazebo/plugins/kinect/kinect.cfg | 3 - .../gazebo/plugins/kinect/kinectPlugin.cc | 666 - .../gazebo/plugins/kinect/kinectPlugin.h | 113 - .../gazebo/plugins/kinect/profundidad.cfg | 1 - .../gazebo/plugins/mbot/CMakeLists.txt | 4 +- .../gazebo/plugins/mbot/camera_dump.cc | 2 +- src/drivers/gazebo/plugins/mbot/ir.cc | 2 +- src/drivers/gazebo/plugins/mbot/motors.cc | 29 +- src/drivers/gazebo/plugins/mbot/motors.h | 5 +- src/drivers/gazebo/plugins/mbot/pose3d.cc | 34 +- src/drivers/gazebo/plugins/mbot/pose3d.h | 6 +- src/drivers/gazebo/plugins/mbot/sonar.cc | 2 +- .../gazebo/plugins/opel/camera_dump.cc | 2 +- src/drivers/gazebo/plugins/opel/opelMotors.cc | 2 +- src/drivers/gazebo/plugins/opel/pose3d.cc | 2 +- .../gazebo/plugins/pibot/CMakeLists.txt | 22 +- .../gazebo/plugins/pibot/camera_dump.cc | 2 +- src/drivers/gazebo/plugins/pibot/ir.cc | 2 +- src/drivers/gazebo/plugins/pibot/motors.cc | 2 +- src/drivers/gazebo/plugins/pibot/pose3d.cc | 4 +- src/drivers/gazebo/plugins/pibot/sonar.cc | 2 +- .../gazebo/plugins/pioneer/CMakeLists.txt | 51 - .../plugins/pioneer/cam_pioneer_left.cfg | 8 - .../plugins/pioneer/cam_pioneer_right.cfg | 8 - .../gazebo/plugins/pioneer/camera_dump.cc | 307 - src/drivers/gazebo/plugins/pioneer/laser.cc | 148 - src/drivers/gazebo/plugins/pioneer/motors.cc | 241 - src/drivers/gazebo/plugins/pioneer/motors.h | 73 - .../plugins/pioneer/pioneer2dx2Motors.cfg | 3 - .../plugins/pioneer/pioneer2dx2_laser.cfg | 3 - .../pioneer/pioneer2dx2_pose3dencoders.cfg | 5 - .../plugins/pioneer/pioneer2dxMotors.cfg | 3 - .../plugins/pioneer/pioneer2dxPose3D.cfg | 3 - .../pioneer/pioneer2dx_cam_sensor_left.cfg | 8 - .../pioneer/pioneer2dx_cam_sensor_right.cfg | 8 - .../plugins/pioneer/pioneer2dx_laser.cfg | 2 - .../pioneer/pioneer2dx_pose3dencoders.cfg | 5 - src/drivers/gazebo/plugins/pioneer/pose3d.cc | 156 - src/drivers/gazebo/plugins/pioneer/pose3d.h | 62 - .../gazebo/plugins/pioneer/pose3dencoders.cc | 499 - .../gazebo/plugins/pioneer/pose3dencoders.h | 82 - .../plugins/quadrotor/src/quadrotorice.cc | 14 +- .../gazebo/plugins/roomba/src/roombaice.cc | 8 +- .../gazebo/plugins/taxiholoLaser/laser.cc | 2 +- .../gazebo/plugins/turtlebot/CMakeLists.txt | 66 - .../plugins/turtlebot/cfg/turtlebotplugin.cfg | 9 - .../turtlebot/include/turtlebot/debugtools.h | 81 - .../include/turtlebot/interfaces/bumperi.h | 43 - .../include/turtlebot/interfaces/camerai.h | 63 - .../turtlebot/interfaces/cameraibase.h | 81 - .../turtlebot/interfaces/kinectPlugini.h | 0 .../include/turtlebot/interfaces/laseri.h | 45 - .../include/turtlebot/interfaces/motorsi.h | 48 - .../include/turtlebot/interfaces/pose3di.h | 52 - .../include/turtlebot/turtlebotcontrol.hh | 90 - .../include/turtlebot/turtlebotice.hh | 81 - .../include/turtlebot/turtlebotplugin.hh | 78 - .../include/turtlebot/turtlebotsensors.hh | 116 - .../turtlebot/src/interfaces/bumperi.cpp | 48 - .../turtlebot/src/interfaces/camerai.cpp | 77 - .../turtlebot/src/interfaces/cameraibase.cpp | 89 - .../src/interfaces/kinectPlugini.cpp | 666 - .../turtlebot/src/interfaces/laseri.cpp | 58 - .../turtlebot/src/interfaces/motorsi.cpp | 65 - .../turtlebot/src/interfaces/pose3di.cpp | 58 - .../plugins/turtlebot/src/turtlebotcontrol.cc | 120 - .../plugins/turtlebot/src/turtlebotice.cc | 126 - .../plugins/turtlebot/src/turtlebotplugin.cc | 150 - .../plugins/turtlebot/src/turtlebotsensors.cc | 189 - src/drivers/giraffeServer/CMakeLists.txt | 36 - src/drivers/giraffeServer/README | 42 - src/drivers/giraffeServer/config.h | 9 - src/drivers/giraffeServer/dynamixel.cpp | 960 - src/drivers/giraffeServer/dynamixel.h | 135 - src/drivers/giraffeServer/giraffeServer.cfg | 70 - src/drivers/giraffeServer/giraffeServer.pro | 10 - src/drivers/giraffeServer/handler.h | 87 - src/drivers/giraffeServer/jointmotorComp.cpp | 208 - src/drivers/giraffeServer/jointmotorI.cpp | 144 - src/drivers/giraffeServer/jointmotorI.h | 58 - src/drivers/giraffeServer/killserver.sh | 4 - src/drivers/giraffeServer/moc_monitor.cpp | 80 - .../giraffeServer/moc_q4serialport.cpp | 104 - src/drivers/giraffeServer/moc_worker.cpp | 80 - src/drivers/giraffeServer/monitor.cpp | 198 - src/drivers/giraffeServer/monitor.h | 52 - .../q4serialport/q4serialport.cpp | 547 - .../giraffeServer/q4serialport/q4serialport.h | 203 - .../giraffeServer/rapplication/rapplication.h | 41 - src/drivers/giraffeServer/servo.cpp | 84 - src/drivers/giraffeServer/servo.h | 77 - src/drivers/giraffeServer/worker.cpp | 254 - src/drivers/giraffeServer/worker.h | 71 - src/drivers/kinect2server/CMakeLists.txt | 56 - src/drivers/kinect2server/README.md | 42 - src/drivers/kinect2server/kinect2Server.cfg | 62 - src/drivers/kinect2server/kinect2Server.cpp | 1194 - src/drivers/openni1Server/CMakeLists.txt | 78 - src/drivers/openni1Server/config/camAlicia | 53 - src/drivers/openni1Server/config/camRGB | 53 - src/drivers/openni1Server/myprogeo.cpp | 272 - src/drivers/openni1Server/myprogeo.h | 59 - src/drivers/openni1Server/openni1Server.cfg | 29 - src/drivers/openni1Server/openni1Server.cpp | 1632 - src/drivers/openniServer/CMakeLists.txt | 114 - src/drivers/openniServer/OpenNITypes.h | 57 - .../OpenNiServerLib/ConcurrentDevice.cpp | 471 - .../OpenNiServerLib/ConcurrentDevice.h | 84 - .../OpenNiServerLib/DepthCamera.cpp | 51 - .../OpenNiServerLib/DepthCamera.h | 50 - .../OpenNiServerLib/OpenCVConverter.cpp | 73 - .../OpenNiServerLib/OpenCVConverter.h | 21 - .../OpenNiServerLib/OpenNIDeviceListener.h | 45 - .../OpenNiServerLib/PointCloudServer.cpp | 173 - .../OpenNiServerLib/PointCloudServer.h | 65 - .../OpenNiServerLib/RGBCamera.cpp | 52 - .../openniServer/OpenNiServerLib/RGBCamera.h | 49 - .../OpenNiServerLib/RGBDServer.cpp | 108 - .../openniServer/OpenNiServerLib/RGBDServer.h | 62 - .../openniServer/OpenNiServerLib/myprogeo.cpp | 229 - .../openniServer/OpenNiServerLib/myprogeo.h | 63 - .../openniServer/config/1openniServer.cfg | 63 - .../openniServer/config/2openniServer.cfg | 63 - src/drivers/openniServer/config/camRGB | 53 - src/drivers/openniServer/config/lambecom.cfg | 126 - src/drivers/openniServer/openniServer.cfg | 63 - src/drivers/openniServer/openniServer.cpp | 220 - src/drivers/openniServer/sv/run | 12 - src/drivers/openniServer/sv/xtionUsbReset.sh | 61 - src/drivers/openniServer/sv2/run | 12 - src/drivers/pclRGBDServer/CMakeLists.txt | 45 - src/drivers/pclRGBDServer/cameraRGB.h | 165 - src/drivers/pclRGBDServer/cameradepth.h | 166 - src/drivers/pclRGBDServer/kinectServer.cfg | 6 - src/drivers/pclRGBDServer/kinectServer.cpp | 284 - src/drivers/pclRGBDServer/pointcloud.h | 69 - src/examples/CMakeLists.txt | 15 - src/examples/basic_component/CMakeLists.txt | 81 - .../basic_component/basic_component.cpp | 45 - .../basic_component/basic_component.yml | 19 - src/examples/basic_component/gui/gui.cpp | 88 - src/examples/basic_component/gui/gui.h | 46 - .../basic_component/gui/threadupdategui.cpp | 35 - .../basic_component/gui/threadupdategui.h | 23 - .../gui/widget/cameraswidget.cpp | 38 - .../gui/widget/cameraswidget.h | 22 - .../basic_component/gui/widget/controlvw.cpp | 134 - .../basic_component/gui/widget/controlvw.h | 36 - .../basic_component_py/CMakeLists.txt | 30 - .../basic_component_py/basic_component.py | 54 - .../basic_component_py/basic_component_py.in | 3 - .../basic_component_py/basic_component_py.yml | 17 - src/examples/basic_component_py/generateGUI | 9 - src/examples/basic_component_py/gui/GUI.py | 81 - .../basic_component_py/gui/__init__.py | 1 - .../basic_component_py/gui/cameraWidget.py | 53 - .../basic_component_py/gui/communicator.py | 24 - .../basic_component_py/gui/logoWidget.py | 44 - .../basic_component_py/gui/teleopWidget.py | 113 - .../basic_component_py/gui/threadGUI.py | 46 - src/examples/basic_component_py/gui/ui_gui.py | 57 - src/examples/basic_component_py/gui/ui_gui.ui | 119 - .../basic_component_py/resources/__init__.py | 0 .../basic_component_py/resources/ball.png | Bin 1869 -> 0 bytes .../basic_component_py/resources/jderobot.svg | 11 - .../resources/resources.qrc | 6 - .../basic_component_py/resources_rc.py | 224 - src/examples/basic_server/.gitignore | 2 - src/examples/basic_server/CMakeLists.txt | 37 - src/examples/basic_server/basic_server.cfg | 35 - src/examples/basic_server/basic_server.cpp | 134 - src/examples/basic_server/myInterface.ice | 8 - src/examples/opencvdemo/CMakeLists.txt | 45 - src/examples/opencvdemo/makefile | 13 - src/examples/opencvdemo/opencvdemo.cfg | 1 - src/examples/opencvdemo/opencvdemo.cpp | 107 - src/examples/opencvdemo/opencvdemo.glade | 882 - src/examples/opencvdemo/viewer.cpp | 1331 - src/examples/opencvdemo/viewer.h | 163 - src/examples/visualStates/CMakeLists.txt | 7 - .../jderobot_comm/ice/ArDrone/ArDrone.xml | 248 - .../obstacleAvoidanceCpp.xml | 83 - .../obstacleAvoidancePython.xml | 80 - .../obstacleAvoidanceCpp.xml | 83 - .../obstacleAvoidancePython.xml | 80 - .../obstacleAvoidanceCpp.xml | 90 - .../obstacleAvoidancePython.xml | 87 - src/libs/CMakeLists.txt | 2 +- src/libs/logger/CMakeLists.txt | 2 +- src/tools/CMakeLists.txt | 16 - .../cameraCalibrator/CMakeLists.txt | 41 - .../cameraCalibrator/cameraCalibrator.cfg | 17 - .../cameraCalibrator/cameraCalibrator.cpp | 492 - .../DEPRECATED/giraffeClient/CMakeLists.txt | 47 - .../DEPRECATED/giraffeClient/cameraconf.cpp | 293 - .../DEPRECATED/giraffeClient/cameraconf.h | 72 - .../DEPRECATED/giraffeClient/controller.cpp | 143 - .../DEPRECATED/giraffeClient/controller.h | 59 - .../giraffeClient/giraffeClient.cfg | 3 - .../giraffeClient/giraffeClient.cpp | 127 - .../giraffeClient/giraffeClient.glade | 450 - src/tools/DEPRECATED/giraffeClient/view.cpp | 172 - src/tools/DEPRECATED/giraffeClient/view.h | 92 - .../piCamCalibrator/PiCamCalibration.py | 62 - .../piCamCalibrator/chess_board/frame01.jpg | Bin 18647 -> 0 bytes .../piCamCalibrator/chess_board/frame02.jpg | Bin 19153 -> 0 bytes .../piCamCalibrator/chess_board/frame03.jpg | Bin 18785 -> 0 bytes .../piCamCalibrator/chess_board/frame04.jpg | Bin 19806 -> 0 bytes .../piCamCalibrator/chess_board/frame05.jpg | Bin 20080 -> 0 bytes .../piCamCalibrator/chess_board/frame06.jpg | Bin 18157 -> 0 bytes .../piCamCalibrator/chess_board/frame07.jpg | Bin 17497 -> 0 bytes .../piCamCalibrator/chess_board/frame08.jpg | Bin 15057 -> 0 bytes .../piCamCalibrator/chess_board/frame09.jpg | Bin 14711 -> 0 bytes .../piCamCalibrator/chess_board/frame10.jpg | Bin 16553 -> 0 bytes .../piCamCalibrator/chess_board/frame11.jpg | Bin 17445 -> 0 bytes .../piCamCalibrator/chess_board/frame12.jpg | Bin 18155 -> 0 bytes .../piCamCalibrator/chess_board/frame13.jpg | Bin 18677 -> 0 bytes .../piCamCalibrator/chess_board/frame14.jpg | Bin 18534 -> 0 bytes .../piCamCalibrator/chess_board/frame15.jpg | Bin 19346 -> 0 bytes .../piCamCalibrator/chess_board/frame16.jpg | Bin 19586 -> 0 bytes .../piCamCalibrator/chess_board/frame17.jpg | Bin 20442 -> 0 bytes .../piCamCalibrator/chess_board/frame18.jpg | Bin 18873 -> 0 bytes .../piCamCalibrator/chess_board/frame19.jpg | Bin 17862 -> 0 bytes .../piCamCalibrator/chess_board/frame20.jpg | Bin 17423 -> 0 bytes .../chess_board2/just_goods/14.png | Bin 126476 -> 0 bytes .../chess_board2/just_goods/15.png | Bin 114087 -> 0 bytes .../chess_board2/just_goods/16.png | Bin 111927 -> 0 bytes .../chess_board2/just_goods/6.png | Bin 124375 -> 0 bytes .../chess_board2/just_goods/7.png | Bin 124901 -> 0 bytes .../chess_board2/just_goods/8.png | Bin 133881 -> 0 bytes .../chess_board2/just_goods/9.png | Bin 129344 -> 0 bytes .../piCamCalibrator/chess_board2/mids/10.png | Bin 123400 -> 0 bytes .../piCamCalibrator/chess_board2/mids/13.png | Bin 124418 -> 0 bytes .../piCamCalibrator/chess_board2/mids/5.png | Bin 122127 -> 0 bytes .../chess_board2/too_inclinate/1.png | Bin 101605 -> 0 bytes .../chess_board2/too_inclinate/11.png | Bin 127411 -> 0 bytes .../chess_board2/too_inclinate/12.png | Bin 114115 -> 0 bytes .../chess_board2/too_inclinate/17.png | Bin 111750 -> 0 bytes .../chess_board2/too_inclinate/18.png | Bin 109831 -> 0 bytes .../chess_board2/too_inclinate/19.png | Bin 108109 -> 0 bytes .../chess_board2/too_inclinate/2.png | Bin 123080 -> 0 bytes .../chess_board2/too_inclinate/3.png | Bin 117715 -> 0 bytes .../chess_board2/too_inclinate/4.png | Bin 121075 -> 0 bytes .../piCamCalibrator/chess_board3/1.png.bak | Bin 96858 -> 0 bytes .../piCamCalibrator/chess_board3/2.png | Bin 109206 -> 0 bytes .../piCamCalibrator/chess_board3/3.png | Bin 108772 -> 0 bytes .../piCamCalibrator/chess_board3/4.png | Bin 105542 -> 0 bytes .../piCamCalibrator/chess_board3/5.png | Bin 109818 -> 0 bytes .../piCamCalibrator/chess_board3/6.png | Bin 107495 -> 0 bytes .../piCamCalibrator/chess_board3/7.png | Bin 108024 -> 0 bytes .../piCamCalibrator/chess_board3/8.png | Bin 97801 -> 0 bytes .../piCamCalibrator/chess_board3/9.png | Bin 108828 -> 0 bytes .../DEPRECATED/rgbdCalibrator/CMakeLists.txt | 48 - src/tools/DEPRECATED/rgbdCalibrator/beep.wav | Bin 23314 -> 0 bytes .../DEPRECATED/rgbdCalibrator/calibration.cpp | 770 - .../DEPRECATED/rgbdCalibrator/calibration.h | 150 - .../DEPRECATED/rgbdCalibrator/geoUtils.cpp | 79 - .../DEPRECATED/rgbdCalibrator/geoUtils.h | 76 - .../DEPRECATED/rgbdCalibrator/images/img1.jpg | Bin 36182 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img2.jpg | Bin 34384 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img3.jpg | Bin 33887 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img4.jpg | Bin 36320 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img5.jpg | Bin 37829 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img6.jpg | Bin 38155 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img7.jpg | Bin 34145 -> 0 bytes .../DEPRECATED/rgbdCalibrator/images/img8.jpg | Bin 35891 -> 0 bytes .../rgbdCalibrator/rgbdCalibrator.cfg | 2 - .../rgbdCalibrator/rgbdCalibrator.cpp | 100 - .../rgbdCalibrator/rgbdCalibrator.glade | 502 - .../DEPRECATED/rgbdCalibrator/viewer.cpp | 694 - src/tools/DEPRECATED/rgbdCalibrator/viewer.h | 134 - .../rgbdManualCalibrator/CMakeLists.txt | 57 - .../rgbdManualCalibrator/cam1-mia.cfg | 53 - .../DEPRECATED/rgbdManualCalibrator/common.h | 38 - .../config-example/cam-in | 53 - .../config-example/lambecom | 126 - .../config-example/robotics-lab | 83 - .../rgbdManualCalibrator/controller.cpp | 527 - .../rgbdManualCalibrator/controller.h | 105 - .../rgbdManualCalibrator/drawarea.cpp | 734 - .../rgbdManualCalibrator/drawarea.h | 157 - .../rgbdManualCalibrator.cfg | 11 - .../rgbdManualCalibrator.cpp | 104 - .../rgbdManualCalibrator.glade | 579 - .../DEPRECATED/rgbdManualCalibrator/view.cpp | 372 - .../DEPRECATED/rgbdManualCalibrator/view.h | 117 - .../cameraCalibrator/CMakeLists.txt | 41 - .../cameraCalibrator/cameraCalibrator.cfg | 17 - .../cameraCalibrator/cameraCalibrator.cpp | 492 - .../piCamCalibrator/PiCamCalibration.py | 62 - .../piCamCalibrator/chess_board/frame01.jpg | Bin 18647 -> 0 bytes .../piCamCalibrator/chess_board/frame02.jpg | Bin 19153 -> 0 bytes .../piCamCalibrator/chess_board/frame03.jpg | Bin 18785 -> 0 bytes .../piCamCalibrator/chess_board/frame04.jpg | Bin 19806 -> 0 bytes .../piCamCalibrator/chess_board/frame05.jpg | Bin 20080 -> 0 bytes .../piCamCalibrator/chess_board/frame06.jpg | Bin 18157 -> 0 bytes .../piCamCalibrator/chess_board/frame07.jpg | Bin 17497 -> 0 bytes .../piCamCalibrator/chess_board/frame08.jpg | Bin 15057 -> 0 bytes .../piCamCalibrator/chess_board/frame09.jpg | Bin 14711 -> 0 bytes .../piCamCalibrator/chess_board/frame10.jpg | Bin 16553 -> 0 bytes .../piCamCalibrator/chess_board/frame11.jpg | Bin 17445 -> 0 bytes .../piCamCalibrator/chess_board/frame12.jpg | Bin 18155 -> 0 bytes .../piCamCalibrator/chess_board/frame13.jpg | Bin 18677 -> 0 bytes .../piCamCalibrator/chess_board/frame14.jpg | Bin 18534 -> 0 bytes .../piCamCalibrator/chess_board/frame15.jpg | Bin 19346 -> 0 bytes .../piCamCalibrator/chess_board/frame16.jpg | Bin 19586 -> 0 bytes .../piCamCalibrator/chess_board/frame17.jpg | Bin 20442 -> 0 bytes .../piCamCalibrator/chess_board/frame18.jpg | Bin 18873 -> 0 bytes .../piCamCalibrator/chess_board/frame19.jpg | Bin 17862 -> 0 bytes .../piCamCalibrator/chess_board/frame20.jpg | Bin 17423 -> 0 bytes .../chess_board2/just_goods/14.png | Bin 126476 -> 0 bytes .../chess_board2/just_goods/15.png | Bin 114087 -> 0 bytes .../chess_board2/just_goods/16.png | Bin 111927 -> 0 bytes .../chess_board2/just_goods/6.png | Bin 124375 -> 0 bytes .../chess_board2/just_goods/7.png | Bin 124901 -> 0 bytes .../chess_board2/just_goods/8.png | Bin 133881 -> 0 bytes .../chess_board2/just_goods/9.png | Bin 129344 -> 0 bytes .../piCamCalibrator/chess_board2/mids/10.png | Bin 123400 -> 0 bytes .../piCamCalibrator/chess_board2/mids/13.png | Bin 124418 -> 0 bytes .../piCamCalibrator/chess_board2/mids/5.png | Bin 122127 -> 0 bytes .../chess_board2/too_inclinate/1.png | Bin 101605 -> 0 bytes .../chess_board2/too_inclinate/11.png | Bin 127411 -> 0 bytes .../chess_board2/too_inclinate/12.png | Bin 114115 -> 0 bytes .../chess_board2/too_inclinate/17.png | Bin 111750 -> 0 bytes .../chess_board2/too_inclinate/18.png | Bin 109831 -> 0 bytes .../chess_board2/too_inclinate/19.png | Bin 108109 -> 0 bytes .../chess_board2/too_inclinate/2.png | Bin 123080 -> 0 bytes .../chess_board2/too_inclinate/3.png | Bin 117715 -> 0 bytes .../chess_board2/too_inclinate/4.png | Bin 121075 -> 0 bytes .../piCamCalibrator/chess_board3/1.png.bak | Bin 96858 -> 0 bytes .../piCamCalibrator/chess_board3/2.png | Bin 109206 -> 0 bytes .../piCamCalibrator/chess_board3/3.png | Bin 108772 -> 0 bytes .../piCamCalibrator/chess_board3/4.png | Bin 105542 -> 0 bytes .../piCamCalibrator/chess_board3/5.png | Bin 109818 -> 0 bytes .../piCamCalibrator/chess_board3/6.png | Bin 107495 -> 0 bytes .../piCamCalibrator/chess_board3/7.png | Bin 108024 -> 0 bytes .../piCamCalibrator/chess_board3/8.png | Bin 97801 -> 0 bytes .../piCamCalibrator/chess_board3/9.png | Bin 108828 -> 0 bytes .../calibrators/rgbdCalibrator/CMakeLists.txt | 48 - src/tools/calibrators/rgbdCalibrator/beep.wav | Bin 23314 -> 0 bytes .../rgbdCalibrator/calibration.cpp | 770 - .../calibrators/rgbdCalibrator/calibration.h | 150 - .../calibrators/rgbdCalibrator/geoUtils.cpp | 79 - .../calibrators/rgbdCalibrator/geoUtils.h | 76 - .../rgbdCalibrator/images/img1.jpg | Bin 36182 -> 0 bytes .../rgbdCalibrator/images/img2.jpg | Bin 34384 -> 0 bytes .../rgbdCalibrator/images/img3.jpg | Bin 33887 -> 0 bytes .../rgbdCalibrator/images/img4.jpg | Bin 36320 -> 0 bytes .../rgbdCalibrator/images/img5.jpg | Bin 37829 -> 0 bytes .../rgbdCalibrator/images/img6.jpg | Bin 38155 -> 0 bytes .../rgbdCalibrator/images/img7.jpg | Bin 34145 -> 0 bytes .../rgbdCalibrator/images/img8.jpg | Bin 35891 -> 0 bytes .../rgbdCalibrator/rgbdCalibrator.cfg | 2 - .../rgbdCalibrator/rgbdCalibrator.cpp | 100 - .../rgbdCalibrator/rgbdCalibrator.glade | 502 - .../calibrators/rgbdCalibrator/viewer.cpp | 694 - src/tools/calibrators/rgbdCalibrator/viewer.h | 134 - .../rgbdManualCalibrator/CMakeLists.txt | 57 - .../rgbdManualCalibrator/cam1-mia.cfg | 53 - .../calibrators/rgbdManualCalibrator/common.h | 38 - .../config-example/cam-in | 53 - .../config-example/lambecom | 126 - .../config-example/robotics-lab | 83 - .../rgbdManualCalibrator/controller.cpp | 527 - .../rgbdManualCalibrator/controller.h | 105 - .../rgbdManualCalibrator/drawarea.cpp | 734 - .../rgbdManualCalibrator/drawarea.h | 157 - .../rgbdManualCalibrator.cfg | 11 - .../rgbdManualCalibrator.cpp | 104 - .../rgbdManualCalibrator.glade | 579 - .../calibrators/rgbdManualCalibrator/view.cpp | 372 - .../calibrators/rgbdManualCalibrator/view.h | 117 - src/tools/colorTuner_py/CMakeLists.txt | 34 - .../colorTuner_py/QDarkStyleSheet/.travis.yml | 19 - .../colorTuner_py/QDarkStyleSheet/COPYING | 21 - .../colorTuner_py/QDarkStyleSheet/MANIFEST.in | 15 - .../colorTuner_py/QDarkStyleSheet/PKGBUILD | 36 - .../colorTuner_py/QDarkStyleSheet/README.md | 222 - .../QDarkStyleSheet/example/example_pyqt.py | 96 - .../QDarkStyleSheet/example/example_pyqt5.py | 95 - .../QDarkStyleSheet/example/example_pyside.py | 97 - .../QDarkStyleSheet/example/ui/__init__.py | 3 - .../QDarkStyleSheet/example/ui/compile_ui.sh | 5 - .../QDarkStyleSheet/example/ui/example.ui | 534 - .../example/ui/example_pyqt5_ui.py | 368 - .../example/ui/example_pyqt_ui.py | 373 - .../example/ui/example_pyside_ui.py | 338 - .../colorTuner_py/QDarkStyleSheet/makeppa.sh | 45 - .../QDarkStyleSheet/qdarkstyle/.gitignore | 1 - .../QDarkStyleSheet/qdarkstyle/__init__.py | 117 - .../QDarkStyleSheet/qdarkstyle/compile_qrc.py | 54 - .../qdarkstyle/pyqt5_style_rc.py | 1528 - .../qdarkstyle/rc/Hmovetoolbar.png | Bin 220 -> 0 bytes .../qdarkstyle/rc/Hsepartoolbar.png | Bin 172 -> 0 bytes .../qdarkstyle/rc/Vmovetoolbar.png | Bin 228 -> 0 bytes .../qdarkstyle/rc/Vsepartoolbar.png | Bin 187 -> 0 bytes .../qdarkstyle/rc/branch_closed-on.png | Bin 147 -> 0 bytes .../qdarkstyle/rc/branch_closed.png | Bin 160 -> 0 bytes .../qdarkstyle/rc/branch_open-on.png | Bin 150 -> 0 bytes .../qdarkstyle/rc/branch_open.png | Bin 166 -> 0 bytes .../qdarkstyle/rc/checkbox_checked.png | Bin 492 -> 0 bytes .../rc/checkbox_checked_disabled.png | Bin 491 -> 0 bytes .../qdarkstyle/rc/checkbox_checked_focus.png | Bin 252 -> 0 bytes .../qdarkstyle/rc/checkbox_indeterminate.png | Bin 493 -> 0 bytes .../rc/checkbox_indeterminate_disabled.png | Bin 492 -> 0 bytes .../rc/checkbox_indeterminate_focus.png | Bin 249 -> 0 bytes .../qdarkstyle/rc/checkbox_unchecked.png | Bin 464 -> 0 bytes .../rc/checkbox_unchecked_disabled.png | Bin 464 -> 0 bytes .../rc/checkbox_unchecked_focus.png | Bin 240 -> 0 bytes .../qdarkstyle/rc/close-hover.png | Bin 598 -> 0 bytes .../qdarkstyle/rc/close-pressed.png | Bin 598 -> 0 bytes .../QDarkStyleSheet/qdarkstyle/rc/close.png | Bin 586 -> 0 bytes .../qdarkstyle/rc/down_arrow.png | Bin 165 -> 0 bytes .../qdarkstyle/rc/down_arrow_disabled.png | Bin 166 -> 0 bytes .../qdarkstyle/rc/left_arrow.png | Bin 166 -> 0 bytes .../qdarkstyle/rc/left_arrow_disabled.png | Bin 166 -> 0 bytes .../qdarkstyle/rc/radio_checked.png | Bin 940 -> 0 bytes .../qdarkstyle/rc/radio_checked_disabled.png | Bin 972 -> 0 bytes .../qdarkstyle/rc/radio_checked_focus.png | Bin 846 -> 0 bytes .../qdarkstyle/rc/radio_unchecked.png | Bin 728 -> 0 bytes .../rc/radio_unchecked_disabled.png | Bin 760 -> 0 bytes .../qdarkstyle/rc/radio_unchecked_focus.png | Bin 646 -> 0 bytes .../qdarkstyle/rc/right_arrow.png | Bin 160 -> 0 bytes .../qdarkstyle/rc/right_arrow_disabled.png | Bin 160 -> 0 bytes .../qdarkstyle/rc/sizegrip.png | Bin 129 -> 0 bytes .../qdarkstyle/rc/stylesheet-branch-end.png | Bin 224 -> 0 bytes .../qdarkstyle/rc/stylesheet-branch-more.png | Bin 182 -> 0 bytes .../qdarkstyle/rc/stylesheet-vline.png | Bin 239 -> 0 bytes .../qdarkstyle/rc/transparent.png | Bin 195 -> 0 bytes .../QDarkStyleSheet/qdarkstyle/rc/undock.png | Bin 578 -> 0 bytes .../qdarkstyle/rc/up_arrow.png | Bin 158 -> 0 bytes .../qdarkstyle/rc/up_arrow_disabled.png | Bin 159 -> 0 bytes .../QDarkStyleSheet/qdarkstyle/style.qrc | 46 - .../QDarkStyleSheet/qdarkstyle/style.qss | 1274 - .../QDarkStyleSheet/screenshots/01.png | Bin 42410 -> 0 bytes .../screenshots/QDarkStyle example 1.png | Bin 42410 -> 0 bytes .../screenshots/QDarkStyle example 2.png | Bin 33604 -> 0 bytes .../colorTuner_py/QDarkStyleSheet/setup.cfg | 2 - .../colorTuner_py/QDarkStyleSheet/setup.py | 68 - .../colorTuner_py/QDarkStyleSheet/stdeb.cfg | 2 - .../QDarkStyleSheet/svg/checkbox_checked.svg | 96 - .../svg/checkbox_checked_disabled.svg | 96 - .../svg/checkbox_checked_focus.svg | 96 - .../svg/checkbox_indeterminate.svg | 96 - .../svg/checkbox_indeterminate_disabled.svg | 96 - .../svg/checkbox_indeterminate_focus.svg | 96 - .../svg/checkbox_unchecked.svg | 71 - .../svg/checkbox_unchecked_disabled.svg | 71 - .../svg/checkbox_unchecked_focus.svg | 71 - .../QDarkStyleSheet/svg/radio_checked.svg | 73 - .../svg/radio_checked_disabled.svg | 73 - .../svg/radio_checked_focus.svg | 73 - .../QDarkStyleSheet/svg/radio_unchecked.svg | 67 - .../svg/radio_unchecked_disabled.svg | 67 - .../svg/radio_unchecked_focus.svg | 67 - src/tools/colorTuner_py/TEMADARK | 41 - src/tools/colorTuner_py/colorTuner.in | 3 - src/tools/colorTuner_py/colorTuner.py | 62 - src/tools/colorTuner_py/colorTuner_py.yml | 10 - .../colorTuner_py/colorTuner_real_drone.yml | 10 - src/tools/colorTuner_py/filters/__init__.py | 0 src/tools/colorTuner_py/filters/hsvFilter.py | 90 - src/tools/colorTuner_py/filters/rgbFilter.py | 71 - src/tools/colorTuner_py/filters/yuvFilter.py | 76 - src/tools/colorTuner_py/gui/GUI.py | 83 - src/tools/colorTuner_py/gui/__init__.py | 0 src/tools/colorTuner_py/gui/communicator.py | 24 - src/tools/colorTuner_py/gui/controlWidget.py | 624 - src/tools/colorTuner_py/gui/gui.py | 287 - src/tools/colorTuner_py/gui/hsvWidget.py | 216 - src/tools/colorTuner_py/gui/imagesWidget.py | 73 - src/tools/colorTuner_py/gui/logoWidget.py | 44 - src/tools/colorTuner_py/gui/myLabel.py | 92 - .../colorTuner_py/gui/resources/resources.qrc | 8 - src/tools/colorTuner_py/gui/threadGUI.py | 42 - .../colorTuner_py/resources/HLSColorSpace.png | Bin 50159 -> 0 bytes .../colorTuner_py/resources/genResources | 4 - .../colorTuner_py/resources/genResources.sh | 3 - src/tools/colorTuner_py/resources/image.png | Bin 1967921 -> 0 bytes .../colorTuner_py/resources/jderobot.png | Bin 14487 -> 0 bytes .../colorTuner_py/resources/jderobot.svg | 11 - .../colorTuner_py/resources/jderobot250.svg | 65 - .../colorTuner_py/resources/no_input.png | Bin 6756 -> 0 bytes .../colorTuner_py/resources/resources.qrc | 9 - src/tools/colorTuner_py/resources/rgb.jpg | Bin 62459 -> 0 bytes .../colorTuner_py/resources/wheelfinal.png | Bin 188955 -> 0 bytes src/tools/colorTuner_py/resources_rc.py | 138963 --------------- src/tools/colorTuner_py/sensors/__init__.py | 0 .../colorTuner_py/sensors/cameraFilter.py | 118 - src/tools/emSensorviewPy/GUI.py | 60 - src/tools/emSensorviewPy/Sensor.py | 44 - src/tools/emSensorviewPy/ThreadControl.py | 26 - src/tools/emSensorviewPy/ThreadGUI.py | 32 - src/tools/emSensorviewPy/main.py | 28 - src/tools/namingService/CMakeLists.txt | 35 - .../namingService/NamingServiceJdeRobot.cpp | 192 - .../namingService/NamingServiceJdeRobot.h | 99 - src/tools/namingService/namingService.cfg | 12 - src/tools/namingService/namingServiceApp.cpp | 121 - src/tools/namingService/sv/run | 8 - src/tools/navigatorCamera/CMakeLists.txt | 52 - src/tools/navigatorCamera/gui.cpp | 520 - src/tools/navigatorCamera/gui.h | 137 - src/tools/navigatorCamera/myimage.png | Bin 1869 -> 0 bytes src/tools/navigatorCamera/navigatorCamera.cfg | 20 - src/tools/navigatorCamera/navigatorCamera.cpp | 257 - .../navigatorCamera/navigatorCamera.glade | 768 - src/tools/navigatorCamera/quaternion.h | 125 - src/tools/navigatorCamera/sharer.cpp | 245 - src/tools/navigatorCamera/sharer.h | 154 - src/tools/pantilt_teleop_py/CMakeLists.txt | 29 - src/tools/pantilt_teleop_py/generateGUI | 9 - src/tools/pantilt_teleop_py/gui/GUI.py | 82 - src/tools/pantilt_teleop_py/gui/__init__.py | 1 - .../pantilt_teleop_py/gui/cameraWidget.py | 53 - .../pantilt_teleop_py/gui/communicator.py | 24 - src/tools/pantilt_teleop_py/gui/logoWidget.py | 44 - .../pantilt_teleop_py/gui/teleopWidget.py | 113 - src/tools/pantilt_teleop_py/gui/threadGUI.py | 46 - src/tools/pantilt_teleop_py/gui/ui_gui.py | 57 - src/tools/pantilt_teleop_py/gui/ui_gui.ui | 119 - src/tools/pantilt_teleop_py/pantilt_teleop.in | 3 - src/tools/pantilt_teleop_py/pantilt_teleop.py | 53 - .../pantilt_teleop_py/pantilt_teleop.yml | 14 - .../pantilt_teleop_py/resources/__init__.py | 0 .../pantilt_teleop_py/resources/ball.png | Bin 1869 -> 0 bytes .../pantilt_teleop_py/resources/jderobot.svg | 11 - .../pantilt_teleop_py/resources/resources.qrc | 6 - src/tools/pantilt_teleop_py/resources_rc.py | 224 - src/tools/recorder2/CMakeLists.txt | 72 - src/tools/recorder2/buffer/ImageRingNode.cpp | 41 - src/tools/recorder2/buffer/ImageRingNode.h | 21 - src/tools/recorder2/buffer/RGBDRingNode.cpp | 47 - src/tools/recorder2/buffer/RGBDRingNode.h | 24 - .../recorder2/buffer/RecorderInterface.cpp | 61 - .../recorder2/buffer/RecorderInterface.h | 30 - src/tools/recorder2/buffer/RingBuffer.cpp | 26 - src/tools/recorder2/buffer/RingBuffer.h | 161 - src/tools/recorder2/pools/PoolPaths.cpp | 100 - src/tools/recorder2/pools/PoolPaths.h | 34 - src/tools/recorder2/pools/PoolWriteImages.cpp | 314 - src/tools/recorder2/pools/PoolWriteImages.h | 88 - src/tools/recorder2/pools/PoolWriteRGBD.cpp | 306 - src/tools/recorder2/pools/PoolWriteRGBD.h | 79 - src/tools/recorder2/pools/PoolsManager.cpp | 104 - src/tools/recorder2/pools/PoolsManager.h | 39 - src/tools/recorder2/pools/RecorderPool.cpp | 63 - src/tools/recorder2/pools/RecorderPool.h | 69 - src/tools/recorder2/pools/RecorderRGBD.cpp | 23 - src/tools/recorder2/pools/RecorderRGBD.h | 25 - .../recorder2/pools/poolWriteEncoders.cpp | 119 - src/tools/recorder2/pools/poolWriteEncoders.h | 62 - src/tools/recorder2/pools/poolWriteLasers.cpp | 122 - src/tools/recorder2/pools/poolWriteLasers.h | 73 - .../recorder2/pools/poolWritePointCloud.cpp | 106 - .../recorder2/pools/poolWritePointCloud.h | 56 - src/tools/recorder2/pools/poolWritePose3d.cpp | 118 - src/tools/recorder2/pools/poolWritePose3d.h | 69 - .../pools/poolWritePose3dEncoders.cpp | 138 - .../recorder2/pools/poolWritePose3dEncoders.h | 75 - src/tools/recorder2/recorder.cfg | 64 - src/tools/recorder2/recorder/Common.cpp | 5 - src/tools/recorder2/recorder/Common.h | 15 - src/tools/recorder2/recorder2.cpp | 393 - src/tools/recorder2/recordergui.cpp | 101 - src/tools/recorder2/recordergui.glade | 252 - src/tools/recorder2/recordergui.h | 88 - src/tools/replayController/CMakeLists.txt | 53 - .../replayController/replayController.cfg | 3 - .../replayController/replayController.cpp | 77 - .../replayController/replayControllerGui.cpp | 77 - .../replayControllerGui.glade | 297 - .../replayController/replayControllerGui.h | 54 - src/tools/replayer2/CMakeLists.txt | 59 - .../replayer2/interfaces/ReplayerCamera.cpp | 44 - .../replayer2/interfaces/ReplayerCamera.h | 82 - .../replayer2/interfaces/ReplayerEncoders.cpp | 30 - .../replayer2/interfaces/ReplayerEncoders.h | 84 - .../replayer2/interfaces/ReplayerLaser.cpp | 5 - .../replayer2/interfaces/ReplayerLaser.h | 102 - .../interfaces/ReplayerPointCloud.cpp | 31 - .../replayer2/interfaces/ReplayerPointCloud.h | 73 - .../replayer2/interfaces/ReplayerPose3D.cpp | 28 - .../replayer2/interfaces/ReplayerPose3D.h | 97 - .../interfaces/ReplayerPose3DEncoders.cpp | 28 - .../interfaces/ReplayerPose3DEncoders.h | 98 - src/tools/replayer2/interfaces/SyncTask.cpp | 5 - src/tools/replayer2/interfaces/SyncTask.h | 113 - src/tools/replayer2/replayer | Bin 456849 -> 0 bytes src/tools/replayer2/replayer.cfg | 94 - src/tools/replayer2/replayer.cpp | 299 - src/tools/replayer2/replayergui.cpp | 70 - src/tools/replayer2/replayergui.glade | 308 - src/tools/replayer2/replayergui.h | 63 - .../utils/ReplayControllerInterface.cpp | 5 - .../utils/ReplayControllerInterface.h | 57 - src/tools/replayer2/utils/SyncController.cpp | 160 - src/tools/replayer2/utils/SyncController.h | 82 - 1085 files changed, 221 insertions(+), 521087 deletions(-) delete mode 100644 cmake/cpack_metainfo/tools.cmake delete mode 100644 scripts/metapackages/jderobot-examples.info.in delete mode 100644 scripts/metapackages/jderobot-tools.info.in delete mode 100644 src/drivers/MAVLinkServer/.idea/MAVLinkServer.iml delete mode 100644 src/drivers/MAVLinkServer/.idea/misc.xml delete mode 100644 src/drivers/MAVLinkServer/.idea/modules.xml delete mode 100644 src/drivers/MAVLinkServer/.idea/workspace.xml delete mode 100644 src/drivers/MAVLinkServer/CMakeLists.txt delete mode 100644 src/drivers/MAVLinkServer/COPYING.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/CMDVel.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/CMakeLists.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/Extra.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/MAVLink.xml delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/MAVLinkServer.sh delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/Pose3D.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/mav.parm delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/mav.tlog delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/mav.tlog.raw delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/mavlinkserver.yml delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/mavproxy.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/README.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/geo_reference.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/lat_long_UTM_conversion.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/redfearn.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/dumpstacks.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/graphdefinition.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/lib/grapher.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph_ui.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mavmemlog.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_checklist.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_image.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_menu.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_module.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_settings.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_util.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_widgets.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/multiprocessing_queue.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/README.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/rline.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/tcp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/textconsole.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/udp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_loader.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_processguard.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_util.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_ui.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_util.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxgrapheditor.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings_ui.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_DGPS.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_HIL.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_antenna.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_arm.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_auxopt.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_battery.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_calibration.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cameraview.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_checklist.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cmdlong.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_console.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_dataflash_logger.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_fence.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gasheli.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gimbal.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gopro.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_graph.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_help.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_joystick.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_link.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_log.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/GAreader.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/barrell.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/blueantenna.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/bluecopter.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/blueheli.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/blueplane.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/bluerover.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/camera-small-red.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/flag.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenantenna.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greencopter.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenheli.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenplane.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenrover.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/hoop.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/loading.jpg delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/orangeplane.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/purpleplane.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/rallypoint.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/ramp.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redantenna.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redcopter.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redheli.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redplane.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redrover.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/unavailable.jpg delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_elevation.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_util.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_tile.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/srtm.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misc.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/button_renderer.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_defines.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_event.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditor.wxg delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditorFrame.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bing.js delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bluemarble.js delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-md.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-sm.png delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/index.html delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/modestmaps.js delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_server.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mode.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_nsh.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_output.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_param.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_ppp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rally.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rc.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rcsetup.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_relay.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_sensors.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_serial.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_SonyQX1.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_config.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_main.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_video.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_webcam.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/smart_camera.cnf delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/ssdp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_speech.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_terrain.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_test.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tracker.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tuneopt.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_wp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/DFReader.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/PKG-INFO delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/README.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/minimal.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/minimal.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/test.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/uAvionix.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/uAvionix.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/minimal.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/minimal.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/test.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/uAvionix.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/uAvionix.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/fgFDM.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/checksum.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_conversions.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_helpers.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_types.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/protocol.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/checksum.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_conversions.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_get_info.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_helpers.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_sha256.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_types.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/protocol.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/__init__.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkMessage.java delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkPayload.java delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkStats.java delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Parser.java delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavcrc.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_c.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_cs.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_java.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_javascript.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_objc.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_python.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_swift.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_wlua.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavparse.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavschema.xsd delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtemplate.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtestgen.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavexpression.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavextra.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavlink_defaults.h delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavnative.c delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavparm.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavutil.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavwp.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ardupilotmega.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/common.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/minimal.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/slugs.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ualberta.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ASLUAV.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ardupilotmega.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/autoquad.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/common.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/matrixpilot.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/minimal.xml delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/paparazzi.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/python_array_test.xml delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/slugs.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/test.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/uAvionix.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ualberta.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/PKG-INFO delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/SOURCES.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/dependency_links.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/top_level.txt delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/quaternion.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/rotmat.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.cfg delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/MPU6KSearch.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_delta.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_gps.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_motors.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavextract.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavfft.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflightmodes.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflighttime.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgen.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgpslock.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgraph.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavkml.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavlogdump.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavloss.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavmission.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparmdiff.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparms.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavplayback.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsearch.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsigloss.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsummarize.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtogpx.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtomfile.py delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/tools/MAVExplorer.py delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/tools/graphs/ekfGraphs.xml delete mode 100644 src/drivers/MAVLinkServer/MAVProxy/tools/graphs/mavgraphs.xml delete mode 100755 src/drivers/MAVLinkServer/MAVProxy/tools/mavflightview.py delete mode 100644 src/drivers/MAVLinkServer/README.md delete mode 100755 src/drivers/MAVLinkServer/make delete mode 100644 src/drivers/MAVLinkServer/mav.parm delete mode 100644 src/drivers/MAVLinkServer/mav.tlog delete mode 100644 src/drivers/MAVLinkServer/mav.tlog.raw delete mode 100644 src/drivers/MAVLinkServer/mavLinkServer.in delete mode 100644 src/drivers/MAVLinkServer/setup.py delete mode 100755 src/drivers/MAVLinkServer/setupMAVLinkServer.in delete mode 100755 src/drivers/YoutubeServer/.DS_Store delete mode 100644 src/drivers/YoutubeServer/.gitignore delete mode 100644 src/drivers/YoutubeServer/CMakeLists.txt delete mode 100644 src/drivers/YoutubeServer/JdeRobot/.DS_Store delete mode 100755 src/drivers/YoutubeServer/JdeRobot/ImageProviderI.py delete mode 100644 src/drivers/YoutubeServer/JdeRobot/__init__.py delete mode 100644 src/drivers/YoutubeServer/videoTools/.DS_Store delete mode 100644 src/drivers/YoutubeServer/videoTools/__init__.py delete mode 100755 src/drivers/YoutubeServer/videoTools/processVideo.py delete mode 100755 src/drivers/YoutubeServer/videoTools/threadFlow.py delete mode 100644 src/drivers/YoutubeServer/youtubeserver.in delete mode 100755 src/drivers/YoutubeServer/youtubeserver.py delete mode 100644 src/drivers/YoutubeServer/youtubeserver.yml delete mode 100644 src/drivers/ardrone_server/CMakeLists.txt.DISABLE delete mode 100644 src/drivers/ardrone_server/ardrone_interfaces.cfg delete mode 100644 src/drivers/ardrone_server/config/config.xml delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/ardrone_config.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/ardrone_driver.h.in delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/ardrone_parser.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/ardrone_sdk.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/ardroneextrai.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/cameraserver.cpp delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/cmdveli.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatagpsi.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatai.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/pose3di.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/interfaces/remoteconfigi.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/teleop_twist.h delete mode 100644 src/drivers/ardrone_server/include/ardrone_server/video.h delete mode 100644 src/drivers/ardrone_server/slice/navdatagps.ice delete mode 100644 src/drivers/ardrone_server/src/ardrone_config.cpp delete mode 100644 src/drivers/ardrone_server/src/ardrone_driver.cpp delete mode 100644 src/drivers/ardrone_server/src/ardrone_parser.cpp delete mode 100644 src/drivers/ardrone_server/src/ardrone_sdk.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/ardroneextrai.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/cmdveli.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/navdatagpsi.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/navdatai.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/pose3di.cpp delete mode 100644 src/drivers/ardrone_server/src/interfaces/remoteconfigi.cpp delete mode 100644 src/drivers/ardrone_server/src/teleop_twist.cpp delete mode 100644 src/drivers/ardrone_server/src/video.cpp delete mode 100644 src/drivers/ardrone_server/test/print_gps_data.cpp delete mode 100644 src/drivers/ardrone_server/test/test_parser.cpp delete mode 100644 src/drivers/camserver/CMakeLists.txt delete mode 100644 src/drivers/camserver/camserver.cfg delete mode 100644 src/drivers/camserver/camserver.cpp delete mode 100755 src/drivers/camserverWeb/.DS_Store delete mode 100755 src/drivers/camserverWeb/main.js delete mode 100755 src/drivers/camserverWeb/package-lock.json delete mode 100755 src/drivers/camserverWeb/package.json delete mode 100755 src/drivers/camserverWeb/public/config.yml delete mode 100755 src/drivers/camserverWeb/public/css/bootstrap.min.css delete mode 100755 src/drivers/camserverWeb/public/css/cameraserver.css delete mode 100755 src/drivers/camserverWeb/public/css/fondo.png delete mode 100755 src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.eot delete mode 100755 src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.svg delete mode 100755 src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.ttf delete mode 100755 src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.woff delete mode 100755 src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.woff2 delete mode 100755 src/drivers/camserverWeb/public/index.html delete mode 100755 src/drivers/camserverWeb/public/js/CamServer.js delete mode 100755 src/drivers/camserverWeb/public/js/apiCamServer.js delete mode 100755 src/drivers/camserverWeb/public/js/bootstrap.min.js delete mode 100755 src/drivers/camserverWeb/public/js/camserverWeb.js delete mode 100755 src/drivers/camserverWeb/public/js/jquery.min.js delete mode 100755 src/drivers/camserverWeb/public/js/roslibjs.min.js delete mode 100755 src/drivers/camserverWeb/run.js delete mode 100644 src/drivers/camserver_py/CMakeLists.txt delete mode 100644 src/drivers/camserver_py/camserver.py delete mode 100644 src/drivers/camserver_py/camserver_py.in delete mode 100644 src/drivers/camserver_py/camserver_py.yml delete mode 100644 src/drivers/camserver_py/serverImage.py delete mode 100644 src/drivers/emSensorDriver/CMakeLists.txt delete mode 100644 src/drivers/emSensorDriver/emSensorDriver.cfg delete mode 100644 src/drivers/emSensorDriver/emSensorDriver.cpp delete mode 100644 src/drivers/emSensorDriver/emSensorI.cpp delete mode 100644 src/drivers/emSensorDriver/emSensorI.h delete mode 100644 src/drivers/emSensorDriver/gpio_reader.cpp delete mode 100644 src/drivers/emSensorDriver/gpio_reader.h delete mode 100644 src/drivers/emSensorDriver/pwm_analyzer.cpp delete mode 100644 src/drivers/emSensorDriver/pwm_analyzer.h delete mode 100644 src/drivers/emSensorDriver/sharer.cpp delete mode 100644 src/drivers/emSensorDriver/sharer.h delete mode 100644 src/drivers/evicam_driver/CMakeLists.txt delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100P.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100P.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100g.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D100g.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D30.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D30.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D30g.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D30g.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D31.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D31.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70P.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70P.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70g.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVI-D70g.h delete mode 100644 src/drivers/evicam_driver/EVILib/EVILib.c++ delete mode 100644 src/drivers/evicam_driver/EVILib/EVILib.h delete mode 100644 src/drivers/evicam_driver/evicam_driver.cfg delete mode 100644 src/drivers/evicam_driver/include/evicam_driver/interfaces/pantilti.hpp delete mode 100644 src/drivers/evicam_driver/src/evicam_driver.cpp delete mode 100644 src/drivers/evicam_driver/src/interfaces/pantilti.cpp delete mode 100644 src/drivers/evicam_driver/src/test.cpp delete mode 100644 src/drivers/evicam_driver/test.cfg delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/CMakeLists.txt delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/flyingKinect2.cfg delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/kinect/kinect.hh delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/kinect/pointcloudi.hpp delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/cameraproxy.hh delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/debugtools.h delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/interfaces/camerai.h delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/interfaces/cameraibase.h delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/interfaces/pushcamerai.h delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/include/quadrotor/quadrotorsensors.hh delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/cameraproxy.cc delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/interfaces/camerai.cpp delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/interfaces/cameraibase.cpp delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/interfaces/pushcamerai.cpp delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/kinect.cc delete mode 100644 src/drivers/gazebo/plugins/flyingKinect/src/quadrotorsensors.cc delete mode 100644 src/drivers/gazebo/plugins/kinect/CMakeLists.txt delete mode 100644 src/drivers/gazebo/plugins/kinect/build/CMakeLists.txt delete mode 100755 src/drivers/gazebo/plugins/kinect/build/clean.sh delete mode 100644 src/drivers/gazebo/plugins/kinect/kinect.cfg delete mode 100644 src/drivers/gazebo/plugins/kinect/kinectPlugin.cc delete mode 100644 src/drivers/gazebo/plugins/kinect/kinectPlugin.h delete mode 100644 src/drivers/gazebo/plugins/kinect/profundidad.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/CMakeLists.txt delete mode 100644 src/drivers/gazebo/plugins/pioneer/cam_pioneer_left.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/cam_pioneer_right.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/camera_dump.cc delete mode 100644 src/drivers/gazebo/plugins/pioneer/laser.cc delete mode 100644 src/drivers/gazebo/plugins/pioneer/motors.cc delete mode 100644 src/drivers/gazebo/plugins/pioneer/motors.h delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx2Motors.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx2_laser.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx2_pose3dencoders.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dxMotors.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dxPose3D.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx_cam_sensor_left.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx_cam_sensor_right.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx_laser.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pioneer2dx_pose3dencoders.cfg delete mode 100644 src/drivers/gazebo/plugins/pioneer/pose3d.cc delete mode 100644 src/drivers/gazebo/plugins/pioneer/pose3d.h delete mode 100644 src/drivers/gazebo/plugins/pioneer/pose3dencoders.cc delete mode 100644 src/drivers/gazebo/plugins/pioneer/pose3dencoders.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/CMakeLists.txt delete mode 100644 src/drivers/gazebo/plugins/turtlebot/cfg/turtlebotplugin.cfg delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/debugtools.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/bumperi.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/camerai.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/cameraibase.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/kinectPlugini.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/laseri.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/motorsi.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/interfaces/pose3di.h delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/turtlebotcontrol.hh delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/turtlebotice.hh delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/turtlebotplugin.hh delete mode 100644 src/drivers/gazebo/plugins/turtlebot/include/turtlebot/turtlebotsensors.hh delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/bumperi.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/camerai.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/cameraibase.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/kinectPlugini.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/laseri.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/motorsi.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/interfaces/pose3di.cpp delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/turtlebotcontrol.cc delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/turtlebotice.cc delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/turtlebotplugin.cc delete mode 100644 src/drivers/gazebo/plugins/turtlebot/src/turtlebotsensors.cc delete mode 100644 src/drivers/giraffeServer/CMakeLists.txt delete mode 100644 src/drivers/giraffeServer/README delete mode 100644 src/drivers/giraffeServer/config.h delete mode 100644 src/drivers/giraffeServer/dynamixel.cpp delete mode 100644 src/drivers/giraffeServer/dynamixel.h delete mode 100644 src/drivers/giraffeServer/giraffeServer.cfg delete mode 100644 src/drivers/giraffeServer/giraffeServer.pro delete mode 100644 src/drivers/giraffeServer/handler.h delete mode 100644 src/drivers/giraffeServer/jointmotorComp.cpp delete mode 100644 src/drivers/giraffeServer/jointmotorI.cpp delete mode 100644 src/drivers/giraffeServer/jointmotorI.h delete mode 100755 src/drivers/giraffeServer/killserver.sh delete mode 100644 src/drivers/giraffeServer/moc_monitor.cpp delete mode 100644 src/drivers/giraffeServer/moc_q4serialport.cpp delete mode 100644 src/drivers/giraffeServer/moc_worker.cpp delete mode 100644 src/drivers/giraffeServer/monitor.cpp delete mode 100644 src/drivers/giraffeServer/monitor.h delete mode 100644 src/drivers/giraffeServer/q4serialport/q4serialport.cpp delete mode 100644 src/drivers/giraffeServer/q4serialport/q4serialport.h delete mode 100644 src/drivers/giraffeServer/rapplication/rapplication.h delete mode 100644 src/drivers/giraffeServer/servo.cpp delete mode 100644 src/drivers/giraffeServer/servo.h delete mode 100644 src/drivers/giraffeServer/worker.cpp delete mode 100644 src/drivers/giraffeServer/worker.h delete mode 100644 src/drivers/kinect2server/CMakeLists.txt delete mode 100644 src/drivers/kinect2server/README.md delete mode 100644 src/drivers/kinect2server/kinect2Server.cfg delete mode 100644 src/drivers/kinect2server/kinect2Server.cpp delete mode 100644 src/drivers/openni1Server/CMakeLists.txt delete mode 100644 src/drivers/openni1Server/config/camAlicia delete mode 100644 src/drivers/openni1Server/config/camRGB delete mode 100644 src/drivers/openni1Server/myprogeo.cpp delete mode 100644 src/drivers/openni1Server/myprogeo.h delete mode 100644 src/drivers/openni1Server/openni1Server.cfg delete mode 100644 src/drivers/openni1Server/openni1Server.cpp delete mode 100644 src/drivers/openniServer/CMakeLists.txt delete mode 100644 src/drivers/openniServer/OpenNITypes.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/ConcurrentDevice.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/ConcurrentDevice.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/DepthCamera.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/DepthCamera.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/OpenCVConverter.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/OpenCVConverter.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/OpenNIDeviceListener.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/PointCloudServer.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/PointCloudServer.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/RGBCamera.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/RGBCamera.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/RGBDServer.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/RGBDServer.h delete mode 100644 src/drivers/openniServer/OpenNiServerLib/myprogeo.cpp delete mode 100644 src/drivers/openniServer/OpenNiServerLib/myprogeo.h delete mode 100644 src/drivers/openniServer/config/1openniServer.cfg delete mode 100644 src/drivers/openniServer/config/2openniServer.cfg delete mode 100644 src/drivers/openniServer/config/camRGB delete mode 100644 src/drivers/openniServer/config/lambecom.cfg delete mode 100644 src/drivers/openniServer/openniServer.cfg delete mode 100644 src/drivers/openniServer/openniServer.cpp delete mode 100755 src/drivers/openniServer/sv/run delete mode 100755 src/drivers/openniServer/sv/xtionUsbReset.sh delete mode 100755 src/drivers/openniServer/sv2/run delete mode 100644 src/drivers/pclRGBDServer/CMakeLists.txt delete mode 100644 src/drivers/pclRGBDServer/cameraRGB.h delete mode 100644 src/drivers/pclRGBDServer/cameradepth.h delete mode 100644 src/drivers/pclRGBDServer/kinectServer.cfg delete mode 100644 src/drivers/pclRGBDServer/kinectServer.cpp delete mode 100644 src/drivers/pclRGBDServer/pointcloud.h delete mode 100644 src/examples/CMakeLists.txt delete mode 100644 src/examples/basic_component/CMakeLists.txt delete mode 100644 src/examples/basic_component/basic_component.cpp delete mode 100644 src/examples/basic_component/basic_component.yml delete mode 100644 src/examples/basic_component/gui/gui.cpp delete mode 100644 src/examples/basic_component/gui/gui.h delete mode 100644 src/examples/basic_component/gui/threadupdategui.cpp delete mode 100644 src/examples/basic_component/gui/threadupdategui.h delete mode 100644 src/examples/basic_component/gui/widget/cameraswidget.cpp delete mode 100644 src/examples/basic_component/gui/widget/cameraswidget.h delete mode 100644 src/examples/basic_component/gui/widget/controlvw.cpp delete mode 100644 src/examples/basic_component/gui/widget/controlvw.h delete mode 100644 src/examples/basic_component_py/CMakeLists.txt delete mode 100755 src/examples/basic_component_py/basic_component.py delete mode 100644 src/examples/basic_component_py/basic_component_py.in delete mode 100644 src/examples/basic_component_py/basic_component_py.yml delete mode 100755 src/examples/basic_component_py/generateGUI delete mode 100644 src/examples/basic_component_py/gui/GUI.py delete mode 100644 src/examples/basic_component_py/gui/__init__.py delete mode 100644 src/examples/basic_component_py/gui/cameraWidget.py delete mode 100644 src/examples/basic_component_py/gui/communicator.py delete mode 100644 src/examples/basic_component_py/gui/logoWidget.py delete mode 100644 src/examples/basic_component_py/gui/teleopWidget.py delete mode 100644 src/examples/basic_component_py/gui/threadGUI.py delete mode 100644 src/examples/basic_component_py/gui/ui_gui.py delete mode 100644 src/examples/basic_component_py/gui/ui_gui.ui delete mode 100644 src/examples/basic_component_py/resources/__init__.py delete mode 100644 src/examples/basic_component_py/resources/ball.png delete mode 100644 src/examples/basic_component_py/resources/jderobot.svg delete mode 100644 src/examples/basic_component_py/resources/resources.qrc delete mode 100644 src/examples/basic_component_py/resources_rc.py delete mode 100644 src/examples/basic_server/.gitignore delete mode 100644 src/examples/basic_server/CMakeLists.txt delete mode 100644 src/examples/basic_server/basic_server.cfg delete mode 100644 src/examples/basic_server/basic_server.cpp delete mode 100644 src/examples/basic_server/myInterface.ice delete mode 100644 src/examples/opencvdemo/CMakeLists.txt delete mode 100755 src/examples/opencvdemo/makefile delete mode 100644 src/examples/opencvdemo/opencvdemo.cfg delete mode 100644 src/examples/opencvdemo/opencvdemo.cpp delete mode 100644 src/examples/opencvdemo/opencvdemo.glade delete mode 100644 src/examples/opencvdemo/viewer.cpp delete mode 100644 src/examples/opencvdemo/viewer.h delete mode 100644 src/examples/visualStates/CMakeLists.txt delete mode 100644 src/examples/visualStates/jderobot_comm/ice/ArDrone/ArDrone.xml delete mode 100644 src/examples/visualStates/jderobot_comm/ice/obstacleAvoidanceCpp/obstacleAvoidanceCpp.xml delete mode 100644 src/examples/visualStates/jderobot_comm/ice/obstacleAvoidancePython/obstacleAvoidancePython.xml delete mode 100644 src/examples/visualStates/jderobot_comm/ros/obstacleAvoidanceCpp/obstacleAvoidanceCpp.xml delete mode 100644 src/examples/visualStates/jderobot_comm/ros/obstacleAvoidancePython/obstacleAvoidancePython.xml delete mode 100644 src/examples/visualStates/ros/obstacleAvoidanceCpp/obstacleAvoidanceCpp.xml delete mode 100644 src/examples/visualStates/ros/obstacleAvoidancePython/obstacleAvoidancePython.xml delete mode 100644 src/tools/CMakeLists.txt delete mode 100644 src/tools/DEPRECATED/cameraCalibrator/CMakeLists.txt delete mode 100644 src/tools/DEPRECATED/cameraCalibrator/cameraCalibrator.cfg delete mode 100644 src/tools/DEPRECATED/cameraCalibrator/cameraCalibrator.cpp delete mode 100644 src/tools/DEPRECATED/giraffeClient/CMakeLists.txt delete mode 100644 src/tools/DEPRECATED/giraffeClient/cameraconf.cpp delete mode 100644 src/tools/DEPRECATED/giraffeClient/cameraconf.h delete mode 100644 src/tools/DEPRECATED/giraffeClient/controller.cpp delete mode 100644 src/tools/DEPRECATED/giraffeClient/controller.h delete mode 100644 src/tools/DEPRECATED/giraffeClient/giraffeClient.cfg delete mode 100644 src/tools/DEPRECATED/giraffeClient/giraffeClient.cpp delete mode 100644 src/tools/DEPRECATED/giraffeClient/giraffeClient.glade delete mode 100644 src/tools/DEPRECATED/giraffeClient/view.cpp delete mode 100644 src/tools/DEPRECATED/giraffeClient/view.h delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/PiCamCalibration.py delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame01.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame02.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame03.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame04.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame05.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame06.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame07.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame08.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame09.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame10.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame11.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame12.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame13.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame14.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame15.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame16.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame17.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame18.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame19.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board/frame20.jpg delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/14.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/15.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/16.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/6.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/7.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/8.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/just_goods/9.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/mids/10.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/mids/13.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/mids/5.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/1.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/11.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/12.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/17.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/18.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/19.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/2.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/3.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board2/too_inclinate/4.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/1.png.bak delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/2.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/3.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/4.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/5.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/6.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/7.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/8.png delete mode 100644 src/tools/DEPRECATED/piCamCalibrator/chess_board3/9.png delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/CMakeLists.txt delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/beep.wav delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/calibration.cpp delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/calibration.h delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/geoUtils.cpp delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/geoUtils.h delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img1.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img2.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img3.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img4.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img5.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img6.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img7.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/images/img8.jpg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/rgbdCalibrator.cfg delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/rgbdCalibrator.cpp delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/rgbdCalibrator.glade delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/viewer.cpp delete mode 100644 src/tools/DEPRECATED/rgbdCalibrator/viewer.h delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/CMakeLists.txt delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/cam1-mia.cfg delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/common.h delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/config-example/cam-in delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/config-example/lambecom delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/config-example/robotics-lab delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/controller.cpp delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/controller.h delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/drawarea.cpp delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/drawarea.h delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/rgbdManualCalibrator.cfg delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/rgbdManualCalibrator.cpp delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/rgbdManualCalibrator.glade delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/view.cpp delete mode 100644 src/tools/DEPRECATED/rgbdManualCalibrator/view.h delete mode 100644 src/tools/calibrators/cameraCalibrator/CMakeLists.txt delete mode 100644 src/tools/calibrators/cameraCalibrator/cameraCalibrator.cfg delete mode 100644 src/tools/calibrators/cameraCalibrator/cameraCalibrator.cpp delete mode 100644 src/tools/calibrators/piCamCalibrator/PiCamCalibration.py delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame01.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame02.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame03.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame04.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame05.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame06.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame07.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame08.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame09.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame10.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame11.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame12.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame13.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame14.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame15.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame16.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame17.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame18.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame19.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board/frame20.jpg delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/14.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/15.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/16.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/6.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/7.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/8.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/just_goods/9.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/mids/10.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/mids/13.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/mids/5.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/1.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/11.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/12.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/17.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/18.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/19.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/2.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/3.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board2/too_inclinate/4.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/1.png.bak delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/2.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/3.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/4.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/5.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/6.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/7.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/8.png delete mode 100644 src/tools/calibrators/piCamCalibrator/chess_board3/9.png delete mode 100644 src/tools/calibrators/rgbdCalibrator/CMakeLists.txt delete mode 100644 src/tools/calibrators/rgbdCalibrator/beep.wav delete mode 100644 src/tools/calibrators/rgbdCalibrator/calibration.cpp delete mode 100644 src/tools/calibrators/rgbdCalibrator/calibration.h delete mode 100644 src/tools/calibrators/rgbdCalibrator/geoUtils.cpp delete mode 100644 src/tools/calibrators/rgbdCalibrator/geoUtils.h delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img1.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img2.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img3.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img4.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img5.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img6.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img7.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/images/img8.jpg delete mode 100644 src/tools/calibrators/rgbdCalibrator/rgbdCalibrator.cfg delete mode 100644 src/tools/calibrators/rgbdCalibrator/rgbdCalibrator.cpp delete mode 100644 src/tools/calibrators/rgbdCalibrator/rgbdCalibrator.glade delete mode 100644 src/tools/calibrators/rgbdCalibrator/viewer.cpp delete mode 100644 src/tools/calibrators/rgbdCalibrator/viewer.h delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/CMakeLists.txt delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/cam1-mia.cfg delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/common.h delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/config-example/cam-in delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/config-example/lambecom delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/config-example/robotics-lab delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/controller.cpp delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/controller.h delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/drawarea.cpp delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/drawarea.h delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/rgbdManualCalibrator.cfg delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/rgbdManualCalibrator.cpp delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/rgbdManualCalibrator.glade delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/view.cpp delete mode 100644 src/tools/calibrators/rgbdManualCalibrator/view.h delete mode 100644 src/tools/colorTuner_py/CMakeLists.txt delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/.travis.yml delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/COPYING delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/MANIFEST.in delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/PKGBUILD delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/README.md delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/example_pyqt.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/example_pyqt5.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/example_pyside.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/__init__.py delete mode 100755 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/compile_ui.sh delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/example.ui delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/example_pyqt5_ui.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/example_pyqt_ui.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/example/ui/example_pyside_ui.py delete mode 100755 src/tools/colorTuner_py/QDarkStyleSheet/makeppa.sh delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/.gitignore delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/__init__.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/compile_qrc.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/pyqt5_style_rc.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/Hmovetoolbar.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/Hsepartoolbar.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/Vmovetoolbar.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/Vsepartoolbar.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/branch_closed-on.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/branch_closed.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/branch_open-on.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/branch_open.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_checked.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_checked_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_checked_focus.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_indeterminate.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_indeterminate_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_indeterminate_focus.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_unchecked.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_unchecked_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/checkbox_unchecked_focus.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/close-hover.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/close-pressed.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/close.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/down_arrow.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/down_arrow_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/left_arrow.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/left_arrow_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_checked.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_checked_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_checked_focus.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_unchecked.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_unchecked_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/radio_unchecked_focus.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/right_arrow.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/right_arrow_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/sizegrip.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/stylesheet-branch-end.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/stylesheet-branch-more.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/stylesheet-vline.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/transparent.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/undock.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/up_arrow.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/rc/up_arrow_disabled.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/style.qrc delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/qdarkstyle/style.qss delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/screenshots/01.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/screenshots/QDarkStyle example 1.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/screenshots/QDarkStyle example 2.png delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/setup.cfg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/setup.py delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/stdeb.cfg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_checked.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_checked_disabled.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_checked_focus.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_indeterminate.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_indeterminate_disabled.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_indeterminate_focus.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_unchecked.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_unchecked_disabled.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/checkbox_unchecked_focus.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_checked.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_checked_disabled.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_checked_focus.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_unchecked.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_unchecked_disabled.svg delete mode 100644 src/tools/colorTuner_py/QDarkStyleSheet/svg/radio_unchecked_focus.svg delete mode 100644 src/tools/colorTuner_py/TEMADARK delete mode 100644 src/tools/colorTuner_py/colorTuner.in delete mode 100755 src/tools/colorTuner_py/colorTuner.py delete mode 100644 src/tools/colorTuner_py/colorTuner_py.yml delete mode 100644 src/tools/colorTuner_py/colorTuner_real_drone.yml delete mode 100644 src/tools/colorTuner_py/filters/__init__.py delete mode 100644 src/tools/colorTuner_py/filters/hsvFilter.py delete mode 100644 src/tools/colorTuner_py/filters/rgbFilter.py delete mode 100644 src/tools/colorTuner_py/filters/yuvFilter.py delete mode 100644 src/tools/colorTuner_py/gui/GUI.py delete mode 100644 src/tools/colorTuner_py/gui/__init__.py delete mode 100644 src/tools/colorTuner_py/gui/communicator.py delete mode 100644 src/tools/colorTuner_py/gui/controlWidget.py delete mode 100644 src/tools/colorTuner_py/gui/gui.py delete mode 100644 src/tools/colorTuner_py/gui/hsvWidget.py delete mode 100644 src/tools/colorTuner_py/gui/imagesWidget.py delete mode 100644 src/tools/colorTuner_py/gui/logoWidget.py delete mode 100644 src/tools/colorTuner_py/gui/myLabel.py delete mode 100644 src/tools/colorTuner_py/gui/resources/resources.qrc delete mode 100644 src/tools/colorTuner_py/gui/threadGUI.py delete mode 100644 src/tools/colorTuner_py/resources/HLSColorSpace.png delete mode 100755 src/tools/colorTuner_py/resources/genResources delete mode 100755 src/tools/colorTuner_py/resources/genResources.sh delete mode 100644 src/tools/colorTuner_py/resources/image.png delete mode 100644 src/tools/colorTuner_py/resources/jderobot.png delete mode 100644 src/tools/colorTuner_py/resources/jderobot.svg delete mode 100644 src/tools/colorTuner_py/resources/jderobot250.svg delete mode 100644 src/tools/colorTuner_py/resources/no_input.png delete mode 100644 src/tools/colorTuner_py/resources/resources.qrc delete mode 100644 src/tools/colorTuner_py/resources/rgb.jpg delete mode 100755 src/tools/colorTuner_py/resources/wheelfinal.png delete mode 100644 src/tools/colorTuner_py/resources_rc.py delete mode 100644 src/tools/colorTuner_py/sensors/__init__.py delete mode 100644 src/tools/colorTuner_py/sensors/cameraFilter.py delete mode 100644 src/tools/emSensorviewPy/GUI.py delete mode 100644 src/tools/emSensorviewPy/Sensor.py delete mode 100644 src/tools/emSensorviewPy/ThreadControl.py delete mode 100644 src/tools/emSensorviewPy/ThreadGUI.py delete mode 100644 src/tools/emSensorviewPy/main.py delete mode 100644 src/tools/namingService/CMakeLists.txt delete mode 100644 src/tools/namingService/NamingServiceJdeRobot.cpp delete mode 100644 src/tools/namingService/NamingServiceJdeRobot.h delete mode 100644 src/tools/namingService/namingService.cfg delete mode 100644 src/tools/namingService/namingServiceApp.cpp delete mode 100755 src/tools/namingService/sv/run delete mode 100644 src/tools/navigatorCamera/CMakeLists.txt delete mode 100644 src/tools/navigatorCamera/gui.cpp delete mode 100644 src/tools/navigatorCamera/gui.h delete mode 100644 src/tools/navigatorCamera/myimage.png delete mode 100644 src/tools/navigatorCamera/navigatorCamera.cfg delete mode 100644 src/tools/navigatorCamera/navigatorCamera.cpp delete mode 100644 src/tools/navigatorCamera/navigatorCamera.glade delete mode 100644 src/tools/navigatorCamera/quaternion.h delete mode 100644 src/tools/navigatorCamera/sharer.cpp delete mode 100644 src/tools/navigatorCamera/sharer.h delete mode 100644 src/tools/pantilt_teleop_py/CMakeLists.txt delete mode 100755 src/tools/pantilt_teleop_py/generateGUI delete mode 100644 src/tools/pantilt_teleop_py/gui/GUI.py delete mode 100644 src/tools/pantilt_teleop_py/gui/__init__.py delete mode 100644 src/tools/pantilt_teleop_py/gui/cameraWidget.py delete mode 100644 src/tools/pantilt_teleop_py/gui/communicator.py delete mode 100644 src/tools/pantilt_teleop_py/gui/logoWidget.py delete mode 100644 src/tools/pantilt_teleop_py/gui/teleopWidget.py delete mode 100644 src/tools/pantilt_teleop_py/gui/threadGUI.py delete mode 100644 src/tools/pantilt_teleop_py/gui/ui_gui.py delete mode 100644 src/tools/pantilt_teleop_py/gui/ui_gui.ui delete mode 100644 src/tools/pantilt_teleop_py/pantilt_teleop.in delete mode 100755 src/tools/pantilt_teleop_py/pantilt_teleop.py delete mode 100644 src/tools/pantilt_teleop_py/pantilt_teleop.yml delete mode 100644 src/tools/pantilt_teleop_py/resources/__init__.py delete mode 100644 src/tools/pantilt_teleop_py/resources/ball.png delete mode 100644 src/tools/pantilt_teleop_py/resources/jderobot.svg delete mode 100644 src/tools/pantilt_teleop_py/resources/resources.qrc delete mode 100644 src/tools/pantilt_teleop_py/resources_rc.py delete mode 100644 src/tools/recorder2/CMakeLists.txt delete mode 100644 src/tools/recorder2/buffer/ImageRingNode.cpp delete mode 100644 src/tools/recorder2/buffer/ImageRingNode.h delete mode 100644 src/tools/recorder2/buffer/RGBDRingNode.cpp delete mode 100644 src/tools/recorder2/buffer/RGBDRingNode.h delete mode 100644 src/tools/recorder2/buffer/RecorderInterface.cpp delete mode 100644 src/tools/recorder2/buffer/RecorderInterface.h delete mode 100644 src/tools/recorder2/buffer/RingBuffer.cpp delete mode 100644 src/tools/recorder2/buffer/RingBuffer.h delete mode 100644 src/tools/recorder2/pools/PoolPaths.cpp delete mode 100644 src/tools/recorder2/pools/PoolPaths.h delete mode 100644 src/tools/recorder2/pools/PoolWriteImages.cpp delete mode 100644 src/tools/recorder2/pools/PoolWriteImages.h delete mode 100644 src/tools/recorder2/pools/PoolWriteRGBD.cpp delete mode 100644 src/tools/recorder2/pools/PoolWriteRGBD.h delete mode 100644 src/tools/recorder2/pools/PoolsManager.cpp delete mode 100644 src/tools/recorder2/pools/PoolsManager.h delete mode 100644 src/tools/recorder2/pools/RecorderPool.cpp delete mode 100644 src/tools/recorder2/pools/RecorderPool.h delete mode 100644 src/tools/recorder2/pools/RecorderRGBD.cpp delete mode 100644 src/tools/recorder2/pools/RecorderRGBD.h delete mode 100644 src/tools/recorder2/pools/poolWriteEncoders.cpp delete mode 100644 src/tools/recorder2/pools/poolWriteEncoders.h delete mode 100644 src/tools/recorder2/pools/poolWriteLasers.cpp delete mode 100644 src/tools/recorder2/pools/poolWriteLasers.h delete mode 100644 src/tools/recorder2/pools/poolWritePointCloud.cpp delete mode 100644 src/tools/recorder2/pools/poolWritePointCloud.h delete mode 100644 src/tools/recorder2/pools/poolWritePose3d.cpp delete mode 100644 src/tools/recorder2/pools/poolWritePose3d.h delete mode 100644 src/tools/recorder2/pools/poolWritePose3dEncoders.cpp delete mode 100644 src/tools/recorder2/pools/poolWritePose3dEncoders.h delete mode 100644 src/tools/recorder2/recorder.cfg delete mode 100644 src/tools/recorder2/recorder/Common.cpp delete mode 100644 src/tools/recorder2/recorder/Common.h delete mode 100644 src/tools/recorder2/recorder2.cpp delete mode 100644 src/tools/recorder2/recordergui.cpp delete mode 100644 src/tools/recorder2/recordergui.glade delete mode 100644 src/tools/recorder2/recordergui.h delete mode 100644 src/tools/replayController/CMakeLists.txt delete mode 100644 src/tools/replayController/replayController.cfg delete mode 100644 src/tools/replayController/replayController.cpp delete mode 100644 src/tools/replayController/replayControllerGui.cpp delete mode 100644 src/tools/replayController/replayControllerGui.glade delete mode 100644 src/tools/replayController/replayControllerGui.h delete mode 100644 src/tools/replayer2/CMakeLists.txt delete mode 100644 src/tools/replayer2/interfaces/ReplayerCamera.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerCamera.h delete mode 100644 src/tools/replayer2/interfaces/ReplayerEncoders.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerEncoders.h delete mode 100644 src/tools/replayer2/interfaces/ReplayerLaser.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerLaser.h delete mode 100644 src/tools/replayer2/interfaces/ReplayerPointCloud.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerPointCloud.h delete mode 100644 src/tools/replayer2/interfaces/ReplayerPose3D.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerPose3D.h delete mode 100644 src/tools/replayer2/interfaces/ReplayerPose3DEncoders.cpp delete mode 100644 src/tools/replayer2/interfaces/ReplayerPose3DEncoders.h delete mode 100644 src/tools/replayer2/interfaces/SyncTask.cpp delete mode 100644 src/tools/replayer2/interfaces/SyncTask.h delete mode 100644 src/tools/replayer2/replayer delete mode 100644 src/tools/replayer2/replayer.cfg delete mode 100644 src/tools/replayer2/replayer.cpp delete mode 100644 src/tools/replayer2/replayergui.cpp delete mode 100644 src/tools/replayer2/replayergui.glade delete mode 100644 src/tools/replayer2/replayergui.h delete mode 100644 src/tools/replayer2/utils/ReplayControllerInterface.cpp delete mode 100644 src/tools/replayer2/utils/ReplayControllerInterface.h delete mode 100644 src/tools/replayer2/utils/SyncController.cpp delete mode 100644 src/tools/replayer2/utils/SyncController.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bd30067e..f506402ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,24 @@ +if(NOT WIN32) + string(ASCII 27 Esc) + set(ColourReset "${Esc}[m") + set(ColourBold "${Esc}[1m") + set(Red "${Esc}[31m") + set(Green "${Esc}[32m") + set(Yellow "${Esc}[33m") + set(Blue "${Esc}[34m") + set(Magenta "${Esc}[35m") + set(Cyan "${Esc}[36m") + set(White "${Esc}[37m") + set(BoldRed "${Esc}[1;31m") + set(BoldGreen "${Esc}[1;32m") + set(BoldYellow "${Esc}[1;33m") + set(BoldBlue "${Esc}[1;34m") + set(BoldMagenta "${Esc}[1;35m") + set(BoldCyan "${Esc}[1;36m") + set(BoldWhite "${Esc}[1;37m") +endif() + + IF(NOT DEFINED ENABLE_ROS) SET(ENABLE_ROS ON) ENDIF(NOT DEFINED ENABLE_ROS) @@ -35,7 +56,7 @@ if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) - message (version: ${CMAKE_CXX_COMPILER_VERSION}) + message ("-- Compiler version: " ${CMAKE_CXX_COMPILER_VERSION}) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") elseif(COMPILER_SUPPORTS_CXX0X) @@ -154,7 +175,7 @@ include(FindPkgConfig) link_directories(${INTERFACES_CPP_DIR}/jderobot) FOREACH(LibFile ${LIBS_NEEDED}) link_directories(${LIBS_DIR}/${LibFile}) - MESSAGE("${LIBS_DIR}/${LibFile}") + # MESSAGE("${LIBS_DIR}/${LibFile}") ENDFOREACH(LibFile) # FIND AND CHECK OTHER DEPENDENCES @@ -190,10 +211,10 @@ configure_file( # Install Executables list_subdirectories2( LIST_DRIVERS ${CMAKE_CURRENT_SOURCE_DIR}/src/drivers/ 1) -list_subdirectories2( LIST_TOOLS ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/ 1) +# list_subdirectories2( LIST_TOOLS ${CMAKE_CURRENT_SOURCE_DIR}/src/tools/ 1) # Install Deps cmake's tree -INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Deps DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot COMPONENT setup) +# INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Deps DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot COMPONENT setup) # Install ROS Launch files #INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/assets/gazebo/launch DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot COMPONENT setup) @@ -203,10 +224,6 @@ INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/setup.bash DESTINATION ${CMAKE_INSTALL - - - - #file(WRITE dummy_main1.c "int main(int argc, char** argv){return 0;}") #add_executable(dummy_main1 dummy_main1.c) #INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/dummy_main1 DESTINATION /tmp COMPONENT deps OPTIONAL PERMISSIONS OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE) diff --git a/Deps/alut/CMakeLists.txt b/Deps/alut/CMakeLists.txt index 7f56dfa29..27ad29bd9 100644 --- a/Deps/alut/CMakeLists.txt +++ b/Deps/alut/CMakeLists.txt @@ -4,13 +4,13 @@ FIND_PATH( alut_INCLUDE_DIR NAMES alut.h PATHS ENV C++LIB ENV PATH PATH_SUFFIXE IF( alut_INCLUDE_DIR ) FIND_LIBRARY( alut_LIBRARIES NAMES alut PATHS ENV C++LIB ENV PATH PATH_SUFFIXES lib lib64 ) IF( alut_LIBRARIES ) - MESSAGE ("-- ALUT found at ${alut_LIBRARIES}") - include_directories(${alut_INCLUDE_DIR}) - link_directories(${alut_LIBRARIES}) + MESSAGE (STATUS "ALUT found at ${alut_LIBRARIES}") + include_directories(${alut_INCLUDE_DIR}) + link_directories(${alut_LIBRARIES}) ENDIF( alut_LIBRARIES ) ENDIF(alut_INCLUDE_DIR) IF(NOT alut_LIBRARIES) - MESSAGE ("*** ALUT not found") + MESSAGE (STATUS "${BoldYellow}ALUT not found${ColourReset}") ENDIF() diff --git a/Deps/ardrone_sdk/CMakeLists.txt b/Deps/ardrone_sdk/CMakeLists.txt index 9fb6e65d4..a938e3e1a 100644 --- a/Deps/ardrone_sdk/CMakeLists.txt +++ b/Deps/ardrone_sdk/CMakeLists.txt @@ -5,10 +5,10 @@ include(FindPkgConfig) PKG_SEARCH_MODULE(ardronelib OPTIONAL ardronelib) if (ardronelib_FOUND) - message(STATUS "ardronelib FOUND. Version: ${ardronelib_VERSION}") - message(STATUS "ardronelib libraries: ${ardronelib_LIBRARIES}") + message(STATUS "ardronelib v.${ardronelib_VERSION} found") + # message(STATUS "ardronelib libraries: ${ardronelib_LIBRARIES}") SET(ARDRONE_ALL_DEPS true) list(APPEND DEPS ardronelib) else() - message(STATUS "ardronelib NOT FOUND.") + message(STATUS "${BoldYellow}ardronelib NOT FOUND${ColourReset}") endif() diff --git a/Deps/cuda/CMakeLists.txt b/Deps/cuda/CMakeLists.txt index 1b4387983..11832918d 100644 --- a/Deps/cuda/CMakeLists.txt +++ b/Deps/cuda/CMakeLists.txt @@ -2,7 +2,7 @@ find_package(CUDA QUIET) IF (CUDA_LIBRARIES) include_directories(${CUDA_INCLUDE_DIRS}) - message (" -- CUDA detected") + message ("-- CUDA detected") #find cuda link directories: if (WIN32) add_definitions(-DHAVE_OPENCV_GPU) @@ -15,6 +15,6 @@ IF (CUDA_LIBRARIES) endif() endif() ELSE() - message (" -- CUDA not found!!") + MESSAGE ("-- ${BoldYellow}CUDA not found${ColourReset}") ENDIF() diff --git a/Deps/fireware/CMakeLists.txt b/Deps/fireware/CMakeLists.txt index 57f4bf64a..008052d9c 100644 --- a/Deps/fireware/CMakeLists.txt +++ b/Deps/fireware/CMakeLists.txt @@ -6,11 +6,12 @@ FIND_PATH(dc_INCLUDE_DIR NAMES dc1394.h PATHS ENV C++LIB ENV PATH PATH_SUFFIXE FIND_LIBRARY( with_fireware NAMES dc1394 raw1394 PATHS ENV C++LIB ENV PATH PATH_SUFFIXES lib lib64 /usr/lib) IF(NOT with_fireware) - MESSAGE ("*** Fireware libraries: dc1394 or raw1394 not found") + MESSAGE ("-- ${BoldYellow}Fireware libraries: dc1394 or raw1394 not found${ColourReset}") + ENDIF() IF(with_fireware) - MESSAGE ("*** Fireware ok") + MESSAGE ("-- Fireware found") include_directories(/usr/include) link_directories(/usr/lib) list(APPEND DEPS libdc1394-22) diff --git a/Deps/gazebo/CMakeLists.txt b/Deps/gazebo/CMakeLists.txt index 0d5e7d24d..79aa64aba 100644 --- a/Deps/gazebo/CMakeLists.txt +++ b/Deps/gazebo/CMakeLists.txt @@ -8,10 +8,10 @@ if (GAZEBO_INCLUDE_DIRS) include_directories(${gazeboInc}/gazebo/) include_directories(${gazeboInc}) ENDFOREACH(gazeboInc) - MESSAGE("*** GAZEBO LIBRARIES FOUND: ${GAZEBO_INCLUDE_DIRS} - ${OGRE_INCLUDE_DIRS}") + MESSAGE("-- Gazebo libraries found") list(APPEND DEPS gazebo9) list(APPEND DEPS_DEV libgazebo9-dev) else() - MESSAGE("*** GAZEBO LIBRARIES NOT FOUND") + MESSAGE("-- ${BoldYellow}Gazebo libraries NOT found${ColourReset}") endif() diff --git a/Deps/glog/CMakeLists.txt b/Deps/glog/CMakeLists.txt index 7df230d75..6b6a9fcac 100644 --- a/Deps/glog/CMakeLists.txt +++ b/Deps/glog/CMakeLists.txt @@ -42,11 +42,11 @@ find_package_handle_standard_args(Glog DEFAULT_MSG GLOG_INCLUDE_DIR GLOG_LIBRARY if(GLOG_FOUND) set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR}) set(GLOG_LIBRARIES ${GLOG_LIBRARY}) - message(STATUS "Found glog (include: ${GLOG_INCLUDE_DIR}, library: ${GLOG_LIBRARY})") + message("-- Found glog") mark_as_advanced(GLOG_ROOT_DIR GLOG_LIBRARY_RELEASE GLOG_LIBRARY_DEBUG GLOG_LIBRARY GLOG_INCLUDE_DIR) ELSE() - message(FATAL_ERROR "Google Logs is required (libgoogle-glog-dev)") + message(FATAL_ERROR "-- ${BoldRed}Google Logs is required (libgoogle-glog-dev)${ColourReset}") endif() diff --git a/Deps/gtk3/CMakeLists.txt b/Deps/gtk3/CMakeLists.txt index 08b1aa594..93da71ba3 100644 --- a/Deps/gtk3/CMakeLists.txt +++ b/Deps/gtk3/CMakeLists.txt @@ -4,9 +4,9 @@ PKG_CHECK_MODULES(gtk3 QUIET gtk+-3.0) PKG_CHECK_MODULES(gtkmm3 QUIET gtkmm-3.0) PKG_CHECK_MODULES(goocanvasmm QUIET goocanvasmm-2.0) IF (goocanvasmm_INCLUDE_DIRS) - MESSAGE("*** Goocanvasmm LIBRARIES FOUND") + MESSAGE("-- Goocanvasmm libraries found") list(APPEND DEPS libgoocanvasmm-2.0-6) list(APPEND DEPS_DEV libgoocanvasmm-2.0-dev) ELSE() - MESSAGE("*** Goocanvasmm LIBRARIES NOT FOUND") + MESSAGE("---- ${BoldYellow}Goocanvasmm libraries not found${ColourReset}") ENDIF() diff --git a/Deps/ice/CMakeLists.txt b/Deps/ice/CMakeLists.txt index a91f174c5..fb180b7e7 100644 --- a/Deps/ice/CMakeLists.txt +++ b/Deps/ice/CMakeLists.txt @@ -13,7 +13,7 @@ FIND_PACKAGE(ZeroCIceStorm) FIND_PACKAGE(ZeroCIce) IF( ZeroCIceStorm_LIBRARY ) #IF( ZeroCIceUtil_LIBRARY ) - MESSAGE("*** ICE ok") + MESSAGE("-- ICE found") include_directories(${ZeroCIceUtil_INCLUDE_DIR}) link_directories(${ZeroCIceUtil_LIBRARY}) include_directories(${ZeroCIceCore_INCLUDE_DIR}) @@ -31,10 +31,10 @@ FIND_PACKAGE(ZeroCIce) ENDIF( ZeroCIceStorm_LIBRARY ) IF(NOT ZeroCIceStorm_LIBRARY ) - MESSAGE(FATAL_ERROR "*** IceStorm not found") + MESSAGE(FATAL_ERROR "-- ${BoldRed}IceStorm not found${ColourReset}") ENDIF() IF(NOT ZeroCIceUtil_LIBRARY ) - MESSAGE(WARNING "*** IceUtil not found") + MESSAGE("-- ${BoldYellow}IceUtil not found${ColourReset}") ENDIF() diff --git a/Deps/libfreenect2/CMakeLists.txt b/Deps/libfreenect2/CMakeLists.txt index 0ed9b0420..4972512d2 100644 --- a/Deps/libfreenect2/CMakeLists.txt +++ b/Deps/libfreenect2/CMakeLists.txt @@ -1,7 +1,7 @@ SET ( LIBFREENECT_PATH $ENV{LIBFREENECT_ROOT}) IF (DEFINED LIBFREENECT_PATH) SET ( LIBFREENECT_PATH $ENV{LIBFREENECT_ROOT}) - message("LIBFREENECT FOUND AT ${LIBFREENECT_PATH}") + message("-- libfreenect found") ELSE() - message("LIBFREENECT NOT FOUND") + message("-- ${BoldYellow}libfreenect not found${ColourReset}") ENDIF() diff --git a/Deps/libusb/CMakeLists.txt b/Deps/libusb/CMakeLists.txt index 3b231b654..17c49213e 100644 --- a/Deps/libusb/CMakeLists.txt +++ b/Deps/libusb/CMakeLists.txt @@ -1,11 +1,11 @@ pkg_check_modules(LIBUSB QUIET libusb-1.0) if (LIBUSB_INCLUDE_DIRS) - MESSAGE("*** libusb FOUND") + MESSAGE("-- libusb found") list(APPEND DEPS libusb-1.0-0) list(APPEND DEPS_DEV libusb-1.0-0-dev) else() - MESSAGE("*** libusb NOT FOUND") + MESSAGE("-- ${BoldYellow}libusb not found${ColourReset}") endif() diff --git a/Deps/libxml++/CMakeLists.txt b/Deps/libxml++/CMakeLists.txt index 494d0abbb..72528ba41 100644 --- a/Deps/libxml++/CMakeLists.txt +++ b/Deps/libxml++/CMakeLists.txt @@ -5,11 +5,11 @@ include_directories(${libxmlpp_INCLUDE_DIRS}) link_directories(${libxmlpp_LIBRARY_DIRS}) IF (libxmlpp_INCLUDE_DIRS) - MESSAGE("Libxml++ libraries found at ${libxmlpp_LIBRARY_DIRS}") + MESSAGE("-- Libxml++ libraries found") list(APPEND DEPS libxml++2.6-2v5) list(APPEND DEPS_DEV libxml++2.6-dev) ELSE() - MESSAGE ("*** Libxml++ not found") + MESSAGE ("-- ${BoldYellow}Libxml++ not found${ColourReset}") ENDIF() diff --git a/Deps/libxml2/CMakeLists.txt b/Deps/libxml2/CMakeLists.txt index ea2ed53cc..d6d93757f 100644 --- a/Deps/libxml2/CMakeLists.txt +++ b/Deps/libxml2/CMakeLists.txt @@ -1,23 +1,15 @@ - - FIND_PATH( LIBXML2_INCLUDE_DIR NAMES parser.h PATHS ENV C++LIB ENV PATH PATH_SUFFIXES include/libxml2/libxml/) IF( LIBXML2_INCLUDE_DIR ) - - MESSAGE("*** LIBXML2 ok") + MESSAGE("-- Libxml2 found") FIND_LIBRARY( LIBXML2_LIBRARY1 NAMES xml2 PATHS ENV C++LIB ENV PATH PATH_SUFFIXES lib lib64) - SET (LIBXML2_LIBRARIES ${LIBXML2_LIBRARY1} ) IF( LIBXML2_LIBRARIES ) - #MESSAGE("LIBXML2 LIBRARY FOUND IN ${LIBXML2_LIBRARIES}") - - list(APPEND DEPS libxml2) - + list(APPEND DEPS libxml2) ENDIF(LIBXML2_LIBRARIES ) - ENDIF(LIBXML2_INCLUDE_DIR) IF (NOT LIBXML2_INCLUDE_DIR) - MESSAGE("*** LIBXML2 not found") + MESSAGE("-- ${BoldYellow}libxml2 not found${ColourReset}") ELSE() link_directories(${LIBXML2_LIBRARIES}) include_directories(${LIBXML2_INCLUDE_DIR}) diff --git a/Deps/mmal/CMakeLists.txt b/Deps/mmal/CMakeLists.txt index 8c1d1dfb0..0a8c45d46 100644 --- a/Deps/mmal/CMakeLists.txt +++ b/Deps/mmal/CMakeLists.txt @@ -1,14 +1,13 @@ SET(CMAKE_MODULE_PATH - ${CMAKE_MODULE_PATH} - "${CMAKE_CURRENT_LIST_DIR}/CMake" + ${CMAKE_MODULE_PATH} + "${CMAKE_CURRENT_LIST_DIR}/CMake" ) - - SET(CMAKE_PREFIX_PATH /opt/vc/include /opt/vc/lib) -FIND_PACKAGE(MMAL) - +FIND_PACKAGE(MMAL QUIET) IF( MMAL_FOUND ) - MESSAGE("*** MMAL FOUND") + MESSAGE("-- mmal found") +ELSE() + MESSAGE("-- ${BoldYellow}mmal not found${ColourReset}") ENDIF( MMAL_FOUND ) diff --git a/Deps/nite/CMakeLists.txt b/Deps/nite/CMakeLists.txt index 21516a679..5d90e2346 100644 --- a/Deps/nite/CMakeLists.txt +++ b/Deps/nite/CMakeLists.txt @@ -4,14 +4,14 @@ FIND_PATH( nite_INCLUDE_DIR NAMES XnVCircleDetector.h PATHS ENV C++LIB ENV PATH IF( nite_INCLUDE_DIR ) FIND_LIBRARY(nite_LIBRARIES NAMES XnVNite_1_5_2 XnVCNITE_1_5_2 PATHS /usr/lib/ /usr/local/lib) IF( nite_LIBRARIES) - MESSAGE ("-- Nite found at ${nite_LIBRARIES}") + MESSAGE ("-- Nite found") include_directories(${nite_INCLUDE_DIR}) link_directories(${nite_LIBRARIES}) ENDIF( nite_LIBRARIES ) ENDIF(nite_INCLUDE_DIR) IF(NOT nite_LIBRARIES) - MESSAGE ("*** Nite not found") + MESSAGE ("-- ${BoldYellow}Nite not found${ColourReset}") ENDIF() diff --git a/Deps/nite2/CMakeLists.txt b/Deps/nite2/CMakeLists.txt index 695fa8358..966370ad0 100644 --- a/Deps/nite2/CMakeLists.txt +++ b/Deps/nite2/CMakeLists.txt @@ -7,12 +7,12 @@ if (NITE2_INC AND NITE2_LIB) include_directories(${NITE2_INC}) link_directories(${NITE2_LIB}/libNiTE2.so) if (NOT IS_DIRECTORY ./NiTE2) - message ("--CMake will install local NiTE2 lib and Driver") + message ("-- CMake will install local NiTE2 lib and Driver") file (COPY ${NITE2_LIB}/libNiTE2.so DESTINATION .) file (COPY ${NITE2_LIB}/NiTE2 DESTINATION .) endif() else() - message("NITE2 library not found") + message("-- ${BoldYellow}NITE2 library not found${ColourReset}") endif() diff --git a/Deps/nodejs/CMakeLists.txt b/Deps/nodejs/CMakeLists.txt index a37f85ba3..142925730 100644 --- a/Deps/nodejs/CMakeLists.txt +++ b/Deps/nodejs/CMakeLists.txt @@ -5,10 +5,10 @@ FIND_PATH( NODEJS_DIR nodejs node SET(NODEJS_COMPILE TRUE) IF(NOT NODEJS_DIR) - MESSAGE("*** NodeJS not found") + MESSAGE("-- ${BoldYellow}NodeJS not found${ColourReset}") SET(NODEJS_COMPILE FALSE) ELSE() - MESSAGE( STATUS " NodeJS found" ) + MESSAGE( STATUS "NodeJS found" ) list(APPEND DEPS nodejs) list(APPEND DEPS_DEV nodejs) ENDIF() diff --git a/Deps/ogre/CMakeLists.txt b/Deps/ogre/CMakeLists.txt index bb2fbf919..29e84c497 100644 --- a/Deps/ogre/CMakeLists.txt +++ b/Deps/ogre/CMakeLists.txt @@ -7,10 +7,10 @@ if (OGRE_VERSION) include_directories(${ogreInc}/Paging) include_directories(${ogreInc}) ENDFOREACH(ogreInc) - MESSAGE("*** OGRe LIBRARIES FOUND: ${OGRE_INCLUDE_DIRS}") + MESSAGE(STATUS "Ogre libraries found") list(APPEND DEPS libogre-1.9.0v5) list(APPEND DEPS_DEV libogre-1.9-dev) else() - MESSAGE("*** OGRE LIBRARIES NOT FOUND") + MESSAGE("-- ${BoldYellow}Ogre libraries not found${ColourReset}") endif() diff --git a/Deps/opencv/CMakeLists.txt b/Deps/opencv/CMakeLists.txt index b2ae6b167..72293093e 100644 --- a/Deps/opencv/CMakeLists.txt +++ b/Deps/opencv/CMakeLists.txt @@ -122,7 +122,7 @@ IF (NOT DEFINED OpenCV_VERSION) ENDIF() -message("***OpenCV Version: ${OpenCV_VERSION}") -message("***OpenCV CORE LIBS: ${OpenCV_LIBRARIES}") -message("***OpenCV GUI LIBS: ${OpenCVGUI_LIBRARIES}") -message("***OpenCV EXTRA LIBS: ${OpenCV_EXTRA_LIBS}") +message("-- OpenCV Version: ${OpenCV_VERSION}") +message("-- OpenCV CORE LIBS: ${OpenCV_LIBRARIES}") +message("-- OpenCV GUI LIBS: ${OpenCVGUI_LIBRARIES}") +message("-- OpenCV EXTRA LIBS: ${OpenCV_EXTRA_LIBS}") diff --git a/Deps/opengl/CMakeLists.txt b/Deps/opengl/CMakeLists.txt index 5b484ac30..a1b5fcc8b 100644 --- a/Deps/opengl/CMakeLists.txt +++ b/Deps/opengl/CMakeLists.txt @@ -4,7 +4,7 @@ find_package(OpenGL REQUIRED) IF (NOT GLUT_LIBRARIES MATCHES ".*NOTFOUND.*" AND NOT OPENGL_LIBRARIES MATCHES ".*NOTFOUND.*") - MESSAGE("OpenGL libraries found at ${GLUT_LIBRARIES}") + MESSAGE(STATUS "OpenGL libraries found") include_directories(${GLUT_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIRS}) link_directories(${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ) @@ -12,7 +12,7 @@ IF (NOT GLUT_LIBRARIES MATCHES ".*NOTFOUND.*" AND list(APPEND DEPS freeglut3 libglu1-mesa) list(APPEND DEPS_DEV freeglut3-dev libglu1-mesa-dev) ELSE() - MESSAGE ("*** OpenGL not found") + MESSAGE (STATUS "${BoldYellow}OpenGL not found${ColourReset}") ENDIF() diff --git a/Deps/openni2/CMakeLists.txt b/Deps/openni2/CMakeLists.txt index f689cf004..4704740c5 100644 --- a/Deps/openni2/CMakeLists.txt +++ b/Deps/openni2/CMakeLists.txt @@ -8,7 +8,7 @@ IF( OPENNI2_INC ) if (NOT IS_DIRECTORY ./OpenNI2) file (COPY ${OPENNI2_LIB} DESTINATION .) file (COPY ${OPENNI2_LIB_PATH}/OpenNI2 DESTINATION .) - message("-------------CMake will install local OpenNI2 lib and Driver") + message(STATUS "CMake will install local OpenNI2 lib and Driver") endif() include_directories(${OPENNI2_INC}) #list(APPEND DEPS jderobot-openni2 jderobot-libfreenect-dev) @@ -16,5 +16,5 @@ IF( OPENNI2_INC ) SET( with_openni2 TRUE) endif() ELSE() - message("OpenNI2 library not found") + message(STATUS "${BoldYellow}OpenNI2 library not found${ColourReset}") ENDIF() diff --git a/Deps/python/CMakeLists.txt b/Deps/python/CMakeLists.txt index 9ddab096d..a18baae38 100644 --- a/Deps/python/CMakeLists.txt +++ b/Deps/python/CMakeLists.txt @@ -7,7 +7,8 @@ if (${PYTHON3INTERP_FOUND}) math(EXPR pos ${len}-1) list(GET PY3_LIST ${pos} py3) set (JDEROBOT_PYTHON3_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/lib/${py3}) - message("${PYTHON3_MODULE_PATH}:${JDEROBOT_PYTHON3_MODULE_PATH}") + # message(STATUS "${PYTHON3_MODULE_PATH}:${JDEROBOT_PYTHON3_MODULE_PATH}") + message(STATUS "Python3 interpreter found") endif() if (${PYTHON2INTERP_FOUND}) @@ -16,5 +17,6 @@ if (${PYTHON2INTERP_FOUND}) math(EXPR pos ${len}-1) list(GET PY2_LIST ${pos} py2) set (JDEROBOT_PYTHON2_MODULE_PATH ${CMAKE_INSTALL_PREFIX}/lib/${py2}) - message("${PYTHON2_MODULE_PATH}:${JDEROBOT_PYTHON2_MODULE_PATH}") + # message("${PYTHON2_MODULE_PATH}:${JDEROBOT_PYTHON2_MODULE_PATH}") + message(STATUS "Python2 interpreter found") endif() diff --git a/Deps/qfi/CMakeLists.txt b/Deps/qfi/CMakeLists.txt index 2156fed07..b858a1f21 100644 --- a/Deps/qfi/CMakeLists.txt +++ b/Deps/qfi/CMakeLists.txt @@ -1,24 +1,23 @@ FIND_PATH( QFI_INCLUDE_DIR qfi_ADI.h qfi_ALT.h qfi_HSI.h qfi_NAV.h qfi_PFD.h qfi_SI.h qfi_TC.h qfi_VSI.h PATHS ${QT_INCLUDE_DIR} /usr/local/qfi/include /usr/include include ENV PATH) - FIND_LIBRARY( QFI_LIBRARY NAMES qfi PATHS /usr/local/lib /usr/lib) SET(QFI_COMPILE TRUE) IF(NOT QFI_INCLUDE_DIR) - MESSAGE("*** QFI_INCLUDE_DIR not set") + MESSAGE(STATUS "${BoldYellow}QFI includes not found${ColourReset}") SET(QFI_COMPILE FALSE) ELSE() - MESSAGE( STATUS "*** QFI_INCLUDE_DIR found" ) + MESSAGE( STATUS "QFI includes found" ) ENDIF() IF(NOT QFI_LIBRARY) - MESSAGE("*** QFI_LIBRARY not set") + MESSAGE(STATUS "${BoldYellow}QFI library not found${ColourReset}") SET(QFI_COMPILE FALSE) ELSE() SET(QFI_LIBRARY ${QFI_LIBRARY}) - MESSAGE(STATUS "*** QFI_LIBRARY found") + MESSAGE(STATUS "QFI library found") list(APPEND DEPS qfi) list(APPEND DEPS_DEV qfi) ENDIF() diff --git a/Deps/qt/CMakeLists.txt b/Deps/qt/CMakeLists.txt index 973150009..64dd1379b 100644 --- a/Deps/qt/CMakeLists.txt +++ b/Deps/qt/CMakeLists.txt @@ -31,12 +31,12 @@ SET(QT5_LIBRARIES_JDE ${Qt5Widgets_LIBRARIES} if (QT5_LIBRARIES_JDE) SET(QT5_COMPILE TRUE) - MESSAGE("*** QT LIBRARIES Found ${QT5_LIBRARIES_JDE}") + MESSAGE(STATUS "QT libraries Found") list(APPEND DEPS libqt5core5a libqt5opengl5 libqt5gui5 libqt5svg5 libqt5widgets5) list(APPEND DEPS_DEV libqt5opengl5-dev libqt5svg5-dev qtbase5-dev) else() SET(QT5_COMPILE FALSE) - MESSAGE("*** QT LIBRARIES NOT FOUND") + MESSAGE(STATUS "${BoldYellow}QT libraries not found${ColourReset}") endif() diff --git a/Deps/ros/CMakeLists.txt b/Deps/ros/CMakeLists.txt index 68e324b81..c636400c0 100644 --- a/Deps/ros/CMakeLists.txt +++ b/Deps/ros/CMakeLists.txt @@ -5,7 +5,7 @@ if (ENABLE_ROS) if(roscpp_FOUND) - MESSAGE("*** ROS LIBRARIES FOUND : ${roscpp_INCLUDE_DIRS}") + MESSAGE(STATUS "ROS libraries found") SET (CMAKE_PREFIX_PATH /opt/ros/$ENV{ROS_DISTRO}) @@ -30,7 +30,7 @@ if (ENABLE_ROS) # list(APPEND DEPS_DEV ) else() - MESSAGE(WARNING "*** ROS LIBRARIES NOT FOUND. ROS SUPPORT WILL BE DISABLED") + MESSAGE(STATUS "${BoldYellow}ROS libraries not found. ${BoldRed}ROS SUPPORT WILL BE DISABLED${ColourReset}") endif() else() SET(roscpp_FOUND FALSE) diff --git a/Deps/tinyxml/CMakeLists.txt b/Deps/tinyxml/CMakeLists.txt index d6cff59f9..83fa11bbd 100644 --- a/Deps/tinyxml/CMakeLists.txt +++ b/Deps/tinyxml/CMakeLists.txt @@ -3,20 +3,19 @@ FIND_PATH( LIBTINYXML_INCLUDE_DIR NAMES tinyxml.h PATHS ENV C++LIB ENV PATH PATH IF( LIBTINYXML_INCLUDE_DIR ) - MESSAGE("*** LIBTINYXML ok") + MESSAGE(STATUS "libtinyxml found") FIND_LIBRARY( LIBTINYXML_LIBRARY1 NAMES tinyxml PATHS ENV C++LIB ENV PATH PATH_SUFFIXES lib lib64) SET (LIBTINYXML_LIBRARIES ${LIBTINYXML_LIBRARY1} ) IF( LIBTINYXML_LIBRARIES ) - #MESSAGE("LIBTINYXML LIBRARY FOUND IN ${LIBTINYXML_LIBRARIES}") - list(APPEND DEPS libtinyxml2.6.2v5) - list(APPEND DEPS_DEV libtinyxml-dev) - ENDIF(LIBTINYXML_LIBRARIES ) + list(APPEND DEPS libtinyxml2.6.2v5) + list(APPEND DEPS_DEV libtinyxml-dev) + ENDIF(LIBTINYXML_LIBRARIES ) ENDIF(LIBTINYXML_INCLUDE_DIR) IF (NOT LIBTINYXML_INCLUDE_DIR) - MESSAGE( FATAL_ERROR "*** LIBTINYXML not found") + MESSAGE( FATAL_ERROR "${BoldRed}libtinyxml not found${ColourReset}") ELSE() link_directories(${LIBTINYXML_LIBRARIES}) include_directories(${LIBTINYXML_INCLUDE_DIR}) diff --git a/Deps/vtk/CMakeLists.txt b/Deps/vtk/CMakeLists.txt index 2dc1497f7..7d471bc26 100644 --- a/Deps/vtk/CMakeLists.txt +++ b/Deps/vtk/CMakeLists.txt @@ -1,7 +1,7 @@ -find_package(VTK) +find_package(VTK QUIET) if (VTK_FOUND) - message("***VTK FOUND ${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}") + message(STATUS "VTK v.${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION} found") else() - message ("*** VTK NOT FOUND") + message (STATUS"${BoldYellow}VTK NOT FOUND${ColourReset}") endIF() diff --git a/Deps/xerces/CMakeLists.txt b/Deps/xerces/CMakeLists.txt index 533822d2b..332772832 100644 --- a/Deps/xerces/CMakeLists.txt +++ b/Deps/xerces/CMakeLists.txt @@ -3,8 +3,7 @@ FIND_PATH( xerces_INCLUDE_DIR NAMES libxml/parser.h PATHS ENV C++LIB ENV PATH P IF( xerces_INCLUDE_DIR ) FIND_LIBRARY( xerces_LIBRARIES NAMES xml2 PATHS ENV C++LIB ENV PATH PATH_SUFFIXES /usr/lib) IF( xerces_LIBRARIES ) - MESSAGE ("*** Xerces ok") - MESSAGE ("${xerces_INCLUDE_DIR}") + MESSAGE (STATUS "Xerces found") include_directories(${xerces_INCLUDE_DIR}) link_directories(${xerces_LIBRARIES}) list(APPEND DEPS libxerces-c3.2) @@ -13,6 +12,6 @@ IF( xerces_INCLUDE_DIR ) ENDIF(xerces_INCLUDE_DIR) IF(NOT xerces_LIBRARIES) - MESSAGE ("*** *** Xerces libraries: libxerces-c not found") + MESSAGE (STATUS "${BoldYellow}libxerces-c not found${ColourReset}") ENDIF() diff --git a/Deps/yaml-cpp/CMakeLists.txt b/Deps/yaml-cpp/CMakeLists.txt index c34ec2080..164ea03fb 100644 --- a/Deps/yaml-cpp/CMakeLists.txt +++ b/Deps/yaml-cpp/CMakeLists.txt @@ -1,9 +1,9 @@ find_package(yaml-cpp REQUIRED) if (YAML_CPP_INCLUDE_DIR) - message("***YAML-CPP FOUND: ${YAML_CPP_INCLUDE_DIR}") + message(STATUS "yaml-cpp found") list(APPEND DEPS libyaml-cpp0.5v5) list(APPEND DEPS_DEV libyaml-cpp-dev) else() - message ("*** YAML-CPP NOT FOUND") + message (STATUS "${BoldYellow}yaml-cpp not found${ColourReset}") endIF() diff --git a/Deps/youtube_dl/CMakeLists.txt b/Deps/youtube_dl/CMakeLists.txt index 0dd1e64bd..3d3432b21 100644 --- a/Deps/youtube_dl/CMakeLists.txt +++ b/Deps/youtube_dl/CMakeLists.txt @@ -1,8 +1,8 @@ find_program(YOUTUBE_DL youtube-dl) if(NOT YOUTUBE_DL) - message("youtube-dl not found") + message(STATUS "${BoldYellow}youtube-dl not found${ColourReset}") else() - message("youtube-dl found at " ${YOUTUBE_DL}) + message(STATUS "youtube-dl found") list(APPEND DEPS youtube-dl) list(APPEND DEPS_DEV youtube-dl) endif() diff --git a/README.md b/README.md index 34b704ccb..42cf09d4e 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ sudo apt update ``` sudo apt install jderobot -sudo apt install jderobot-gazebo-assets +sudo apt install jderobot-assets ``` * After installing the package, you can close the terminal and reopen it to source the environment variables, OR just type: @@ -233,7 +233,7 @@ sudo apt install ros-melodic-roscpp ros-melodic-std-msgs ros-melodic-cv-bridge r Once all ros packages are installed, install the script that tunes the environment variables ROS in your .bashrc configuration file, and run it for the current shell: ``` -echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc +echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` diff --git a/cmake/cpack_metainfo/drivers.cmake b/cmake/cpack_metainfo/drivers.cmake index 1c4f9ec16..de089a593 100644 --- a/cmake/cpack_metainfo/drivers.cmake +++ b/cmake/cpack_metainfo/drivers.cmake @@ -1,74 +1,7 @@ -SET(CPACK_DEBIAN_ARDRONE-SERVER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_ARDRONE-SERVER_DESCRIPTION -"Driver for the Parrot ArDrone 2.0 - Manual page http://jderobot.org/index.php/Drivers#ardrone_server - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_BASIC-SERVER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_BASIC-SERVER_DESCRIPTION -"An example of the most basic server made for JdeRobot based on ICE communications. - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CAMSERVER_DEPENDS "jderobot-easyice, jderobot-util, jderobot-interfaces, jderobot-logger, jderobot-ns, jderobot-colorspaces") -SET(CPACK_DEBIAN_CAMSERVER_PACKAGE_REPLACES "jderobot-cameraserver") -SET(CPACK_COMPONENT_CAMSERVER_DESCRIPTION -"Generic server for RGB cameras. - Manual Page http://jderobot.org/index.php/Drivers#camserver - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CAMSERVER-PYTHON_PACKAGE_DEPENDS "jderobot-config-python, jderobot-interfaces") -SET(CPACK_DEBIAN_CAMSERVER-PYTHON_PACKAGE_REPLACES "jderobot-cameraserver-python") -SET(CPACK_COMPONENT_CAMSERVER-PYTHON_DESCRIPTION -"Example of camserver driver in python - Manual Page http://jderobot.org/ - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_EMSENSORDRIVER_PACKAGE_DEPENDS " jderobot-interfaces") -SET(CPACK_COMPONENT_EMSENSORDRIVER_DESCRIPTION -"Driver for proximity sensor. - Manual page http://jderobot.org/index.php/Drivers#ardrone_server - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_EVICAMDRIVER_PACKAGE_DEPENDS " jderobot-interfaces") -SET(CPACK_COMPONENT_EVICAMDRIVER_DESCRIPTION -"Driver for Sony EVI camera. - Manual page http://jderobot.org/index.php/Drivers#ardrone_server - Home page https://jderobot.org") SET(CPACK_DEBIAN_GAZEBO_PACKAGE_DEPENDS "jderobot-easyice, jderobot-util, jderobot-interfaces, jderobot-colorspaces, gazebo9") SET(CPACK_DEBIAN_GAZEBO_PACKAGE_REPLACES "jderobot-gazeboserver") SET(CPACK_COMPONENT_GAZEBO_DESCRIPTION -"Collection of plugins, worlds and models made by JdeRobot. - Manual Page http://jderobot.org/index.php/Drivers (sections 3-9) - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_GAZEBO-ASSETS_PACKAGE_DEPENDS "gazebo9") -SET(CPACK_DEBIAN_GAZEBO-ASSETS_PACKAGE_REPLACES "jderobot-gazeboserver") -SET(CPACK_COMPONENT_GAZEBO-ASSETS_DESCRIPTION -"Collection of worlds and models made by JdeRobot. +"Collection of plugins made by JdeRobot. Manual Page http://jderobot.org/index.php/Drivers (sections 3-9) - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_OPENNISERVER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-geometry, jderobot-util, jderobot-interfaces, jderobot-logger, jderobot-ns, jderobot-colorspaces") -SET(CPACK_COMPONENT_OPENNISERVER_DESCRIPTION -"Server for RGBD cameras (ASUS Xtion, Microsoft Kinect, Orbecc, ...) - Manual Page http://jderobot.org/index.php/Drivers#OpenniServer - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_PCLRGBDSERVER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-util, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_PCLRGBDSERVER_DESCRIPTION -"Server for RGBD cameras. - Manual Page - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_MAVLINKSERVER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_MAVLINKSERVER_DESCRIPTION -"Driver for MAVLink based air drones and planes - Manual page http://jderobot.org/index.php/Drivers#ardrone_server - Home page https://jderobot.org") - - SET(CPACK_DEBIAN_YOUTUBESERVER-PYTHON_PACKAGE_DEPENDS "jderobot-config-python, jderobot-interfaces, youtube-dl") -SET(CPACK_COMPONENT_YOUTUBESERVER-PYTHON_DESCRIPTION -"Driver for get videos from youtube as images server - Manual page http://jderobot.org/index.php/Drivers#ardrone_server - Home page https://jderobot.org") + Home page https://jderobot.org") \ No newline at end of file diff --git a/cmake/cpack_metainfo/tools.cmake b/cmake/cpack_metainfo/tools.cmake deleted file mode 100644 index e98838500..000000000 --- a/cmake/cpack_metainfo/tools.cmake +++ /dev/null @@ -1,135 +0,0 @@ -SET(CPACK_DEBIAN_BASIC-COMPONENT_PACKAGE_DEPENDS "jderobot-config, jderobot-comm") -SET(CPACK_COMPONENT_BASIC-COMPONENT_DESCRIPTION -"Example of tool C++ - Manual Page http://jderobot.org/ - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_BASIC-COMPONENT-PYTHON_PACKAGE_DEPENDS "jderobot-config-python, jderobot-comm-python, python-matplotlib, python-pyqt5, python-pip, python-numpy, python-pyqt5.qtsvg") -SET(CPACK_COMPONENT_BASIC-COMPONENT-PYTHON_DESCRIPTION -"Example of tool Python - Manual Page http://jderobot.org/ - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CAMERACALIBRATOR_PACKAGE_DEPENDS "jderobot-easyice, jderobot-interfaces, jderobot-util, jderobot-parallelice, jderobot-colorspaces") -SET(CPACK_COMPONENT_CAMERACALIBRATOR_DESCRIPTION -"Calibrator for extrinsics and intrinsics parameters of RGB cameras. - Manual page http://jderobot.org/index.php/Tools#CameraCalibrator - Home page https://jderobot.org") - - SET(CPACK_DEBIAN_COLORTUNER-PYTHON_PACKAGE_DEPENDS "python-matplotlib, python-pyqt5, python-pip, python-numpy, python-pyqt5.qtsvg, jderobot-comm-python, jderobot-easyice-python") -SET(CPACK_COMPONENT_COLORTUNER-PYTHON_DESCRIPTION -"Tool for color filters and pixel treatment from multiple visual sources. - Manual page http://jderobot.org/index.php/Tools#ColorTuner_.28Python.29 - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CAMVIZ_PACKAGE_DEPENDS "jderobot-config, jderobot-comm, jderobot-util, jderobot-interfaces, jderobot-resourcelocator, jderobot-colorspaces") -SET(CPACK_DEBIAN_CAMVIZ_PACKAGE_REPLACES "jderobot-cameraview") -SET(CPACK_COMPONENT_CAMVIZ_DESCRIPTION -"Generic viewer for cameras - Manual Page http://jderobot.org/index.php/Tools#CamViz - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CAMVIZ-PYTHON_PACKAGE_DEPENDS "jderobot-easyice, jderobot-comm, jderobot-util, jderobot-interfaces, jderobot-resourcelocator, jderobot-colorspaces") -SET(CPACK_DEBIAN_CAMVIZ-PYTHON_PACKAGE_REPLACES "jderobot-cameraview-python") -SET(CPACK_COMPONENT_CAMVIZ-PYTHON_DESCRIPTION -"Generic viewer for cameras in python - Manual Page http://jderobot.org/index.php/Tools#CamViz - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_GIRAFFECLIENT_PACKAGE_DEPENDS "jderobot-easyice, jderobot-progeo, jderobot-util, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_GIRAFFECLIENT_DESCRIPTION -"Teleoperator for robotic necks and arms [deprecated] - Manual Page - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_CARVIZ_PACKAGE_DEPENDS "jderobot-config, jderobot-comm") -SET(CPACK_DEBIAN_CARVIZ_PACKAGE_REPLACES "jderobot-kobukiviewer") -SET(CPACK_COMPONENT_CARVIZ_DESCRIPTION -"Teleoperator for vehicle-type robots, such as kobuki, pioneer, cars, etc. - Manual page http://jderobot.org/index.php/Tools#carViz - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_NAMINGSERVICE_PACKAGE_DEPENDS "jderobot-easyice") -SET(CPACK_COMPONENT_NAMINGSERVICE_DESCRIPTION -" - Manual Page - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_PANTILTTELEOP-PYTHON_PACKAGE_DEPENDS "python-matplotlib, python-pyqt5, python-pip, python-numpy, python-pyqt5.qtsvg, jderobot-comm-python, jderobot-config-python") -SET(CPACK_COMPONENT_PANTILTTELEOP-PYTHON_DESCRIPTION -"Teleoperator for IP cameras that allow movement (i.e. Sony EVI camera) - Manual Page http://jderobot.org/index.php/Tools#NavigatorCamera - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_NAVIGATORCAMERA_PACKAGE_DEPENDS "jderobot-easyice, jderobot-parallelice, jderobot-util, jderobot-interfaces, jderobot-resourcelocator, jderobot-colorspaces") -SET(CPACK_COMPONENT_NAVIGATORCAMERA_DESCRIPTION -"Teleoperator for simulated flying cameras. - Manual Page http://jderobot.org/index.php/Tools#NavigatorCamera - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_OPENCVDEMO_PACKAGE_DEPENDS "jderobot-easyice, jderobot-parallelice, jderobot-util, jderobot-interfaces, jderobot-resourcelocator, jderobot-colorspaces") -SET(CPACK_COMPONENT_OPENCVDEMO_DESCRIPTION -"An example of a tool made for image treatment using OpenCV. - Manual Page http://jderobot.org/index.php/Tools#NavigatorCamera - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_RECORDER2_PACKAGE_DEPENDS "jderobot-easyice, jderobot-util, jderobot-interfaces, jderobot-ns, jderobot-colorspaces") -SET(CPACK_COMPONENT_RECORDER2_DESCRIPTION -"Tool for record logs of robots sensors and actuators. - Manual Page http://jderobot.org/index.php/Tools#Recorder - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_REPLAYCONTROLLER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-viewer, jderobot-util, jderobot-interfaces, jderobot-logger, jderobot-ns, jderobot-colorspaces") -SET(CPACK_COMPONENT_REPLAYCONTROLLER_DESCRIPTION -"Tool for controlling the recorded logs reproduction (play, pause, stop, ...) - Manual Page http://jderobot.org/index.php/Tools#Replayer - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_REPLAYER2_PACKAGE_DEPENDS "jderobot-easyice, jderobot-resourcelocator, jderobot-util, jderobot-interfaces, jderobot-logger, jderobot-ns, jderobot-colorspaces") -SET(CPACK_COMPONENT_REPLAYER2_DESCRIPTION -"Tool for replaying recorded logs with recorder2. - Manual Page http://jderobot.org/index.php/Tools#Replayer - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_RGBDCALIBRATOR_PACKAGE_DEPENDS "jderobot-easyice, jderobot-progeo, jderobot-geometry, jderobot-interfaces, jderobot-resourcelocator, jderobot-cvblob, jderobot-colorspaces") -SET(CPACK_COMPONENT_RGBDCALIBRATOR_DESCRIPTION -"Calibrator for RGB cameras. - Manual Page - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_RGBDMANUALCALIBRATOR_PACKAGE_DEPENDS "jderobot-easyice, jderobot-progeo, jderobot-util, jderobot-interfaces, jderobot-resourcelocator, jderobot-parallelice, jderobot-colorspaces") -SET(CPACK_COMPONENT_RGBDMANUALCALIBRATOR_DESCRIPTION -"Manual calibrator for RGBD cameras. - Manual Page - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_RGBDVIZ_PACKAGE_DEPENDS "jderobot-easyice, jderobot-geometry, jderobot-util, jderobot-interfaces, jderobot-parallelice, jderobot-progeo, jderobot-resourcelocator, jderobot-colorspaces") -SET(CPACK_DEBIAN_RGBDVIZ_PACKAGE_REPLACES "jderobot-rgbdviewer") -SET(CPACK_COMPONENT_RGBDVIZ_DESCRIPTION -"Generic viewer for RGBD cameras. Included an openGL viewer for pointcloud representation. - Manual Page http://jderobot.org/index.php/Tools#RGBDViz - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_SCRACTCH2JDEROBOT_PACKAGE_DEPENDS "python-parse, python-termcolor, python-pyqt5, python-pip, python-numpy, python-pyqt5.qtsvg, jderobot-parallelice-python, jderobot-comm-python, kurt-jderobot") -SET(CPACK_COMPONENT_SCRATCH2JDEROBOT_DESCRIPTION -"Tool for programing robots using scracth language and then translate it to python. - Manual Page http://jderobot.org/ - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_UAV-VIEWER_PACKAGE_DEPENDS "jderobot-easyice, jderobot-util, jderobot-interfaces, jderobot-colorspaces") -SET(CPACK_COMPONENT_UAV-VIEWER_DESCRIPTION -"Teleoperator for UAV drones real and simulated (Parrot ArDrone, 3DR SoloDrone, ...) - Manual Page http://jderobot.org/index.php/Tools#UAV_Viewer - Home page https://jderobot.org") - -SET(CPACK_DEBIAN_UAV-VIEWER-PYTHON_PACKAGE_DEPENDS "python-matplotlib, python-pyqt5, python-pip, python-numpy, python-pyqt5.qtsvg, jderobot-parallelice-python, jderobot-easyice-python, qfi") -SET(CPACK_COMPONENT_UAV-VIEWER-PYTHON_DESCRIPTION -"Teleoperator for UAV drones real and simulated (Parrot ArDrone, 3DR SoloDrone, ...) for python - Manual Page http://jderobot.org/index.php/Tools#UAV_Viewer - Home page https://jderobot.org") - - SET(CPACK_DEBIAN_VISUALSTATES-PYTHON_PACKAGE_DEPENDS "python-matplotlib, python-sysv-ipc, python-pyqt5, python-pyqt5.qsci, python-pip, python-numpy, python-pyqt5.qtsvg, jderobot-comm-python, jderobot-config-python, jderobot-comm, jderobot-config") -SET(CPACK_DEBIAN_VISUALSTATES-PYTHON_DESCRIPTION -"VisualStates is a tool for the programming of robot behaviors using hierarchy finite state machines (C++ or python) - Manual Page http://jderobot.org/VisualStates - Home page http://jderobot.org/VisualStates") diff --git a/cmake/cpackit.cmake b/cmake/cpackit.cmake index 3e968c0c1..7d50674be 100644 --- a/cmake/cpackit.cmake +++ b/cmake/cpackit.cmake @@ -25,7 +25,7 @@ SET (CPACK_PACKAGING_INSTALL_PREFIX "/usr/local") # CPack version numbers for release tarball name. SET (CPACK_PACKAGE_VERSION_MAJOR 6) -SET (CPACK_PACKAGE_VERSION_MINOR 0) +SET (CPACK_PACKAGE_VERSION_MINOR 1) SET (CPACK_PACKAGE_VERSION_PATCH 0) SET (CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}) @@ -75,7 +75,7 @@ SET (CPACK_MONOLITHIC_INSTALL OFF) #include(cmake/cpack_metainfo/rgbdcalibrator.cmake) #include(cmake/cpack_metainfo/rgbdviewer.cmake) #include(cmake/cpack_metainfo/uav-viewer.cmake) -include(cmake/cpack_metainfo/tools.cmake) +# include(cmake/cpack_metainfo/tools.cmake) include(cmake/cpack_metainfo/drivers.cmake) include(cmake/cpack_metainfo/libs.cmake) @@ -136,9 +136,9 @@ set(PACKAGE_DEPENDS "${DEPS_DEV}") configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-deps-dev.info.in ${CMAKE_BINARY_DIR}/jderobot-deps-dev_${PACKAGE_VERSION}_all.info) configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-libs.info.in ${CMAKE_BINARY_DIR}/jderobot-libs_${PACKAGE_VERSION}_all.info) -configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-tools.info.in ${CMAKE_BINARY_DIR}/jderobot-tools_${PACKAGE_VERSION}_all.info) +# configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-tools.info.in ${CMAKE_BINARY_DIR}/jderobot-tools_${PACKAGE_VERSION}_all.info) configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-drivers.info.in ${CMAKE_BINARY_DIR}/jderobot-drivers_${PACKAGE_VERSION}_all.info) -configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-examples.info.in ${CMAKE_BINARY_DIR}/jderobot-examples_${PACKAGE_VERSION}_all.info) +# configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-examples.info.in ${CMAKE_BINARY_DIR}/jderobot-examples_${PACKAGE_VERSION}_all.info) configure_file(${MAKE_PACKAGE_CONFIG_DIR}/jderobot-zeroc-ice-python.info.in ${CMAKE_BINARY_DIR}/jderobot-zeroc-ice-python_${PACKAGE_VERSION}_all.info) execute_process( diff --git a/scripts/cmake/postinst b/scripts/cmake/postinst index 6760d6966..1666e9687 100644 --- a/scripts/cmake/postinst +++ b/scripts/cmake/postinst @@ -3,6 +3,6 @@ echo "/opt/jderobot/lib/jderobot/" > /etc/ld.so.conf.d/jderobot.conf echo "source /opt/jderobot/setup.bash" >> ~/.bashrc -echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc +echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc ldconfig diff --git a/scripts/metapackages/jderobot-drivers.info.in b/scripts/metapackages/jderobot-drivers.info.in index c99ad015b..ad8db5a63 100644 --- a/scripts/metapackages/jderobot-drivers.info.in +++ b/scripts/metapackages/jderobot-drivers.info.in @@ -8,7 +8,7 @@ Section: net Priority: extra Size: 0 Installed-Size: 0 -Depends: jderobot-camserver, jderobot-gazebo, jderobot-mavlinkserver, jderobot-openni1server, jderobot-openniserver, jderobot-pclrgbdserver,jderobot-evicamdriver, jderobot-camserver-python, jderobot-youtubeserver-python +Depends: jderobot-gazebo Maintainer: Francisco Perez Homepage: http://jderobot.org Description: Metapackage that gathers all the drivers of JdeRobot framework. diff --git a/scripts/metapackages/jderobot-examples.info.in b/scripts/metapackages/jderobot-examples.info.in deleted file mode 100644 index 47708880e..000000000 --- a/scripts/metapackages/jderobot-examples.info.in +++ /dev/null @@ -1,17 +0,0 @@ -Package: ${PROJECT_NAME}-examples -Version: ${PACKAGE_VERSION} -Architecture: all -Provides: ${PROJECT_NAME}-examples -Conflicts: ${PROJECT_NAME}-examples -Replaces: ${PROJECT_NAME}-examples -Section: net -Priority: extra -Size: 0 -Installed-Size: 0 -Depends: jderobot-basic-component, jderobot-basic-component-python, jderobot-basic-server, jderobot-opencvdemo -Maintainer: Francisco Perez -Homepage: http://jderobot.org -Description: Metapackage that gathers all the examples of JdeRobot framework. - Jderobot is a software development suite for robotics applications. - Get it from https://github.com/JdeRobot/JdeRobot.git - diff --git a/scripts/metapackages/jderobot-tools.info.in b/scripts/metapackages/jderobot-tools.info.in deleted file mode 100644 index 1249376f6..000000000 --- a/scripts/metapackages/jderobot-tools.info.in +++ /dev/null @@ -1,17 +0,0 @@ -Package: ${PROJECT_NAME}-tools -Version: ${PACKAGE_VERSION} -Architecture: all -Provides: ${PROJECT_NAME}-tools -Conflicts: ${PROJECT_NAME}-tools -Replaces: ${PROJECT_NAME}-tools -Section: net -Priority: extra -Size: 0 -Installed-Size: 0 -Depends: jderobot-cameracalibrator, jderobot-camviz, jderobot-camviz-python, jderobot-colortuner-python, jderobot-giraffeclient, jderobot-carviz, jderobot-namingservice, jderobot-navigatorcamera, jderobot-pantiltteleop-python, jderobot-recorder2, jderobot-replaycontroller, jderobot-replayer2, jderobot-rgbdcalibrator, jderobot-rgbdmanualcalibrator, jderobot-rgbdviz, jderobot-uav-viewer, jderobot-uav-viewer-python -Maintainer: Francisco Perez -Homepage: http://jderobot.org -Description: Metapackage that gathers all the tools of JdeRobot framework. - Jderobot is a software development suite for robotics applications. - Get it from https://github.com/JdeRobot/JdeRobot.git - diff --git a/scripts/metapackages/jderobot.info.in b/scripts/metapackages/jderobot.info.in index 071dfb37d..3c6d90bb8 100644 --- a/scripts/metapackages/jderobot.info.in +++ b/scripts/metapackages/jderobot.info.in @@ -8,7 +8,7 @@ Priority: extra Section: net Size: 0 Installed-Size: 0 -Depends: ${PACKAGE_DEPENDS}, jderobot-tools, jderobot-libs, jderobot-drivers, jderobot-interfaces, jderobot-types, jderobot-examples +Depends: ${PACKAGE_DEPENDS}, jderobot-libs, jderobot-drivers, jderobot-interfaces, jderobot-types, jderobot-types-python Maintainer: Francisco Perez Homepage: http://jderobot.org Description: Metapackage that gathers all libraries required by JdeRobot framework, and install the proyect for execution only. diff --git a/scripts/metapackages/make_packages.sh b/scripts/metapackages/make_packages.sh index eee99a9e9..82d643a8f 100755 --- a/scripts/metapackages/make_packages.sh +++ b/scripts/metapackages/make_packages.sh @@ -33,7 +33,7 @@ do dr=${pkginfo%_*_*.info} drname=$(echo $dr | sed 's/jderobot-//') # echo $pkgname - echo $drname + # echo $drname target=$build/$pkgname/DEBIAN mkdir -p $target cp $pkginfo $target/control diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 318d574cc..58470505e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,6 @@ add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/interfaces) add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/types) add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/libs) -add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/tools) +# add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/tools) add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/drivers) -add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/examples) +# add_subdirectory (${CMAKE_CURRENT_SOURCE_DIR}/examples) diff --git a/src/drivers/CMakeLists.txt b/src/drivers/CMakeLists.txt index 1f373ac3f..45409844b 100644 --- a/src/drivers/CMakeLists.txt +++ b/src/drivers/CMakeLists.txt @@ -11,7 +11,7 @@ FOREACH (driver ${LIST_DRIVERS}) SET(build_picamserver OFF CACHE BOOL "Build picamserver") ENDIF(NOT MMAL_FOUND) IF(build_${driver}) - MESSAGE(STATUS "Processing driver ${driver}") + MESSAGE(STATUS "${BoldMagenta}Processing driver ${driver}${ColourReset}") ADD_SUBDIRECTORY (${driver}) ENDIF(build_${driver}) endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${driver}/CMakeLists.txt) diff --git a/src/drivers/MAVLinkServer/.idea/MAVLinkServer.iml b/src/drivers/MAVLinkServer/.idea/MAVLinkServer.iml deleted file mode 100644 index 671160631..000000000 --- a/src/drivers/MAVLinkServer/.idea/MAVLinkServer.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/.idea/misc.xml b/src/drivers/MAVLinkServer/.idea/misc.xml deleted file mode 100644 index cd9d35be3..000000000 --- a/src/drivers/MAVLinkServer/.idea/misc.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/.idea/modules.xml b/src/drivers/MAVLinkServer/.idea/modules.xml deleted file mode 100644 index a1c3d73e0..000000000 --- a/src/drivers/MAVLinkServer/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/.idea/workspace.xml b/src/drivers/MAVLinkServer/.idea/workspace.xml deleted file mode 100644 index 93ca2e049..000000000 --- a/src/drivers/MAVLinkServer/.idea/workspace.xml +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1465060975712 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/CMakeLists.txt b/src/drivers/MAVLinkServer/CMakeLists.txt deleted file mode 100644 index ffc634b56..000000000 --- a/src/drivers/MAVLinkServer/CMakeLists.txt +++ /dev/null @@ -1,30 +0,0 @@ -configure_file( - setupMAVLinkServer.in - setupMAVLinkServer - @ONLY -) - -configure_file( - mavLinkServer.in - mavLinkServer - @ONLY -) -## INSTALL ## - -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/setupMAVLinkServer - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ - DESTINATION bin - COMPONENT MAVLinkServer -) - -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/mavLinkServer - PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ - DESTINATION bin - COMPONENT MAVLinkServer -) - -INSTALL (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/MAVProxy DESTINATION share/jderobot/python/MAVLinkServer COMPONENT MAVLinkServer) - -INSTALL(FILES setup.py DESTINATION share/jderobot/python/MAVLinkServer/ COMPONENT MAVLinkServer) diff --git a/src/drivers/MAVLinkServer/COPYING.txt b/src/drivers/MAVLinkServer/COPYING.txt deleted file mode 100644 index 818433ecc..000000000 --- a/src/drivers/MAVLinkServer/COPYING.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/src/drivers/MAVLinkServer/MAVProxy/CMDVel.py b/src/drivers/MAVLinkServer/MAVProxy/CMDVel.py deleted file mode 100644 index eb9242c05..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/CMDVel.py +++ /dev/null @@ -1,55 +0,0 @@ -__author__ = 'AeroCano' - -import jderobot, time, threading - -lock = threading.Lock() - -class CMDVelI(jderobot.CMDVel): - - def __init__(self,lx,ly,lz,ax,ay,az): - - self.linearX = lx - self.linearY = ly - self.linearZ = lz - self.angularX = ax - self.angularY = ay - self.angularZ = az - - #print ("cmdvel start") - - #def __del__(self): - - #print ("cmdvel end") - - - def setCMDVelData(self, data, current=None): - - lock.acquire() - - self.linearX = data.linearX - self.linearY = data.linearY - self.linearZ = data.linearZ - self.angularX = data.angularX - self.angularY = data.angularY - self.angularZ = data.angularZ - - lock.release() - - return 0 - - def getCMDVelData(self, current=None): - - time.sleep(0.05) # 20Hz (50ms) rate to rx CMDVel - - lock.acquire() - - data = jderobot.CMDVelData() - data.linearX = self.linearX - data.linearY = self.linearY - data.linearZ = self.linearZ - data.angularX = self.angularX - data.angularY = self.angularY - data.angularZ = self.angularZ - lock.release() - - return data diff --git a/src/drivers/MAVLinkServer/MAVProxy/CMakeLists.txt b/src/drivers/MAVLinkServer/MAVProxy/CMakeLists.txt deleted file mode 100644 index 2f196641d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ - -## INSTALL ## - -# Install .py -FILE(GLOB_RECURSE HEADERS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*py) -FOREACH(header ${HEADERS_FILES}) - INSTALL(FILES ${header} DESTINATION share/jderobot/python/MAVLinkServer/ COMPONENT drivers) -ENDFOREACH(header) - -# Install .xml -INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/MAVLink.xml DESTINATION share/jderobot/python/MAVLinkServer COMPONENT drivers ) - -# Install mav.parm -INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/mav.parm DESTINATION share/jderobot/python/MAVLinkServer COMPONENT drivers ) - -# Install modules -INSTALL (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/modules DESTINATION share/jderobot/python/MAVLinkServer COMPONENT drivers PATTERN .svn EXCLUDE) - -# Install tools -INSTALL (DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tools DESTINATION share/jderobot/python/MAVLinkServer COMPONENT drivers PATTERN .svn EXCLUDE) diff --git a/src/drivers/MAVLinkServer/MAVProxy/Extra.py b/src/drivers/MAVLinkServer/MAVProxy/Extra.py deleted file mode 100644 index 187105e39..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/Extra.py +++ /dev/null @@ -1,52 +0,0 @@ -__author__ = 'AeroCano' - -import jderobot, time, threading - -lockLand = threading.Lock() -lockTakeOff = threading.Lock() - -class ExtraI(jderobot.ArDroneExtra): - - def __init__(self): - - print ("Extra start") - self.landDecision = False - self.takeOffDecision = False - - def land(self,xxx): - self.setLand(True) - lockLand.acquire() - landDecision = self.landDecision - lockLand.release() - - return landDecision - - def takeoff(self,xxx): - self.setTakeOff(True) - lockTakeOff.acquire() - takeOffDecision = self.takeOffDecision - lockTakeOff.release() - - return takeOffDecision - - def setLand(self,decision): - lockLand.acquire() - self.landDecision = decision - lockLand.release() - - def setTakeOff(self, decision): - lockTakeOff.acquire() - self.takeOffDecision = decision - lockTakeOff.release() - - def setExtraData(self, data, current=None): - - lockLand.acquire() - self.landDecision = data.landDecision - lockLand.release() - - lockTakeOff.acquire() - self.takeOffDecision = data.takeOffDecision - lockTakeOff.release() - - return 0 diff --git a/src/drivers/MAVLinkServer/MAVProxy/MAVLink.xml b/src/drivers/MAVLinkServer/MAVProxy/MAVLink.xml deleted file mode 100644 index 0cbd998f0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/MAVLink.xml +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - true - - - - aileron - double - /controls/flight/aileron - - - elevator - double - /controls/flight/elevator - - - rudder - double - /controls/flight/rudder - - - throttle - double - /controls/engines/engine[0]/throttle - - - - - - true - magic,0x4c56414d - - - - latitude - double - /position/latitude-deg - - - longitude - double - /position/longitude-deg - - - altitude - double - /position/altitude-ft - - - heading - double - /orientation/heading-deg - - - - - speed - north - double - /velocities/speed-north-fps - - - speed - east - double - /velocities/speed-east-fps - - - - - - x-accel - double - /accelerations/pilot/x-accel-fps_sec - - - y-accel - double - /accelerations/pilot/y-accel-fps_sec - - - z-accel - double - /accelerations/pilot/z-accel-fps_sec - - - - roll-rate - double - /orientation/roll-rate-degps - - - - pitch-rate - double - /orientation/pitch-rate-degps - - - - yaw-rate - double - /orientation/yaw-rate-degps - - - - roll-deg - double - /orientation/roll-deg - - - - pitch-deg - double - /orientation/pitch-deg - - - - yaw-deg - double - /orientation/yaw-deg - - - - airspeed-kt - double - /velocities/airspeed-kt - - - - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/MAVLinkServer.sh b/src/drivers/MAVLinkServer/MAVProxy/MAVLinkServer.sh deleted file mode 100755 index 9658caf53..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/MAVLinkServer.sh +++ /dev/null @@ -1,2 +0,0 @@ -#USE ./MAVLinkServer mavlinkserver.yml -python2.7 ./mavproxy.py $1 --master=10.1.1.191:14550 --console diff --git a/src/drivers/MAVLinkServer/MAVProxy/Pose3D.py b/src/drivers/MAVLinkServer/MAVProxy/Pose3D.py deleted file mode 100644 index f10e99dcc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/Pose3D.py +++ /dev/null @@ -1,57 +0,0 @@ -__author__ = 'AeroCano' - -import jderobot, time, threading - -lock = threading.Lock() - -class Pose3DI(jderobot.Pose3D): - - def __init__(self,_x,_y,_z,_h,_q0,_q1,_q2,_q3): - - self.x = _x - self.y = _y - self.z = _z - self.h = _h - self.q0 = _q0 - self.q1 = _q1 - self.q2 = _q2 - self.q3 = _q3 - - print ("Pose3D start") - - def setPose3DData(self, data, current=None): - - lock.acquire() - - self.x = data.x - self.y = data.y - self.z = data.z - self.h = data.h - self.q0 = data.q0 - self.q1 = data.q1 - self.q2 = data.q2 - self.q3 = data.q3 - - lock.release() - - return 0 - - def getPose3DData(self, current=None): - - time.sleep(0.05) # 20Hz (50ms) rate to tx Pose3D - - lock.acquire() - - data = jderobot.Pose3DData() - data.x = self.x - data.y = self.y - data.z = self.z - data.h = self.h - data.q0 = self.q0 - data.q1 = self.q1 - data.q2 = self.q2 - data.q3 = self.q3 - - lock.release() - - return data diff --git a/src/drivers/MAVLinkServer/MAVProxy/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/__init__.py deleted file mode 100644 index 37593515e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/__init__.py +++ /dev/null @@ -1 +0,0 @@ -'''MAVProxy MAVLink ground station libraries''' diff --git a/src/drivers/MAVLinkServer/MAVProxy/mav.parm b/src/drivers/MAVLinkServer/MAVProxy/mav.parm deleted file mode 100644 index 098136865..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/mav.parm +++ /dev/null @@ -1,503 +0,0 @@ -ACCEL_Z_D 0.000000 -ACCEL_Z_FILT_HZ 20.000000 -ACCEL_Z_I 1.500000 -ACCEL_Z_IMAX 800.000000 -ACCEL_Z_P 0.750000 -ACRO_BAL_PITCH 1.000000 -ACRO_BAL_ROLL 1.000000 -ACRO_EXPO 0.300000 -ACRO_RP_P 4.000000 -ACRO_TRAINER 2.000000 -ACRO_YAW_P 1.000000 -AHRS_COMP_BETA 0.100000 -AHRS_GPS_GAIN 1.000000 -AHRS_GPS_MINSATS 6.000000 -AHRS_GPS_USE 1.000000 -AHRS_ORIENTATION 12.000000 -AHRS_RP_P 0.100000 -AHRS_TRIM_X 0.009756 -AHRS_TRIM_Y 0.007071 -AHRS_TRIM_Z 0.000000 -AHRS_WIND_MAX 0.000000 -AHRS_YAW_P 0.100000 -ANGLE_MAX 2000.000000 -ARMING_CHECK 1.000000 -ATC_ACCEL_P_MAX 36000.000000 -ATC_ACCEL_R_MAX 36000.000000 -ATC_ACCEL_Y_MAX 7000.000000 -ATC_LEAD_PIT_R 1.000000 -ATC_LEAD_PIT_W 0.000000 -ATC_LEAD_RLL_R 4.000000 -ATC_LEAD_RLL_W 15.000000 -ATC_RATE_FF_ENAB 1.000000 -ATC_SLEW_YAW 1000.000000 -AUTOTUNE_AGGR 0.100000 -AUTOTUNE_AXES 7.000000 -BATT2_AMP_OFFSET 0.000000 -BATT2_AMP_PERVOL 17.000000 -BATT2_CAPACITY 3300.000000 -BATT2_CURR_PIN 3.000000 -BATT2_MONITOR 0.000000 -BATT2_VOLT_MULT 10.100000 -BATT2_VOLT_PIN 2.000000 -BATT_AMP_OFFSET 0.000000 -BATT_AMP_PERVOLT 17.000000 -BATT_CAPACITY 5200.000000 -BATT_CURR_PIN 3.000000 -BATT_MONITOR 5.000000 -BATT_VOLT_MULT 10.100000 -BATT_VOLT_PIN 2.000000 -BRD_PWM_COUNT 4.000000 -BRD_SAFETYENABLE 0.000000 -BRD_SBUS_OUT 0.000000 -BRD_SER1_RTSCTS 1.000000 -BRD_SER2_RTSCTS 2.000000 -CAM_DURATION 10.000000 -CAM_SERVO_OFF 1100.000000 -CAM_SERVO_ON 1300.000000 -CAM_TRIGG_DIST 0.000000 -CAM_TRIGG_TYPE 0.000000 -CH10_OPT 0.000000 -CH11_OPT 0.000000 -CH12_OPT 0.000000 -CH7_OPT 0.000000 -CH8_OPT 0.000000 -CH9_OPT 0.000000 -CHUTE_ALT_MIN 10.000000 -CHUTE_ENABLED 0.000000 -CHUTE_SERVO_OFF 1100.000000 -CHUTE_SERVO_ON 1300.000000 -CHUTE_TYPE 0.000000 -CIRCLE_RADIUS 1000.000000 -CIRCLE_RATE 20.000000 -CLI_ENABLED 0.000000 -COMPASS_AUTODEC 1.000000 -COMPASS_DEC 0.000000 -COMPASS_DEV_ID 73225.000000 -COMPASS_DEV_ID2 131874.000000 -COMPASS_DEV_ID3 66826.000000 -COMPASS_DIA2_X 0.973857 -COMPASS_DIA2_Y 1.006992 -COMPASS_DIA2_Z 1.043458 -COMPASS_DIA3_X 1.000000 -COMPASS_DIA3_Y 1.000000 -COMPASS_DIA3_Z 1.000000 -COMPASS_DIA_X 1.027986 -COMPASS_DIA_Y 1.020255 -COMPASS_DIA_Z 0.920527 -COMPASS_EXTERN2 0.000000 -COMPASS_EXTERN3 0.000000 -COMPASS_EXTERNAL 1.000000 -COMPASS_LEARN 0.000000 -COMPASS_MOT2_X 0.000000 -COMPASS_MOT2_Y 0.000000 -COMPASS_MOT2_Z 0.000000 -COMPASS_MOT3_X 0.000000 -COMPASS_MOT3_Y 0.000000 -COMPASS_MOT3_Z 0.000000 -COMPASS_MOTCT 0.000000 -COMPASS_MOT_X 0.000000 -COMPASS_MOT_Y 0.000000 -COMPASS_MOT_Z 0.000000 -COMPASS_ODI2_X -0.078261 -COMPASS_ODI2_Y 0.019758 -COMPASS_ODI2_Z -0.014983 -COMPASS_ODI3_X 0.000000 -COMPASS_ODI3_Y 0.000000 -COMPASS_ODI3_Z 0.000000 -COMPASS_ODI_X 0.026693 -COMPASS_ODI_Y 0.012649 -COMPASS_ODI_Z -0.032334 -COMPASS_OFS2_X -246.821381 -COMPASS_OFS2_Y 37.114498 -COMPASS_OFS2_Z -59.822403 -COMPASS_OFS3_X 0.000000 -COMPASS_OFS3_Y 0.000000 -COMPASS_OFS3_Z 0.000000 -COMPASS_OFS_X -75.455086 -COMPASS_OFS_Y 128.053757 -COMPASS_OFS_Z 250.175201 -COMPASS_ORIENT 38.000000 -COMPASS_ORIENT2 0.000000 -COMPASS_ORIENT3 0.000000 -COMPASS_PRIMARY 0.000000 -COMPASS_USE 1.000000 -COMPASS_USE2 1.000000 -COMPASS_USE3 0.000000 -EKF_ABIAS_PNOISE 0.000050 -EKF_ACC_PNOISE 0.250000 -EKF_ALT_NOISE 2.000000 -EKF_ALT_SOURCE 1.000000 -EKF_EAS_GATE 10.000000 -EKF_EAS_NOISE 1.400000 -EKF_FALLBACK 1.000000 -EKF_FLOW_DELAY 10.000000 -EKF_FLOW_GATE 3.000000 -EKF_FLOW_NOISE 0.250000 -EKF_GBIAS_PNOISE 0.000001 -EKF_GLITCH_ACCEL 100.000000 -EKF_GLITCH_RAD 25.000000 -EKF_GND_GRADIENT 2.000000 -EKF_GPS_CHECK 127.000000 -EKF_GPS_LIM_HDFT 0.300000 -EKF_GPS_LIM_HDOP 240.000000 -EKF_GPS_LIM_HERR 5.000000 -EKF_GPS_LIM_HSPD 0.300000 -EKF_GPS_LIM_NSAT 6.000000 -EKF_GPS_LIM_SERR 1.000000 -EKF_GPS_LIM_VSPD 0.300000 -EKF_GPS_TYPE 0.000000 -EKF_GYRO_PNOISE 0.015000 -EKF_HGT_GATE 10.000000 -EKF_MAGB_PNOISE 0.000600 -EKF_MAGE_PNOISE 0.000600 -EKF_MAG_CAL 3.000000 -EKF_MAG_GATE 3.000000 -EKF_MAG_NOISE 0.050000 -EKF_MAX_FLOW 2.500000 -EKF_POSNE_NOISE 0.500000 -EKF_POS_DELAY 200.000000 -EKF_POS_GATE 5.000000 -EKF_RNG_GATE 5.000000 -EKF_VELD_NOISE 0.700000 -EKF_VELNE_NOISE 0.500000 -EKF_VEL_DELAY 200.000000 -EKF_VEL_GATE 4.000000 -EKF_WIND_PNOISE 0.100000 -EKF_WIND_PSCALE 0.500000 -EPM_ENABLE 0.000000 -EPM_GRAB 1900.000000 -EPM_NEUTRAL 1500.000000 -EPM_REGRAB 0.000000 -EPM_RELEASE 1100.000000 -ESC 0.000000 -FENCE_ACTION 0.000000 -FENCE_ALT_MAX 45.720001 -FENCE_ENABLE 1.000000 -FENCE_MARGIN 0.000000 -FENCE_RADIUS 300.000000 -FENCE_TYPE 1.000000 -FLOW_ENABLE 0.000000 -FLOW_FXSCALER 0.000000 -FLOW_FYSCALER 0.000000 -FLOW_ORIENT_YAW 0.000000 -FLTMODE1 5.000000 -FLTMODE2 5.000000 -FLTMODE3 5.000000 -FLTMODE4 5.000000 -FLTMODE5 5.000000 -FLTMODE6 5.000000 -FRAME 1.000000 -FS_BATT_CURR_RTL 0.000000 -FS_BATT_ENABLE 2.000000 -FS_BATT_MAH 520.000000 -FS_BATT_VOLTAGE 14.000000 -FS_EKF_ACTION 2.000000 -FS_EKF_THRESH 0.800000 -FS_GCS_ENABLE 0.000000 -FS_THR_ENABLE 1.000000 -FS_THR_VALUE 910.000000 -GND_ABS_PRESS 94686.640625 -GND_ALT_OFFSET 0.000000 -GND_TEMP 20.632702 -GPS_AUTO_SWITCH 1.000000 -GPS_INJECT_TO 127.000000 -GPS_MIN_DGPS 100.000000 -GPS_MIN_ELEV -100.000000 -GPS_NAVFILTER 6.000000 -GPS_SBAS_MODE 2.000000 -GPS_SBP_LOGMASK -256.000000 -GPS_TYPE 2.000000 -GPS_TYPE2 0.000000 -INS_ACC2OFFS_X 0.000270 -INS_ACC2OFFS_Y -0.007218 -INS_ACC2OFFS_Z 1.486737 -INS_ACC2SCAL_X 1.019099 -INS_ACC2SCAL_Y 0.989331 -INS_ACC2SCAL_Z 1.049657 -INS_ACC3OFFS_X 0.166762 -INS_ACC3OFFS_Y 0.020417 -INS_ACC3OFFS_Z -0.701632 -INS_ACC3SCAL_X 1.003736 -INS_ACC3SCAL_Y 0.995630 -INS_ACC3SCAL_Z 0.984779 -INS_ACCEL_FILTER 20.000000 -INS_ACCOFFS_X 0.071313 -INS_ACCOFFS_Y -0.044823 -INS_ACCOFFS_Z 0.195376 -INS_ACCSCAL_X 0.997250 -INS_ACCSCAL_Y 0.997433 -INS_ACCSCAL_Z 0.986688 -INS_GYR2OFFS_X -0.008188 -INS_GYR2OFFS_Y 0.017427 -INS_GYR2OFFS_Z -0.010080 -INS_GYR3OFFS_X 0.033627 -INS_GYR3OFFS_Y -0.028248 -INS_GYR3OFFS_Z 0.183651 -INS_GYROFFS_X -0.032742 -INS_GYROFFS_Y -0.030133 -INS_GYROFFS_Z -0.012776 -INS_GYRO_FILTER 20.000000 -INS_PRODUCT_ID 5.000000 -LAND_REPOSITION 1.000000 -LAND_SPEED 50.000000 -LGR_SERVO_DEPLOY 1750.000000 -LGR_SERVO_RTRACT 1250.000000 -LOG_BACKEND_TYPE 3.000000 -LOG_BITMASK 131070.000000 -MAG_ENABLE 1.000000 -MIS_RESTART 0.000000 -MIS_TOTAL 0.000000 -MNT_ANGMAX_PAN 4500.000000 -MNT_ANGMAX_ROL 4500.000000 -MNT_ANGMAX_TIL 0.000000 -MNT_ANGMIN_PAN -4500.000000 -MNT_ANGMIN_ROL -4500.000000 -MNT_ANGMIN_TIL -9000.000000 -MNT_DEFLT_MODE 3.000000 -MNT_JSTICK_SPD 0.000000 -MNT_LEAD_PTCH 0.000000 -MNT_LEAD_RLL 0.000000 -MNT_NEUTRAL_X 0.000000 -MNT_NEUTRAL_Y 0.000000 -MNT_NEUTRAL_Z 0.000000 -MNT_RC_IN_PAN 0.000000 -MNT_RC_IN_ROLL 0.000000 -MNT_RC_IN_TILT 6.000000 -MNT_RETRACT_X 0.000000 -MNT_RETRACT_Y 0.000000 -MNT_RETRACT_Z 0.000000 -MNT_STAB_PAN 0.000000 -MNT_STAB_ROLL 0.000000 -MNT_STAB_TILT 0.000000 -MNT_TYPE 2.000000 -MOT_CURR_MAX 42.000000 -MOT_SPIN_ARMED 75.000000 -MOT_THR_MIX_MIN 0.150000 -MOT_THST_BAT_MAX 16.799999 -MOT_THST_BAT_MIN 12.000000 -MOT_THST_EXPO 0.800000 -MOT_THST_MAX 0.940000 -MOT_YAW_HEADROOM 200.000000 -PHLD_BRAKE_ANGLE 3000.000000 -PHLD_BRAKE_RATE 8.000000 -PILOT_ACCEL_Z 100.000000 -PILOT_THR_BHV 1.000000 -PILOT_THR_FILT 2.000000 -PILOT_TKOFF_ALT 75.000000 -PILOT_TKOFF_DZ 250.000000 -PILOT_VELZ_MAX 133.000000 -POS_XY_P 0.700000 -POS_Z_P 1.000000 -PSC_ACC_XY_FILT 2.000000 -RALLY_LIMIT_KM 0.000000 -RALLY_TOTAL 0.000000 -RATE_PIT_D 0.008000 -RATE_PIT_FILT_HZ 40.000000 -RATE_PIT_I 0.168000 -RATE_PIT_IMAX 3000.000000 -RATE_PIT_P 0.168000 -RATE_RLL_D 0.007200 -RATE_RLL_FILT_HZ 40.000000 -RATE_RLL_I 0.116000 -RATE_RLL_IMAX 3000.000000 -RATE_RLL_P 0.116000 -RATE_YAW_D 0.000000 -RATE_YAW_FILT_HZ 7.600000 -RATE_YAW_I 0.066000 -RATE_YAW_IMAX 1000.000000 -RATE_YAW_P 0.660000 -RC10_DZ 0.000000 -RC10_FUNCTION 0.000000 -RC10_MAX 1900.000000 -RC10_MIN 1100.000000 -RC10_REV 1.000000 -RC10_TRIM 1500.000000 -RC11_DZ 0.000000 -RC11_FUNCTION 0.000000 -RC11_MAX 1900.000000 -RC11_MIN 1100.000000 -RC11_REV 1.000000 -RC11_TRIM 1500.000000 -RC12_DZ 0.000000 -RC12_FUNCTION 0.000000 -RC12_MAX 1900.000000 -RC12_MIN 1100.000000 -RC12_REV 1.000000 -RC12_TRIM 1500.000000 -RC13_DZ 0.000000 -RC13_FUNCTION 0.000000 -RC13_MAX 1900.000000 -RC13_MIN 1100.000000 -RC13_REV 1.000000 -RC13_TRIM 1500.000000 -RC14_DZ 0.000000 -RC14_FUNCTION 0.000000 -RC14_MAX 1900.000000 -RC14_MIN 1100.000000 -RC14_REV 1.000000 -RC14_TRIM 1500.000000 -RC1_DZ 10.000000 -RC1_MAX 2000.000000 -RC1_MIN 1000.000000 -RC1_REV 1.000000 -RC1_TRIM 1500.000000 -RC2_DZ 10.000000 -RC2_MAX 2000.000000 -RC2_MIN 1000.000000 -RC2_REV 1.000000 -RC2_TRIM 1500.000000 -RC3_DZ 30.000000 -RC3_MAX 1900.000000 -RC3_MIN 1000.000000 -RC3_REV 1.000000 -RC3_TRIM 1500.000000 -RC4_DZ 10.000000 -RC4_MAX 2000.000000 -RC4_MIN 1000.000000 -RC4_REV 1.000000 -RC4_TRIM 1500.000000 -RC5_DZ 0.000000 -RC5_FUNCTION 0.000000 -RC5_MAX 1900.000000 -RC5_MIN 1100.000000 -RC5_REV 1.000000 -RC5_TRIM 1500.000000 -RC6_DZ 0.000000 -RC6_FUNCTION 0.000000 -RC6_MAX 1520.000000 -RC6_MIN 1000.000000 -RC6_REV 1.000000 -RC6_TRIM 1000.000000 -RC7_DZ 0.000000 -RC7_FUNCTION 0.000000 -RC7_MAX 1900.000000 -RC7_MIN 1100.000000 -RC7_REV 1.000000 -RC7_TRIM 1500.000000 -RC8_DZ 0.000000 -RC8_FUNCTION 0.000000 -RC8_MAX 1900.000000 -RC8_MIN 1100.000000 -RC8_REV 1.000000 -RC8_TRIM 1500.000000 -RC9_DZ 0.000000 -RC9_FUNCTION 0.000000 -RC9_MAX 1900.000000 -RC9_MIN 1100.000000 -RC9_REV 1.000000 -RC9_TRIM 1500.000000 -RCMAP_PITCH 2.000000 -RCMAP_ROLL 1.000000 -RCMAP_THROTTLE 3.000000 -RCMAP_YAW 4.000000 -RC_FEEL_RP 20.000000 -RC_SPEED 490.000000 -RELAY_DEFAULT 0.000000 -RELAY_PIN 54.000000 -RELAY_PIN2 55.000000 -RELAY_PIN3 -1.000000 -RELAY_PIN4 -1.000000 -RNGFND2_FUNCTION 0.000000 -RNGFND2_GNDCLEAR 10.000000 -RNGFND2_MAX_CM 700.000000 -RNGFND2_MIN_CM 20.000000 -RNGFND2_OFFSET 0.000000 -RNGFND2_PIN -1.000000 -RNGFND2_RMETRIC 1.000000 -RNGFND2_SCALING 3.000000 -RNGFND2_SETTLE 0.000000 -RNGFND2_STOP_PIN -1.000000 -RNGFND2_TYPE 0.000000 -RNGFND_FUNCTION 0.000000 -RNGFND_GAIN 0.800000 -RNGFND_GNDCLEAR 10.000000 -RNGFND_MAX_CM 700.000000 -RNGFND_MIN_CM 20.000000 -RNGFND_OFFSET 0.000000 -RNGFND_PIN -1.000000 -RNGFND_PWRRNG 0.000000 -RNGFND_RMETRIC 1.000000 -RNGFND_SCALING 3.000000 -RNGFND_SETTLE 0.000000 -RNGFND_STOP_PIN -1.000000 -RNGFND_TYPE 0.000000 -RSSI_PIN -1.000000 -RSSI_RANGE 5.000000 -RTL_ALT 2500.000000 -RTL_ALT_FINAL 0.000000 -RTL_CLIMB_MIN 1000.000000 -RTL_CONE_SLOPE 3.000000 -RTL_LOIT_TIME 5000.000000 -RTL_SPEED 1000.000000 -SCHED_DEBUG 0.000000 -SERIAL0_BAUD 115.000000 -SERIAL1_BAUD 921.000000 -SERIAL1_PROTOCOL 1.000000 -SERIAL2_BAUD 57.000000 -SERIAL2_PROTOCOL 0.000000 -SERIAL3_BAUD 38.000000 -SERIAL3_PROTOCOL 5.000000 -SERIAL4_BAUD 230.000000 -SERIAL4_PROTOCOL 1.000000 -SIMPLE 0.000000 -SR0_EXTRA1 0.000000 -SR0_EXTRA2 0.000000 -SR0_EXTRA3 0.000000 -SR0_EXT_STAT 0.000000 -SR0_PARAMS 0.000000 -SR0_POSITION 0.000000 -SR0_RAW_CTRL 0.000000 -SR0_RAW_SENS 20.000000 -SR0_RC_CHAN 0.000000 -SR1_EXTRA1 4.000000 -SR1_EXTRA2 4.000000 -SR1_EXTRA3 4.000000 -SR1_EXT_STAT 4.000000 -SR1_PARAMS 10.000000 -SR1_POSITION 4.000000 -SR1_RAW_CTRL 4.000000 -SR1_RAW_SENS 4.000000 -SR1_RC_CHAN 4.000000 -SR2_EXTRA1 0.000000 -SR2_EXTRA2 0.000000 -SR2_EXTRA3 0.000000 -SR2_EXT_STAT 0.000000 -SR2_PARAMS 0.000000 -SR2_POSITION 0.000000 -SR2_RAW_CTRL 0.000000 -SR2_RAW_SENS 0.000000 -SR2_RC_CHAN 0.000000 -STB_PIT_P 8.000000 -STB_RLL_P 9.500000 -STB_YAW_P 7.000000 -SUPER_SIMPLE 0.000000 -SYSID_MYGCS 255.000000 -SYSID_SW_MREV 120.000000 -SYSID_SW_TYPE 10.000000 -SYSID_THISMAV 1.000000 -TELEM_DELAY 0.000000 -TERRAIN_ENABLE 1.000000 -TERRAIN_SPACING 100.000000 -THR_DZ 10.000000 -THR_MID 400.000000 -THR_MIN 130.000000 -TUNE 0.000000 -TUNE_HIGH 1000.000000 -TUNE_LOW 0.000000 -VEL_XY_FILT_HZ 5.000000 -VEL_XY_I 0.500000 -VEL_XY_IMAX 1000.000000 -VEL_XY_P 1.400000 -VEL_Z_P 5.000000 -WPNAV_ACCEL 340.000000 -WPNAV_ACCEL_Z 160.000000 -WPNAV_LOIT_JERK 1000.000000 -WPNAV_LOIT_MAXA 229.000000 -WPNAV_LOIT_MINA 108.000000 -WPNAV_LOIT_SPEED 500.000000 -WPNAV_RADIUS 200.000000 -WPNAV_SPEED 1100.000000 -WPNAV_SPEED_DN 240.000000 -WPNAV_SPEED_UP 320.000000 -WP_YAW_BEHAVIOR 2.000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/mav.tlog b/src/drivers/MAVLinkServer/MAVProxy/mav.tlog deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/mav.tlog.raw b/src/drivers/MAVLinkServer/MAVProxy/mav.tlog.raw deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/mavlinkserver.yml b/src/drivers/MAVLinkServer/MAVProxy/mavlinkserver.yml deleted file mode 100644 index d2e72d586..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/mavlinkserver.yml +++ /dev/null @@ -1,30 +0,0 @@ -Camera: - Server: 1 # 0 -> Deactivate, 1 -> Ice , 2 -> ROS - Proxy: "default -h 0.0.0.0 -p 9999" - Format: RGB8 - Topic: "/MavLink/image_raw" - Name: MavLinkCamera - -Pose3D: - Server: 1 # 0 -> Deactivate, 1 -> Ice , 2 -> ROS - Proxy: "default -h 0.0.0.0 -p 9998" - Topic: "/MavLink/Pose3D" - Name: MavLinkPose3d - -CMDVel: - Server: 1 # 0 -> Deactivate, 1 -> Ice , 2 -> ROS - Proxy: "default -h 0.0.0.0 -p 9997" - Topic: "/MavLink/CMDVel" - Name: MavLinkCMDVel - -Navdata: - Server: 1 # 0 -> Deactivate, 1 -> Ice , 2 -> ROS - Proxy: "default -h 0.0.0.0 -p 9996" - Topic: "/MavLink/Navdata" - Name: MavLinkNavdata - -Extra: - Server: 1 # 0 -> Deactivate, 1 -> Ice , 2 -> ROS - Proxy: "default -h 0.0.0.0 -p 9995" - Topic: "/MavLink/Extra" - Name: MavLinkExtra diff --git a/src/drivers/MAVLinkServer/MAVProxy/mavproxy.py b/src/drivers/MAVLinkServer/MAVProxy/mavproxy.py deleted file mode 100755 index 8527d4ee7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/mavproxy.py +++ /dev/null @@ -1,1689 +0,0 @@ -#!/usr/bin/env python -''' -mavproxy - a MAVLink proxy program - -Copyright Andrew Tridgell 2011 -Released under the GNU GPL version 3 or later - -''' - -import sys, os, time, socket, signal -import fnmatch, errno, threading -import serial, select -import Queue -import imp -import traceback -import select -import shlex -import math -import Ice -import jderobot -import multiprocessing -import time -import sys -import config -import comm - -from MAVProxy.modules.lib import textconsole -from MAVProxy.modules.lib import rline -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import dumpstacks -from MAVProxy.modules.lib import udp -from MAVProxy.modules.lib import tcp - -import easyiceconfig as EasyIce - -from Pose3D import Pose3DI -from CMDVel import CMDVelI -from Extra import ExtraI -from pymavlink import quaternion - -global operation_takeoff -global time_init_operation_takeoff -global time_end_operation_takeoff -global on_air - -# adding all this allows pyinstaller to build a working windows executable -# note that using --hidden-import does not work for these modules -try: - from multiprocessing import freeze_support - from pymavlink import mavwp, mavutil - import matplotlib, HTMLParser - try: - import readline - except ImportError: - import pyreadline as readline -except Exception: - pass - - -if __name__ == '__main__': - freeze_support() - -class MPStatus(object): - '''hold status information about the mavproxy''' - def __init__(self): - self.gps = None - self.msgs = {} - self.msg_count = {} - self.counters = {'MasterIn' : [], 'MasterOut' : 0, 'FGearIn' : 0, 'FGearOut' : 0, 'Slave' : 0} - self.setup_mode = opts.setup - self.mav_error = 0 - self.altitude = 0 - self.last_altitude_announce = 0.0 - self.last_distance_announce = 0.0 - self.exit = False - self.flightmode = 'MAV' - self.last_mode_announce = 0 - self.logdir = None - self.last_heartbeat = 0 - self.last_message = 0 - self.heartbeat_error = False - self.last_apm_msg = None - self.last_apm_msg_time = 0 - self.highest_msec = 0 - self.have_gps_lock = False - self.lost_gps_lock = False - self.last_gps_lock = 0 - self.watch = None - self.last_streamrate1 = -1 - self.last_streamrate2 = -1 - self.last_seq = 0 - self.armed = False - - def show(self, f, pattern=None): - '''write status to status.txt''' - if pattern is None: - f.write('Counters: ') - for c in self.counters: - f.write('%s:%s ' % (c, self.counters[c])) - f.write('\n') - f.write('MAV Errors: %u\n' % self.mav_error) - f.write(str(self.gps)+'\n') - for m in sorted(self.msgs.keys()): - if pattern is not None and not fnmatch.fnmatch(str(m).upper(), pattern.upper()): - continue - f.write("%u: %s\n" % (self.msg_count[m], str(self.msgs[m]))) - - def write(self): - '''write status to status.txt''' - f = open('status.txt', mode='w') - self.show(f) - f.close() - -def say_text(text, priority='important'): - '''text output - default function for say()''' - mpstate.console.writeln(text) - -def say(text, priority='important'): - '''text and/or speech output''' - mpstate.functions.say(text, priority) - -def add_input(cmd, immediate=False): - '''add some command input to be processed''' - if immediate: - process_stdin(cmd) - else: - mpstate.input_queue.put(cmd) - -class MAVFunctions(object): - '''core functions available in modules''' - def __init__(self): - self.process_stdin = add_input - self.param_set = param_set - self.get_mav_param = get_mav_param - self.say = say_text - # input handler can be overridden by a module - self.input_handler = None - -class MPState(object): - '''holds state of mavproxy''' - def __init__(self): - self.udp = udp.UdpServer() - self.tcp = tcp.TcpServer() - self.console = textconsole.SimpleConsole(udp = self.udp, tcp = self.tcp) - self.map = None - self.map_functions = {} - self.vehicle_type = None - self.vehicle_name = None - from MAVProxy.modules.lib.mp_settings import MPSettings, MPSetting - self.settings = MPSettings( - [ MPSetting('link', int, 1, 'Primary Link', tab='Link', range=(0,4), increment=1), - MPSetting('streamrate', int, 4, 'Stream rate link1', range=(-1,20), increment=1), - MPSetting('streamrate2', int, 4, 'Stream rate link2', range=(-1,20), increment=1), - MPSetting('heartbeat', int, 1, 'Heartbeat rate', range=(0,5), increment=1), - MPSetting('mavfwd', bool, True, 'Allow forwarded control'), - MPSetting('mavfwd_rate', bool, False, 'Allow forwarded rate control'), - MPSetting('shownoise', bool, True, 'Show non-MAVLink data'), - MPSetting('baudrate', int, opts.baudrate, 'baudrate for new links', range=(0,10000000), increment=1), - MPSetting('rtscts', bool, opts.rtscts, 'enable flow control'), - MPSetting('select_timeout', float, 0.01, 'select timeout'), - - MPSetting('altreadout', int, 10, 'Altitude Readout', - range=(0,100), increment=1, tab='Announcements'), - MPSetting('distreadout', int, 200, 'Distance Readout', range=(0,10000), increment=1), - - MPSetting('moddebug', int, opts.moddebug, 'Module Debug Level', range=(0,3), increment=1, tab='Debug'), - MPSetting('compdebug', int, 0, 'Computation Debug Mask', range=(0,3), tab='Debug'), - MPSetting('flushlogs', bool, False, 'Flush logs on every packet'), - MPSetting('requireexit', bool, False, 'Require exit command'), - MPSetting('wpupdates', bool, True, 'Announce waypoint updates'), - - MPSetting('basealt', int, 0, 'Base Altitude', range=(0,30000), increment=1, tab='Altitude'), - MPSetting('wpalt', int, 100, 'Default WP Altitude', range=(0,10000), increment=1), - MPSetting('rallyalt', int, 90, 'Default Rally Altitude', range=(0,10000), increment=1), - MPSetting('terrainalt', str, 'Auto', 'Use terrain altitudes', choice=['Auto','True','False']), - MPSetting('rally_breakalt', int, 40, 'Default Rally Break Altitude', range=(0,10000), increment=1), - MPSetting('rally_flags', int, 0, 'Default Rally Flags', range=(0,10000), increment=1), - - MPSetting('source_system', int, 255, 'MAVLink Source system', range=(0,255), increment=1, tab='MAVLink'), - MPSetting('source_component', int, 0, 'MAVLink Source component', range=(0,255), increment=1), - MPSetting('target_system', int, 0, 'MAVLink target system', range=(0,255), increment=1), - MPSetting('target_component', int, 0, 'MAVLink target component', range=(0,255), increment=1), - MPSetting('state_basedir', str, None, 'base directory for logs and aircraft directories') - ]) - - self.completions = { - "script" : ["(FILENAME)"], - "set" : ["(SETTING)"], - "status" : ["(VARIABLE)"], - "module" : ["list", - "load (AVAILMODULES)", - " (LOADEDMODULES)"] - } - - self.status = MPStatus() - - # master mavlink device - self.mav_master = None - - # mavlink outputs - self.mav_outputs = [] - self.sysid_outputs = {} - - # SITL output - self.sitl_output = None - - self.mav_param = mavparm.MAVParmDict() - self.modules = [] - self.public_modules = {} - self.functions = MAVFunctions() - self.select_extra = {} - self.continue_mode = False - self.aliases = {} - import platform - self.system = platform.system() - - def module(self, name): - '''Find a public module (most modules are private)''' - if name in self.public_modules: - return self.public_modules[name] - return None - - def master(self): - '''return the currently chosen mavlink master object''' - if len(self.mav_master) == 0: - return None - if self.settings.link > len(self.mav_master): - self.settings.link = 1 - # try to use one with no link error - if not self.mav_master[self.settings.link-1].linkerror: - return self.mav_master[self.settings.link-1] - for m in self.mav_master: - if not m.linkerror: - return m - return self.mav_master[self.settings.link-1] - - -def get_mav_param(param, default=None): - '''return a EEPROM parameter value''' - return mpstate.mav_param.get(param, default) - -def param_set(name, value, retries=3): - '''set a parameter''' - name = name.upper() - return mpstate.mav_param.mavset(mpstate.master(), name, value, retries=retries) - -def cmd_script(args): - '''run a script''' - if len(args) < 1: - print("usage: script ") - return - - run_script(args[0]) - -def cmd_set(args): - '''control mavproxy options''' - mpstate.settings.command(args) - -def cmd_status(args): - '''show status''' - if len(args) == 0: - mpstate.status.show(sys.stdout, pattern=None) - else: - for pattern in args: - mpstate.status.show(sys.stdout, pattern=pattern) - -def cmd_setup(args): - mpstate.status.setup_mode = True - mpstate.rl.set_prompt("") - - -def cmd_reset(args): - print("Resetting master") - mpstate.master().reset() - -def cmd_watch(args): - '''watch a mavlink packet pattern''' - if len(args) == 0: - mpstate.status.watch = None - return - mpstate.status.watch = args[0] - print("Watching %s" % mpstate.status.watch) - -def load_module(modname, quiet=False): - '''load a module''' - modpaths = ['MAVProxy.modules.mavproxy_%s' % modname, modname] - for (m,pm) in mpstate.modules: - if m.name == modname: - if not quiet: - print("module %s already loaded" % modname) - return False - for modpath in modpaths: - try: - m = import_package(modpath) - imp.reload(m) - module = m.init(mpstate) - if isinstance(module, mp_module.MPModule): - mpstate.modules.append((module, m)) - if not quiet: - print("Loaded module %s" % (modname,)) - return True - else: - ex = "%s.init did not return a MPModule instance" % modname - break - except ImportError as msg: - ex = msg - if mpstate.settings.moddebug > 1: - import traceback - print(traceback.format_exc()) - print("Failed to load module: %s. Use 'set moddebug 3' in the MAVProxy console to enable traceback" % ex) - return False - -def unload_module(modname): - '''unload a module''' - for (m,pm) in mpstate.modules: - if m.name == modname: - if hasattr(m, 'unload'): - m.unload() - mpstate.modules.remove((m,pm)) - print("Unloaded module %s" % modname) - return True - print("Unable to find module %s" % modname) - return False - -def cmd_module(args): - '''module commands''' - usage = "usage: module " - if len(args) < 1: - print(usage) - return - if args[0] == "list": - for (m,pm) in mpstate.modules: - print("%s: %s" % (m.name, m.description)) - elif args[0] == "load": - if len(args) < 2: - print("usage: module load ") - return - load_module(args[1]) - elif args[0] == "reload": - if len(args) < 2: - print("usage: module reload ") - return - modname = args[1] - pmodule = None - for (m,pm) in mpstate.modules: - if m.name == modname: - pmodule = pm - if pmodule is None: - print("Module %s not loaded" % modname) - return - if unload_module(modname): - import zipimport - try: - reload(pmodule) - except ImportError: - clear_zipimport_cache() - reload(pmodule) - if load_module(modname, quiet=True): - print("Reloaded module %s" % modname) - elif args[0] == "unload": - if len(args) < 2: - print("usage: module unload ") - return - modname = os.path.basename(args[1]) - unload_module(modname) - else: - print(usage) - - -def cmd_alias(args): - '''alias commands''' - usage = "usage: alias " - if len(args) < 1 or args[0] == "list": - if len(args) >= 2: - wildcard = args[1].upper() - else: - wildcard = '*' - for a in sorted(mpstate.aliases.keys()): - if fnmatch.fnmatch(a.upper(), wildcard): - print("%-15s : %s" % (a, mpstate.aliases[a])) - elif args[0] == "add": - if len(args) < 3: - print(usage) - return - a = args[1] - mpstate.aliases[a] = ' '.join(args[2:]) - elif args[0] == "remove": - if len(args) != 2: - print(usage) - return - a = args[1] - if a in mpstate.aliases: - mpstate.aliases.pop(a) - else: - print("no alias %s" % a) - else: - print(usage) - return - - -def clear_zipimport_cache(): - """Clear out cached entries from _zip_directory_cache. - See http://www.digi.com/wiki/developer/index.php/Error_messages""" - import sys, zipimport - syspath_backup = list(sys.path) - zipimport._zip_directory_cache.clear() - - # load back items onto sys.path - sys.path = syspath_backup - # add this too: see https://mail.python.org/pipermail/python-list/2005-May/353229.html - sys.path_importer_cache.clear() - -# http://stackoverflow.com/questions/211100/pythons-import-doesnt-work-as-expected -# has info on why this is necessary. - -def import_package(name): - """Given a package name like 'foo.bar.quux', imports the package - and returns the desired module.""" - import zipimport - try: - mod = __import__(name) - except ImportError: - clear_zipimport_cache() - mod = __import__(name) - - components = name.split('.') - for comp in components[1:]: - mod = getattr(mod, comp) - return mod - - -command_map = { - 'script' : (cmd_script, 'run a script of MAVProxy commands'), - 'setup' : (cmd_setup, 'go into setup mode'), - 'reset' : (cmd_reset, 'reopen the connection to the MAVLink master'), - 'status' : (cmd_status, 'show status'), - 'set' : (cmd_set, 'mavproxy settings'), - 'watch' : (cmd_watch, 'watch a MAVLink pattern'), - 'module' : (cmd_module, 'module commands'), - 'alias' : (cmd_alias, 'command aliases') - } - -def process_stdin(line): - '''handle commands from user''' - if line is None: - sys.exit(0) - # allow for modules to override input handling - if mpstate.functions.input_handler is not None: - mpstate.functions.input_handler(line) - return - - line = line.strip() - - if mpstate.status.setup_mode: - # in setup mode we send strings straight to the master - if line == '.': - mpstate.status.setup_mode = False - mpstate.status.flightmode = "MAV" - mpstate.rl.set_prompt("MAV> ") - return - if line != '+++': - line += '\r' - for c in line: - time.sleep(0.01) - mpstate.master().write(c) - return - - if not line: - return - - args = shlex.split(line) - cmd = args[0] - while cmd in mpstate.aliases: - line = mpstate.aliases[cmd] - args = shlex.split(line) + args[1:] - cmd = args[0] - - if cmd == 'help': - k = command_map.keys() - #k.sort() - for cmd in k: - (fn, help) = command_map[cmd] - print("%-15s : %s" % (cmd, help)) - return - if cmd == 'exit' and mpstate.settings.requireexit: - mpstate.status.exit = True - return - ###################################################################################################### - if cmd == 'velocity' and len(args) == 4: - PH_CMDVel = CMDVelI(args[1],args[2],args[3],0,0,0) #1 to avoid indeterminations - - - - - - - ###################################################################################################### - if not cmd in command_map: - for (m,pm) in mpstate.modules: - if hasattr(m, 'unknown_command'): - try: - if m.unknown_command(args): - return - except Exception as e: - print("ERROR in command: %s" % str(e)) - print("Unknown command '%s'" % line) - return - - (fn, help) = command_map[cmd] - try: - fn(args[1:]) - except Exception as e: - print("ERROR in command %s: %s" % (args[1:], str(e))) - if mpstate.settings.moddebug > 1: - traceback.print_exc() - - -def process_master(m): - '''process packets from the MAVLink master''' - try: - s = m.recv(16*1024) - except Exception: - time.sleep(0.1) - return - # prevent a dead serial port from causing the CPU to spin. The user hitting enter will - # cause it to try and reconnect - if len(s) == 0: - time.sleep(0.1) - return - - if (mpstate.settings.compdebug & 1) != 0: - return - - if mpstate.logqueue_raw: - mpstate.logqueue_raw.put(str(s)) - - if mpstate.status.setup_mode: - if mpstate.system == 'Windows': - # strip nsh ansi codes - s = s.replace("\033[K","") - sys.stdout.write(str(s)) - sys.stdout.flush() - return - - if m.first_byte and opts.auto_protocol: - m.auto_mavlink_version(s) - msgs = m.mav.parse_buffer(s) - if msgs: - for msg in msgs: - sysid = msg.get_srcSystem() - if sysid in mpstate.sysid_outputs: - # the message has been handled by a specialised handler for this system - continue - if getattr(m, '_timestamp', None) is None: - m.post_message(msg) - if msg.get_type() == "BAD_DATA": - if opts.show_errors: - mpstate.console.writeln("MAV error: %s" % msg) - mpstate.status.mav_error += 1 - - - -def process_mavlink(slave): - '''process packets from MAVLink slaves, forwarding to the master''' - try: - buf = slave.recv() - except socket.error: - return - try: - if slave.first_byte and opts.auto_protocol: - slave.auto_mavlink_version(buf) - msgs = slave.mav.parse_buffer(buf) - except mavutil.mavlink.MAVError as e: - mpstate.console.error("Bad MAVLink slave message from %s: %s" % (slave.address, e.message)) - return - if msgs is None: - return - if mpstate.settings.mavfwd and not mpstate.status.setup_mode: - for m in msgs: - if mpstate.status.watch is not None: - if fnmatch.fnmatch(m.get_type().upper(), mpstate.status.watch.upper()): - mpstate.console.writeln('> '+ str(m)) - mpstate.master().write(m.get_msgbuf()) - mpstate.status.counters['Slave'] += 1 - - -def mkdir_p(dir): - '''like mkdir -p''' - if not dir: - return - if dir.endswith("/"): - mkdir_p(dir[:-1]) - return - if os.path.isdir(dir): - return - mkdir_p(os.path.dirname(dir)) - os.mkdir(dir) - -def log_writer(): - '''log writing thread''' - while True: - mpstate.logfile_raw.write(mpstate.logqueue_raw.get()) - while not mpstate.logqueue_raw.empty(): - mpstate.logfile_raw.write(mpstate.logqueue_raw.get()) - while not mpstate.logqueue.empty(): - mpstate.logfile.write(mpstate.logqueue.get()) - if mpstate.settings.flushlogs: - mpstate.logfile.flush() - mpstate.logfile_raw.flush() - -# If state_basedir is NOT set then paths for logs and aircraft -# directories are relative to mavproxy's cwd -def log_paths(): - '''Returns tuple (logdir, telemetry_log_filepath, raw_telemetry_log_filepath)''' - if opts.aircraft is not None: - if opts.mission is not None: - print(opts.mission) - dirname = "%s/logs/%s/Mission%s" % (opts.aircraft, time.strftime("%Y-%m-%d"), opts.mission) - else: - dirname = "%s/logs/%s" % (opts.aircraft, time.strftime("%Y-%m-%d")) - # dirname is currently relative. Possibly add state_basedir: - if mpstate.settings.state_basedir is not None: - dirname = os.path.join(mpstate.settings.state_basedir,dirname) - mkdir_p(dirname) - highest = None - for i in range(1, 10000): - fdir = os.path.join(dirname, 'flight%u' % i) - if not os.path.exists(fdir): - break - highest = fdir - if mpstate.continue_mode and highest is not None: - fdir = highest - elif os.path.exists(fdir): - print("Flight logs full") - sys.exit(1) - logname = 'flight.tlog' - logdir = fdir - else: - logname = os.path.basename(opts.logfile) - dir_path = os.path.dirname(opts.logfile) - if not os.path.isabs(dir_path) and mpstate.settings.state_basedir is not None: - dir_path = os.path.join(mpstate.settings.state_basedir,dir_path) - logdir = dir_path - - mkdir_p(logdir) - return (logdir, - os.path.join(logdir, logname), - os.path.join(logdir, logname + '.raw')) - - -def open_telemetry_logs(logpath_telem, logpath_telem_raw): - '''open log files''' - if opts.append_log or opts.continue_mode: - mode = 'a' - else: - mode = 'w' - mpstate.logfile = open(logpath_telem, mode=mode) - mpstate.logfile_raw = open(logpath_telem_raw, mode=mode) - print("Log Directory: %s" % mpstate.status.logdir) - print("Telemetry log: %s" % logpath_telem) - - # use a separate thread for writing to the logfile to prevent - # delays during disk writes (important as delays can be long if camera - # app is running) - t = threading.Thread(target=log_writer, name='log_writer') - t.daemon = True - t.start() - -def set_stream_rates(): - '''set mavlink stream rates''' - if (not msg_period.trigger() and - mpstate.status.last_streamrate1 == mpstate.settings.streamrate and - mpstate.status.last_streamrate2 == mpstate.settings.streamrate2): - return - mpstate.status.last_streamrate1 = mpstate.settings.streamrate - mpstate.status.last_streamrate2 = mpstate.settings.streamrate2 - for master in mpstate.mav_master: - if master.linknum == 0: - rate = mpstate.settings.streamrate - else: - rate = mpstate.settings.streamrate2 - if rate != -1: - master.mav.request_data_stream_send(mpstate.settings.target_system, mpstate.settings.target_component, - mavutil.mavlink.MAV_DATA_STREAM_ALL, - rate, 1) - -def check_link_status(): - '''check status of master links''' - tnow = time.time() - if mpstate.status.last_message != 0 and tnow > mpstate.status.last_message + 5: - say("no link") - mpstate.status.heartbeat_error = True - for master in mpstate.mav_master: - if not master.linkerror and (tnow > master.last_message + 5 or master.portdead): - say("link %u down" % (master.linknum+1)) - master.linkerror = True - -def send_heartbeat(master): - if master.mavlink10(): - master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS, mavutil.mavlink.MAV_AUTOPILOT_INVALID, - 0, 0, 0) - else: - MAV_GROUND = 5 - MAV_AUTOPILOT_NONE = 4 - master.mav.heartbeat_send(MAV_GROUND, MAV_AUTOPILOT_NONE) - -def periodic_tasks(): - '''run periodic checks''' - if mpstate.status.setup_mode: - return - - if (mpstate.settings.compdebug & 2) != 0: - return - - if mpstate.settings.heartbeat != 0: - heartbeat_period.frequency = mpstate.settings.heartbeat - - if heartbeat_period.trigger() and mpstate.settings.heartbeat != 0: - mpstate.status.counters['MasterOut'] += 1 - for master in mpstate.mav_master: - send_heartbeat(master) - - if heartbeat_check_period.trigger(): - check_link_status() - - set_stream_rates() - - # call optional module idle tasks. These are called at several hundred Hz - for (m,pm) in mpstate.modules: - if hasattr(m, 'idle_task'): - try: - m.idle_task() - except Exception as msg: - if mpstate.settings.moddebug == 1: - print(msg) - elif mpstate.settings.moddebug > 1: - exc_type, exc_value, exc_traceback = sys.exc_info() - traceback.print_exception(exc_type, exc_value, exc_traceback, - limit=2, file=sys.stdout) - - # also see if the module should be unloaded: - if m.needs_unloading: - unload_module(m.name) - -def main_loop(): - - if not mpstate.status.setup_mode and not opts.nowait: - for master in mpstate.mav_master: - send_heartbeat(master) - if master.linknum == 0: - print("Waiting for heartbeat from %s" % master.address) - master.wait_heartbeat() - set_stream_rates() - - while True: - if mpstate is None or mpstate.status.exit: - return - - global on_air - global operation_takeoff - global time_init_operation_takeoff - global time_end_operation_takeoff - - time_now = int(round(time.time() * 1000)) - - if operation_takeoff and time_now > time_end_operation_takeoff: - print("Taking off") - time_init_operation_takeoff = int(round(time.time() * 1000)) - time_end_operation_takeoff = time_init_operation_takeoff + 5000 - operation_takeoff = False - on_air = True - mpstate.input_queue.put("takeoff 1") - - if on_air and time_now > time_end_operation_takeoff: - mpstate.input_queue.put("mode guided") - print("Mode guided on") - on_air = False - - while not mpstate.input_queue.empty(): - line = mpstate.input_queue.get() - mpstate.input_count += 1 - cmds = line.split(';') - if len(cmds) == 1 and cmds[0] == "": - mpstate.empty_input_count += 1 - for c in cmds: - #print(c) - process_stdin(c) - - for master in mpstate.mav_master: - if master.fd is None: - if master.port.inWaiting() > 0: - process_master(master) - - periodic_tasks() - - rin = [] - for master in mpstate.mav_master: - if master.fd is not None and not master.portdead: - rin.append(master.fd) - for m in mpstate.mav_outputs: - rin.append(m.fd) - for sysid in mpstate.sysid_outputs: - m = mpstate.sysid_outputs[sysid] - rin.append(m.fd) - if rin == []: - time.sleep(0.0001) - continue - - for fd in mpstate.select_extra: - rin.append(fd) - try: - (rin, win, xin) = select.select(rin, [], [], mpstate.settings.select_timeout) - except select.error: - continue - - if mpstate is None: - return - - for fd in rin: - if mpstate is None: - return - for master in mpstate.mav_master: - if fd == master.fd: - process_master(master) - if mpstate is None: - return - continue - for m in mpstate.mav_outputs: - if fd == m.fd: - process_mavlink(m) - if mpstate is None: - return - continue - - for sysid in mpstate.sysid_outputs: - m = mpstate.sysid_outputs[sysid] - if fd == m.fd: - process_mavlink(m) - if mpstate is None: - return - continue - - # this allow modules to register their own file descriptors - # for the main select loop - if fd in mpstate.select_extra: - try: - # call the registered read function - (fn, args) = mpstate.select_extra[fd] - fn(args) - except Exception as msg: - if mpstate.settings.moddebug == 1: - print(msg) - # on an exception, remove it from the select list - mpstate.select_extra.pop(fd) - - ########################## Jorge Cano CODE ########################## - - Rollvalue = mpstate.status.msgs['ATTITUDE'].roll #rad - Pitchvalue = mpstate.status.msgs['ATTITUDE'].pitch #rad - Yawvalue = mpstate.status.msgs['ATTITUDE'].yaw #rad - - # ESTIMATED: fused GPS and accelerometers - PoseLatLonHei = {} - PoseLatLonHei['lat'] = math.radians((mpstate.status.msgs['GLOBAL_POSITION_INT'].lat)/1E7) #rad - PoseLatLonHei['lon'] = math.radians((mpstate.status.msgs['GLOBAL_POSITION_INT'].lon)/1E7) #rad - PoseLatLonHei['hei'] = (mpstate.status.msgs['GLOBAL_POSITION_INT'].relative_alt)/1000 #meters - - PH_quat = quaternion.Quaternion([Rollvalue, Pitchvalue, Yawvalue]) - PH_xyz = global2cartesian(PoseLatLonHei) - - #print (PH_quat) - #print (PH_xyz) - - data = jderobot.Pose3DData() - data.x = PH_xyz['x'] - data.y = PH_xyz['y'] - data.z = PH_xyz['z'] - data.h = 1 - data.q0 = PH_quat.__getitem__(0) - data.q1 = PH_quat.__getitem__(1) - data.q2 = PH_quat.__getitem__(2) - data.q3 = PH_quat.__getitem__(3) - #print(data) - PH_Pose3D.setPose3DData(data) - - ##################################################################### - -def input_loop(): - '''wait for user input''' - global operation_takeoff - global time_init_operation_takeoff - global time_end_operation_takeoff - - while mpstate.status.exit != True: - try: - if mpstate.status.exit != True: - if mpstate.udp.bound(): - line = mpstate.udp.readln() - mpstate.udp.writeln(line) - elif mpstate.tcp.connected(): - line = mpstate.tcp.readln() - mpstate.tcp.writeln(line) - else: - line = input(mpstate.rl.prompt) - if line == 'takeoff': - print("Detecto takeoff") - operation_takeoff=True - time_init_operation_takeoff = int(round(time.time() * 1000)) - time_end_operation_takeoff = time_init_operation_takeoff + 5000 - print(time_end_operation_takeoff) - mpstate.input_queue.put("arm throttle") - return - if line == 'land': - print("Orden de aterrizar") - on_air = False - except EOFError: - mpstate.status.exit = True - sys.exit(1) - mpstate.input_queue.put(line) - -def run_script(scriptfile): - '''run a script file''' - try: - f = open(scriptfile, mode='r') - except Exception: - return - mpstate.console.writeln("Running script %s" % scriptfile) - for line in f: - line = line.strip() - if line == "" or line.startswith('#'): - continue - if line.startswith('@'): - line = line[1:] - else: - mpstate.console.writeln("-> %s" % line) - process_stdin(line) - f.close() - -########################## Jorge Cano CODE ########################## - -def openPose3DChannel(Pose3D,cfg): - status = 0 - ic = None - Pose2Tx = Pose3D #Pose3D.getPose3DData() - try: - id = Ice.InitializationData() - ic = Ice.initialize(None, id) - - endpoint = cfg.getProperty("Pose3D.Proxy") - name = cfg.getProperty("Pose3D.Name") - - adapter = ic.createObjectAdapterWithEndpoints("Pose3D", endpoint) - - object = Pose2Tx - adapter.add(object, ic.stringToIdentity("Pose3D")) - adapter.activate() - ic.waitForShutdown() - except: - traceback.print_exc() - status = 1 - - if ic: - # Clean up - try: - ic.destroy() - except: - traceback.print_exc() - status = 1 - - sys.exit(status) - -def openPose3DChannelWP(Pose3D,cfg): - - status = 0 - ic = None - Pose2Rx = Pose3D #Pose3D.getPose3DData() - try: - id = Ice.InitializationData() - ic = Ice.initialize(None, id) - - endpoint = cfg.getProperty("Pose3D.Proxy") - name = cfg.getProperty("Pose3D.Name") - - adapter = ic.createObjectAdapterWithEndpoints("Pose3DAdapter", endpoint) - - object = Pose2Rx - adapter.add(object, ic.stringToIdentity("Pose3DAdapter")) - adapter.activate() - ic.waitForShutdown() - except: - traceback.print_exc() - status = 1 - - if ic: - # Clean up - try: - ic.destroy() - except: - traceback.print_exc() - status = 1 - - sys.exit(status) - -def openCMDVelChannel(CMDVel,cfg): - status = 0 - ic = None - CMDVel2Rx = CMDVel #CMDVel.getCMDVelData() - try: - id = Ice.InitializationData() - ic = Ice.initialize(None, id) - - endpoint = cfg.getProperty("CMDVel.Proxy") - name = cfg.getProperty("CMDVel.Name") - - adapter = ic.createObjectAdapterWithEndpoints("CMDVel", endpoint) - - object = CMDVel2Rx - adapter.add(object, ic.stringToIdentity("CMDVel")) - adapter.activate() - ic.waitForShutdown() - except: - traceback.print_exc() - status = 1 - - if ic: - # Clean up - try: - ic.destroy() - except: - traceback.print_exc() - status = 1 - - sys.exit(status) - -def openExtraChannel(Extra,cfg): - - status = 0 - ic = None - Extra2Tx = Extra - try: - id = Ice.InitializationData() - ic = Ice.initialize(None, id) - - endpoint = cfg.getProperty("Extra.Proxy") - name = cfg.getProperty("Extra.Name") - - adapter = ic.createObjectAdapterWithEndpoints("Extra", endpoint) - - object = Extra2Tx - adapter.add(object, ic.stringToIdentity("Extra")) - adapter.activate() - ic.waitForShutdown() - except: - traceback.print_exc() - status = 1 - - if ic: - # Clean up - try: - ic.destroy() - except: - traceback.print_exc() - status = 1 - - sys.exit(status) - -class NavdataI(jderobot.Navdata): - def __init__(self): - pass - - def getNavdata(self, current=None): - data = jderobot.NavdataData() - return data - -def openNavdataChannel(cfg): - - status = 0 - ic = None - Navdata2Tx = NavdataI() - - try: - - id = Ice.InitializationData() - ic = Ice.initialize(None, id) - - endpoint = cfg.getProperty("Navdata.Proxy") - name = cfg.getProperty("Navdata.Name") - - adapter = ic.createObjectAdapterWithEndpoints("Navdata", endpoint) - - object = Navdata2Tx - adapter.add(object, ic.stringToIdentity("Navdata")) - adapter.activate() - ic.waitForShutdown() - except: - traceback.print_exc() - status = 1 - - if ic: - # Clean up - try: - ic.destroy() - except: - traceback.print_exc() - status = 1 - - sys.exit(status) - -def sendCMDVel2Vehicle(CMDVel,Pose3D): - absolute = 0 - relative = 1 - - while True: - - CMDVel2send = CMDVel.getCMDVelData() - Pose3D2send = Pose3D.getPose3DData() - #print(Pose3D2send) - NEDvel = body2NED(CMDVel2send, Pose3D2send) # [x,y,z] - linearXstring = str(NEDvel[0]) - linearYstring = str(NEDvel[1]) - linearZstring = str(NEDvel[2]) - - #CMDVel.angularZ -1 y 1 - - angular = CMDVel.angularZ - - if angular >= 0: - direction = str(1) - else: - angular = -angular - direction = str(-1) - - angularZstring = str(angular*30) - - movement = str(relative) - - velocitystring = 'velocity '+ linearXstring + ' ' + linearYstring + ' ' + linearZstring - angularString = 'setyaw ' + angularZstring + ' ' + direction + ' ' + movement - - process_stdin(velocitystring) # SET_POSITION_TARGET_LOCAL_NED - process_stdin(angularString) - -def sendWayPoint2Vehicle(Pose3D): - - while True: - time.sleep(1) - wayPointPoseXYZ = Pose3D.getPose3DData() - wayPointXYZ = {} - wayPointXYZ['x'] = wayPointPoseXYZ.x - wayPointXYZ['y'] = wayPointPoseXYZ.y - wayPointXYZ['z'] = wayPointPoseXYZ.z - wayPointLatLonHei = cartesian2global(wayPointXYZ) - - latittude = str(wayPointLatLonHei['lat']) - longitude = str(wayPointLatLonHei['lon']) - altittude = str(int(wayPointLatLonHei['hei'])) - - WPstring = 'guided ' + latittude + ' ' + longitude + ' ' + altittude - process_stdin(WPstring) - - #print wayPoint - -def landDecision(PH_Extra): - - global operation_takeoff - global time_init_operation_takeoff - global time_end_operation_takeoff - while True: - if PH_Extra.landDecision: - print("Landing") - process_stdin("land") - PH_Extra.setLand(False) - if PH_Extra.takeOffDecision: - print("Takeoff") - operation_takeoff=True - print(time_end_operation_takeoff) - time_init_operation_takeoff = int(round(time.time() * 1000)) - time_end_operation_takeoff = time_init_operation_takeoff + 5000 - print("Arming proppellers") - mpstate.input_queue.put("arm throttle") - PH_Extra.setTakeOff(False) - -def global2cartesian(poseLatLonHei): - - wgs84_radius = 6378137 #meters - wgs84_flattening = 1 - 1 / 298.257223563 - eartPerim = wgs84_radius * 2 * math.pi - - earthRadiusLon = wgs84_radius * math.cos(poseLatLonHei['lat'])/wgs84_flattening - eartPerimLon = earthRadiusLon * 2 * math.pi - - poseXYZ = {} - poseXYZ['x'] = poseLatLonHei['lon'] * eartPerimLon / (2*math.pi) - poseXYZ['y'] = poseLatLonHei['lat'] * eartPerim / (2*math.pi) - poseXYZ['z'] = poseLatLonHei['hei'] - - return poseXYZ - -def cartesian2global(poseXYZ): - - wgs84_radius = 6378137 # meters - wgs84_flattening = 1 - 1 / 298.257223563 - eartPerim = wgs84_radius * 2 * math.pi - referenceLat = 40.1912 ##################### Suposed to be Vehicle lattitude - - radLat = math.radians(referenceLat) - earthRadiusLon = wgs84_radius * math.cos(radLat)/wgs84_flattening - eartPerimLon = earthRadiusLon * 2 * math.pi - - poseLatLonHei = {} - poseLatLonHei['lat'] = poseXYZ['y'] * 360 / eartPerim - poseLatLonHei['lon'] = poseXYZ['x'] * 360 / eartPerimLon - poseLatLonHei['hei'] = poseXYZ['z'] - - return poseLatLonHei - -def body2NED(CMDVel, Pose3D): - - - #q1 = [0, CMDVel.linearX, CMDVel.linearY, CMDVel.linearZ] - #q2 = [Pose3D.q0, Pose3D.q1, Pose3D.q2, Pose3D.q3] - - #q1 = qNormal(q1) - #q2 = qNormal(q2) - - ##rotation = q2*q1*q2' - - #q2inverse = qInverse(q2) - #qtempotal = qMultiply(q1,q2inverse) - #q = qMultiply(q2,qtempotal) - - #rotatedVector = q[1:len(q)] #obtain [q1,q2,q3] - - #return rotatedVector - - q0 = Pose3D.q0 - q1 = Pose3D.q1 - q2 = Pose3D.q2 - q3 = Pose3D.q3 - - # obtain eulers from quaternion TO BE IMPROVED!!!!!!!!!!! - - #roll = 1/ math.tan((2*(q1*q2+q0*q3))/(q3*q3+q2*q2-q1*q1-q0*q0)) - #pitch = 1/math.sin(-2*(q0*q2-q1*q3)) - #yaw = 1/ math.tan((2*(q0*q1+q3*q2))/(q3*q3-q2*q2-q1*q1+q0*q0)) - - # Body velocity (x,y,z) - - bvx = CMDVel.linearX - bvy = CMDVel.linearY - bvz = CMDVel.linearZ - - NEDvel = [0,0,0] #[x,y,z] - - #NEDvel[0] = bvx * math.cos(pitch)*math.cos(yaw) + bvy * (math.sin(roll)*math.sin(pitch)*math.cos(yaw) - math.cos(roll)*math.sin(yaw)) + bvz * (math.cos(roll)*math.sin(pitch)*math.cos(yaw) + math.sin(roll)*math.sin(yaw)) - #NEDvel[1] = bvx * math.cos(pitch)*math.sin(yaw) + bvy * (math.sin(roll)*math.sin(pitch)*math.sin(yaw) + math.cos(roll)*math.cos(yaw)) + bvz * (math.cos(roll)*math.sin(pitch)*math.sin(yaw) - math.sin(roll)*math.cos(yaw)) - #NEDvel[2] = -bvx * math.sin(pitch) + bvy * (math.sin(roll)*math.cos(pitch)) + bvz * (math.cos(roll)*math.cos(pitch)) - - NEDvel[0]=bvx - NEDvel[1]=bvy - NEDvel[2]=bvz - - return NEDvel - -def qMultiply (q1,q2): - - q1 = qNormal(q1) - q2 = qNormal(q2) - - # quaternion1 - w1 = q1[0] - x1 = q1[1] - y1 = q1[2] - z1 = q1[3] - - #quaternion2 - w2 = q2[0] - x2 = q2[1] - y2 = q2[2] - z2 = q2[3] - - w = w1*w2 - x1*x2 - y1*y2 - z1*z2 - x = w1*x2 + x1*w2 + y1*z2 - z1*y2 - y = w1*y2 + y1*w2 + z1*x2 - x1*z2 - z = w1*z2 + z1*w2 + x1*y2 - y1*x2 - - q = [w,x,y,z] - - q = qNormal(q) - return q - -def qNormal(q1): - - qmodule = math.sqrt(q1[0]*q1[0] + q1[1]*q1[1] + q1[2]*q1[2] + q1[3]*q1[3]) - q = [0,0,0,0] - - if (qmodule == 0): - qmodule = 0.000000000001 - - q[0] = q1[0] / qmodule - q[1] = q1[1] / qmodule - q[2] = q1[2] / qmodule - q[3] = q1[3] / qmodule - - return q - -def qConjugate(q1): - - q1 = qNormal(q1) - q = [0,0,0,0] - q[0] = q1[0] - q[1] = -q1[1] - q[2] = -q1[2] - q[3] = -q1[3] - - q = qNormal(q) - return q - -def qInverse(q1): - - q1 = qNormal(q1) - qconjugate = qConjugate(q1) - qmodule = math.sqrt(q1[0] * q1[0] + q1[1] * q1[1] + q1[2] * q1[2] + q1[3] * q1[3]) - - if (qmodule == 0): - qmodule = 0.000000000001 - - q = [0,0,0,0] - q[0] = qconjugate[0] / qmodule - q[1] = qconjugate[1] / qmodule - q[2] = qconjugate[2] / qmodule - q[3] = qconjugate[3] / qmodule - - q = qNormal(q) - return q - -##################################################################### - -if __name__ == '__main__': - from optparse import OptionParser - parser = OptionParser("mavproxy.py [options]") - - parser.add_option("--master", dest="master", action='append', - metavar="DEVICE[,BAUD]", help="MAVLink master port and optional baud rate", - default=[]) - parser.add_option("--udp", dest="udp", action='append', help="run udp server") - parser.add_option("--tcp", dest="tcp", action='append', help="run tcp server") - parser.add_option("--out", dest="output", action='append', - metavar="DEVICE[,BAUD]", help="MAVLink output port and optional baud rate", - default=[]) - parser.add_option("--baudrate", dest="baudrate", type='int', - help="default serial baud rate", default=57600) - parser.add_option("--sitl", dest="sitl", default=None, help="SITL output port") - parser.add_option("--streamrate",dest="streamrate", default=4, type='int', - help="MAVLink stream rate") - parser.add_option("--source-system", dest='SOURCE_SYSTEM', type='int', - default=255, help='MAVLink source system for this GCS') - parser.add_option("--source-component", dest='SOURCE_COMPONENT', type='int', - default=0, help='MAVLink source component for this GCS') - parser.add_option("--target-system", dest='TARGET_SYSTEM', type='int', - default=0, help='MAVLink target master system') - parser.add_option("--target-component", dest='TARGET_COMPONENT', type='int', - default=0, help='MAVLink target master component') - parser.add_option("--logfile", dest="logfile", help="MAVLink master logfile", - default='mav.tlog') - parser.add_option("-a", "--append-log", dest="append_log", help="Append to log files", - action='store_true', default=False) - parser.add_option("--quadcopter", dest="quadcopter", help="use quadcopter controls", - action='store_true', default=False) - parser.add_option("--setup", dest="setup", help="start in setup mode", - action='store_true', default=False) - parser.add_option("--nodtr", dest="nodtr", help="disable DTR drop on close", - action='store_true', default=False) - parser.add_option("--show-errors", dest="show_errors", help="show MAVLink error packets", - action='store_true', default=False) - parser.add_option("--speech", dest="speech", help="use text to speach", - action='store_true', default=False) - parser.add_option("--aircraft", dest="aircraft", help="aircraft name", default=None) - parser.add_option("--cmd", dest="cmd", help="initial commands", default=None, action='append') - parser.add_option("--console", action='store_true', help="use GUI console") - parser.add_option("--map", action='store_true', help="load map module") - parser.add_option( - '--load-module', - action='append', - default=[], - help='Load the specified module. Can be used multiple times, or with a comma separated list') - parser.add_option("--mav09", action='store_true', default=False, help="Use MAVLink protocol 0.9") - parser.add_option("--auto-protocol", action='store_true', default=False, help="Auto detect MAVLink protocol version") - parser.add_option("--nowait", action='store_true', default=False, help="don't wait for HEARTBEAT on startup") - parser.add_option("-c", "--continue", dest='continue_mode', action='store_true', default=False, help="continue logs") - parser.add_option("--dialect", default="ardupilotmega", help="MAVLink dialect") - parser.add_option("--rtscts", action='store_true', help="enable hardware RTS/CTS flow control") - parser.add_option("--moddebug", type=int, help="module debug level", default=0) - parser.add_option("--mission", dest="mission", help="mission name", default=None) - parser.add_option("--daemon", action='store_true', help="run in daemon mode, do not start interactive shell") - parser.add_option("--profile", action='store_true', help="run the Yappi python profiler") - parser.add_option("--state-basedir", default=None, help="base directory for logs and aircraft directories") - parser.add_option("--version", action='store_true', help="version information") - parser.add_option("--default-modules", default="log,wp,rally,fence,param,relay,tuneopt,arm,mode,calibration,rc,auxopt,misc,cmdlong,battery,terrain,output", help='default module list') - - (opts, args) = parser.parse_args() - - # warn people about ModemManager which interferes badly with APM and Pixhawk - if os.path.exists("/usr/sbin/ModemManager"): - print("WARNING: You should uninstall ModemManager as it conflicts with APM and Pixhawk") - - if opts.mav09: - os.environ['MAVLINK09'] = '1' - from pymavlink import mavutil, mavparm - mavutil.set_dialect(opts.dialect) - - #version information - if opts.version: - import pkg_resources - version = pkg_resources.require("mavproxy")[0].version - print("MAVProxy is a modular ground station using the mavlink protocol") - print("MAVProxy Version: " + version) - sys.exit(1) - - # global mavproxy state - mpstate = MPState() - mpstate.status.exit = False - mpstate.command_map = command_map - mpstate.continue_mode = opts.continue_mode - # queues for logging - mpstate.logqueue = Queue.Queue() - mpstate.logqueue_raw = Queue.Queue() - - if opts.udp: - mpstate.udp.connect(opts.udp[0].split(":")[0], int(opts.udp[0].split(":")[1])) - print("Connected (UDP) to " + mpstate.udp.address + ":" + str(mpstate.udp.port)) - - if opts.tcp: - mpstate.tcp.connect(opts.tcp[0].split(":")[0], int(opts.tcp[0].split(":")[1])) - print("Client (TCP) connected at " + mpstate.tcp.client[0] + ":" + str(mpstate.tcp.port)) - - if opts.speech: - # start the speech-dispatcher early, so it doesn't inherit any ports from - # modules/mavutil - load_module('speech') - - if not opts.master: - serial_list = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*']) - print('Auto-detected serial ports are:') - for port in serial_list: - print("%s" % port) - - # container for status information - mpstate.settings.target_system = opts.TARGET_SYSTEM - mpstate.settings.target_component = opts.TARGET_COMPONENT - - mpstate.mav_master = [] - - mpstate.rl = rline.rline("MAV> ", mpstate) - - def quit_handler(signum = None, frame = None): - #print 'Signal handler called with signal', signum - if mpstate.status.exit: - print('Clean shutdown impossible, forcing an exit') - sys.exit(0) - else: - mpstate.status.exit = True - - # Listen for kill signals to cleanly shutdown modules - fatalsignals = [signal.SIGTERM] - try: - fatalsignals.append(signal.SIGHUP) - fatalsignals.append(signal.SIGQUIT) - except Exception: - pass - if opts.daemon: # SIGINT breaks readline parsing - if we are interactive, just let things die - fatalsignals.append(signal.SIGINT) - - for sig in fatalsignals: - signal.signal(sig, quit_handler) - - load_module('link', quiet=True) - - mpstate.settings.source_system = opts.SOURCE_SYSTEM - mpstate.settings.source_component = opts.SOURCE_COMPONENT - - # open master link - for mdev in opts.master: - if not mpstate.module('link').link_add(mdev): - sys.exit(1) - - if not opts.master and len(serial_list) == 1: - print("Connecting to %s" % serial_list[0]) - mpstate.module('link').link_add(serial_list[0].device) - elif not opts.master: - wifi_device = '0.0.0.0:14550' - mpstate.module('link').link_add(wifi_device) - - - # open any mavlink output ports - for port in opts.output: - mpstate.mav_outputs.append(mavutil.mavlink_connection(port, baud=int(opts.baudrate), input=False)) - - if opts.sitl: - mpstate.sitl_output = mavutil.mavudp(opts.sitl, input=False) - - mpstate.settings.streamrate = opts.streamrate - mpstate.settings.streamrate2 = opts.streamrate - - if opts.state_basedir is not None: - mpstate.settings.state_basedir = opts.state_basedir - - msg_period = mavutil.periodic_event(1.0/15) - heartbeat_period = mavutil.periodic_event(1) - heartbeat_check_period = mavutil.periodic_event(0.33) - - mpstate.input_queue = Queue.Queue() - mpstate.input_count = 0 - mpstate.empty_input_count = 0 - if opts.setup: - mpstate.rl.set_prompt("") - - # call this early so that logdir is setup based on --aircraft - (mpstate.status.logdir, logpath_telem, logpath_telem_raw) = log_paths() - - if not opts.setup: - # some core functionality is in modules - standard_modules = opts.default_modules.split(',') - for m in standard_modules: - load_module(m, quiet=True) - - if opts.console: - process_stdin('module load console') - - if opts.map: - process_stdin('module load map') - - for module in opts.load_module: - modlist = module.split(',') - for mod in modlist: - process_stdin('module load %s' % mod) - - if 'HOME' in os.environ and not opts.setup: - start_script = os.path.join(os.environ['HOME'], ".mavinit.scr") - if os.path.exists(start_script): - run_script(start_script) - if 'LOCALAPPDATA' in os.environ and not opts.setup: - start_script = os.path.join(os.environ['LOCALAPPDATA'], "MAVProxy", "mavinit.scr") - if os.path.exists(start_script): - run_script(start_script) - - if opts.aircraft is not None: - start_script = os.path.join(opts.aircraft, "mavinit.scr") - if os.path.exists(start_script): - run_script(start_script) - else: - print("no script %s" % start_script) - - if opts.cmd is not None: - for cstr in opts.cmd: - cmds = cstr.split(';') - for c in cmds: - process_stdin(c) - - if opts.profile: - import yappi # We do the import here so that we won't barf if run normally and yappi not available - yappi.start() - - # log all packets from the master, for later replay - open_telemetry_logs(logpath_telem, logpath_telem_raw) - - ########################## Jorge Cano CODE ########################## - - PH_Pose3D = Pose3DI(0,0,0,0,0,0,0,0) #1 to avoid indeterminations - PH_CMDVel = CMDVelI(0,0,0,0,0,0) #1 to avoid indeterminations - PH_Extra = ExtraI() - WP_Pose3D = Pose3DI(0,0,0,0,0,0,0,0) - - ##################################################################### - global operation_takeoff - global on_air - global time_init_operation_takeoff - global time_end_operation_takeoff - - operation_takeoff = False - on_air = False - time_init_operation_takeoff = 10000000000000000000 - time_end_operation_takeoff = 10000000000000000000 - print("Variables a false") - # run main loop as a thread - - mpstate.status.thread = threading.Thread(target=main_loop, name='main_loop') - mpstate.status.thread.daemon = True - mpstate.status.thread.start() - - ########################## Jorge Cano CODE ########################## - - cfg = config.load(sys.argv[1]) - #Open an ICE TX communication and leave it open in a parallel threat - - PoseTheading = threading.Thread(target=openPose3DChannel, args=(PH_Pose3D,cfg,), name='Pose_Theading') - PoseTheading.daemon = True - PoseTheading.start() - - # Open an ICE RX communication and leave it open in a parallel threat - - CMDVelTheading = threading.Thread(target=openCMDVelChannel, args=(PH_CMDVel,cfg,), name='CMDVel_Theading') - CMDVelTheading.daemon = True - CMDVelTheading.start() - - # Open an ICE TX communication and leave it open in a parallel threat - - CMDVelTheading = threading.Thread(target=openExtraChannel, args=(PH_Extra,cfg,), name='Extra_Theading') - CMDVelTheading.daemon = True - CMDVelTheading.start() - - # Open an ICE channel empty - - CMDVelTheading = threading.Thread(target=openNavdataChannel, args=(cfg,), name='Navdata_Theading') - CMDVelTheading.daemon = True - CMDVelTheading.start() - - # # Open an MAVLink TX communication and leave it open in a parallel threat - # - PoseTheading = threading.Thread(target=sendCMDVel2Vehicle, args=(PH_CMDVel,PH_Pose3D,), name='TxCMDVel_Theading') - PoseTheading.daemon = True - PoseTheading.start() - - - # Open an ICE TX communication and leave it open in a parallel threat - - #PoseTheading = threading.Thread(target=openPose3DChannelWP, args=(WP_Pose3D,cfg,), name='WayPoint_Theading') - #PoseTheading.daemon = True - #PoseTheading.start() - - ## Open an MAVLink TX communication and leave it open in a parallel threat - - #PoseTheading = threading.Thread(target=sendWayPoint2Vehicle, args=(WP_Pose3D,), name='WayPoint2Vehicle_Theading') - #PoseTheading.daemon = True - #PoseTheading.start() - - # Open an MAVLink TX communication and leave it open in a parallel threat - - PoseTheading = threading.Thread(target=landDecision, args=(PH_Extra,), name='LandDecision2Vehicle_Theading') - PoseTheading.daemon = True - PoseTheading.start() - - - - #while True: - # time.sleep(1) - # Posejarl = PH_Pose3D.getPose3DData() - # print (Posejarl) - - ##################################################################### - - # use main program for input. This ensures the terminal cleans - # up on exit - while (mpstate.status.exit != True): - try: - if opts.daemon: - time.sleep(0.1) - else: - input_loop() - except KeyboardInterrupt: - if mpstate.settings.requireexit: - print("Interrupt caught. Use 'exit' to quit MAVProxy.") - - #Just lost the map and console, get them back: - for (m,pm) in mpstate.modules: - if m.name in ["map", "console"]: - if hasattr(m, 'unload'): - try: - m.unload() - except Exception: - pass - reload(m) - m.init(mpstate) - - else: - mpstate.status.exit = True - sys.exit(1) - - if opts.profile: - yappi.get_func_stats().print_all() - yappi.get_thread_stats().print_all() - - #this loop executes after leaving the above loop and is for cleanup on exit - for (m,pm) in mpstate.modules: - if hasattr(m, 'unload'): - print("Unloading module %s" % m.name) - m.unload() - - sys.exit(1) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/__init__.py deleted file mode 100644 index 5b0105f39..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Allow imports diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/README.txt b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/README.txt deleted file mode 100644 index 38e4927e9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/README.txt +++ /dev/null @@ -1,6 +0,0 @@ - -This module adapted from ANUGA: - -https://anuga.anu.edu.au/ - -Many thanks to ANUGA for making this code available under the GPL! diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/geo_reference.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/geo_reference.py deleted file mode 100644 index 7d75f49d7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/geo_reference.py +++ /dev/null @@ -1,469 +0,0 @@ -""" -This module adapted ANUGA -https://anuga.anu.edu.au/ - -""" - - -#FIXME: Ensure that all attributes of a georef are treated everywhere -#and unit test - -import types, sys -import copy -import numpy as num - - -DEFAULT_ZONE = -1 -TITLE = '#geo reference' + "\n" # this title is referred to in the test format - -DEFAULT_PROJECTION = 'UTM' -DEFAULT_DATUM = 'wgs84' -DEFAULT_UNITS = 'm' -DEFAULT_FALSE_EASTING = 500000 -DEFAULT_FALSE_NORTHING = 10000000 # Default for southern hemisphere - - -## -# @brief A class for ... -class Geo_reference: - """ - Attributes of the Geo_reference class: - .zone The UTM zone (default is -1) - .false_easting ?? - .false_northing ?? - .datum The Datum used (default is wgs84) - .projection The projection used (default is 'UTM') - .units The units of measure used (default metres) - .xllcorner The X coord of origin (default is 0.0 wrt UTM grid) - .yllcorner The y coord of origin (default is 0.0 wrt UTM grid) - .is_absolute ?? - - """ - - ## - # @brief Instantiate an instance of class Geo_reference. - # @param zone The UTM zone. - # @param xllcorner X coord of origin of georef. - # @param yllcorner Y coord of origin of georef. - # @param datum ?? - # @param projection The projection used (default UTM). - # @param units Units used in measuring distance (default m). - # @param false_easting ?? - # @param false_northing ?? - # @param NetCDFObject NetCDF file *handle* to write to. - # @param ASCIIFile ASCII text file *handle* to write to. - # @param read_title Title of the georeference text. - def __init__(self, - zone=DEFAULT_ZONE, - xllcorner=0.0, - yllcorner=0.0, - datum=DEFAULT_DATUM, - projection=DEFAULT_PROJECTION, - units=DEFAULT_UNITS, - false_easting=DEFAULT_FALSE_EASTING, - false_northing=DEFAULT_FALSE_NORTHING, - NetCDFObject=None, - ASCIIFile=None, - read_title=None): - """ - input: - NetCDFObject - a handle to the netCDF file to be written to - ASCIIFile - a handle to the text file - read_title - the title of the georeference text, if it was read in. - If the function that calls this has already read the title line, - it can't unread it, so this info has to be passed. - If you know of a way to unread this info, then tell us. - - Note, the text file only saves a sub set of the info the - points file does. Currently the info not written in text - must be the default info, since ANUGA assumes it isn't - changing. - """ - - if zone is None: - zone = DEFAULT_ZONE - self.false_easting = int(false_easting) - self.false_northing = int(false_northing) - self.datum = datum - self.projection = projection - self.zone = int(zone) - self.units = units - self.xllcorner = float(xllcorner) - self.yllcorner = float(yllcorner) - - if NetCDFObject is not None: - self.read_NetCDF(NetCDFObject) - - if ASCIIFile is not None: - self.read_ASCII(ASCIIFile, read_title=read_title) - - # Set flag for absolute points (used by get_absolute) - self.absolute = num.allclose([self.xllcorner, self.yllcorner], 0) - - - def get_xllcorner(self): - return self.xllcorner - - ## - # @brief Get the Y coordinate of the origin of this georef. - def get_yllcorner(self): - return self.yllcorner - - ## - # @brief Get the zone of this georef. - def get_zone(self): - return self.zone - - ## - # @brief Write to an open NetCDF file. - # @param outfile Handle to open NetCDF file. - def write_NetCDF(self, outfile): - outfile.xllcorner = self.xllcorner - outfile.yllcorner = self.yllcorner - outfile.zone = self.zone - - outfile.false_easting = self.false_easting - outfile.false_northing = self.false_northing - - outfile.datum = self.datum - outfile.projection = self.projection - outfile.units = self.units - - ## - # @brief Read data from an open NetCDF file. - # @param infile Handle to open NetCDF file. - def read_NetCDF(self, infile): - self.xllcorner = float(infile.xllcorner[0]) - self.yllcorner = float(infile.yllcorner[0]) - self.zone = int(infile.zone[0]) - - try: - self.false_easting = int(infile.false_easting[0]) - self.false_northing = int(infile.false_northing[0]) - - self.datum = infile.datum - self.projection = infile.projection - self.units = infile.units - except: - pass - - if self.false_easting != DEFAULT_FALSE_EASTING: - print ("WARNING: False easting of %f specified." % self.false_easting) - print ("Default false easting is %f." % DEFAULT_FALSE_EASTING) - print ("ANUGA does not correct for differences in False Eastings.") - - if self.false_northing != DEFAULT_FALSE_NORTHING: - print ("WARNING: False northing of %f specified." - % self.false_northing) - print ("Default false northing is %f." % DEFAULT_FALSE_NORTHING) - print ("ANUGA does not correct for differences in False Northings.") - - if self.datum.upper() != DEFAULT_DATUM.upper(): - print ("WARNING: Datum of %s specified." % self.datum) - print ("Default Datum is %s." % DEFAULT_DATUM) - print ("ANUGA does not correct for differences in datums.") - - if self.projection.upper() != DEFAULT_PROJECTION.upper(): - print ("WARNING: Projection of %s specified." % self.projection) - print ("Default Projection is %s." % DEFAULT_PROJECTION) - print ("ANUGA does not correct for differences in Projection.") - - if self.units.upper() != DEFAULT_UNITS.upper(): - print ("WARNING: Units of %s specified." % self.units) - print ("Default units is %s." % DEFAULT_UNITS) - print ("ANUGA does not correct for differences in units.") - -################################################################################ -# ASCII files with geo-refs are currently not used -################################################################################ - - ## - # @brief Write georef data to an open text file. - # @param fd Handle to open text file. - def write_ASCII(self, fd): - fd.write(TITLE) - fd.write(str(self.zone) + "\n") - fd.write(str(self.xllcorner) + "\n") - fd.write(str(self.yllcorner) + "\n") - - ## - # @brief Read georef data from an open text file. - # @param fd Handle to open text file. - def read_ASCII(self, fd, read_title=None): - try: - if read_title == None: - read_title = fd.readline() # remove the title line - if read_title[0:2].upper() != TITLE[0:2].upper(): - msg = ('File error. Expecting line: %s. Got this line: %s' - % (TITLE, read_title)) - raise TitleError(msg) - self.zone = int(fd.readline()) - self.xllcorner = float(fd.readline()) - self.yllcorner = float(fd.readline()) - except SyntaxError: - msg = 'File error. Got syntax error while parsing geo reference' - raise ParsingError(msg) - - # Fix some assertion failures - if isinstance(self.zone, num.ndarray) and self.zone.shape == (): - self.zone = self.zone[0] - if (isinstance(self.xllcorner, num.ndarray) and - self.xllcorner.shape == ()): - self.xllcorner = self.xllcorner[0] - if (isinstance(self.yllcorner, num.ndarray) and - self.yllcorner.shape == ()): - self.yllcorner = self.yllcorner[0] - - assert (type(self.xllcorner) == types.FloatType) - assert (type(self.yllcorner) == types.FloatType) - assert (type(self.zone) == types.IntType) - -################################################################################ - - ## - # @brief Change points to be absolute wrt new georef 'points_geo_ref'. - # @param points The points to change. - # @param points_geo_ref The new georef to make points absolute wrt. - # @return The changed points. - # @note If 'points' is a list then a changed list is returned. - def change_points_geo_ref(self, points, points_geo_ref=None): - """Change the geo reference of a list or numeric array of points to - be this reference.(The reference used for this object) - If the points do not have a geo ref, assume 'absolute' values - """ - import copy - - # remember if we got a list - is_list = isinstance(points, list) - - points = ensure_numeric(points, num.float) - - # sanity checks - if len(points.shape) == 1: - #One point has been passed - msg = 'Single point must have two elements' - assert len(points) == 2, msg - points = num.reshape(points, (1,2)) - - msg = 'Points array must be two dimensional.\n' - msg += 'I got %d dimensions' %len(points.shape) - assert len(points.shape) == 2, msg - - msg = 'Input must be an N x 2 array or list of (x,y) values. ' - msg += 'I got an %d x %d array' %points.shape - assert points.shape[1] == 2, msg - - # FIXME (Ole): Could also check if zone, xllcorner, yllcorner - # are identical in the two geo refs. - if points_geo_ref is not self: - # If georeferences are different - points = copy.copy(points) # Don't destroy input - if not points_geo_ref is None: - # Convert points to absolute coordinates - points[:,0] += points_geo_ref.xllcorner - points[:,1] += points_geo_ref.yllcorner - - # Make points relative to primary geo reference - points[:,0] -= self.xllcorner - points[:,1] -= self.yllcorner - - if is_list: - points = points.tolist() - - return points - - def is_absolute(self): - """Return True if xllcorner==yllcorner==0 indicating that points - in question are absolute. - """ - - # FIXME(Ole): It is unfortunate that decision about whether points - # are absolute or not lies with the georeference object. Ross pointed this out. - # Moreover, this little function is responsible for a large fraction of the time - # using in data fitting (something in like 40 - 50%. - # This was due to the repeated calls to allclose. - # With the flag method fitting is much faster (18 Mar 2009). - - # FIXME(Ole): HACK to be able to reuse data already cached (18 Mar 2009). - # Remove at some point - if not hasattr(self, 'absolute'): - self.absolute = num.allclose([self.xllcorner, self.yllcorner], 0) - - # Return absolute flag - return self.absolute - - def get_absolute(self, points): - """Given a set of points geo referenced to this instance, - return the points as absolute values. - """ - - # remember if we got a list - is_list = isinstance(points, list) - - points = ensure_numeric(points, num.float) - if len(points.shape) == 1: - # One point has been passed - msg = 'Single point must have two elements' - if not len(points) == 2: - raise ShapeError(msg) - - - msg = 'Input must be an N x 2 array or list of (x,y) values. ' - msg += 'I got an %d x %d array' %points.shape - if not points.shape[1] == 2: - raise ShapeError(msg) - - - # Add geo ref to points - if not self.is_absolute(): - points = copy.copy(points) # Don't destroy input - points[:,0] += self.xllcorner - points[:,1] += self.yllcorner - - - if is_list: - points = points.tolist() - - return points - - ## - # @brief Convert points to relative measurement. - # @param points Points to convert to relative measurements. - # @return A set of points relative to the geo_reference instance. - def get_relative(self, points): - """Given a set of points in absolute UTM coordinates, - make them relative to this geo_reference instance, - return the points as relative values. - - This is the inverse of get_absolute. - """ - - # remember if we got a list - is_list = isinstance(points, list) - - points = ensure_numeric(points, num.float) - if len(points.shape) == 1: - #One point has been passed - msg = 'Single point must have two elements' - if not len(points) == 2: - raise ShapeError(msg) - - if not points.shape[1] == 2: - msg = ('Input must be an N x 2 array or list of (x,y) values. ' - 'I got an %d x %d array' % points.shape) - raise ShapeError(msg) - - # Subtract geo ref from points - if not self.is_absolute(): - points = copy.copy(points) # Don't destroy input - points[:,0] -= self.xllcorner - points[:,1] -= self.yllcorner - - if is_list: - points = points.tolist() - - return points - - ## - # @brief ?? - # @param other ?? - def reconcile_zones(self, other): - if other is None: - other = Geo_reference() - if (self.zone == other.zone or - self.zone == DEFAULT_ZONE and - other.zone == DEFAULT_ZONE): - pass - elif self.zone == DEFAULT_ZONE: - self.zone = other.zone - elif other.zone == DEFAULT_ZONE: - other.zone = self.zone - else: - msg = ('Geospatial data must be in the same ' - 'ZONE to allow reconciliation. I got zone %d and %d' - % (self.zone, other.zone)) - raise ANUGAError(msg) - - #def easting_northing2geo_reffed_point(self, x, y): - # return [x-self.xllcorner, y - self.xllcorner] - - #def easting_northing2geo_reffed_points(self, x, y): - # return [x-self.xllcorner, y - self.xllcorner] - - ## - # @brief Get origin of this geo_reference. - # @return (zone, xllcorner, yllcorner). - def get_origin(self): - return (self.zone, self.xllcorner, self.yllcorner) - - ## - # @brief Get a string representation of this geo_reference instance. - def __repr__(self): - return ('(zone=%i easting=%f, northing=%f)' - % (self.zone, self.xllcorner, self.yllcorner)) - - ## - # @brief Compare two geo_reference instances. - # @param self This geo_reference instance. - # @param other Another geo_reference instance to compare against. - # @return 0 if instances have the same attributes, else 1. - # @note Attributes are: zone, xllcorner, yllcorner. - def __cmp__(self, other): - # FIXME (DSG) add a tolerence - if other is None: - return 1 - cmp = 0 - if not (self.xllcorner == self.xllcorner): - cmp = 1 - if not (self.yllcorner == self.yllcorner): - cmp = 1 - if not (self.zone == self.zone): - cmp = 1 - return cmp - - -## -# @brief Write a geo_reference to a NetCDF file (usually SWW). -# @param origin A georef instance or parameters to create a georef instance. -# @param outfile Path to file to write. -# @return A normalized geo_reference. -def write_NetCDF_georeference(origin, outfile): - """Write georeference info to a netcdf file, usually sww. - - The origin can be a georef instance or parameters for a geo_ref instance - - outfile is the name of the file to be written to. - """ - - geo_ref = ensure_geo_reference(origin) - geo_ref.write_NetCDF(outfile) - return geo_ref - - -## -# @brief Convert an object to a georeference instance. -# @param origin A georef instance or (zone, xllcorner, yllcorner) -# @return A georef object, or None if 'origin' was None. -def ensure_geo_reference(origin): - """ - Given a list/tuple of zone, xllcorner and yllcorner of a geo-ref object, - return a geo ref object. - - If the origin is None, return None, so calling this function doesn't - effect code logic - """ - - if isinstance(origin, Geo_reference): - geo_ref = origin - elif origin is None: - geo_ref = None - else: - geo_ref = apply(Geo_reference, origin) - - return geo_ref - - -#----------------------------------------------------------------------- - -if __name__ == "__main__": - pass diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/lat_long_UTM_conversion.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/lat_long_UTM_conversion.py deleted file mode 100644 index 1e2b59fe4..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/lat_long_UTM_conversion.py +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/env python - -# Lat Long - UTM, UTM - Lat Long conversions -# -# see http://www.pygps.org -# - -from math import pi, sin, cos, tan, sqrt - -#LatLong- UTM conversion..h -#definitions for lat/long to UTM and UTM to lat/lng conversions -#include - -_deg2rad = pi / 180.0 -_rad2deg = 180.0 / pi - -_EquatorialRadius = 2 -_eccentricitySquared = 3 - -_ellipsoid = [ -# id, Ellipsoid name, Equatorial Radius, square of eccentricity -# first once is a placeholder only, To allow array indices to match id numbers - [ -1, "Placeholder", 0, 0], - [ 1, "Airy", 6377563, 0.00667054], - [ 2, "Australian National", 6378160, 0.006694542], - [ 3, "Bessel 1841", 6377397, 0.006674372], - [ 4, "Bessel 1841 (Nambia] ", 6377484, 0.006674372], - [ 5, "Clarke 1866", 6378206, 0.006768658], - [ 6, "Clarke 1880", 6378249, 0.006803511], - [ 7, "Everest", 6377276, 0.006637847], - [ 8, "Fischer 1960 (Mercury] ", 6378166, 0.006693422], - [ 9, "Fischer 1968", 6378150, 0.006693422], - [ 10, "GRS 1967", 6378160, 0.006694605], - [ 11, "GRS 1980", 6378137, 0.00669438], - [ 12, "Helmert 1906", 6378200, 0.006693422], - [ 13, "Hough", 6378270, 0.00672267], - [ 14, "International", 6378388, 0.00672267], - [ 15, "Krassovsky", 6378245, 0.006693422], - [ 16, "Modified Airy", 6377340, 0.00667054], - [ 17, "Modified Everest", 6377304, 0.006637847], - [ 18, "Modified Fischer 1960", 6378155, 0.006693422], - [ 19, "South American 1969", 6378160, 0.006694542], - [ 20, "WGS 60", 6378165, 0.006693422], - [ 21, "WGS 66", 6378145, 0.006694542], - [ 22, "WGS-72", 6378135, 0.006694318], - [ 23, "WGS-84", 6378137, 0.00669438] -] - -#Reference ellipsoids derived from Peter H. Dana's website- -#http://www.utexas.edu/depts/grg/gcraft/notes/datum/elist.html -#Department of Geography, University of Texas at Austin -#Internet: pdana@mail.utexas.edu -#3/22/95 - -#Source -#Defense Mapping Agency. 1987b. DMA Technical Report: Supplement to Department of Defense World Geodetic System -#1984 Technical Report. Part I and II. Washington, DC: Defense Mapping Agency - -#def LLtoUTM(int ReferenceEllipsoid, const double Lat, const double Long, -# double &UTMNorthing, double &UTMEasting, char* UTMZone) - -def LLtoUTM( Lat, Long, ReferenceEllipsoid=23): - """ - converts lat/long to UTM coords. Equations from USGS Bulletin 1532 - East Longitudes are positive, West longitudes are negative. - North latitudes are positive, South latitudes are negative - Lat and Long are in decimal degrees - Written by Chuck Gantz- chuck.gantz@globalstar.com - """ - a = _ellipsoid[ReferenceEllipsoid][_EquatorialRadius] - eccSquared = _ellipsoid[ReferenceEllipsoid][_eccentricitySquared] - k0 = 0.9996 - -#Make sure the longitude is between -180.00 .. 179.9 - LongTemp = (Long+180)-int((Long+180)/360)*360-180 # -180.00 .. 179.9 - - LatRad = Lat*_deg2rad - LongRad = LongTemp*_deg2rad - - ZoneNumber = int((LongTemp + 180)/6) + 1 - - if Lat >= 56.0 and Lat < 64.0 and LongTemp >= 3.0 and LongTemp < 12.0: - ZoneNumber = 32 - - # Special zones for Svalbard - if Lat >= 72.0 and Lat < 84.0: - if LongTemp >= 0.0 and LongTemp < 9.0:ZoneNumber = 31 - elif LongTemp >= 9.0 and LongTemp < 21.0: ZoneNumber = 33 - elif LongTemp >= 21.0 and LongTemp < 33.0: ZoneNumber = 35 - elif LongTemp >= 33.0 and LongTemp < 42.0: ZoneNumber = 37 - - LongOrigin = (ZoneNumber - 1)*6 - 180 + 3 #+3 puts origin in middle of zone - LongOriginRad = LongOrigin * _deg2rad - - #compute the UTM Zone from the latitude and longitude - UTMZone = "%d%c" % (ZoneNumber, _UTMLetterDesignator(Lat)) - - eccPrimeSquared = (eccSquared)/(1-eccSquared) - N = a/sqrt(1-eccSquared*sin(LatRad)*sin(LatRad)) - T = tan(LatRad)*tan(LatRad) - C = eccPrimeSquared*cos(LatRad)*cos(LatRad) - A = cos(LatRad)*(LongRad-LongOriginRad) - - M = a*((1 - - eccSquared/4 - - 3*eccSquared*eccSquared/64 - - 5*eccSquared*eccSquared*eccSquared/256)*LatRad - - (3*eccSquared/8 - + 3*eccSquared*eccSquared/32 - + 45*eccSquared*eccSquared*eccSquared/1024)*sin(2*LatRad) - + (15*eccSquared*eccSquared/256 + 45*eccSquared*eccSquared*eccSquared/1024)*sin(4*LatRad) - - (35*eccSquared*eccSquared*eccSquared/3072)*sin(6*LatRad)) - - UTMEasting = (k0*N*(A+(1-T+C)*A*A*A/6 - + (5-18*T+T*T+72*C-58*eccPrimeSquared)*A*A*A*A*A/120) - + 500000.0) - - UTMNorthing = (k0*(M+N*tan(LatRad)*(A*A/2+(5-T+9*C+4*C*C)*A*A*A*A/24 - + (61 - -58*T - +T*T - +600*C - -330*eccPrimeSquared)*A*A*A*A*A*A/720))) - - if Lat < 0: - UTMNorthing = UTMNorthing + 10000000.0; #10000000 meter offset for southern hemisphere - #UTMZone was originally returned here. I don't know what the - #letter at the end was for. - #print "UTMZone", UTMZone - return (ZoneNumber, UTMEasting, UTMNorthing) - - -def _UTMLetterDesignator(Lat): -#This routine determines the correct UTM letter designator for the given latitude -#returns 'Z' if latitude is outside the UTM limits of 84N to 80S -#Written by Chuck Gantz- chuck.gantz@globalstar.com - - if 84 >= Lat >= 72: return 'X' - elif 72 > Lat >= 64: return 'W' - elif 64 > Lat >= 56: return 'V' - elif 56 > Lat >= 48: return 'U' - elif 48 > Lat >= 40: return 'T' - elif 40 > Lat >= 32: return 'S' - elif 32 > Lat >= 24: return 'R' - elif 24 > Lat >= 16: return 'Q' - elif 16 > Lat >= 8: return 'P' - elif 8 > Lat >= 0: return 'N' - elif 0 > Lat >= -8: return 'M' - elif -8> Lat >= -16: return 'L' - elif -16 > Lat >= -24: return 'K' - elif -24 > Lat >= -32: return 'J' - elif -32 > Lat >= -40: return 'H' - elif -40 > Lat >= -48: return 'G' - elif -48 > Lat >= -56: return 'F' - elif -56 > Lat >= -64: return 'E' - elif -64 > Lat >= -72: return 'D' - elif -72 > Lat >= -80: return 'C' - else: return 'Z' # if the Latitude is outside the UTM limits - -#void UTMtoLL(int ReferenceEllipsoid, const double UTMNorthing, const double UTMEasting, const char* UTMZone, -# double& Lat, double& Long ) - -def UTMtoLL(northing, easting, zone, isSouthernHemisphere=True, - ReferenceEllipsoid=23): - """ - converts UTM coords to lat/long. Equations from USGS Bulletin 1532 - East Longitudes are positive, West longitudes are negative. - North latitudes are positive, South latitudes are negative - Lat and Long are in decimal degrees. - Written by Chuck Gantz- chuck.gantz@globalstar.com - Converted to Python by Russ Nelson - - FIXME: This is set up to work for the Southern Hemisphere. - -Using -http://www.ga.gov.au/geodesy/datums/redfearn_geo_to_grid.jsp - - Site Name: GDA-MGA: (UTM with GRS80 ellipsoid) -Zone: 36 -Easting: 511669.521 Northing: 19328195.112 -Latitude: 84 0 ' 0.00000 '' Longitude: 34 0 ' 0.00000 '' -Grid Convergence: 0 -59 ' 40.28 '' Point Scale: 0.99960166 - -____________ -Site Name: GDA-MGA: (UTM with GRS80 ellipsoid) -Zone: 36 -Easting: 519384.803 Northing: 1118247.585 -Latitude: -80 0 ' 0.00000 '' Longitude: 34 0 ' 0.00000 '' -Grid Convergence: 0 59 ' 5.32 '' Point Scale: 0.99960459 -___________ -Site Name: GDA-MGA: (UTM with GRS80 ellipsoid) -Zone: 36 -Easting: 611263.812 Northing: 10110547.106 -Latitude: 1 0 ' 0.00000 '' Longitude: 34 0 ' 0.00000 '' -Grid Convergence: 0 -1 ' 2.84 '' Point Scale: 0.99975325 -______________ -Site Name: GDA-MGA: (UTM with GRS80 ellipsoid) -Zone: 36 -Easting: 611263.812 Northing: 9889452.894 -Latitude: -1 0 ' 0.00000 '' Longitude: 34 0 ' 0.00000 '' -Grid Convergence: 0 1 ' 2.84 '' Point Scale: 0.99975325 - -So this uses a false northing of 10000000 in the both hemispheres. -ArcGIS used a false northing of 0 in the northern hem though. -Therefore it is difficult to actually know what hemisphere you are in. - """ - k0 = 0.9996 - a = _ellipsoid[ReferenceEllipsoid][_EquatorialRadius] - eccSquared = _ellipsoid[ReferenceEllipsoid][_eccentricitySquared] - e1 = (1-sqrt(1-eccSquared))/(1+sqrt(1-eccSquared)) - - x = easting - 500000.0 #remove 500,000 meter offset for longitude - y = northing - - ZoneNumber = int(zone) - if isSouthernHemisphere: - y -= 10000000.0 # remove 10,000,000 meter offset used - # for southern hemisphere - - LongOrigin = (ZoneNumber - 1)*6 - 180 + 3 # +3 puts origin in middle of zone - - eccPrimeSquared = (eccSquared)/(1-eccSquared) - - M = y / k0 - mu = M/(a*(1-eccSquared/4-3*eccSquared*eccSquared/64-5*eccSquared*eccSquared*eccSquared/256)) - - phi1Rad = (mu + (3*e1/2-27*e1*e1*e1/32)*sin(2*mu) - + (21*e1*e1/16-55*e1*e1*e1*e1/32)*sin(4*mu) - +(151*e1*e1*e1/96)*sin(6*mu)) - phi1 = phi1Rad*_rad2deg; - - N1 = a/sqrt(1-eccSquared*sin(phi1Rad)*sin(phi1Rad)) - T1 = tan(phi1Rad)*tan(phi1Rad) - C1 = eccPrimeSquared*cos(phi1Rad)*cos(phi1Rad) - R1 = a*(1-eccSquared)/pow(1-eccSquared*sin(phi1Rad)*sin(phi1Rad), 1.5) - D = x/(N1*k0) - - Lat = phi1Rad - (N1*tan(phi1Rad)/R1)*(D*D/2-(5+3*T1+10*C1-4*C1*C1-9*eccPrimeSquared)*D*D*D*D/24 - +(61+90*T1+298*C1+45*T1*T1-252*eccPrimeSquared-3*C1*C1)*D*D*D*D*D*D/720) - Lat = Lat * _rad2deg - - Long = (D-(1+2*T1+C1)*D*D*D/6+(5-2*C1+28*T1-3*C1*C1+8*eccPrimeSquared+24*T1*T1) - *D*D*D*D*D/120)/cos(phi1Rad) - Long = LongOrigin + Long * _rad2deg - return (Lat, Long) - -if __name__ == '__main__': - (z, e, n) = LLtoUTM(45.00, -75.00, 23) - print (z, e, n) - (lat, lon) = UTMtoLL(n, e, z, 23) - print (lat, lon) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/redfearn.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/redfearn.py deleted file mode 100644 index a25632f43..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/ANUGA/redfearn.py +++ /dev/null @@ -1,243 +0,0 @@ -""" -This module adapted ANUGA -https://anuga.anu.edu.au/ - ------------- - -Implementation of Redfearn's formula to compute UTM projections from latitude and longitude - -Based in part on spreadsheet -www.icsm.gov.au/gda/gdatm/redfearn.xls -downloaded from INTERGOVERNMENTAL COMMITTEE ON SURVEYING & MAPPING (ICSM) -http://www.icsm.gov.au/icsm/ - -""" -from geo_reference import Geo_reference, DEFAULT_ZONE - - -def degminsec2decimal_degrees(dd,mm,ss): - assert abs(mm) == mm - assert abs(ss) == ss - - if dd < 0: - sign = -1 - else: - sign = 1 - - return sign * (abs(dd) + mm/60. + ss/3600.) - -def decimal_degrees2degminsec(dec): - - if dec < 0: - sign = -1 - else: - sign = 1 - - dec = abs(dec) - dd = int(dec) - f = dec-dd - - mm = int(f*60) - ss = (f*60-mm)*60 - - return sign*dd, mm, ss - -def redfearn(lat, lon, false_easting=None, false_northing=None, - zone=None, central_meridian=None, scale_factor=None): - """Compute UTM projection using Redfearn's formula - - lat, lon is latitude and longitude in decimal degrees - - If false easting and northing are specified they will override - the standard - - If zone is specified reproject lat and long to specified zone instead of - standard zone - - If meridian is specified, reproject lat and lon to that instead of zone. In this case - zone will be set to -1 to indicate non-UTM projection - - Note that zone and meridian cannot both be specifed - """ - - - from math import pi, sqrt, sin, cos, tan - - - - #GDA Specifications - a = 6378137.0 #Semi major axis - inverse_flattening = 298.257222101 #1/f - if scale_factor is None: - K0 = 0.9996 #Central scale factor - else: - K0 = scale_factor - #print 'scale', K0 - zone_width = 6 #Degrees - - longitude_of_central_meridian_zone0 = -183 - longitude_of_western_edge_zone0 = -186 - - if false_easting is None: - false_easting = 500000 - - if false_northing is None: - if lat < 0: - false_northing = 10000000 #Southern hemisphere - else: - false_northing = 0 #Northern hemisphere) - - - #Derived constants - f = 1.0/inverse_flattening - b = a*(1-f) #Semi minor axis - - e2 = 2*f - f*f# = f*(2-f) = (a^2-b^2/a^2 #Eccentricity - e = sqrt(e2) - e2_ = e2/(1-e2) # = (a^2-b^2)/b^2 #Second eccentricity - e_ = sqrt(e2_) - e4 = e2*e2 - e6 = e2*e4 - - #Foot point latitude - n = (a-b)/(a+b) #Same as e2 - why ? - n2 = n*n - n3 = n*n2 - n4 = n2*n2 - - G = a*(1-n)*(1-n2)*(1+9*n2/4+225*n4/64)*pi/180 - - - phi = lat*pi/180 #Convert latitude to radians - - sinphi = sin(phi) - sin2phi = sin(2*phi) - sin4phi = sin(4*phi) - sin6phi = sin(6*phi) - - cosphi = cos(phi) - cosphi2 = cosphi*cosphi - cosphi3 = cosphi*cosphi2 - cosphi4 = cosphi2*cosphi2 - cosphi5 = cosphi*cosphi4 - cosphi6 = cosphi2*cosphi4 - cosphi7 = cosphi*cosphi6 - cosphi8 = cosphi4*cosphi4 - - t = tan(phi) - t2 = t*t - t4 = t2*t2 - t6 = t2*t4 - - #Radius of Curvature - rho = a*(1-e2)/(1-e2*sinphi*sinphi)**1.5 - nu = a/(1-e2*sinphi*sinphi)**0.5 - psi = nu/rho - psi2 = psi*psi - psi3 = psi*psi2 - psi4 = psi2*psi2 - - - - #Meridian distance - - A0 = 1 - e2/4 - 3*e4/64 - 5*e6/256 - A2 = 3.0/8*(e2+e4/4+15*e6/128) - A4 = 15.0/256*(e4+3*e6/4) - A6 = 35*e6/3072 - - term1 = a*A0*phi - term2 = -a*A2*sin2phi - term3 = a*A4*sin4phi - term4 = -a*A6*sin6phi - - m = term1 + term2 + term3 + term4 #OK - - if zone is not None and central_meridian is not None: - msg = 'You specified both zone and central_meridian. Provide only one of them' - raise Exception(msg) - - # Zone - if zone is None: - zone = int((lon - longitude_of_western_edge_zone0)/zone_width) - - # Central meridian - if central_meridian is None: - central_meridian = zone*zone_width+longitude_of_central_meridian_zone0 - else: - zone = -1 - - omega = (lon-central_meridian)*pi/180 #Relative longitude (radians) - omega2 = omega*omega - omega3 = omega*omega2 - omega4 = omega2*omega2 - omega5 = omega*omega4 - omega6 = omega3*omega3 - omega7 = omega*omega6 - omega8 = omega4*omega4 - - #Northing - term1 = nu*sinphi*cosphi*omega2/2 - term2 = nu*sinphi*cosphi3*(4*psi2+psi-t2)*omega4/24 - term3 = nu*sinphi*cosphi5*\ - (8*psi4*(11-24*t2)-28*psi3*(1-6*t2)+\ - psi2*(1-32*t2)-psi*2*t2+t4-t2)*omega6/720 - term4 = nu*sinphi*cosphi7*(1385-3111*t2+543*t4-t6)*omega8/40320 - northing = false_northing + K0*(m + term1 + term2 + term3 + term4) - - #Easting - term1 = nu*omega*cosphi - term2 = nu*cosphi3*(psi-t2)*omega3/6 - term3 = nu*cosphi5*(4*psi3*(1-6*t2)+psi2*(1+8*t2)-2*psi*t2+t4)*omega5/120 - term4 = nu*cosphi7*(61-479*t2+179*t4-t6)*omega7/5040 - easting = false_easting + K0*(term1 + term2 + term3 + term4) - - return zone, easting, northing - - - -def convert_from_latlon_to_utm(points=None, - latitudes=None, - longitudes=None, - false_easting=None, - false_northing=None): - """Convert latitude and longitude data to UTM as a list of coordinates. - - - Input - - points: list of points given in decimal degrees (latitude, longitude) or - latitudes: list of latitudes and - longitudes: list of longitudes - false_easting (optional) - false_northing (optional) - - Output - - points: List of converted points - zone: Common UTM zone for converted points - - - Notes - - Assume the false_easting and false_northing are the same for each list. - If points end up in different UTM zones, an ANUGAerror is thrown. - """ - - old_geo = Geo_reference() - utm_points = [] - if points == None: - assert len(latitudes) == len(longitudes) - points = map(None, latitudes, longitudes) - - for point in points: - - zone, easting, northing = redfearn(float(point[0]), - float(point[1]), - false_easting=false_easting, - false_northing=false_northing) - new_geo = Geo_reference(zone) - old_geo.reconcile_zones(new_geo) - utm_points.append([easting, northing]) - - return utm_points, old_geo.get_zone() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/__init__.py deleted file mode 100644 index f378a5afe..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Allow imports. diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/dumpstacks.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/dumpstacks.py deleted file mode 100644 index 27278e1b7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/dumpstacks.py +++ /dev/null @@ -1,25 +0,0 @@ - - - -import threading, sys, traceback - -# Import dumpstacks to install a SIGQUIT handler that shows a stack dump for all stacks -# From http://stackoverflow.com/questions/132058/showing-the-stack-trace-from-a-running-python-application - -def dumpstacks(signal, frame): - id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) - code = [] - for threadId, stack in sys._current_frames().items(): - code.append("\n# Thread: %s(%d)" % (id2name.get(threadId, ""), threadId)) - for filename, lineno, name, line in traceback.extract_stack(stack): - code.append('File: "%s", line %d, in %s' % (filename, lineno, name)) - if line: - code.append(" %s" % (line.strip())) - print("\n".join(code)) - -try: - import signal - signal.signal(signal.SIGQUIT, dumpstacks) -except Exception as e: - # Silently ignore failures installing this handler (probably won't work on Windows) - pass diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/graphdefinition.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/graphdefinition.py deleted file mode 100644 index ffb835367..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/graphdefinition.py +++ /dev/null @@ -1,12 +0,0 @@ -''' -GraphDefinition class -''' - -class GraphDefinition(object): - '''a pre-defined graph''' - def __init__(self, name, expression, description, expressions, filename): - self.name = name - self.expression = expression - self.description = description - self.expressions = expressions - self.filename = filename diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/grapher.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/grapher.py deleted file mode 100755 index 87e1a4300..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/grapher.py +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env python - -''' - core library for graphing in mavexplorer -''' - -import sys, struct, time, os, datetime -import math, re -import matplotlib -from math import * -from pymavlink.mavextra import * -import pylab -from pymavlink import mavutil - -colors = [ 'red', 'green', 'blue', 'orange', 'olive', 'black', 'grey', 'yellow', 'brown', 'darkcyan', - 'cornflowerblue', 'darkmagenta', 'deeppink', 'darkred'] - -colourmap = { - 'apm' : { - 'MANUAL' : (1.0, 0, 0), - 'AUTO' : ( 0, 1.0, 0), - 'LOITER' : ( 0, 0, 1.0), - 'FBWA' : (1.0, 0.5, 0), - 'RTL' : ( 1, 0, 0.5), - 'STABILIZE' : (0.5, 1.0, 0), - 'LAND' : ( 0, 1.0, 0.5), - 'STEERING' : (0.5, 0, 1.0), - 'HOLD' : ( 0, 0.5, 1.0), - 'ALT_HOLD' : (1.0, 0.5, 0.5), - 'CIRCLE' : (0.5, 1.0, 0.5), - 'POSITION' : (1.0, 0.0, 1.0), - 'GUIDED' : (0.5, 0.5, 1.0), - 'ACRO' : (1.0, 1.0, 0), - 'CRUISE' : ( 0, 1.0, 1.0) - }, - 'px4' : { - 'MANUAL' : (1.0, 0, 0), - 'SEATBELT' : ( 0.5, 0.5, 0), - 'EASY' : ( 0, 1.0, 0), - 'AUTO' : ( 0, 0, 1.0), - 'UNKNOWN' : ( 1.0, 1.0, 1.0) - } - } - -edge_colour = (0.1, 0.1, 0.1) - -class MavGraph(object): - def __init__(self): - self.lowest_x = None - self.highest_x = None - self.mav_list = [] - self.fields = [] - self.condition = None - self.xaxis = None - self.marker = None - self.linestyle = None - self.flightmode = None - self.legend = 'upper left' - self.legend2 = 'upper right' - self.timeshift = 0 - self.labels = None - self.multi = False - - def add_field(self, field): - '''add another field to plot''' - self.fields.append(field) - - def add_mav(self, mav): - '''add another data source to plot''' - self.mav_list.append(mav) - - def set_condition(self, condition): - '''set graph condition''' - self.condition = condition - - def set_xaxis(self, xaxis): - '''set graph xaxis''' - self.xaxis = xaxis - - def set_marker(self, marker): - '''set graph marker''' - self.marker = marker - - def set_timeshift(self, timeshift): - '''set graph timeshift''' - self.timeshift = timeshift - - def set_legend2(self, legend2): - '''set graph legend2''' - self.legend2 = legend2 - - def set_legend(self, legend): - '''set graph legend''' - self.legend = legend - - def set_flightmode(self, flightmode): - '''set graph flightmode''' - self.flightmode = flightmode - - def set_linestyle(self, linestyle): - '''set graph linestyle''' - self.linestyle = linestyle - - def set_multi(self, multi): - '''set multiple graph option''' - self.multi = multi - - def make_format(self, current, other): - # current and other are axes - def format_coord(x, y): - # x, y are data coordinates - # convert to display coords - display_coord = current.transData.transform((x,y)) - inv = other.transData.inverted() - # convert back to data coords with respect to ax - ax_coord = inv.transform(display_coord) - xstr = self.formatter(x) - y2 = ax_coord[1] - if self.xaxis: - return ('x=%.3f Left=%.3f Right=%.3f' % (x, y2, y)) - else: - return ('x=%s Left=%.3f Right=%.3f' % (xstr, y2, y)) - return format_coord - - def plotit(self, x, y, fields, colors=[]): - '''plot a set of graphs using date for x axis''' - pylab.ion() - fig = pylab.figure(num=1, figsize=(12,6)) - ax1 = fig.gca() - ax2 = None - xrange = 0.0 - for i in range(0, len(fields)): - if len(x[i]) == 0: continue - if self.lowest_x is None or x[i][0] < self.lowest_x: - self.lowest_x = x[i][0] - if self.highest_x is None or x[i][-1] > self.highest_x: - self.highest_x = x[i][-1] - if self.highest_x is None or self.lowest_x is None: - return - xrange = self.highest_x - self.lowest_x - xrange *= 24 * 60 * 60 - self.formatter = matplotlib.dates.DateFormatter('%H:%M:%S') - interval = 1 - intervals = [ 1, 2, 5, 10, 15, 30, 60, 120, 240, 300, 600, - 900, 1800, 3600, 7200, 5*3600, 10*3600, 24*3600 ] - for interval in intervals: - if xrange / interval < 15: - break - locator = matplotlib.dates.SecondLocator(interval=interval) - if not self.xaxis: - ax1.xaxis.set_major_locator(locator) - ax1.xaxis.set_major_formatter(self.formatter) - empty = True - ax1_labels = [] - ax2_labels = [] - - for i in range(0, len(fields)): - if len(x[i]) == 0: - print("Failed to find any values for field %s" % fields[i]) - continue - if i < len(colors): - color = colors[i] - else: - color = 'red' - (tz, tzdst) = time.tzname - - if self.axes[i] == 2: - if ax2 == None: - ax2 = ax1.twinx() - ax2.format_coord = self.make_format(ax2, ax1) - ax = ax2 - if not self.xaxis: - ax2.xaxis.set_major_locator(locator) - ax2.xaxis.set_major_formatter(self.formatter) - label = fields[i] - if label.endswith(":2"): - label = label[:-2] - ax2_labels.append(label) - else: - ax1_labels.append(fields[i]) - ax = ax1 - - if self.xaxis: - if self.marker is not None: - marker = self.marker - else: - marker = '+' - if self.linestyle is not None: - linestyle = self.linestyle - else: - linestyle = 'None' - ax.plot(x[i], y[i], color=color, label=fields[i], - linestyle=linestyle, marker=marker) - else: - if self.marker is not None: - marker = self.marker - else: - marker = 'None' - if self.linestyle is not None: - linestyle = self.linestyle - else: - linestyle = '-' - ax.plot_date(x[i], y[i], color=color, label=fields[i], - linestyle=linestyle, marker=marker, tz=None) - - empty = False - if self.flightmode is not None: - for i in range(len(self.modes)-1): - c = colourmap[self.flightmode].get(self.modes[i][1], edge_colour) - ax1.axvspan(self.modes[i][0], self.modes[i+1][0], fc=c, ec=edge_colour, alpha=0.1) - c = colourmap[self.flightmode].get(self.modes[-1][1], edge_colour) - ax1.axvspan(self.modes[-1][0], ax1.get_xlim()[1], fc=c, ec=edge_colour, alpha=0.1) - - if ax1_labels != []: - ax1.legend(ax1_labels,loc=self.legend) - if ax2_labels != []: - ax2.legend(ax2_labels,loc=self.legend2) - if empty: - print("No data to graph") - return - - - def add_data(self, t, msg, vars, flightmode): - '''add some data''' - mtype = msg.get_type() - if self.flightmode is not None and (len(self.modes) == 0 or self.modes[-1][1] != flightmode): - self.modes.append((t, flightmode)) - for i in range(0, len(self.fields)): - if mtype not in self.field_types[i]: - continue - f = self.fields[i] - if f.endswith(":2"): - self.axes[i] = 2 - f = f[:-2] - if f.endswith(":1"): - self.first_only[i] = True - f = f[:-2] - v = mavutil.evaluate_expression(f, vars) - if v is None: - continue - if self.xaxis is None: - xv = t - else: - xv = mavutil.evaluate_expression(self.xaxis, vars) - if xv is None: - continue - self.y[i].append(v) - self.x[i].append(xv) - - - def process_mav(self, mlog, timeshift): - '''process one file''' - self.vars = {} - while True: - msg = mlog.recv_msg() - if msg is None: - break - if msg.get_type() not in self.msg_types: - continue - if self.condition: - if not mavutil.evaluate_condition(self.condition, mlog.messages): - continue - tdays = matplotlib.dates.date2num(datetime.datetime.fromtimestamp(msg._timestamp+timeshift)) - self.add_data(tdays, msg, mlog.messages, mlog.flightmode) - - def process(self, block=True): - '''process and display graph''' - self.msg_types = set() - self.multiplier = [] - self.field_types = [] - - # work out msg types we are interested in - self.x = [] - self.y = [] - self.modes = [] - self.axes = [] - self.first_only = [] - re_caps = re.compile('[A-Z_][A-Z0-9_]+') - for f in self.fields: - caps = set(re.findall(re_caps, f)) - self.msg_types = self.msg_types.union(caps) - self.field_types.append(caps) - self.y.append([]) - self.x.append([]) - self.axes.append(1) - self.first_only.append(False) - - if self.labels is not None: - labels = self.labels.split(',') - if len(labels) != len(fields)*len(self.mav_list): - print("Number of labels (%u) must match number of fields (%u)" % ( - len(labels), len(fields)*len(self.mav_list))) - return - else: - labels = None - - timeshift = self.timeshift - - for fi in range(0, len(self.mav_list)): - mlog = self.mav_list[fi] - self.process_mav(mlog, timeshift) - timeshift = 0 - for i in range(0, len(self.x)): - if self.first_only[i] and fi != 0: - self.x[i] = [] - self.y[i] = [] - if labels: - lab = labels[fi*len(self.fields):(fi+1)*len(self.fields)] - else: - lab = self.fields[:] - if self.multi: - col = colors[:] - else: - col = colors[fi*len(self.fields):] - self.plotit(self.x, self.y, lab, colors=col) - for i in range(0, len(self.x)): - self.x[i] = [] - self.y[i] = [] - pylab.draw() - - def show(self, block=True): - '''show graph''' - pylab.show(block=block) - -if __name__ == "__main__": - from argparse import ArgumentParser - parser = ArgumentParser(description=__doc__) - - parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") - parser.add_argument("--planner", action='store_true', help="use planner file format") - parser.add_argument("--condition", default=None, help="select packets by a condition") - parser.add_argument("--labels", default=None, help="comma separated field labels") - parser.add_argument("--legend", default='upper left', help="default legend position") - parser.add_argument("--legend2", default='upper right', help="default legend2 position") - parser.add_argument("--marker", default=None, help="point marker") - parser.add_argument("--linestyle", default=None, help="line style") - parser.add_argument("--xaxis", default=None, help="X axis expression") - parser.add_argument("--multi", action='store_true', help="multiple files with same colours") - parser.add_argument("--zero-time-base", action='store_true', help="use Z time base for DF logs") - parser.add_argument("--flightmode", default=None, - help="Choose the plot background according to the active flight mode of the specified type, e.g. --flightmode=apm for ArduPilot or --flightmode=px4 for PX4 stack logs. Cannot be specified with --xaxis.") - parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") - parser.add_argument("--output", default=None, help="provide an output format") - parser.add_argument("--timeshift", type=float, default=0, help="shift time on first graph in seconds") - parser.add_argument("logs_fields", metavar="", nargs="+") - args = parser.parse_args() - - mg = MavGraph() - - filenames = [] - for f in args.logs_fields: - if os.path.exists(f): - mlog = mavutil.mavlink_connection(f, notimestamps=args.notimestamps, - zero_time_base=args.zero_time_base, - dialect=args.dialect) - mg.add_mav(mlog) - else: - mg.add_field(f) - mg.set_condition(args.condition) - mg.set_xaxis(args.xaxis) - mg.set_marker(args.marker) - mg.set_legend(args.legend) - mg.set_legend2(args.legend2) - mg.set_multi(args.multi) - mg.set_flightmode(args.flightmode) - mg.process() - mg.show() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph.py deleted file mode 100755 index e715ee046..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python - -""" - - MAVProxy realtime graphing module, partly based on the wx graphing - demo by Eli Bendersky (eliben@gmail.com) - - http://eli.thegreenplace.net/files/prog_code/wx_mpl_dynamic_graph.py.txt -""" - -from MAVProxy.modules.lib import mp_util - -class LiveGraph(): - ''' - a live graph object using wx and matplotlib - All of the GUI work is done in a child process to provide some insulation - from the parent mavproxy instance and prevent instability in the GCS - - New data is sent to the LiveGraph instance via a pipe - ''' - def __init__(self, - fields, - title='MAVProxy: LiveGraph', - timespan=20.0, - tickresolution=0.2, - colors=[ 'red', 'green', 'blue', 'orange', 'olive', 'cyan', 'magenta', 'brown', 'dark green', - 'violet', 'purple', 'grey', 'black']): - import multiprocessing - self.fields = fields - self.colors = colors - self.title = title - self.timespan = timespan - self.tickresolution = tickresolution - self.values = [None]*len(self.fields) - - self.parent_pipe,self.child_pipe = multiprocessing.Pipe() - self.close_graph = multiprocessing.Event() - self.close_graph.clear() - self.child = multiprocessing.Process(target=self.child_task) - self.child.start() - - def child_task(self): - '''child process - this holds all the GUI elements''' - mp_util.child_close_fds() - - import matplotlib - import wx_processguard - from wx_loader import wx - from live_graph_ui import GraphFrame - - matplotlib.use('WXAgg') - app = wx.App(False) - app.frame = GraphFrame(state=self) - app.frame.Show() - app.MainLoop() - - def add_values(self, values): - '''add some data to the graph''' - if self.child.is_alive(): - self.parent_pipe.send(values) - - def close(self): - '''close the graph''' - self.close_graph.set() - if self.is_alive(): - self.child.join(2) - - def is_alive(self): - '''check if graph is still going''' - return self.child.is_alive() - - -if __name__ == "__main__": - # test the graph - import time, math - livegraph = LiveGraph(['sin(t)', 'cos(t)', 'sin(t+1)', - 'cos(t+1)', 'sin(t+2)', 'cos(t+2)', - 'cos(t+1)', 'sin(t+2)', 'cos(t+2)', 'x'], - timespan=30, - title='Graph Test') - while livegraph.is_alive(): - t = time.time() - livegraph.add_values([math.sin(t), math.cos(t), - math.sin(t+1), math.cos(t+1), - math.sin(t+1), math.cos(t+1), - math.sin(t+1), math.cos(t+1), - math.sin(t+2), math.cos(t+2)]) - time.sleep(0.05) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph_ui.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph_ui.py deleted file mode 100644 index 02412018d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/live_graph_ui.py +++ /dev/null @@ -1,163 +0,0 @@ -from wx_loader import wx - -class GraphFrame(wx.Frame): - """ The main frame of the application - """ - - def __init__(self, state): - wx.Frame.__init__(self, None, -1, state.title) - self.state = state - self.data = [] - for i in range(len(state.fields)): - self.data.append([]) - self.paused = False - - self.create_main_panel() - - self.Bind(wx.EVT_IDLE, self.on_idle) - - self.redraw_timer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.on_redraw_timer, self.redraw_timer) - self.redraw_timer.Start(1000*self.state.tickresolution) - - def create_main_panel(self): - from matplotlib.backends.backend_wxagg import \ - FigureCanvasWxAgg as FigCanvas - self.panel = wx.Panel(self) - - self.init_plot() - self.canvas = FigCanvas(self.panel, -1, self.fig) - - - self.close_button = wx.Button(self.panel, -1, "Close") - self.Bind(wx.EVT_BUTTON, self.on_close_button, self.close_button) - - self.pause_button = wx.Button(self.panel, -1, "Pause") - self.Bind(wx.EVT_BUTTON, self.on_pause_button, self.pause_button) - self.Bind(wx.EVT_UPDATE_UI, self.on_update_pause_button, self.pause_button) - - self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) - self.hbox1.Add(self.close_button, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL) - self.hbox1.AddSpacer(1) - self.hbox1.Add(self.pause_button, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL) - - self.vbox = wx.BoxSizer(wx.VERTICAL) - self.vbox.Add(self.canvas, 1, flag=wx.LEFT | wx.TOP | wx.GROW) - self.vbox.Add(self.hbox1, 0, flag=wx.ALIGN_LEFT | wx.TOP) - - self.panel.SetSizer(self.vbox) - self.vbox.Fit(self) - - def init_plot(self): - self.dpi = 100 - import pylab, numpy - from matplotlib.figure import Figure - self.fig = Figure((6.0, 3.0), dpi=self.dpi) - - self.axes = self.fig.add_subplot(111) - self.axes.set_axis_bgcolor('white') - - pylab.setp(self.axes.get_xticklabels(), fontsize=8) - pylab.setp(self.axes.get_yticklabels(), fontsize=8) - - # plot the data as a line series, and save the reference - # to the plotted line series - # - self.plot_data = [] - if len(self.data[0]) == 0: - max_y = min_y = 0 - else: - max_y = min_y = self.data[0][0] - for i in range(len(self.data)): - p = self.axes.plot( - self.data[i], - linewidth=1, - color=self.state.colors[i], - label=self.state.fields[i], - )[0] - self.plot_data.append(p) - if len(self.data[i]) != 0: - min_y = min(min_y, min(self.data[i])) - max_y = max(max_y, max(self.data[i])) - - # create X data - self.xdata = numpy.arange(-self.state.timespan, 0, self.state.tickresolution) - self.axes.set_xbound(lower=self.xdata[0], upper=0) - if min_y == max_y: - self.axes.set_ybound(min_y, max_y+0.1) - self.axes.legend(self.state.fields, loc='upper left', bbox_to_anchor=(0, 1.1)) - - def draw_plot(self): - """ Redraws the plot - """ - import numpy, pylab - state = self.state - - if len(self.data[0]) == 0: - print("no data to plot") - return - vhigh = max(self.data[0]) - vlow = min(self.data[0]) - - for i in range(1,len(self.plot_data)): - vhigh = max(vhigh, max(self.data[i])) - vlow = min(vlow, min(self.data[i])) - ymin = vlow - 0.05*(vhigh-vlow) - ymax = vhigh + 0.05*(vhigh-vlow) - - if ymin == ymax: - ymax = ymin + 0.1 - ymin = ymin - 0.1 - self.axes.set_ybound(lower=ymin, upper=ymax) - self.axes.grid(True, color='gray') - pylab.setp(self.axes.get_xticklabels(), visible=True) - pylab.setp(self.axes.get_legend().get_texts(), fontsize='small') - - for i in range(len(self.plot_data)): - ydata = numpy.array(self.data[i]) - xdata = self.xdata - if len(ydata) < len(self.xdata): - xdata = xdata[-len(ydata):] - self.plot_data[i].set_xdata(xdata) - self.plot_data[i].set_ydata(ydata) - - self.canvas.draw() - - def on_pause_button(self, event): - self.paused = not self.paused - - def on_update_pause_button(self, event): - label = "Resume" if self.paused else "Pause" - self.pause_button.SetLabel(label) - - def on_close_button(self, event): - self.redraw_timer.Stop() - self.Destroy() - - def on_idle(self, event): - import time - time.sleep(self.state.tickresolution*0.5) - - def on_redraw_timer(self, event): - # if paused do not add data, but still redraw the plot - # (to respond to scale modifications, grid change, etc.) - # - state = self.state - if state.close_graph.wait(0.001): - self.redraw_timer.Stop() - self.Destroy() - return - while state.child_pipe.poll(): - state.values = state.child_pipe.recv() - if self.paused: - return - for i in range(len(self.plot_data)): - if state.values[i] is not None: - self.data[i].append(state.values[i]) - while len(self.data[i]) > len(self.xdata): - self.data[i].pop(0) - - for i in range(len(self.plot_data)): - if state.values[i] is None or len(self.data[i]) < 2: - return - self.draw_plot() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mavmemlog.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mavmemlog.py deleted file mode 100644 index bf83b4b75..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mavmemlog.py +++ /dev/null @@ -1,102 +0,0 @@ -'''in-memory mavlink log''' - -from pymavlink import mavutil - -class mavmemlog(mavutil.mavfile): - '''a MAVLink log in memory. This allows loading a log into - memory to make it easier to do multiple sweeps over a log''' - def __init__(self, mav, progress_callback=None): - mavutil.mavfile.__init__(self, None, 'memlog') - self._msgs = [] - self._count = 0 - self.rewind() - self._flightmodes = [] - last_flightmode = None - last_timestamp = None - last_pct = 0 - - while True: - m = mav.recv_msg() - if m is None: - break - if int(mav.percent) != last_pct and progress_callback: - progress_callback(int(mav.percent)) - last_pct = int(mav.percent) - self._msgs.append(m) - if mav.flightmode != last_flightmode: - if len(self._flightmodes) > 0: - (mode, t1, t2) = self._flightmodes[-1] - self._flightmodes[-1] = (mode, t1, m._timestamp) - self._flightmodes.append((mav.flightmode, m._timestamp, None)) - last_flightmode = mav.flightmode - self._count += 1 - last_timestamp = m._timestamp - self.check_param(m) - if last_timestamp is not None and len(self._flightmodes) > 0: - (mode, t1, t2) = self._flightmodes[-1] - self._flightmodes[-1] = (mode, t1, last_timestamp) - - - def recv_msg(self): - '''message receive routine''' - if self._index >= self._count: - return None - m = self._msgs[self._index] - type = m.get_type() - self._index += 1 - self.percent = (100.0 * self._index) / self._count - self.messages[type] = m - self._timestamp = m._timestamp - - if self._flightmode_index < len(self._flightmodes): - (mode, tstamp, t2) = self._flightmodes[self._flightmode_index] - if m._timestamp >= tstamp: - self.flightmode = mode - self._flightmode_index += 1 - - self.check_param(m) - return m - - def check_param(self, m): - type = m.get_type() - if type == 'PARAM_VALUE': - s = str(m.param_id) - self.params[str(m.param_id)] = m.param_value - elif type == 'PARM' and getattr(m, 'Name', None) is not None: - self.params[m.Name] = m.Value - - def rewind(self): - '''rewind to start''' - self._index = 0 - self.percent = 0 - self.messages = {} - self._flightmode_index = 0 - self._timestamp = None - self.flightmode = None - self.params = {} - - def flightmode_list(self): - '''return list of all flightmodes as tuple of mode and start time''' - return self._flightmodes - - def reduce_by_flightmodes(self, flightmode_selections): - '''reduce data using flightmode selections''' - if len(flightmode_selections) == 0: - return - all_false = True - for s in flightmode_selections: - if s: - all_false = False - if all_false: - # treat all false as all modes wanted''' - return - new_msgs = [] - idx = 0 - for m in self._msgs: - while idx < len(self._flightmodes) and m._timestamp >= self._flightmodes[idx][2]: - idx += 1 - if idx < len(flightmode_selections) and flightmode_selections[idx]: - new_msgs.append(m) - self._msgs = new_msgs - self._count = len(new_msgs) - self.rewind() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_checklist.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_checklist.py deleted file mode 100755 index 76a074e86..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_checklist.py +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env python - -""" - MAVProxy checklist, implemented in a child process - Created by Stephen Dade (stephen_dade@hotmail.com) -""" - -import sys -from MAVProxy.modules.lib import mp_util -from wx_loader import wx - -class CheckItem(): - '''Checklist item used for information transfer - between threads/processes/pipes''' - def __init__(self, name, state): - self.name = name - self.state = state - - -class CheckUI(): - ''' - a checklist UI for MAVProxy - ''' - def __init__(self, title='MAVProxy: Checklist'): - import multiprocessing, threading - self.title = title - self.menu_callback = None - self.parent_pipe,self.child_pipe = multiprocessing.Pipe() - self.close_event = multiprocessing.Event() - self.close_event.clear() - self.child = multiprocessing.Process(target=self.child_task) - self.child.start() - - def child_task(self): - '''child process - this holds all the GUI elements''' - mp_util.child_close_fds() - from wx_loader import wx - - app = wx.App(False) - app.frame = ChecklistFrame(state=self, title=self.title) - app.frame.Show() - app.MainLoop() - - def close(self): - '''close the UI''' - self.close_event.set() - if self.is_alive(): - self.child.join(2) - - def is_alive(self): - '''check if child is still going''' - return self.child.is_alive() - - def set_check(self, name, state): - '''set a status value''' - if self.child.is_alive(): - self.parent_pipe.send(CheckItem(name, state)) - - -class ChecklistFrame(wx.Frame): - """ The main frame of the console""" - - def __init__(self, state, title): - self.state = state - wx.Frame.__init__(self, None, title=title, size=(350,400), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER) - - #use tabs for the individual checklists - self.createLists() - self.panel = wx.Panel(self) - self.nb = wx.Choicebook(self.panel, wx.ID_ANY) - - #create the tabs - self.createWidgets() - - #assign events to the buttons on the tabs - self.createActions() - - #add in the pipe from MAVProxy - self.timer = wx.Timer(self) - #self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) - self.Bind(wx.EVT_TIMER, lambda evt, notebook=self.nb: self.on_timer(evt, notebook), self.timer) - self.timer.Start(100) - - # finally, put the notebook in a sizer for the panel to manage - # the layout - sizer = wx.BoxSizer() - sizer.Add(self.nb, 1, wx.EXPAND) - self.panel.SetSizer(sizer) - - self.Show(True) - self.pending = [] - - #Create the checklist items - def createLists(self): - '''Generate the checklists. Note that: - 0,1 = off/on for auto-ticked items - 2,3 = off/on for manually ticked items''' - - self.beforeAssemblyList = { - 'Confirm batteries charged':2, - 'No physical damage to airframe':2, - 'All electronics present and connected':2, - 'Bottle loaded':2, - 'Ground station operational':2 - } - - self.beforeEngineList = { - 'Avionics Power ON':2, - 'Pixhawk Booted':0, - 'Odroid Booted':2, - 'Cameras calibrated and capturing':2, - 'GPS lock':0, - 'Airspeed check':2, - 'Barometer check':2, - 'Compass check':2, - 'Flight mode MANUAL':0, - 'Avionics Power':0, - 'Servo Power':0, - 'IMU Check':0, - 'Aircraft Params Loaded':2, - 'Waypoints Loaded':0, - 'Servo and clevis check':2, - 'Geofence loaded':2, - 'Ignition circuit and battery check':2, - 'Check stabilisation in FBWA mode':2 - } - - self.beforeTakeoffList = { - 'Engine throttle responsive':2, - 'Runway clear':2, - 'Radio links > 6db margin':0, - 'Antenna tracker check':2, - 'GCS stable':2, - } - - self.beforeCruiseList = { - 'Airspeed > 10 m/s':0, - 'Altitude > 30 m':0, - '< 100 degrees to 1st Waypoint':2, - 'Airspeed and climb rate nominal':2 - } - - self.bottleDropList = { - 'Joe found':2, - 'Joe waypoint laid in':2, - '< 100m to Joe waypoint':2, - 'Bottle drop mechanism activated':2 - } - - self.beforeLandingList = { - 'Runway clear':2, - 'APM set to FBWA mode':2, - '< 100m from airfield home':2 - } - - self.beforeShutdownList = { - 'Taxi to parking':2, - 'Engine cutoff':2, - 'Data downloaded':2, - 'Ignition power off':2, - 'Avionics power off':2 - } - - # create controls on form - labels, buttons, etc - def createWidgets(self): - #create the panels for the tabs - PanelAssembly = wx.Panel(self.nb) - boxAssembly = wx.BoxSizer(wx.VERTICAL) - PanelAssembly.SetAutoLayout(True) - PanelAssembly.SetSizer(boxAssembly) - PanelAssembly.Layout() - - PanelEngine = wx.Panel(self.nb) - boxEngine = wx.BoxSizer(wx.VERTICAL) - PanelEngine.SetAutoLayout(True) - PanelEngine.SetSizer(boxEngine) - PanelEngine.Layout() - - PanelTakeoff = wx.Panel(self.nb) - boxTakeoff = wx.BoxSizer(wx.VERTICAL) - PanelTakeoff.SetAutoLayout(True) - PanelTakeoff.SetSizer(boxTakeoff) - PanelTakeoff.Layout() - - PanelCruise = wx.Panel(self.nb) - boxCruise = wx.BoxSizer(wx.VERTICAL) - PanelCruise.SetAutoLayout(True) - PanelCruise.SetSizer(boxCruise) - PanelCruise.Layout() - - PanelDrop = wx.Panel(self.nb) - boxDrop = wx.BoxSizer(wx.VERTICAL) - PanelDrop.SetAutoLayout(True) - PanelDrop.SetSizer(boxDrop) - PanelDrop.Layout() - - PanelLanding = wx.Panel(self.nb) - boxLanding = wx.BoxSizer(wx.VERTICAL) - PanelLanding.SetAutoLayout(True) - PanelLanding.SetSizer(boxLanding) - PanelLanding.Layout() - - PanelShutdown = wx.Panel(self.nb) - boxShutdown = wx.BoxSizer(wx.VERTICAL) - PanelShutdown.SetAutoLayout(True) - PanelShutdown.SetSizer(boxShutdown) - PanelShutdown.Layout() - - #add the data to the individual tabs - - '''before assembly checklist''' - for key in self.beforeAssemblyList: - if self.beforeAssemblyList[key] == 0: - disCheckBox = wx.CheckBox(PanelAssembly, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxAssembly.Add(disCheckBox) - if self.beforeAssemblyList[key] == 2: - boxAssembly.Add(wx.CheckBox(PanelAssembly, wx.ID_ANY, key)) - - self.AssemblyButton = wx.Button(PanelAssembly, wx.ID_ANY, "Close final hatches") - boxAssembly.Add(self.AssemblyButton) - - '''before Engine Start checklist''' - for key in self.beforeEngineList: - if self.beforeEngineList[key] == 0: - disCheckBox = wx.CheckBox(PanelEngine, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxEngine.Add(disCheckBox) - if self.beforeEngineList[key] == 2: - boxEngine.Add(wx.CheckBox(PanelEngine, wx.ID_ANY, key)) - - self.EngineButton = wx.Button(PanelEngine, wx.ID_ANY, "Ready for Engine start") - boxEngine.Add(self.EngineButton) - - '''before takeoff checklist''' - for key in self.beforeTakeoffList: - if self.beforeTakeoffList[key] == 0: - disCheckBox = wx.CheckBox(PanelTakeoff, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxTakeoff.Add(disCheckBox) - if self.beforeTakeoffList[key] == 2: - boxTakeoff.Add(wx.CheckBox(PanelTakeoff, wx.ID_ANY, key)) - - self.TakeoffButton = wx.Button(PanelTakeoff, wx.ID_ANY, "Ready for Takeoff") - boxTakeoff.Add(self.TakeoffButton) - - '''before cruise/AUTO checklist''' - for key in self.beforeCruiseList: - if self.beforeCruiseList[key] == 0: - disCheckBox = wx.CheckBox(PanelCruise, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxCruise.Add(disCheckBox) - if self.beforeCruiseList[key] == 2: - boxCruise.Add(wx.CheckBox(PanelCruise, wx.ID_ANY, key)) - - self.CruiseButton = wx.Button(PanelCruise, wx.ID_ANY, "Ready for Cruise/AUTO") - boxCruise.Add(self.CruiseButton) - - '''before bottle drop checklist''' - for key in self.bottleDropList: - if self.bottleDropList[key] == 0: - disCheckBox = wx.CheckBox(PanelDrop, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxDrop.Add(disCheckBox) - if self.bottleDropList[key] == 2: - boxDrop.Add(wx.CheckBox(PanelDrop, wx.ID_ANY, key)) - - self.DropButton = wx.Button(PanelDrop, wx.ID_ANY, "Ready for Bottle Drop") - boxDrop.Add(self.DropButton) - - '''before landing checklist''' - for key in self.beforeLandingList: - if self.beforeLandingList[key] == 0: - disCheckBox = wx.CheckBox(PanelLanding, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxLanding.Add(disCheckBox) - if self.beforeLandingList[key] == 2: - boxLanding.Add(wx.CheckBox(PanelLanding, wx.ID_ANY, key)) - - self.LandingButton = wx.Button(PanelLanding, wx.ID_ANY, "Ready for Landing") - boxLanding.Add(self.LandingButton) - - '''before shutdown checklist''' - for key in self.beforeShutdownList: - if self.beforeShutdownList[key] == 0: - disCheckBox = wx.CheckBox(PanelShutdown, wx.ID_ANY, key) - disCheckBox.Enable(False) - boxShutdown.Add(disCheckBox) - if self.beforeShutdownList[key] == 2: - boxShutdown.Add(wx.CheckBox(PanelShutdown, wx.ID_ANY, key)) - - self.ShutdownButton = wx.Button(PanelShutdown, wx.ID_ANY, "Ready for Shutdown") - boxShutdown.Add(self.ShutdownButton) - - #and add in the tabs - self.nb.AddPage(PanelAssembly, "1. During Assembly") - self.nb.AddPage(PanelEngine, "2. Before Engine Start") - self.nb.AddPage(PanelTakeoff, "3. Before Takeoff") - self.nb.AddPage(PanelCruise, "4. Before Cruise/AUTO") - self.nb.AddPage(PanelDrop, "5. Before Bottle Drop") - self.nb.AddPage(PanelLanding, "6. Before Landing") - self.nb.AddPage(PanelShutdown, "7. Before Shutdown") - - #Create the actions for the buttons - def createActions(self): - self.Bind(wx.EVT_BUTTON, self.on_Button, self.AssemblyButton) - self.Bind(wx.EVT_BUTTON, self.on_Button, self.EngineButton) - self.Bind(wx.EVT_BUTTON, self.on_Button, self.TakeoffButton) - self.Bind(wx.EVT_BUTTON, self.on_Button, self.CruiseButton) - self.Bind(wx.EVT_BUTTON, self.on_Button, self.DropButton) - self.Bind(wx.EVT_BUTTON, self.on_Button, self.LandingButton) - self.Bind(wx.EVT_BUTTON, self.on_ButtonLast, self.ShutdownButton) - - #do a final check of the current panel and move to the next - def on_Button( self, event ): - win = (event.GetEventObject()).GetParent() - for widget in win.GetChildren(): - if type(widget) is wx.CheckBox and widget.IsChecked() == 0: - dlg = wx.MessageDialog(win, "Not all items checked", "Error", wx.OK | wx.ICON_WARNING) - dlg.ShowModal() - dlg.Destroy() - return - #all checked, go to next panel. - win.GetParent().AdvanceSelection() - - #Special implementation of the above function, but for the last tab - def on_ButtonLast( self, event ): - win = (event.GetEventObject()).GetParent() - for widget in win.GetChildren(): - if type(widget) is wx.CheckBox and widget.IsChecked() == 0: - dlg = wx.MessageDialog(win, "Not all items checked", "Error", wx.OK | wx.ICON_WARNING) - dlg.ShowModal() - dlg.Destroy() - return - #all checked, we're done. - dlg = wx.MessageDialog(win, "Checklist Complete", "Done", wx.OK | wx.ICON_INFORMATION) - dlg.ShowModal() - dlg.Destroy() - - #Recieve messages from MAVProxy and process them - def on_timer(self, event, notebook): - state = self.state - win = notebook.GetPage(notebook.GetSelection()) - if state.close_event.wait(0.001): - self.timer.Stop() - self.Destroy() - return - while state.child_pipe.poll(): - obj = state.child_pipe.recv() - if isinstance(obj, CheckItem): - #go through each item in the current tab and (un)check as needed - #print obj.name + ", " + str(obj.state) - for widget in win.GetChildren(): - if type(widget) is wx.CheckBox and widget.GetLabel() == obj.name: - widget.SetValue(obj.state) - - -if __name__ == "__main__": - # test the console - import time - - checklist = CheckUI() - - #example auto-tick in second tab page - while checklist.is_alive(): - checklist.set_check("Compass Calibrated", 1) - time.sleep(0.5) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_image.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_image.py deleted file mode 100755 index 3088320e3..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_image.py +++ /dev/null @@ -1,539 +0,0 @@ -#!/usr/bin/env python -''' -display a image in a subprocess -Andrew Tridgell -June 2012 -''' - -import time -from wx_loader import wx - -try: - import cv2.cv as cv -except ImportError: - import cv - -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_widgets -from MAVProxy.modules.lib.mp_menu import * - - -class MPImageData: - '''image data to display''' - def __init__(self, img): - self.width = img.width - self.height = img.height - self.data = img.tostring() - -class MPImageTitle: - '''window title to use''' - def __init__(self, title): - self.title = title - -class MPImageBrightness: - '''image brightness to use''' - def __init__(self, brightness): - self.brightness = brightness - -class MPImageFitToWindow: - '''fit image to window''' - def __init__(self): - pass - -class MPImageFullSize: - '''show full image resolution''' - def __init__(self): - pass - -class MPImageMenu: - '''window menu to add''' - def __init__(self, menu): - self.menu = menu - -class MPImagePopupMenu: - '''popup menu to add''' - def __init__(self, menu): - self.menu = menu - -class MPImageNewSize: - '''reported to parent when window size changes''' - def __init__(self, size): - self.size = size - -class MPImage(): - ''' - a generic image viewer widget for use in MP tools - ''' - def __init__(self, - title='MPImage', - width=512, - height=512, - can_zoom = False, - can_drag = False, - mouse_events = False, - key_events = False, - auto_size = False, - report_size_changes = False, - daemon = False): - import multiprocessing - - self.title = title - self.width = width - self.height = height - self.can_zoom = can_zoom - self.can_drag = can_drag - self.mouse_events = mouse_events - self.key_events = key_events - self.auto_size = auto_size - self.report_size_changes = report_size_changes - self.menu = None - self.popup_menu = None - - from multiprocessing_queue import makeIPCQueue - self.in_queue = makeIPCQueue() - self.out_queue = makeIPCQueue() - - self.default_menu = MPMenuSubMenu('View', - items=[MPMenuItem('Fit Window', 'Fit Window', 'fitWindow'), - MPMenuItem('Full Zoom', 'Full Zoom', 'fullSize')]) - - self.child = multiprocessing.Process(target=self.child_task) - self.child.daemon = daemon - self.child.start() - self.set_popup_menu(self.default_menu) - - def child_task(self): - '''child process - this holds all the GUI elements''' - mp_util.child_close_fds() - from wx_loader import wx - state = self - - self.app = wx.App(False) - self.app.frame = MPImageFrame(state=self) - self.app.frame.Show() - self.app.MainLoop() - - def is_alive(self): - '''check if child is still going''' - return self.child.is_alive() - - def set_image(self, img, bgr=False): - '''set the currently displayed image''' - if not self.is_alive(): - return - if bgr: - img = cv.CloneImage(img) - cv.CvtColor(img, img, cv.CV_BGR2RGB) - self.in_queue.put(MPImageData(img)) - - def set_title(self, title): - '''set the frame title''' - self.in_queue.put(MPImageTitle(title)) - - def set_brightness(self, brightness): - '''set the image brightness''' - self.in_queue.put(MPImageBrightness(brightness)) - - def fit_to_window(self): - '''fit the image to the window''' - self.in_queue.put(MPImageFitToWindow()) - - def full_size(self): - '''show the full image resolution''' - self.in_queue.put(MPImageFullSize()) - - def set_menu(self, menu): - '''set a MPTopMenu on the frame''' - self.menu = menu - self.in_queue.put(MPImageMenu(menu)) - - def set_popup_menu(self, menu): - '''set a popup menu on the frame''' - self.popup_menu = menu - self.in_queue.put(MPImagePopupMenu(menu)) - - def get_menu(self): - '''get the current frame menu''' - return self.menu - - def get_popup_menu(self): - '''get the current popup menu''' - return self.popup_menu - - def poll(self): - '''check for events, returning one event''' - if self.out_queue.qsize(): - return self.out_queue.get() - return None - - def events(self): - '''check for events a list of events''' - ret = [] - while self.out_queue.qsize(): - ret.append(self.out_queue.get()) - return ret - - def terminate(self): - '''terminate child process''' - self.child.terminate() - self.child.join() - -class MPImageFrame(wx.Frame): - """ The main frame of the viewer - """ - def __init__(self, state): - wx.Frame.__init__(self, None, wx.ID_ANY, state.title) - self.state = state - state.frame = self - self.sizer = wx.BoxSizer(wx.VERTICAL) - state.panel = MPImagePanel(self, state) - self.sizer.Add(state.panel, 1, wx.EXPAND) - self.SetSizer(self.sizer) - self.Bind(wx.EVT_IDLE, self.on_idle) - self.Bind(wx.EVT_SIZE, state.panel.on_size) - - def on_idle(self, event): - '''prevent the main loop spinning too fast''' - state = self.state - time.sleep(0.1) - -class MPImagePanel(wx.Panel): - """ The image panel - """ - def __init__(self, parent, state): - wx.Panel.__init__(self, parent) - self.frame = parent - self.state = state - self.img = None - self.redraw_timer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.on_redraw_timer, self.redraw_timer) - self.Bind(wx.EVT_SET_FOCUS, self.on_focus) - self.redraw_timer.Start(100) - - self.mouse_down = None - self.drag_step = 10 - self.zoom = 1.0 - self.menu = None - self.popup_menu = None - self.wx_popup_menu = None - self.popup_pos = None - self.last_size = None - self.done_PIL_warning = False - state.brightness = 1.0 - - # dragpos is the top left position in image coordinates - self.dragpos = wx.Point(0,0) - self.need_redraw = True - - self.mainSizer = wx.BoxSizer(wx.VERTICAL) - self.SetSizer(self.mainSizer) - - # panel for the main image - self.imagePanel = mp_widgets.ImagePanel(self, wx.EmptyImage(state.width,state.height)) - self.mainSizer.Add(self.imagePanel, flag=wx.TOP|wx.LEFT|wx.GROW, border=0) - if state.mouse_events: - self.imagePanel.Bind(wx.EVT_MOUSE_EVENTS, self.on_event) - else: - self.imagePanel.Bind(wx.EVT_MOUSE_EVENTS, self.on_mouse_event) - if state.key_events: - self.imagePanel.Bind(wx.EVT_KEY_DOWN, self.on_event) - else: - self.imagePanel.Bind(wx.EVT_KEY_DOWN, self.on_key_event) - self.imagePanel.Bind(wx.EVT_MOUSEWHEEL, self.on_mouse_wheel) - - self.redraw() - state.frame.Fit() - - def on_focus(self, event): - self.imagePanel.SetFocus() - - def on_focus(self, event): - '''called when the panel gets focus''' - self.imagePanel.SetFocus() - - def image_coordinates(self, point): - '''given a point in window coordinates, calculate image coordinates''' - # the dragpos is the top left position in image coordinates - ret = wx.Point(int(self.dragpos.x + point.x/self.zoom), - int(self.dragpos.y + point.y/self.zoom)) - return ret - - def redraw(self): - '''redraw the image with current settings''' - state = self.state - - if self.img is None: - self.mainSizer.Fit(self) - self.Refresh() - state.frame.Refresh() - self.SetFocus() - return - - # get the current size of the containing window frame - size = self.frame.GetSize() - (width, height) = (self.img.GetWidth(), self.img.GetHeight()) - - rect = wx.Rect(self.dragpos.x, self.dragpos.y, int(size.x/self.zoom), int(size.y/self.zoom)) - - #print("redraw", self.zoom, self.dragpos, size, rect); - - if rect.x > width-1: - rect.x = width-1 - if rect.y > height-1: - rect.y = height-1 - if rect.width > width - rect.x: - rect.width = width - rect.x - if rect.height > height - rect.y: - rect.height = height - rect.y - - scaled_image = self.img.Copy() - scaled_image = scaled_image.GetSubImage(rect); - scaled_image = scaled_image.Rescale(int(rect.width*self.zoom), int(rect.height*self.zoom)) - if state.brightness != 1.0: - try: - from PIL import Image - pimg = mp_util.wxToPIL(scaled_image) - pimg = Image.eval(pimg, lambda x: int(x * state.brightness)) - scaled_image = mp_util.PILTowx(pimg) - except Exception: - if not self.done_PIL_warning: - print("Please install PIL for brightness control") - self.done_PIL_warning = True - # ignore lack of PIL library - pass - self.imagePanel.set_image(scaled_image) - self.need_redraw = False - - self.mainSizer.Fit(self) - self.Refresh() - state.frame.Refresh() - self.SetFocus() - ''' - from guppy import hpy - h = hpy() - print h.heap() - ''' - - - def on_redraw_timer(self, event): - '''the redraw timer ensures we show new map tiles as they - are downloaded''' - state = self.state - while state.in_queue.qsize(): - obj = state.in_queue.get() - if isinstance(obj, MPImageData): - img = wx.EmptyImage(obj.width, obj.height) - img.SetData(obj.data) - self.img = img - self.need_redraw = True - if state.auto_size: - client_area = state.frame.GetClientSize() - total_area = state.frame.GetSize() - bx = max(total_area.x - client_area.x,0) - by = max(total_area.y - client_area.y,0) - state.frame.SetSize(wx.Size(obj.width+bx, obj.height+by)) - if isinstance(obj, MPImageTitle): - state.frame.SetTitle(obj.title) - if isinstance(obj, MPImageMenu): - self.set_menu(obj.menu) - if isinstance(obj, MPImagePopupMenu): - self.set_popup_menu(obj.menu) - if isinstance(obj, MPImageBrightness): - state.brightness = obj.brightness - self.need_redraw = True - if isinstance(obj, MPImageFullSize): - self.full_size() - if isinstance(obj, MPImageFitToWindow): - self.fit_to_window() - if self.need_redraw: - self.redraw() - - def on_size(self, event): - '''handle window size changes''' - state = self.state - self.need_redraw = True - if state.report_size_changes: - # tell owner the new size - size = self.frame.GetSize() - if size != self.last_size: - self.last_size = size - state.out_queue.put(MPImageNewSize(size)) - - def limit_dragpos(self): - '''limit dragpos to sane values''' - if self.dragpos.x < 0: - self.dragpos.x = 0 - if self.dragpos.y < 0: - self.dragpos.y = 0 - if self.img is None: - return - if self.dragpos.x >= self.img.GetWidth(): - self.dragpos.x = self.img.GetWidth()-1 - if self.dragpos.y >= self.img.GetHeight(): - self.dragpos.y = self.img.GetHeight()-1 - - def on_mouse_wheel(self, event): - '''handle mouse wheel zoom changes''' - state = self.state - if not state.can_zoom: - return - mousepos = self.image_coordinates(event.GetPosition()) - rotation = event.GetWheelRotation() / event.GetWheelDelta() - oldzoom = self.zoom - if rotation > 0: - self.zoom /= 1.0/(1.1 * rotation) - elif rotation < 0: - self.zoom /= 1.1 * (-rotation) - if self.zoom > 10: - self.zoom = 10 - elif self.zoom < 0.1: - self.zoom = 0.1 - if oldzoom < 1 and self.zoom > 1: - self.zoom = 1 - if oldzoom > 1 and self.zoom < 1: - self.zoom = 1 - self.need_redraw = True - new = self.image_coordinates(event.GetPosition()) - # adjust dragpos so the zoom doesn't change what pixel is under the mouse - self.dragpos = wx.Point(self.dragpos.x - (new.x-mousepos.x), self.dragpos.y - (new.y-mousepos.y)) - self.limit_dragpos() - - def on_drag_event(self, event): - '''handle mouse drags''' - state = self.state - if not state.can_drag: - return - newpos = self.image_coordinates(event.GetPosition()) - dx = -(newpos.x - self.mouse_down.x) - dy = -(newpos.y - self.mouse_down.y) - self.dragpos = wx.Point(self.dragpos.x+dx,self.dragpos.y+dy) - self.limit_dragpos() - self.mouse_down = newpos - self.need_redraw = True - self.redraw() - - def show_popup_menu(self, pos): - '''show a popup menu''' - self.popup_pos = self.image_coordinates(pos) - self.frame.PopupMenu(self.wx_popup_menu, pos) - - def on_mouse_event(self, event): - '''handle mouse events''' - pos = event.GetPosition() - if event.RightDown() and self.popup_menu is not None: - self.show_popup_menu(pos) - return - if event.Leaving(): - self.mouse_pos = None - else: - self.mouse_pos = pos - - if event.LeftDown(): - self.mouse_down = self.image_coordinates(pos) - if event.Dragging() and event.ButtonIsDown(wx.MOUSE_BTN_LEFT): - self.on_drag_event(event) - - def on_key_event(self, event): - '''handle key events''' - keycode = event.GetKeyCode() - if keycode == wx.WXK_HOME: - self.zoom = 1.0 - self.dragpos = wx.Point(0, 0) - self.need_redraw = True - - def on_event(self, event): - '''pass events to the parent''' - state = self.state - if isinstance(event, wx.MouseEvent): - self.on_mouse_event(event) - if isinstance(event, wx.KeyEvent): - self.on_key_event(event) - if (isinstance(event, wx.MouseEvent) and - not event.ButtonIsDown(wx.MOUSE_BTN_ANY) and - event.GetWheelRotation() == 0): - # don't flood the queue with mouse movement - return - evt = mp_util.object_container(event) - pt = self.image_coordinates(wx.Point(evt.X,evt.Y)) - evt.X = pt.x - evt.Y = pt.y - state.out_queue.put(evt) - - def on_menu(self, event): - '''called on menu event''' - state = self.state - if self.popup_menu is not None: - ret = self.popup_menu.find_selected(event) - if ret is not None: - ret.popup_pos = self.popup_pos - if ret.returnkey == 'fitWindow': - self.fit_to_window() - elif ret.returnkey == 'fullSize': - self.full_size() - else: - state.out_queue.put(ret) - return - if self.menu is not None: - ret = self.menu.find_selected(event) - if ret is not None: - state.out_queue.put(ret) - return - - def set_menu(self, menu): - '''add a menu from the parent''' - self.menu = menu - wx_menu = menu.wx_menu() - self.frame.SetMenuBar(wx_menu) - self.frame.Bind(wx.EVT_MENU, self.on_menu) - - def set_popup_menu(self, menu): - '''add a popup menu from the parent''' - self.popup_menu = menu - if menu is None: - self.wx_popup_menu = None - else: - self.wx_popup_menu = menu.wx_menu() - self.frame.Bind(wx.EVT_MENU, self.on_menu) - - def fit_to_window(self): - '''fit image to window''' - state = self.state - self.dragpos = wx.Point(0, 0) - client_area = state.frame.GetClientSize() - self.zoom = min(float(client_area.x) / self.img.GetWidth(), - float(client_area.y) / self.img.GetHeight()) - self.need_redraw = True - - def full_size(self): - '''show image at full size''' - self.dragpos = wx.Point(0, 0) - self.zoom = 1.0 - self.need_redraw = True - -if __name__ == "__main__": - from optparse import OptionParser - parser = OptionParser("mp_image.py ") - parser.add_option("--zoom", action='store_true', default=False, help="allow zoom") - parser.add_option("--drag", action='store_true', default=False, help="allow drag") - parser.add_option("--autosize", action='store_true', default=False, help="auto size window") - (opts, args) = parser.parse_args() - - im = MPImage(mouse_events=True, - key_events=True, - can_drag = opts.drag, - can_zoom = opts.zoom, - auto_size = opts.autosize) - img = cv.LoadImage(args[0]) - im.set_image(img, bgr=True) - - while im.is_alive(): - for event in im.events(): - if isinstance(event, MPMenuItem): - print(event) - continue - print (event.ClassName) - if event.ClassName == 'wxMouseEvent': - print ('mouse', event.X, event.Y) - if event.ClassName == 'wxKeyEvent': - print ('key %u' % event.KeyCode) - time.sleep(0.1) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_menu.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_menu.py deleted file mode 100644 index 59e193566..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_menu.py +++ /dev/null @@ -1,365 +0,0 @@ -#!/usr/bin/env python -''' -menu handling widgets for wx - -Andrew Tridgell -November 2013 -''' - -from MAVProxy.modules.lib import mp_util - -class MPMenuGeneric(object): - '''a MP menu separator''' - def __init__(self): - pass - - def find_selected(self, event): - return None - - def _append(self, menu): - '''append this menu item to a menu''' - pass - - def __str__(self): - return "MPMenuGeneric()" - - def __repr__(self): - return str(self.__str__()) - -class MPMenuSeparator(MPMenuGeneric): - '''a MP menu separator''' - def __init__(self): - MPMenuGeneric.__init__(self) - - def _append(self, menu): - '''append this menu item to a menu''' - menu.AppendSeparator() - - def __str__(self): - return "MPMenuSeparator()" - - -class MPMenuItem(MPMenuGeneric): - '''a MP menu item''' - def __init__(self, name, description='', returnkey=None, handler=None): - MPMenuGeneric.__init__(self) - self.name = name - self.description = description - self.returnkey = returnkey - self.handler = handler - self.handler_result = None - - def find_selected(self, event): - '''find the selected menu item''' - if event.GetId() == self.id(): - return self - return None - - def call_handler(self): - '''optionally call a handler function''' - if self.handler is None: - return - call = getattr(self.handler, 'call', None) - if call is not None: - self.handler_result = call() - - def id(self): - '''id used to identify the returned menu items - uses a 16 bit signed integer''' - # 0x7FFF is used as windows only allows for 16 bit IDs - return int(hash((self.name, self.returnkey)) & 0x7FFF) - - def _append(self, menu): - '''append this menu item to a menu''' - menu.Append(self.id(), self.name, self.description) - - def __str__(self): - return "MPMenuItem(%s,%s,%s)" % (self.name, self.description, self.returnkey) - - -class MPMenuCheckbox(MPMenuItem): - '''a MP menu item as a checkbox''' - def __init__(self, name, description='', returnkey=None, checked=False, handler=None): - MPMenuItem.__init__(self, name, description=description, returnkey=returnkey, handler=handler) - self.checked = checked - - def find_selected(self, event): - '''find the selected menu item''' - if event.GetId() == self.id(): - self.checked = event.IsChecked() - return self - return None - - def IsChecked(self): - '''return true if item is checked''' - return self.checked - - def _append(self, menu): - '''append this menu item to a menu''' - menu.AppendCheckItem(self.id(), self.name, self.description) - menu.Check(self.id(), self.checked) - - def __str__(self): - return "MPMenuCheckbox(%s,%s,%s,%s)" % (self.name, self.description, self.returnkey, str(self.checked)) - -class MPMenuRadio(MPMenuItem): - '''a MP menu item as a radio item''' - def __init__(self, name, description='', returnkey=None, selected=None, items=[], handler=None): - MPMenuItem.__init__(self, name, description=description, returnkey=returnkey, handler=handler) - self.items = items - self.choice = 0 - self.initial = selected - - def set_choices(self, items): - '''set radio item choices''' - self.items = items - - def get_choice(self): - '''return the chosen item''' - return self.items[self.choice] - - def find_selected(self, event): - '''find the selected menu item''' - first = self.id() - last = first + len(self.items) - 1 - evid = event.GetId() - if evid >= first and evid <= last: - self.choice = evid - first - return self - return None - - def _append(self, menu): - '''append this menu item to a menu''' - from wx_loader import wx - submenu = wx.Menu() - for i in range(len(self.items)): - submenu.AppendRadioItem(self.id()+i, self.items[i], self.description) - if self.items[i] == self.initial: - submenu.Check(self.id()+i, True) - menu.AppendMenu(-1, self.name, submenu) - - def __str__(self): - return "MPMenuRadio(%s,%s,%s,%s)" % (self.name, self.description, self.returnkey, self.get_choice()) - - -class MPMenuSubMenu(MPMenuGeneric): - '''a MP menu item''' - def __init__(self, name, items): - MPMenuGeneric.__init__(self) - self.name = name - self.items = items - - def add(self, items, addto=None): - '''add more items to a sub-menu''' - if not isinstance(items, list): - items = [items] - for m in items: - updated = False - for i in range(len(self.items)): - try: - if self.items[i].name == m.name: - self.items[i] = m - updated = True - except Exception: - pass - if not updated: - self.items.append(m) - - def add_to_submenu(self, submenu_path, item): - '''add an item to a submenu using a menu path array''' - if len(submenu_path) == 0: - self.add(item) - return - for m in self.items: - if isinstance(m, MPMenuSubMenu) and submenu_path[0] == m.name: - m.add_to_submenu(submenu_path[1:], item) - return - self.add(MPMenuSubMenu(submenu_path[0], [])) - self.add_to_submenu(submenu_path, item) - - def combine(self, submenu): - '''combine a new menu with an existing one''' - self.items.extend(submenu.items) - - def wx_menu(self): - '''return a wx.Menu() for this menu''' - from wx_loader import wx - menu = wx.Menu() - for i in range(len(self.items)): - m = self.items[i] - m._append(menu) - return menu - - def find_selected(self, event): - '''find the selected menu item''' - for m in self.items: - ret = m.find_selected(event) - if ret is not None: - return ret - return None - - def _append(self, menu): - '''append this menu item to a menu''' - from wx_loader import wx - - menu.AppendMenu(-1, self.name, self.wx_menu()) - - def __str__(self): - return "MPMenuSubMenu(%s)" % (self.name) - - -class MPMenuTop(object): - '''a MP top level menu''' - def __init__(self, items): - self.items = items - - def add(self, items): - '''add a submenu''' - if not isinstance(items, list): - items = [items] - for m in items: - updated = False - for i in range(len(self.items)): - if self.items[i].name == m.name: - self.items[i] = m - updated = True - if not updated: - self.items.append(m) - - def wx_menu(self): - '''return a wx.MenuBar() for the menu''' - from wx_loader import wx - - menubar = wx.MenuBar() - for i in range(len(self.items)): - m = self.items[i] - menubar.Append(m.wx_menu(), m.name) - return menubar - - def find_selected(self, event): - '''find the selected menu item''' - for i in range(len(self.items)): - m = self.items[i] - ret = m.find_selected(event) - if ret is not None: - return ret - return None - -class MPMenuCallFileDialog(object): - '''used to create a file dialog callback''' - def __init__(self, flags=None, title='Filename', wildcard='*.*'): - self.flags = flags or ('open',) - self.title = title - self.wildcard = wildcard - - def call(self): - '''show a file dialog''' - from wx_loader import wx - - # remap flags to wx descriptors - flag_map = { - 'open': wx.FD_OPEN, - 'save': wx.FD_SAVE, - 'overwrite_prompt': wx.FD_OVERWRITE_PROMPT, - } - flags = map(lambda x: flag_map[x], self.flags) - - dlg = wx.FileDialog(None, self.title, '', "", self.wildcard, flags) - if dlg.ShowModal() != wx.ID_OK: - return None - return dlg.GetPath() - -class MPMenuCallTextDialog(object): - '''used to create a value dialog callback''' - def __init__(self, title='Enter Value', default=''): - self.title = title - self.default = default - - def call(self): - '''show a value dialog''' - from wx_loader import wx - - dlg = wx.TextEntryDialog(None, self.title, self.title, defaultValue=str(self.default)) - if dlg.ShowModal() != wx.ID_OK: - return None - return dlg.GetValue() - -class MPMenuChildMessageDialog(object): - '''used to create a message dialog in a child process''' - def __init__(self, title='Information', message='', font_size=18): - self.title = title - self.message = message - self.font_size = font_size - - def show(self): - import multiprocessing - t = multiprocessing.Process(target=self.call) - t.start() - - def call(self): - '''show the dialog as a child process''' - mp_util.child_close_fds() - import wx_processguard - from wx_loader import wx - from wx.lib.agw.genericmessagedialog import GenericMessageDialog - app = wx.App(False) - # note! font size change is not working. I don't know why yet - font = wx.Font(self.font_size, wx.MODERN, wx.NORMAL, wx.NORMAL) - dlg = GenericMessageDialog(None, self.message, self.title, wx.ICON_INFORMATION|wx.OK) - dlg.SetFont(font) - dlg.ShowModal() - app.MainLoop() - -class MPMenuOpenWeblink(object): - '''used to open a weblink in the default webbrowser''' - def __init__(self, url='www.google.com'): - self.url = url - - def call(self): - '''show the dialog as a child process''' - import webbrowser - webbrowser.open_new_tab(self.url) - -if __name__ == '__main__': - from MAVProxy.modules.lib.mp_image import MPImage - import time - im = MPImage(mouse_events=True, - key_events=True, - can_drag = False, - can_zoom = False, - auto_size = True) - - menu = MPMenuTop([MPMenuSubMenu('&File', - items=[MPMenuItem('&Open\tCtrl+O'), - MPMenuItem('&Save\tCtrl+S'), - MPMenuItem('Close', 'Close'), - MPMenuItem('&Quit\tCtrl+Q', 'Quit')]), - MPMenuSubMenu('Edit', - items=[MPMenuSubMenu('Option', - items=[MPMenuItem('Foo'), - MPMenuItem('Bar'), - MPMenuSeparator(), - MPMenuCheckbox('&Grid\tCtrl+G')]), - MPMenuItem('Image', 'EditImage'), - MPMenuRadio('Colours', - items=['Red','Green','Blue']), - MPMenuRadio('Shapes', - items=['Circle','Square','Triangle'])])]) - - im.set_menu(menu) - - popup = MPMenuSubMenu('A Popup', - items=[MPMenuItem('Sub1'), - MPMenuItem('Sub2'), - MPMenuItem('Sub3')]) - - im.set_popup_menu(popup) - - while im.is_alive(): - for event in im.events(): - if isinstance(event, MPMenuItem): - print(event, getattr(event, 'popup_pos', None)) - continue - else: - print(event) - time.sleep(0.1) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_module.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_module.py deleted file mode 100644 index 312346461..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_module.py +++ /dev/null @@ -1,112 +0,0 @@ - -class MPModule(object): - ''' - The base class for all modules - ''' - - def __init__(self, mpstate, name, description=None, public=False): - ''' - Constructor - - if public is true other modules can find this module instance with module('name') - ''' - self.mpstate = mpstate - self.name = name - self.needs_unloading = False - - if description is None: - self.description = name + " handling" - else: - self.description = description - if public: - mpstate.public_modules[name] = self - - # - # Overridable hooks follow... - # - - def idle_task(self): - pass - - def unload(self): - pass - - def unknown_command(self, args): - '''Return True if we have handled the unknown command''' - return False - - def mavlink_packet(self, packet): - pass - - # - # Methods for subclass use - # - - def module(self, name): - '''Find a public module (most modules are private)''' - return self.mpstate.module(name) - - @property - def console(self): - return self.mpstate.console - - @property - def status(self): - return self.mpstate.status - - @property - def mav_param(self): - return self.mpstate.mav_param - - @property - def settings(self): - return self.mpstate.settings - - @property - def vehicle_type(self): - return self.mpstate.vehicle_type - - @property - def vehicle_name(self): - return self.mpstate.vehicle_name - - @property - def sitl_output(self): - return self.mpstate.sitl_output - - @property - def target_system(self): - return self.settings.target_system - - @property - def target_component(self): - return self.settings.target_component - - @property - def master(self): - return self.mpstate.master() - - @property - def continue_mode(self): - return self.mpstate.continue_mode - - @property - def logdir(self): - return self.mpstate.status.logdir - - def say(self, msg, priority='important'): - return self.mpstate.functions.say(msg) - - def get_mav_param(self, param_name, default=None): - return self.mpstate.functions.get_mav_param(param_name, default) - - def param_set(self, name, value, retries=3): - self.mpstate.functions.param_set(name, value, retries) - - def add_command(self, name, callback, description, completions=None): - self.mpstate.command_map[name] = (callback, description) - if completions is not None: - self.mpstate.completions[name] = completions - - def add_completion_function(self, name, callback): - self.mpstate.completion_functions[name] = callback diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_settings.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_settings.py deleted file mode 100644 index 63cb07b9f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_settings.py +++ /dev/null @@ -1,209 +0,0 @@ -#!/usr/bin/env python -'''settings object for MAVProxy modules''' - -import time - -class MPSetting: - def __init__(self, name, type, default, label=None, tab=None, - range=None, increment=None, format=None, - digits=None, choice=None): - if label is None: - label = name - self.name = name - self.type = type - self.default = default - self.label = label - self.value = default - self.tab = tab - self.range = range - if range is not None: - # check syntax - (minv, maxv) = range - self.increment = increment - self.choice = choice - self.format = format - self.digits = digits - - def set(self, value): - '''set a setting''' - if value == 'None' and self.default is None: - value = None - if value is not None: - if self.type == bool: - if str(value).lower() in ['1', 'true', 'yes']: - value = True - elif str(value).lower() in ['0', 'false', 'no']: - value = False - else: - return False - else: - try: - value = self.type(value) - except: - return False - if self.range is not None: - (minv,maxv) = self.range - if value < minv or value > maxv: - return False - if self.choice is not None: - found = False - for v in self.choice: - if v.lower() == value.lower(): - found = True - value = v - break - if not found: - print("Must be one of %s" % str(self.choice)) - return False - self.value = value - return True - -class MPSettings(object): - def __init__(self, vars, title='Settings'): - self._vars = {} - self._title = title - self._default_tab = 'Settings' - self._keys = [] - self._callback = None - self._last_change = time.time() - for v in vars: - self.append(v) - - def get_title(self): - '''return the title''' - return self._title - - def get_setting(self, name): - '''return a MPSetting object''' - return self._vars[name] - - def append(self, v): - '''add a new setting''' - if isinstance(v, MPSetting): - setting = v - else: - (name,type,default) = v - label = name - tab = None - if len(v) > 3: - label = v[3] - if len(v) > 4: - tab = v[4] - setting = MPSetting(name, type, default, label=label, tab=tab) - - # when a tab name is set, cascade it to future settings - if setting.tab is None: - setting.tab = self._default_tab - else: - self._default_tab = setting.tab - self._vars[setting.name] = setting - self._keys.append(setting.name) - self._last_change = time.time() - - - def __getattr__(self, name): - try: - return self._vars[name].value - except Exception: - raise AttributeError - - def __setattr__(self, name, value): - if name[0] == '_': - self.__dict__[name] = value - return - if name in self._vars: - self._vars[name].value = value - return - raise AttributeError - - def set(self, name, value): - '''set a setting''' - if not name in self._vars: - raise AttributeError - setting = self._vars[name] - oldvalue = setting.value - if not setting.set(value): - print("Unable to convert %s to type %s" % (value, setting.type)) - return False - if oldvalue != setting.value: - self._last_change = time.time() - if self._callback: - self._callback(setting) - return True - - def get(self, name): - '''get a setting''' - if not name in self._vars: - raise AttributeError - setting = self._vars[name] - return setting.value - - def show(self, v): - '''show settings''' - print("%20s %s" % (v, getattr(self, v))) - - def show_all(self): - '''show all settings''' - for setting in sorted(self._vars): - self.show(setting) - - def list(self): - '''list all settings''' - return self._keys - - def completion(self, text): - '''completion function for cmdline completion''' - return self.list() - - def command(self, args): - '''control options from cmdline''' - if len(args) == 0: - self.show_all() - return - if getattr(self, args[0], [None]) == [None]: - print("Unknown setting '%s'" % args[0]) - return - if len(args) == 1: - self.show(args[0]) - else: - self.set(args[0], args[1]) - - def set_callback(self, callback): - '''set a callback to be called on set()''' - self._callback = callback - - def save(self, filename): - '''save settings to a file. Return True/False on success/failure''' - try: - f = open(filename, mode='w') - except Exception: - return False - for k in self.list(): - f.write("%s=%s\n" % (k, self.get(k))) - f.close() - return True - - - def load(self, filename): - '''load settings from a file. Return True/False on success/failure''' - try: - f = open(filename, mode='r') - except Exception: - return False - while True: - line = f.readline() - if not line: - break - line = line.rstrip() - eq = line.find('=') - if eq == -1: - continue - name = line[:eq] - value = line[eq+1:] - self.set(name, value) - f.close() - return True - - def last_change(self): - '''return last change time''' - return self._last_change diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_util.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_util.py deleted file mode 100644 index 68820f08b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_util.py +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -'''common mavproxy utility functions''' - -import math -import os -import platform - -# Some platforms (CYGWIN and others) many not have the wx library -# use imp to see if wx is on the path -has_wxpython = False - -if platform.system() == 'Windows': - # auto-detection is failing on windows, for an unknown reason - has_wxpython = True -else: - import imp - try: - imp.find_module('wx') - has_wxpython = True - except ImportError: - pass - -radius_of_earth = 6378100.0 # in meters - -def gps_distance(lat1, lon1, lat2, lon2): - '''return distance between two points in meters, - coordinates are in degrees - thanks to http://www.movable-type.co.uk/scripts/latlong.html''' - lat1 = math.radians(lat1) - lat2 = math.radians(lat2) - lon1 = math.radians(lon1) - lon2 = math.radians(lon2) - dLat = lat2 - lat1 - dLon = lon2 - lon1 - - a = math.sin(0.5*dLat)**2 + math.sin(0.5*dLon)**2 * math.cos(lat1) * math.cos(lat2) - c = 2.0 * math.atan2(math.sqrt(a), math.sqrt(1.0-a)) - return radius_of_earth * c - - -def gps_bearing(lat1, lon1, lat2, lon2): - '''return bearing between two points in degrees, in range 0-360 - thanks to http://www.movable-type.co.uk/scripts/latlong.html''' - lat1 = math.radians(lat1) - lat2 = math.radians(lat2) - lon1 = math.radians(lon1) - lon2 = math.radians(lon2) - dLat = lat2 - lat1 - dLon = lon2 - lon1 - y = math.sin(dLon) * math.cos(lat2) - x = math.cos(lat1)*math.sin(lat2) - math.sin(lat1)*math.cos(lat2)*math.cos(dLon) - bearing = math.degrees(math.atan2(y, x)) - if bearing < 0: - bearing += 360.0 - return bearing - - -def wrap_valid_longitude(lon): - ''' wrap a longitude value around to always have a value in the range - [-180, +180) i.e 0 => 0, 1 => 1, -1 => -1, 181 => -179, -181 => 179 - ''' - return (((lon + 180.0) % 360.0) - 180.0) - -def gps_newpos(lat, lon, bearing, distance): - '''extrapolate latitude/longitude given a heading and distance - thanks to http://www.movable-type.co.uk/scripts/latlong.html - ''' - lat1 = math.radians(lat) - lon1 = math.radians(lon) - brng = math.radians(bearing) - dr = distance/radius_of_earth - - lat2 = math.asin(math.sin(lat1)*math.cos(dr) + - math.cos(lat1)*math.sin(dr)*math.cos(brng)) - lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(dr)*math.cos(lat1), - math.cos(dr)-math.sin(lat1)*math.sin(lat2)) - return (math.degrees(lat2), wrap_valid_longitude(math.degrees(lon2))) - -def gps_offset(lat, lon, east, north): - '''return new lat/lon after moving east/north - by the given number of meters''' - bearing = math.degrees(math.atan2(east, north)) - distance = math.sqrt(east**2 + north**2) - return gps_newpos(lat, lon, bearing, distance) - - -def mkdir_p(dir): - '''like mkdir -p''' - if not dir: - return - if dir.endswith("/") or dir.endswith("\\"): - mkdir_p(dir[:-1]) - return - if os.path.isdir(dir): - return - mkdir_p(os.path.dirname(dir)) - try: - os.mkdir(dir) - except Exception: - pass - -def polygon_load(filename): - '''load a polygon from a file''' - ret = [] - f = open(filename) - for line in f: - if line.startswith('#'): - continue - line = line.strip() - if not line: - continue - a = line.split() - if len(a) != 2: - raise RuntimeError("invalid polygon line: %s" % line) - ret.append((float(a[0]), float(a[1]))) - f.close() - return ret - - -def polygon_bounds(points): - '''return bounding box of a polygon in (x,y,width,height) form''' - (minx, miny) = (points[0][0], points[0][1]) - (maxx, maxy) = (minx, miny) - for p in points: - minx = min(minx, p[0]) - maxx = max(maxx, p[0]) - miny = min(miny, p[1]) - maxy = max(maxy, p[1]) - return (minx, miny, maxx-minx, maxy-miny) - -def bounds_overlap(bound1, bound2): - '''return true if two bounding boxes overlap''' - (x1,y1,w1,h1) = bound1 - (x2,y2,w2,h2) = bound2 - if x1+w1 < x2: - return False - if x2+w2 < x1: - return False - if y1+h1 < y2: - return False - if y2+h2 < y1: - return False - return True - - -class object_container: - '''return a picklable object from an existing object, - containing all of the normal attributes of the original''' - def __init__(self, object): - for v in dir(object): - if not v.startswith('__') and v not in ['this']: - try: - a = getattr(object, v) - if (hasattr(a, '__call__') or - hasattr(a, '__swig_destroy__') or - str(a).find('Swig Object') != -1): - continue - setattr(self, v, a) - except Exception: - pass - -def degrees_to_dms(degrees): - '''return a degrees:minutes:seconds string''' - deg = int(degrees) - min = int((degrees - deg)*60) - sec = ((degrees - deg) - (min/60.0))*60*60 - return u'%d\u00b0%02u\'%05.2f"' % (deg, abs(min), abs(sec)) - - -class UTMGrid: - '''class to hold UTM grid position''' - def __init__(self, zone, easting, northing, hemisphere='S'): - self.zone = zone - self.easting = easting - self.northing = northing - self.hemisphere = hemisphere - - def __str__(self): - return "%s %u %u %u" % (self.hemisphere, self.zone, self.easting, self.northing) - - def latlon(self): - '''return (lat,lon) for the grid coordinates''' - from MAVProxy.modules.lib.ANUGA import lat_long_UTM_conversion - (lat, lon) = lat_long_UTM_conversion.UTMtoLL(self.northing, self.easting, self.zone, isSouthernHemisphere=(self.hemisphere=='S')) - return (lat, lon) - - -def latlon_to_grid(latlon): - '''convert to grid reference''' - from MAVProxy.modules.lib.ANUGA import redfearn - (zone, easting, northing) = redfearn.redfearn(latlon[0], latlon[1]) - if latlon[0] < 0: - hemisphere = 'S' - else: - hemisphere = 'N' - return UTMGrid(zone, easting, northing, hemisphere=hemisphere) - -def latlon_round(latlon, spacing=1000): - '''round to nearest grid corner''' - g = latlon_to_grid(latlon) - g.easting = (g.easting // spacing) * spacing - g.northing = (g.northing // spacing) * spacing - return g.latlon() - - -def wxToPIL(wimg): - '''convert a wxImage to a PIL Image''' - from PIL import Image - (w,h) = wimg.GetSize() - d = wimg.GetData() - pimg = Image.new("RGB", (w,h), color=1) - pimg.fromstring(d) - return pimg - -def PILTowx(pimg): - '''convert a PIL Image to a wx image''' - from wx_loader import wx - wimg = wx.EmptyImage(pimg.size[0], pimg.size[1]) - wimg.SetData(pimg.convert('RGB').tostring()) - return wimg - -def dot_mavproxy(name): - '''return a path to store mavproxy data''' - dir = os.path.join(os.environ['HOME'], '.mavproxy') - mkdir_p(dir) - return os.path.join(dir, name) - -def download_url(url): - '''download a URL and return the content''' - import urllib2 - try: - resp = urllib2.urlopen(url) - headers = resp.info() - except urllib2.URLError as e: - print('Error downloading %s' % url) - return None - return resp.read() - - -def download_files(files): - '''download an array of files''' - for (url, file) in files: - print("Downloading %s as %s" % (url, file)) - data = download_url(url) - if data is None: - continue - try: - open(file, mode='w').write(data) - except Exception as e: - print("Failed to save to %s : %s" % (file, e)) - - -child_fd_list = [] - -def child_close_fds(): - '''close file descriptors that a child process should not inherit. - Should be called from child processes.''' - global child_fd_list - import os - while len(child_fd_list) > 0: - fd = child_fd_list.pop(0) - try: - os.close(fd) - except Exception as msg: - pass - -def child_fd_list_add(fd): - '''add a file descriptor to list to be closed in child processes''' - global child_fd_list - child_fd_list.append(fd) - -def child_fd_list_remove(fd): - '''remove a file descriptor to list to be closed in child processes''' - global child_fd_list - try: - child_fd_list.remove(fd) - except Exception: - pass diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_widgets.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_widgets.py deleted file mode 100644 index c8f09d5cc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/mp_widgets.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env python -''' -some useful wx widgets - -Andrew Tridgell -June 2012 -''' - -from wx_loader import wx - -class ImagePanel(wx.Panel): - '''a resizable panel containing an image''' - def __init__(self, parent, img): - wx.Panel.__init__(self, parent, -1, size=(1, 1)) - self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) - self.set_image(img) - self.Bind(wx.EVT_PAINT, self.on_paint) - - def on_paint(self, event): - '''repaint the image''' - dc = wx.AutoBufferedPaintDC(self) - dc.DrawBitmap(self._bmp, 0, 0) - - def set_image(self, img): - '''set the image to be displayed''' - self._bmp = wx.BitmapFromImage(img) - self.SetMinSize((self._bmp.GetWidth(), self._bmp.GetHeight())) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/multiprocessing_queue.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/multiprocessing_queue.py deleted file mode 100644 index 8a28aad56..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/multiprocessing_queue.py +++ /dev/null @@ -1,38 +0,0 @@ -import multiprocessing -import sys - -from multiprocessing.queues import Queue -class osxQueue(Queue): - """ Wrapper around mp.Queue that works on OSX... - - Queue.qsize() relies on sem_getvalue() to get queue size, - and sem_getvalue() doesn't exist meaningfully on OSX, so we keep our own counter - """ - - def __init__(self, *args, **kwargs): - Queue.__init__(self, *args, **kwargs) - self._counter = multiprocessing.RawValue('i', 0) - self._lock = multiprocessing.Lock() - - def put(self, *args, **kwargs): - # If the put fails, the exception will prevent us from incrementing the counter - Queue.put(self, *args, **kwargs) - with self._lock: - self._counter.value += 1 - - def get(self, *args, **kwargs): - # If the get fails, the exception will prevent us from decrementing the counter - val = Queue.get(self, *args, **kwargs) - with self._lock: - self._counter.value -= 1 - return val - - def qsize(self): - with self._lock: - return self._counter.value - -def makeIPCQueue(*args, **kwargs): - if sys.platform == 'darwin': - return osxQueue(*args, **kwargs) - else: - return Queue(*args, **kwargs) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/README.txt b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/README.txt deleted file mode 100644 index d5a4638cd..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/README.txt +++ /dev/null @@ -1,3 +0,0 @@ -This is optparse_gui from http://code.google.com/p/optparse-gui/ - -Thanks to slider for a great library! diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/__init__.py deleted file mode 100644 index 16c732c58..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/optparse_gui/__init__.py +++ /dev/null @@ -1,323 +0,0 @@ -''' -A drop-in replacement for optparse ( "import optparse_gui as optparse" ) -Provides an identical interface to optparse(.OptionParser), -But displays an automatically generated wx dialog in order to enter the -options/args, instead of parsing command line arguments -''' - -import os -import sys -import re -import optparse -from wx_loader import wx - -__version__ = 0.1 -__revision__ = '$Id$' - -class OptparseDialog( wx.Dialog ): - '''The dialog presented to the user with dynamically generated controls, - to fill in the required options. - Based on the wx.Dialog sample from wx Docs & Demos''' - def __init__( - self, - option_parser, #The OptionParser object - parent = None, - ID = 0, - title = 'Optparse Dialog', - pos=wx.DefaultPosition, - size=wx.DefaultSize, - style=wx.DEFAULT_DIALOG_STYLE, - name = 'OptparseDialog', - ): - - provider = wx.SimpleHelpProvider() - wx.HelpProvider_Set(provider) - - pre = wx.PreDialog() - pre.SetExtraStyle(wx.DIALOG_EX_CONTEXTHELP) - pre.Create(parent, ID, title, pos, size, style) - - self.PostCreate(pre) - - sizer = wx.BoxSizer(wx.VERTICAL) - - self.option_controls = {} - - top_label_text = '%s %s' % ( option_parser.get_prog_name(), - option_parser.get_version() ) - label = wx.StaticText(self, -1, top_label_text) - sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - - self.browse_option_map = {} - - # Add controls for all the options - for option in option_parser.option_list: - if option.dest is None: - continue - - if option.help is None: - option.help = u'' - - box = wx.BoxSizer(wx.HORIZONTAL) - if 'store' == option.action: - label = wx.StaticText(self, -1, option.dest ) - label.SetHelpText( option.help ) - box.Add( label, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) - - if 'choice' == option.type: - if optparse.NO_DEFAULT == option.default: - option.default = option.choices[0] - ctrl = wx.ComboBox( - self, -1, choices = option.choices, - value = option.default, - style = wx.CB_DROPDOWN | wx.CB_READONLY | wx.CB_SORT - ) - else: - if 'MULTILINE' in option.help: - ctrl = wx.TextCtrl( self, -1, "", size=(300,100), style = wx.TE_MULTILINE|wx.TE_PROCESS_ENTER ) - else: - ctrl = wx.TextCtrl( self, -1, "", size=(300,-1) ) - - if ( option.default != optparse.NO_DEFAULT ) and \ - ( option.default is not None ): - ctrl.Value = unicode( option.default ) - - box.Add( ctrl, 1, wx.ALIGN_CENTRE|wx.ALL, 5 ) - - if option.type in ['file', 'directory']: - browse = wx.Button(self, label='...') - browse.SetHelpText( 'Click to open %s browser' % (option.type) ) - self.browse_option_map[browse.GetId()] = option, ctrl - wx.EVT_BUTTON(self, browse.GetId(), self.OnSelectPath) - box.Add( browse, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) - - elif option.action in ( 'store_true', 'store_false' ): - ctrl = wx.CheckBox( self, -1, option.dest, size = ( 300, -1 ) ) - box.Add( ctrl, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) - else: - raise NotImplementedError ( 'Unknown option action: %s' % repr( option.action ) ) - - ctrl.SetHelpText( option.help ) - sizer.Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) - - self.option_controls[ option ] = ctrl - - # Add a text control for entering args - box = wx.BoxSizer( wx.HORIZONTAL ) - label = wx.StaticText(self, -1, 'args' ) - label.SetHelpText( 'This is the place to enter the args' ) - - self.args_ctrl = wx.TextCtrl( self, -1, '', size = ( -1, 100 ), - style=wx.TE_MULTILINE | wx.TE_PROCESS_ENTER ) - self.args_ctrl.SetHelpText( -'''Args can either be separated by a space or a newline -Args the contain spaces must be entered like so: "arg with sapce" -''' - ) - box.Add( label, 0, wx.ALIGN_CENTRE | wx.ALL, 5 ) - box.Add( self.args_ctrl, 1, wx.ALIGN_CENTRE | wx.ALL, 5 ) - - sizer.Add( box , 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5) - - line = wx.StaticLine(self, -1, size=(20,-1), style=wx.LI_HORIZONTAL) - sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, 5) - - btnsizer = wx.StdDialogButtonSizer() - - if wx.Platform != "__WXMSW__": - btn = wx.ContextHelpButton(self) - btnsizer.AddButton(btn) - - btn = wx.Button(self, wx.ID_OK) - btn.SetHelpText("The OK button completes the dialog") - btn.SetDefault() - btnsizer.AddButton(btn) - - btn = wx.Button(self, wx.ID_CANCEL) - btn.SetHelpText("The Cancel button cancels the dialog. (Cool, huh?)") - btnsizer.AddButton(btn) - btnsizer.Realize() - - sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) - - self.SetSizer(sizer) - sizer.Fit(self) - - def OnSelectPath(self, event): - option, ctrl = self.browse_option_map[event.GetId()] - path = os.path.abspath(ctrl.Value) - if option.type == 'file': - dlg = wx.FileDialog(self, - message = 'Select file for %s' % (option.dest), - defaultDir = os.path.dirname(path), - defaultFile = path) - elif option.type == 'directory': - if os.path.isfile (path): - path = os.path.dirname (path) - dlg = wx.DirDialog(self, - message = 'Select directory for %s' % (option.dest), - defaultPath = path) - else: - raise NotImplementedError('option.type') - dlg_result = dlg.ShowModal() - if wx.ID_OK != dlg_result: - return - ctrl.Value = dlg.GetPath() -## import open_py_shell;open_py_shell.open_py_shell( locals() ) - - def _getOptions( self ): - option_values = {} - for option, ctrl in self.option_controls.iteritems(): - option_values[option] = ctrl.Value - - return option_values - - def _getArgs( self ): - args_buff = self.args_ctrl.Value - args = re.findall( r'(?:((?:(?:\w|\d)+)|".*?"))\s*', args_buff ) - return args - - def getOptionsAndArgs( self ): - '''Returns the tuple ( options, args ) - options - a dictionary of option names and values - args - a sequence of args''' - - option_values = self._getOptions() - args = self._getArgs() - return option_values, args - -class UserCancelledError( Exception ): - pass - -class Option (optparse.Option): - SUPER = optparse.Option - TYPES = SUPER.TYPES + ('file', 'directory') - -class OptionParser( optparse.OptionParser ): - SUPER = optparse.OptionParser - - def __init__( self, *args, **kwargs ): - if 'option_class' not in kwargs: - kwargs['option_class'] = Option - self.SUPER.__init__( self, *args, **kwargs ) - - def parse_args( self, args = None, values = None ): - ''' - multiprocessing wrapper around _parse_args - ''' - from multiprocessing import Process, Queue - q = Queue() - p = Process(target=self._parse_args, args=(q, args, values)) - p.start() - ret = q.get() - p.join() - return ret - - def _parse_args( self, q, args, values): - ''' - This is the heart of it all - overrides optparse.OptionParser.parse_args - @param arg is irrelevant and thus ignored, - it is here only for interface compatibility - ''' - if wx.GetApp() is None: - self.app = wx.App( False ) - - # preprocess command line arguments and set to defaults - option_values, args = self.SUPER.parse_args(self, args, values) - for option in self.option_list: - if option.dest and hasattr(option_values, option.dest): - default = getattr(option_values, option.dest) - if default is not None: - option.default = default - - dlg = OptparseDialog( option_parser = self, title=self.get_description() ) - - if args: - dlg.args_ctrl.Value = ' '.join(args) - - dlg_result = dlg.ShowModal() - if wx.ID_OK != dlg_result: - raise UserCancelledError( 'User has canceled' ) - - if values is None: - values = self.get_default_values() - - option_values, args = dlg.getOptionsAndArgs() - - for option, value in option_values.iteritems(): - if ( 'store_true' == option.action ) and ( value is False ): - setattr( values, option.dest, False ) - continue - if ( 'store_false' == option.action ) and ( value is True ): - setattr( values, option.dest, False ) - continue - - if option.takes_value() is False: - value = None - - option.process( option, value, values, self ) - - q.put((values, args)) - - def error( self, msg ): - wx.MessageDialog( None, msg, 'Error!', wx.ICON_ERROR ).ShowModal() - return self.SUPER.error( self, msg ) - - -################################################################################ - -def sample_parse_args(): - usage = "usage: %prog [options] args" - if 1 == len( sys.argv ): - option_parser_class = OptionParser - else: - option_parser_class = optparse.OptionParser - - parser = option_parser_class( usage = usage, version='0.1' ) - parser.add_option("-f", "--file", dest="filename", default = r'c:\1.txt', - help="read data from FILENAME") - parser.add_option("-t", "--text", dest="text", default = r'c:\1.txt', - help="MULTILINE text field") - parser.add_option("-a", "--action", dest="action", - choices = ['delete', 'copy', 'move'], - help="Which action do you wish to take?!") - parser.add_option("-n", "--number", dest="number", default = 23, - type = 'int', - help="Just a number") - parser.add_option("-v", "--verbose", - action="store_true", dest="verbose", - help = 'To be or not to be? ( verbose )' ) - - (options, args) = parser.parse_args() - return options, args - -def sample_parse_args_issue1(): - usage = "usage: %prog [options] args" - option_parser_class = OptionParser - - parser = option_parser_class( usage = usage, version='0.1', description='Demo' ) - parser.add_option("-f", "--file", dest="filename", default = r'c:\1.txt', - type = 'file', - help="read data from FILENAME") - parser.add_option("-t", "--text", dest="text", default = r'c:\1.txt', - help="MULTILINE text field") - parser.add_option("-a", "--action", dest="action", - choices = ['delete', 'copy', 'move'], - help="Which action do you wish to take?!") - parser.add_option("-n", "--number", dest="number", default = 23, - type = 'int', - help="Just a number") - parser.add_option("-v", "--verbose", - action="store_true", dest="verbose", - help = 'To be or not to be? ( verbose )' ) - - (options, args) = parser.parse_args() - return options, args - -def main(): - options, args = sample_parse_args_issue1() - print ('args: %s' % repr( args )) - print ('options: %s' % repr( options )) - -if '__main__' == __name__: - main() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/rline.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/rline.py deleted file mode 100644 index 2e59143de..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/rline.py +++ /dev/null @@ -1,221 +0,0 @@ -''' -readline handling for mavproxy -''' - -import sys, glob, os - -rline_mpstate = None -redisplay = None - -class rline(object): - '''async readline abstraction''' - def __init__(self, prompt, mpstate): - import threading - global rline_mpstate - self.prompt = prompt - rline_mpstate = mpstate - # other modules can add their own completion functions - mpstate.completion_functions = { - '(FILENAME)' : complete_filename, - '(PARAMETER)' : complete_parameter, - '(VARIABLE)' : complete_variable, - '(SETTING)' : rline_mpstate.settings.completion, - '(COMMAND)' : complete_command, - '(ALIAS)' : complete_alias, - '(AVAILMODULES)' : complete_modules, - '(LOADEDMODULES)' : complete_loadedmodules - } - - def set_prompt(self, prompt): - if prompt != self.prompt: - self.prompt = prompt - sys.stdout.write(prompt) - self.redisplay() - - def add_history(self, line): - '''add a line to the history''' - readline.add_history(line) - self.redisplay() - - def redisplay(self): - '''redisplay prompt''' - try: - redisplay() - except Exception as ex: - pass - - - -def complete_alias(text): - '''return list of aliases''' - global rline_mpstate - return rline_mpstate.aliases.keys() - -def complete_command(text): - '''return list of commands''' - global rline_mpstate - return rline_mpstate.command_map.keys() - -def complete_loadedmodules(text): - global rline_mpstate - return [ m.name for (m,pm) in rline_mpstate.modules ] - -def complete_modules(text): - '''complete mavproxy module names''' - import MAVProxy.modules, pkgutil - modlist = [x[1] for x in pkgutil.iter_modules(MAVProxy.modules.__path__)] - ret = [] - loaded = set(complete_loadedmodules('')) - for m in modlist: - if not m.startswith("mavproxy_"): - continue - name = m[9:] - if not name in loaded: - ret.append(name) - return ret - -def complete_filename(text): - '''complete a filename''' - - #ensure directories have trailing slashes: - list = glob.glob(text+'*') - for idx, val in enumerate(list): - if os.path.isdir(val): - list[idx] = (val + os.path.sep) - - return list - -def complete_parameter(text): - '''complete a parameter''' - return rline_mpstate.mav_param.keys() - -def complete_variable(text): - '''complete a MAVLink variable''' - if text.find('.') != -1: - var = text.split('.')[0] - if var in rline_mpstate.status.msgs: - ret = [] - for f in rline_mpstate.status.msgs[var].get_fieldnames(): - ret.append(var + '.' + f) - return ret - return [] - return rline_mpstate.status.msgs.keys() - -def rule_expand(component, text): - '''expand one rule component''' - global rline_mpstate - if component[0] == '<' and component[-1] == '>': - return component[1:-1].split('|') - if component in rline_mpstate.completion_functions: - return rline_mpstate.completion_functions[component](text) - return [component] - -def rule_match(component, cmd): - '''see if one rule component matches''' - if component == cmd: - return True - expanded = rule_expand(component, cmd) - if cmd in expanded: - return True - return False - -def complete_rule(rule, cmd): - '''complete using one rule''' - global rline_mpstate - rule_components = rule.split(' ') - - # check it matches so far - for i in range(len(cmd)-1): - if not rule_match(rule_components[i], cmd[i]): - return [] - - # expand the next rule component - expanded = rule_expand(rule_components[len(cmd)-1], cmd[-1]) - return expanded - - -def complete_rules(rules, cmd): - '''complete using a list of completion rules''' - if not isinstance(rules, list): - rules = [rules] - ret = [] - for r in rules: - ret += complete_rule(r, cmd) - return ret - - -last_clist = None - -def complete(text, state): - '''completion routine for when user presses tab''' - global last_clist - global rline_mpstate - if state != 0 and last_clist is not None: - return last_clist[state] - - # split the command so far - cmd = readline.get_line_buffer().split() - - if len(cmd) == 1: - # if on first part then complete on commands and aliases - last_clist = complete_command(text) + complete_alias(text) - elif cmd[0] in rline_mpstate.completions: - # we have a completion rule for this command - last_clist = complete_rules(rline_mpstate.completions[cmd[0]], cmd[1:]) - else: - # assume completion by filename - last_clist = glob.glob(text+'*') - ret = [] - for c in last_clist: - if c.startswith(text) or c.startswith(text.upper()): - ret.append(c) - if len(ret) == 0: - # if we had no matches then try case insensitively - text = text.lower() - for c in last_clist: - if c.lower().startswith(text): - ret.append(c) - ret.append(None) - last_clist = ret - return last_clist[state] - - - -# some python distributions don't have readline, so handle that case -# with a try/except -try: - try: - import readline - except ImportError: - import pyreadline as readline - readline.set_completer_delims(' \t\n;') - readline.parse_and_bind("tab: complete") - readline.set_completer(complete) - redisplay = readline.redisplay -except Exception: - pass - - -if __name__ == "__main__": - from mp_settings import MPSettings, MPSetting - - class mystate(object): - def __init__(self): - self.settings = MPSettings( - [ MPSetting('foo', int, 1, 'foo int', tab='Link', range=(0,4), increment=1), - MPSetting('bar', float, 4, 'bar float', range=(-1,20), increment=1)]) - self.completions = { - "script" : ["(FILENAME)"], - "set" : ["(SETTING)"] - } - self.command_map = { - 'script' : (None, 'run a script of MAVProxy commands'), - 'set' : (None, 'mavproxy settings'), - } - self.aliases = {} - - state = mystate() - rl = rline("test> ", state) - while True: - line = raw_input(rl.prompt) - print("Got: %s" % line) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/tcp.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/tcp.py deleted file mode 100644 index caa1d70c0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/tcp.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python - -""" - MAVProxy TCP server -""" -import sys, socket - -class TcpServer(): - ''' - a tcp server for MAVProxy - ''' - def __init__(self): - self.client = None - self.socket = None - self.conn = None - pass - - def connect(self, address, port): - self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.socket.bind((address, port)) - self.address = address - self.port = port - self.socket.listen(1) - self.conn, self.client = self.socket.accept() - - def readln(self): - data = self.conn.recv(1024) - return data - - def writeln(self, data): - return self.conn.send(data) - - def connected(self): - return self.conn is not None - - -if __name__ == "__main__": - # Test for TCP server - pass diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/textconsole.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/textconsole.py deleted file mode 100644 index 52d3d1f92..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/textconsole.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -""" - MAVProxy default console -""" -import sys - -class SimpleConsole(): - ''' - a message console for MAVProxy - ''' - def __init__(self, udp, tcp): - self.udp = udp - self.tcp = tcp - pass - - def write(self, text, fg='black', bg='white'): - '''write to the console''' - if isinstance(text, str): - sys.stdout.write(text) - else: - sys.stdout.write(str(text)) - sys.stdout.flush() - if self.udp.connected(): - self.udp.writeln(text) - if self.tcp.connected(): - self.tcp.writeln(text) - - def writeln(self, text, fg='black', bg='white'): - '''write to the console with linefeed''' - if not isinstance(text, str): - text = str(text) - self.write(text + '\n', fg=fg, bg=bg) - - def set_status(self, name, text='', row=0, fg='black', bg='white'): - '''set a status value''' - pass - - def error(self, text, fg='red', bg='white'): - self.writeln(text, fg=fg, bg=bg) - - def close(self): - pass - - def is_alive(self): - '''check if we are alive''' - return True - -if __name__ == "__main__": - # test the console - import time - console = SimpleConsole() - while console.is_alive(): - console.write('Tick', fg='red') - console.write(" %s " % time.asctime()) - console.writeln('tock', bg='yellow') - time.sleep(0.5) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/udp.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/udp.py deleted file mode 100644 index cc01dce7f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/udp.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python - -""" - MAVProxy UDP server -""" -import sys, socket - -class UdpServer(): - ''' - a udp server for MAVProxy - ''' - def __init__(self): - self.client = None - self.socket = None - pass - - def connect(self, address, port): - self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.socket.bind((address, port)) - self.address = address - self.port = port - - def readln(self): - data, addr = self.socket.recvfrom(1024) - self.client = addr - return data - - def writeln(self, data): - return self.socket.sendto(data, self.client) - - def bound(self): - return self.socket is not None - - def connected(self): - return self.client is not None - - -if __name__ == "__main__": - # Test for UDP server - pass diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_loader.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_loader.py deleted file mode 100644 index b7d7e659e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_loader.py +++ /dev/null @@ -1,9 +0,0 @@ -import wx_util - -if not wx_util.safe: - print ('Cannot access wx from main thread.') - import traceback - print (traceback.print_stack()) - raise Exception('Cannot access wx from main thread') - -import wx diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_processguard.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_processguard.py deleted file mode 100644 index e27a784b6..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_processguard.py +++ /dev/null @@ -1,6 +0,0 @@ -# Explicit information for the Python loader -# that this subprocess can load wx, which is not process-safe. - -import wx_util - -wx_util.safe = True diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_util.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_util.py deleted file mode 100644 index 43eefa920..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wx_util.py +++ /dev/null @@ -1,7 +0,0 @@ -# Maintain the guard for wx being able to be -# loaded on this process. This is only needed -# for Darwin, so to reduce error cases, only -# implement it on Darwin. - -import sys -safe = sys.platform != 'darwin' diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole.py deleted file mode 100755 index 2cd86a9df..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env python - -""" - MAVProxy message console, implemented in a child process -""" -import multiprocessing, threading -import sys, time -from MAVProxy.modules.lib import textconsole -from MAVProxy.modules.lib.wxconsole_util import Value, Text - -class MessageConsole(textconsole.SimpleConsole): - ''' - a message console for MAVProxy - ''' - def __init__(self, - title='MAVProxy: console'): - textconsole.SimpleConsole.__init__(self) - self.title = title - self.menu_callback = None - self.parent_pipe_recv,self.child_pipe_send = multiprocessing.Pipe(duplex=False) - self.child_pipe_recv,self.parent_pipe_send = multiprocessing.Pipe(duplex=False) - self.close_event = multiprocessing.Event() - self.close_event.clear() - self.child = multiprocessing.Process(target=self.child_task) - self.child.start() - self.child_pipe_send.close() - self.child_pipe_recv.close() - t = threading.Thread(target=self.watch_thread) - t.daemon = True - t.start() - - def child_task(self): - '''child process - this holds all the GUI elements''' - self.parent_pipe_send.close() - self.parent_pipe_recv.close() - - import wx_processguard - from wx_loader import wx - from wxconsole_ui import ConsoleFrame - app = wx.App(False) - app.frame = ConsoleFrame(state=self, title=self.title) - app.frame.Show() - app.MainLoop() - - def watch_thread(self): - '''watch for menu events from child''' - from mp_settings import MPSetting - try: - while True: - msg = self.parent_pipe_recv.recv() - if self.menu_callback is not None: - self.menu_callback(msg) - time.sleep(0.1) - except EOFError: - pass - - def write(self, text, fg='black', bg='white'): - '''write to the console''' - try: - self.parent_pipe_send.send(Text(text, fg, bg)) - except Exception: - pass - - def set_status(self, name, text='', row=0, fg='black', bg='white'): - '''set a status value''' - if self.is_alive(): - self.parent_pipe_send.send(Value(name, text, row, fg, bg)) - - def set_menu(self, menu, callback): - if self.is_alive(): - self.parent_pipe_send.send(menu) - self.menu_callback = callback - - def close(self): - '''close the console''' - self.close_event.set() - if self.is_alive(): - self.child.join(2) - - def is_alive(self): - '''check if child is still going''' - return self.child.is_alive() - -if __name__ == "__main__": - # test the console - multiprocessing.freeze_support() - console = MessageConsole() - while console.is_alive(): - console.write('Tick', fg='red') - console.write(" %s " % time.asctime()) - console.writeln('tock', bg='yellow') - console.set_status('GPS', 'GPS: OK', fg='blue', bg='green') - console.set_status('Link1', 'Link1: OK', fg='green', bg='white') - console.set_status('Date', 'Date: %s' % time.asctime(), fg='red', bg='white', row=2) - time.sleep(0.5) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_ui.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_ui.py deleted file mode 100644 index 60f6e3e05..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_ui.py +++ /dev/null @@ -1,101 +0,0 @@ -import time -import os -import mp_menu -from wxconsole_util import Value, Text -from wx_loader import wx - -class ConsoleFrame(wx.Frame): - """ The main frame of the console""" - - def __init__(self, state, title): - self.state = state - wx.Frame.__init__(self, None, title=title, size=(800,300)) - self.panel = wx.Panel(self) - state.frame = self - - # values for the status bar - self.values = {} - - self.menu = None - self.menu_callback = None - - self.control = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_READONLY) - - - self.vbox = wx.BoxSizer(wx.VERTICAL) - # start with one status row - self.status = [wx.BoxSizer(wx.HORIZONTAL)] - self.vbox.Add(self.status[0], 0, flag=wx.ALIGN_LEFT | wx.TOP) - self.vbox.Add(self.control, 1, flag=wx.LEFT | wx.BOTTOM | wx.GROW) - - self.panel.SetSizer(self.vbox) - - self.timer = wx.Timer(self) - - self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) - self.timer.Start(100) - - self.Bind(wx.EVT_IDLE, self.on_idle) - - self.Show(True) - self.pending = [] - - def on_menu(self, event): - '''handle menu selections''' - state = self.state - ret = self.menu.find_selected(event) - if ret is None: - return - ret.call_handler() - state.child_pipe_send.send(ret) - - def on_idle(self, event): - time.sleep(0.05) - - def on_timer(self, event): - state = self.state - if state.close_event.wait(0.001): - self.timer.Stop() - self.Destroy() - return - while state.child_pipe_recv.poll(): - obj = state.child_pipe_recv.recv() - if isinstance(obj, Value): - # request to set a status field - if not obj.name in self.values: - # create a new status field - value = wx.StaticText(self.panel, -1, obj.text) - # possibly add more status rows - for i in range(len(self.status), obj.row+1): - self.status.append(wx.BoxSizer(wx.HORIZONTAL)) - self.vbox.Insert(len(self.status)-1, self.status[i], 0, flag=wx.ALIGN_LEFT | wx.TOP) - self.vbox.Layout() - self.status[obj.row].Add(value, border=5) - self.status[obj.row].AddSpacer(20) - self.values[obj.name] = value - value = self.values[obj.name] - value.SetForegroundColour(obj.fg) - value.SetBackgroundColour(obj.bg) - value.SetLabel(obj.text) - self.panel.Layout() - elif isinstance(obj, Text): - '''request to add text to the console''' - self.pending.append(obj) - for p in self.pending: - # we're scrolled at the bottom - oldstyle = self.control.GetDefaultStyle() - style = wx.TextAttr() - style.SetTextColour(p.fg) - style.SetBackgroundColour(p.bg) - self.control.SetDefaultStyle(style) - self.control.AppendText(p.text) - self.control.SetDefaultStyle(oldstyle) - self.pending = [] - elif isinstance(obj, mp_menu.MPMenuTop): - if obj is not None: - self.SetMenuBar(None) - self.menu = obj - self.SetMenuBar(self.menu.wx_menu()) - self.Bind(wx.EVT_MENU, self.on_menu) - self.Refresh() - self.Update() \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_util.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_util.py deleted file mode 100644 index 98a7dc9e1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxconsole_util.py +++ /dev/null @@ -1,15 +0,0 @@ -class Text(): - '''text to write to console''' - def __init__(self, text, fg='black', bg='white'): - self.text = text - self.fg = fg - self.bg = bg - -class Value(): - '''a value for the status bar''' - def __init__(self, name, text, row=0, fg='black', bg='white'): - self.name = name - self.text = text - self.row = row - self.fg = fg - self.bg = bg \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxgrapheditor.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxgrapheditor.py deleted file mode 100644 index 55a070227..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxgrapheditor.py +++ /dev/null @@ -1,76 +0,0 @@ -''' -Graphical editing of graph definition -''' -from wx_loader import wx -from graphdefinition import GraphDefinition - -class GraphDialog(wx.Dialog): - def __init__(self, title, graphdef, callback): - wx.Dialog.__init__(self, None, -1, title, size=(900, 400)) - - self.callback = callback - self.graphdef = graphdef - - self.panel = wx.Panel(self, -1) - vbox = wx.BoxSizer(wx.VERTICAL) - - # name entry - hbox_name = wx.BoxSizer(wx.HORIZONTAL) - st_name = wx.StaticText(self.panel, -1, 'Name: ') - self.tc_name = wx.TextCtrl(self.panel, -1, size=(400, -1)) - self.tc_name.Value = self.graphdef.name - hbox_name.Add(st_name, 0, wx.LEFT, 10) - hbox_name.Add(self.tc_name, 0, wx.LEFT, 35) - vbox.Add(hbox_name, 0, wx.TOP, 10) - - # expression entry - st = wx.StaticText(self.panel, -1, 'Expressions: ') - vbox.Add(st, 0, wx.LEFT, 10) - - hbox_expressions = wx.BoxSizer(wx.HORIZONTAL) - self.tc_expressions = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE|wx.HSCROLL, size=(800, 80)) - elist = [] - for e in self.graphdef.expressions: - e = ' '.join(e.split()) - elist.append(e) - self.tc_expressions.Value = '\n'.join(elist) - vbox.Add(self.tc_expressions, 0, wx.LEFT, 15) - - # description entry - st = wx.StaticText(self.panel, -1, 'Description: ') - vbox.Add(st, 0, wx.LEFT, 10) - self.tc_description = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE) - vbox.Add(self.tc_description, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, 15) - self.tc_description.Value = self.graphdef.description - - # buttons - button_save = wx.Button(self.panel, 1, 'Save') - button_cancel = wx.Button(self.panel, 2, 'Cancel') - button_test = wx.Button(self.panel, 3, 'Test') - hbox_buttons = wx.BoxSizer(wx.HORIZONTAL) - hbox_buttons.Add(button_save, 0, wx.LEFT, 10) - hbox_buttons.Add(button_cancel, 0, wx.LEFT, 10) - hbox_buttons.Add(button_test, 0, wx.LEFT, 10) - vbox.Add(hbox_buttons, 0, wx.TOP, 10) - self.Bind(wx.EVT_BUTTON, self.OnSave, id=1) - self.Bind(wx.EVT_BUTTON, self.OnCancel, id=2) - self.Bind(wx.EVT_BUTTON, self.OnTest, id=3) - - self.panel.SetSizer(vbox) - self.Centre() - - def update_values(self): - self.graphdef.name = self.tc_name.Value.strip() - self.graphdef.expressions = self.tc_expressions.Value.split('\n') - self.graphdef.description = self.tc_description.Value - - def OnCancel(self, event): - self.Close() - - def OnTest(self, event): - self.update_values() - self.callback('test', self.graphdef) - - def OnSave(self, event): - self.update_values() - self.callback('save', self.graphdef) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings.py deleted file mode 100644 index fb8bd8c06..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings.py +++ /dev/null @@ -1,73 +0,0 @@ -''' -Graphical editing of mp_settings object -''' -import os, sys -import multiprocessing, threading - -class WXSettings(object): - ''' - a graphical settings dialog for mavproxy - ''' - def __init__(self, settings): - self.settings = settings - self.parent_pipe,self.child_pipe = multiprocessing.Pipe() - self.close_event = multiprocessing.Event() - self.close_event.clear() - self.child = multiprocessing.Process(target=self.child_task) - self.child.start() - t = threading.Thread(target=self.watch_thread) - t.daemon = True - t.start() - - def child_task(self): - '''child process - this holds all the GUI elements''' - from MAVProxy.modules.lib import mp_util - import wx_processguard - from wx_loader import wx - from wxsettings_ui import SettingsDlg - - mp_util.child_close_fds() - app = wx.App(False) - dlg = SettingsDlg(self.settings) - dlg.parent_pipe = self.parent_pipe - dlg.ShowModal() - dlg.Destroy() - - def watch_thread(self): - '''watch for settings changes from child''' - from mp_settings import MPSetting - while True: - setting = self.child_pipe.recv() - if not isinstance(setting, MPSetting): - break - try: - self.settings.set(setting.name, setting.value) - except Exception: - print("Unable to set %s to %s" % (setting.name, setting.value)) - - def is_alive(self): - '''check if child is still going''' - return self.child.is_alive() - - -if __name__ == "__main__": - multiprocessing.freeze_support() - - def test_callback(setting): - '''callback on apply''' - print("Changing %s to %s" % (setting.name, setting.value)) - - # test the settings - import mp_settings, time - from mp_settings import MPSetting - settings = mp_settings.MPSettings( - [ MPSetting('link', int, 1, tab='TabOne'), - MPSetting('altreadout', int, 10, range=(-30,1017), increment=1), - MPSetting('pvalue', float, 0.3, range=(-3.0,1e6), increment=0.1, digits=2), - MPSetting('enable', bool, True, tab='TabTwo'), - MPSetting('colour', str, 'Blue', choice=['Red', 'Green', 'Blue']), - MPSetting('foostr', str, 'blah', label='Foo String') ]) - settings.set_callback(test_callback) - dlg = WXSettings(settings) - while dlg.is_alive(): - time.sleep(0.1) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings_ui.py b/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings_ui.py deleted file mode 100644 index b3e18a35d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/lib/wxsettings_ui.py +++ /dev/null @@ -1,187 +0,0 @@ -from wx_loader import wx - -class TabbedDialog(wx.Dialog): - def __init__(self, tab_names, title='Title', size=wx.DefaultSize): - wx.Dialog.__init__(self, None, -1, title, - style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER) - self.tab_names = tab_names - self.notebook = wx.Notebook(self, -1, size=size) - self.panels = {} - self.sizers = {} - for t in tab_names: - self.panels[t] = wx.Panel(self.notebook) - self.notebook.AddPage(self.panels[t], t) - self.sizers[t] = wx.BoxSizer(wx.VERTICAL) - self.panels[t].SetSizer(self.sizers[t]) - self.dialog_sizer = wx.BoxSizer(wx.VERTICAL) - self.dialog_sizer.Add(self.notebook, 1, wx.EXPAND|wx.ALL, 5) - self.controls = {} - self.browse_option_map = {} - self.control_map = {} - self.setting_map = {} - button_box = wx.BoxSizer(wx.HORIZONTAL) - self.button_apply = wx.Button(self, -1, "Apply") - self.button_cancel = wx.Button(self, -1, "Cancel") - self.button_save = wx.Button(self, -1, "Save") - self.button_load = wx.Button(self, -1, "Load") - button_box.Add(self.button_cancel, 0, wx.ALL) - button_box.Add(self.button_apply, 0, wx.ALL) - button_box.Add(self.button_save, 0, wx.ALL) - button_box.Add(self.button_load, 0, wx.ALL) - self.dialog_sizer.Add(button_box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) - wx.EVT_BUTTON(self, self.button_cancel.GetId(), self.on_cancel) - wx.EVT_BUTTON(self, self.button_apply.GetId(), self.on_apply) - wx.EVT_BUTTON(self, self.button_save.GetId(), self.on_save) - wx.EVT_BUTTON(self, self.button_load.GetId(), self.on_load) - self.Centre() - - def on_cancel(self, event): - '''called on cancel''' - self.Destroy() - - def on_apply(self, event): - '''called on apply''' - for label in self.setting_map.keys(): - setting = self.setting_map[label] - ctrl = self.controls[label] - value = ctrl.GetValue() - if str(value) != str(setting.value): - oldvalue = setting.value - if not setting.set(value): - print("Invalid value %s for %s" % (value, setting.name)) - continue - if str(oldvalue) != str(setting.value): - self.parent_pipe.send(setting) - - def on_save(self, event): - '''called on save button''' - dlg = wx.FileDialog(None, self.settings.get_title(), '', "", '*.*', - wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) - if dlg.ShowModal() == wx.ID_OK: - self.settings.save(dlg.GetPath()) - - def on_load(self, event): - '''called on load button''' - dlg = wx.FileDialog(None, self.settings.get_title(), '', "", '*.*', wx.FD_OPEN) - if dlg.ShowModal() == wx.ID_OK: - self.settings.load(dlg.GetPath()) - # update the controls with new values - for label in self.setting_map.keys(): - setting = self.setting_map[label] - ctrl = self.controls[label] - value = ctrl.GetValue() - if isinstance(value, str) or isinstance(value, unicode): - ctrl.SetValue(str(setting.value)) - else: - ctrl.SetValue(setting.value) - - def panel(self, tab_name): - '''return the panel for a named tab''' - return self.panels[tab_name] - - def sizer(self, tab_name): - '''return the sizer for a named tab''' - return self.sizers[tab_name] - - def refit(self): - '''refit after elements are added''' - self.SetSizerAndFit(self.dialog_sizer) - - def _add_input(self, setting, ctrl, ctrl2=None, value=None): - tab_name = setting.tab - label = setting.label - tab = self.panel(tab_name) - box = wx.BoxSizer(wx.HORIZONTAL) - labelctrl = wx.StaticText(tab, -1, label ) - box.Add(labelctrl, 0, wx.ALIGN_CENTRE|wx.ALL, 5) - box.Add( ctrl, 1, wx.ALIGN_CENTRE|wx.ALL, 5 ) - if ctrl2 is not None: - box.Add( ctrl2, 0, wx.ALIGN_CENTRE|wx.ALL, 5 ) - self.sizer(tab_name).Add(box, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5) - self.controls[label] = ctrl - if value is not None: - ctrl.Value = value - else: - ctrl.Value = str(setting.value) - self.control_map[ctrl.GetId()] = label - self.setting_map[label] = setting - - def add_text(self, setting, width=300, height=100, multiline=False): - '''add a text input line''' - tab = self.panel(setting.tab) - if multiline: - ctrl = wx.TextCtrl(tab, -1, "", size=(width,height), style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER) - else: - ctrl = wx.TextCtrl(tab, -1, "", size=(width,-1) ) - self._add_input(setting, ctrl) - - def add_choice(self, setting, choices): - '''add a choice input line''' - tab = self.panel(setting.tab) - default = setting.value - if default is None: - default = choices[0] - ctrl = wx.ComboBox(tab, -1, choices=choices, - value = str(default), - style = wx.CB_DROPDOWN | wx.CB_READONLY | wx.CB_SORT ) - self._add_input(setting, ctrl) - - def add_intspin(self, setting): - '''add a spin control''' - tab = self.panel(setting.tab) - default = setting.value - (minv, maxv) = setting.range - ctrl = wx.SpinCtrl(tab, -1, - initial = default, - min = minv, - max = maxv) - self._add_input(setting, ctrl, value=default) - - def add_floatspin(self, setting): - '''add a floating point spin control''' - from wx.lib.agw.floatspin import FloatSpin - - tab = self.panel(setting.tab) - default = setting.value - (minv, maxv) = setting.range - ctrl = FloatSpin(tab, -1, - value = default, - min_val = minv, - max_val = maxv, - increment = setting.increment) - if setting.format is not None: - ctrl.SetFormat(setting.format) - if setting.digits is not None: - ctrl.SetDigits(setting.digits) - self._add_input(setting, ctrl, value=default) - -#---------------------------------------------------------------------- -class SettingsDlg(TabbedDialog): - def __init__(self, settings): - title = "Resize the dialog and see how controls adapt!" - self.settings = settings - tabs = [] - for k in self.settings.list(): - setting = self.settings.get_setting(k) - tab = setting.tab - if tab is None: - tab = 'Settings' - if not tab in tabs: - tabs.append(tab) - title = self.settings.get_title() - if title is None: - title = 'Settings' - TabbedDialog.__init__(self, tabs, title) - for name in self.settings.list(): - setting = self.settings.get_setting(name) - if setting.type == bool: - self.add_choice(setting, ['True', 'False']) - elif setting.choice is not None: - self.add_choice(setting, setting.choice) - elif setting.type == int and setting.increment is not None and setting.range is not None: - self.add_intspin(setting) - elif setting.type == float and setting.increment is not None and setting.range is not None: - self.add_floatspin(setting) - else: - self.add_text(setting) - self.refit() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_DGPS.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_DGPS.py deleted file mode 100644 index 9cbff0e49..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_DGPS.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -''' -support for a GCS attached DGPS system -''' - -import socket, errno -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_module - -class DGPSModule(mp_module.MPModule): - def __init__(self, mpstate): - super(DGPSModule, self).__init__(mpstate, "DGPS", "DGPS injection support") - self.portnum = 13320 - self.port = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.port.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.port.bind(("127.0.0.1", self.portnum)) - mavutil.set_close_on_exec(self.port.fileno()) - self.port.setblocking(0) - print ("Listening for DGPS packets on UDP://%s:%s" % ("127.0.0.1", self.portnum)) - - def idle_task(self): - '''called in idle time''' - try: - data = self.port.recv(200) - except socket.error as e: - if e.errno in [ errno.EAGAIN, errno.EWOULDBLOCK ]: - return - raise - if len(data) > 110: - print("DGPS data too large: %u bytes" % len(data)) - return - try: - - self.master.mav.gps_inject_data_send( - self.target_system, - self.target_component, - len(data), - bytearray(data.ljust(110, '\0'))) - - except Exception(e): - print ("DGPS Failed:", e) - -def init(mpstate): - '''initialise module''' - return DGPSModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_HIL.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_HIL.py deleted file mode 100644 index 7dd9cbdf7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_HIL.py +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env python -''' -HIL module -Andrew Tridgell -December 2012 - -This interfaces to Tools/autotest/jsbsim/runsim.py to run the JSBSim flight simulator -''' - -import sys, os, time, socket, errno, struct, math -from math import degrees, radians -from MAVProxy.modules.lib import mp_module -from pymavlink import mavutil - -class HILModule(mp_module.MPModule): - def __init__(self, mpstate): - super(HILModule, self).__init__(mpstate, "HIL", "HIL simulation") - self.last_sim_send_time = time.time() - self.last_apm_send_time = time.time() - self.rc_channels_scaled = mavutil.mavlink.MAVLink_rc_channels_scaled_message(0, 0, 0, 0, -10000, 0, 0, 0, 0, 0, 0) - self.hil_state_msg = None - sim_in_address = ('127.0.0.1', 5501) - sim_out_address = ('127.0.0.1', 5502) - - self.sim_in = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.sim_in.bind(sim_in_address) - self.sim_in.setblocking(0) - - self.sim_out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.sim_out.connect(sim_out_address) - self.sim_out.setblocking(0) - - # HIL needs very fast idle loop calls - if self.settings.select_timeout > 0.001: - self.settings.select_timeout = 0.001 - - def unload(self): - '''unload module''' - self.sim_in.close() - self.sim_out.close() - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'RC_CHANNELS_SCALED': - self.rc_channels_scaled = m - - def idle_task(self): - '''called from main loop''' - self.check_sim_in() - self.check_sim_out() - self.check_apm_out() - - def check_sim_in(self): - '''check for FDM packets from runsim''' - try: - pkt = self.sim_in.recv(17*8 + 4) - except socket.error as e: - if not e.errno in [ errno.EAGAIN, errno.EWOULDBLOCK ]: - raise - return - if len(pkt) != 17*8 + 4: - # wrong size, discard it - print("wrong size %u" % len(pkt)) - return - (latitude, longitude, altitude, heading, v_north, v_east, v_down, - ax, ay, az, - phidot, thetadot, psidot, - roll, pitch, yaw, - vcas, check) = struct.unpack('<17dI', pkt) - (p, q, r) = self.convert_body_frame(radians(roll), radians(pitch), radians(phidot), radians(thetadot), radians(psidot)) - - try: - self.hil_state_msg = self.master.mav.hil_state_encode(int(time.time()*1e6), - radians(roll), - radians(pitch), - radians(yaw), - p, - q, - r, - int(latitude*1.0e7), - int(longitude*1.0e7), - int(altitude*1.0e3), - int(v_north*100), - int(v_east*100), - 0, - int(ax*1000/9.81), - int(ay*1000/9.81), - int(az*1000/9.81)) - except Exception: - return - - - - - def check_sim_out(self): - '''check if we should send new servos to flightgear''' - now = time.time() - if now - self.last_sim_send_time < 0.02 or self.rc_channels_scaled is None: - return - self.last_sim_send_time = now - - servos = [] - for ch in range(1,9): - servos.append(self.scale_channel(ch, getattr(self.rc_channels_scaled, 'chan%u_scaled' % ch))) - servos.extend([0,0,0, 0,0,0]) - buf = struct.pack('<14H', *servos) - try: - self.sim_out.send(buf) - except socket.error as e: - if not e.errno in [ errno.ECONNREFUSED ]: - raise - return - - - def check_apm_out(self): - '''check if we should send new data to the APM''' - now = time.time() - if now - self.last_apm_send_time < 0.02: - return - self.last_apm_send_time = now - if self.hil_state_msg is not None: - self.master.mav.send(self.hil_state_msg) - - def convert_body_frame(self, phi, theta, phiDot, thetaDot, psiDot): - '''convert a set of roll rates from earth frame to body frame''' - p = phiDot - psiDot*math.sin(theta) - q = math.cos(phi)*thetaDot + math.sin(phi)*psiDot*math.cos(theta) - r = math.cos(phi)*psiDot*math.cos(theta) - math.sin(phi)*thetaDot - return (p, q, r) - - def scale_channel(self, ch, value): - '''scale a channel to 1000/1500/2000''' - v = value/10000.0 - if v < -1: - v = -1 - elif v > 1: - v = 1 - if ch == 3 and self.mpstate.vehicle_type != 'rover': - if v < 0: - v = 0 - return int(1000 + v*1000) - return int(1500 + v*500) - -def init(mpstate): - '''initialise module''' - return HILModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_antenna.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_antenna.py deleted file mode 100644 index c7195090e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_antenna.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env python -''' -antenna pointing module -Andrew Tridgell -June 2012 -''' - -import sys, os, time -from cuav.lib import cuav_util -from MAVProxy.modules.lib import mp_module - -class AntennaModule(mp_module.MPModule): - def __init__(self, mpstate): - super(AntennaModule, self).__init__(mpstate, "antenna", "antenna pointing module") - self.gcs_location = None - self.last_bearing = 0 - self.last_announce = 0 - self.add_command('antenna', self.cmd_antenna, "antenna link control") - - def cmd_antenna(self, args): - '''set gcs location''' - if len(args) != 2: - if self.gcs_location is None: - print("GCS location not set") - else: - print("GCS location %s" % str(self.gcs_location)) - return - self.gcs_location = (float(args[0]), float(args[1])) - - - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if self.gcs_location is None and self.module('wp').wploader.count() > 0: - home = self.module('wp').wploader.wp(0) - self.gcs_location = (home.x, home.y) - print("Antenna home set") - if self.gcs_location is None: - return - if m.get_type() == 'GPS_RAW' and self.gcs_location is not None: - (gcs_lat, gcs_lon) = self.gcs_location - bearing = cuav_util.gps_bearing(gcs_lat, gcs_lon, m.lat, m.lon) - elif m.get_type() == 'GPS_RAW_INT' and self.gcs_location is not None: - (gcs_lat, gcs_lon) = self.gcs_location - bearing = cuav_util.gps_bearing(gcs_lat, gcs_lon, m.lat / 1.0e7, m.lon / 1.0e7) - else: - return - self.console.set_status('Antenna', 'Antenna %.0f' % bearing, row=0) - if abs(bearing - self.last_bearing) > 5 and (time.time() - self.last_announce) > 15: - self.last_bearing = bearing - self.last_announce = time.time() - self.say("Antenna %u" % int(bearing + 0.5)) - -def init(mpstate): - '''initialise module''' - return AntennaModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_arm.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_arm.py deleted file mode 100644 index 00dbab724..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_arm.py +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env python -'''arm/disarm command handling''' - -import time, os - -from MAVProxy.modules.lib import mp_module -from pymavlink import mavutil - -arming_masks = { - "all" : 0x0001, - "baro" : 0x0002, - "compass" : 0x0004, - "gps" : 0x0008, - "ins" : 0x0010, - "params" : 0x0020, - "rc" : 0x0040, - "voltage" : 0x0080, - "battery" : 0x0100 - } - -class ArmModule(mp_module.MPModule): - def __init__(self, mpstate): - super(ArmModule, self).__init__(mpstate, "arm", "arm/disarm handling") - self.add_command('arm', self.cmd_arm, 'arm motors', ['check ', - 'uncheck ', - 'list', - 'throttle', - 'safetyon', - 'safetyoff']) - self.add_command('disarm', self.cmd_disarm, 'disarm motors') - - - def cmd_arm(self, args): - '''arm commands''' - usage = "usage: arm " - checkables = "" - - if len(args) <= 0: - print(usage) - return - - if args[0] == "check": - if (len(args) < 2): - print("usage: arm check", checkables) - return - - arming_mask = int(self.get_mav_param("ARMING_CHECK",0)) - name = args[1].lower() - if name == 'all': - for name in arming_masks.keys(): - arming_mask |= arming_masks[name] - elif name in arming_masks: - arming_mask |= arming_masks[name] - else: - print("unrecognized arm check:", name) - return - self.param_set("ARMING_CHECK", arming_mask) - return - - if args[0] == "uncheck": - if (len(args) < 2): - print("usage: arm uncheck", checkables) - return - - arming_mask = int(self.get_mav_param("ARMING_CHECK",0)) - name = args[1].lower() - if name == 'all': - arming_mask = 0 - elif name in arming_masks: - arming_mask &= ~arming_masks[name] - else: - print("unrecognized arm check:", args[1]) - return - - self.param_set("ARMING_CHECK", arming_mask) - return - - if args[0] == "list": - arming_mask = int(self.get_mav_param("ARMING_CHECK",0)) - if arming_mask == 0: - print("NONE") - for name in arming_masks.keys(): - if arming_masks[name] & arming_mask: - print(name) - return - - if args[0] == "throttle": - self.master.arducopter_arm() - return - - if args[0] == "safetyon": - self.master.mav.set_mode_send(self.target_system, - mavutil.mavlink.MAV_MODE_FLAG_DECODE_POSITION_SAFETY, - 1) - return - - if args[0] == "safetyoff": - self.master.mav.set_mode_send(self.target_system, - mavutil.mavlink.MAV_MODE_FLAG_DECODE_POSITION_SAFETY, - 0) - return - - print(usage) - - def cmd_disarm(self, args): - '''disarm motors''' - p2 = 0 - if len(args) == 1 and args[0] == 'force': - p2 = 21196 - self.master.mav.command_long_send( - self.target_system, # target_system - 0, - mavutil.mavlink.MAV_CMD_COMPONENT_ARM_DISARM, # command - 0, # confirmation - 0, # param1 (0 to indicate disarm) - p2, # param2 (all other params meaningless) - 0, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - -def init(mpstate): - '''initialise module''' - return ArmModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_auxopt.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_auxopt.py deleted file mode 100644 index b08a68812..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_auxopt.py +++ /dev/null @@ -1,100 +0,0 @@ -#!/usr/bin/env python -'''auxopt command handling''' - -import time, os -from MAVProxy.modules.lib import mp_module - - -aux_options = { - "Nothing":"0", - "Flip":"2", - "SimpleMode":"3", - "RTL":"4", - "SaveTrim":"5", - "SaveWP":"7", - "MultiMode":"8", - "CameraTrigger":"9", - "Sonar":"10", - "Fence":"11", - "ResetYaw":"12", - "SuperSimpleMode":"13", - "AcroTrainer":"14", - "Auto":"16", - "AutoTune":"17", - "Land":"18" -} - -class AuxoptModule(mp_module.MPModule): - def __init__(self, mpstate): - super(AuxoptModule, self).__init__(mpstate, "auxopt", "auxopt command handling") - self.add_command('auxopt', self.cmd_auxopt, 'select option for aux switches on CH7 and CH8 (ArduCopter only)', - ['set <7|8> ', - 'reset <7|8|all>', - '']) - - def aux_show(self, channel): - param = "CH%s_OPT" % channel - opt_num = str(int(self.get_mav_param(param))) - option = None - for k in aux_options.keys(): - if opt_num == aux_options[k]: - option = k - break - else: - print("AUX Channel is currently set to unknown value " + opt_num) - return - print("AUX Channel is currently set to " + option) - - def aux_option_validate(self, option): - for k in aux_options: - if option.upper() == k.upper(): - return k - return None - - def cmd_auxopt(self, args): - '''handle AUX switches (CH7, CH8) settings''' - if self.mpstate.vehicle_type != 'copter': - print("This command is only available for copter") - return - if len(args) == 0 or args[0] not in ('set', 'show', 'reset', 'list'): - print("Usage: auxopt set|show|reset|list") - return - if args[0] == 'list': - print("Options available:") - for s in sorted(aux_options.keys()): - print(' ' + s) - elif args[0] == 'show': - if len(args) > 2 and args[1] not in ['7', '8', 'all']: - print("Usage: auxopt show [7|8|all]") - return - if len(args) < 2 or args[1] == 'all': - self.aux_show('7') - self.aux_show('8') - return - self.aux_show(args[1]) - elif args[0] == 'reset': - if len(args) < 2 or args[1] not in ['7', '8', 'all']: - print("Usage: auxopt reset 7|8|all") - return - if args[1] == 'all': - self.param_set('CH7_OPT', '0') - self.param_set('CH8_OPT', '0') - return - param = "CH%s_OPT" % args[1] - self.param_set(param, '0') - elif args[0] == 'set': - if len(args) < 3 or args[1] not in ['7', '8']: - print("Usage: auxopt set 7|8 OPTION") - return - option = self.aux_option_validate(args[2]) - if not option: - print("Invalid option " + args[2]) - return - param = "CH%s_OPT" % args[1] - self.param_set(param, aux_options[option]) - else: - print("Usage: auxopt set|show|list") - -def init(mpstate): - '''initialise module''' - return AuxoptModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_battery.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_battery.py deleted file mode 100644 index fc7c4ef70..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_battery.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python -'''battery commands''' - -import time, math -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib.mp_settings import MPSetting - -class BatteryModule(mp_module.MPModule): - def __init__(self, mpstate): - super(BatteryModule, self).__init__(mpstate, "battery", "battery commands") - self.add_command('bat', self.cmd_bat, "show battery information") - self.last_battery_announce = 0 - self.last_battery_announce_time = 0 - self.last_battery_cell_announce_time = 0 - self.battery_level = -1 - self.voltage_level = -1 - self.current_battery = -1 - self.battery2_voltage = -1 - self.per_cell = 0 - self.servo_voltage = -1 - self.high_servo_voltage = -1 - self.last_servo_warn_time = 0 - self.last_vcc_warn_time = 0 - - self.settings.append( - MPSetting('battwarn', int, 1, 'Battery Warning Time', tab='Battery')) - self.settings.append( - MPSetting('batwarncell', float, 3.7, 'Battery cell Warning level')) - self.settings.append( - MPSetting('servowarn', float, 4.3, 'Servo voltage warning level')) - self.settings.append( - MPSetting('vccwarn', float, 4.3, 'Vcc voltage warning level')) - self.settings.append(MPSetting('numcells', int, 0, range=(0,10), increment=1)) - self.battery_period = mavutil.periodic_event(5) - - def cmd_bat(self, args): - '''show battery levels''' - print("Flight battery: %u%%" % self.battery_level) - if self.settings.numcells != 0: - print("%.2f V/cell for %u cells - approx %u%%" % (self.per_cell, - self.settings.numcells, - self.vcell_to_battery_percent(self.per_cell))) - - def battery_report(self): - batt_mon = int(self.get_mav_param('BATT_MONITOR',0)) - - #report voltage level only - battery_string = '' - if batt_mon == 3: - battery_string = 'Batt: %.2fV' % (float(self.voltage_level) / 1000.0) - elif batt_mon >= 4: - battery_string = 'Batt: %u%%/%.2fV %.1fA' % (self.battery_level, (float(self.voltage_level) / 1000.0), self.current_battery / 100.0 ) - if self.battery2_voltage != -1: - battery_string += ' %.2fV' % self.battery2_voltage - - self.console.set_status('Battery', battery_string, row=1) - - rbattery_level = int((self.battery_level+5)/10)*10 - if batt_mon >= 4 and self.settings.battwarn > 0 and time.time() > self.last_battery_announce_time + 60*self.settings.battwarn: - self.last_battery_announce_time = time.time() - if rbattery_level != self.last_battery_announce: - self.say("Flight battery %u percent" % rbattery_level, priority='notification') - self.last_battery_announce = rbattery_level - #check voltage level to ensure we've actually received data about - #the battery (prevents false positive warning at startup) - if self.voltage_level != -1 and rbattery_level <= 20: - self.say("Flight battery warning") - - if self.settings.numcells != 0 and self.per_cell < self.settings.batwarncell and time.time() > self.last_battery_cell_announce_time + 60*self.settings.battwarn: - self.say("Cell warning") - self.last_battery_cell_announce_time = time.time() - - - def vcell_to_battery_percent(self, vcell): - '''convert a cell voltage to an approximate - percentage battery level for a LiPO''' - if vcell > 4.1: - # above 4.1 is 100% battery - return 100.0 - elif vcell > 3.81: - # 3.81 is 17% remaining, from flight logs - return 17.0 + 83.0 * (vcell - 3.81) / (4.1 - 3.81) - elif vcell > 3.2: - # below 3.2 it degrades fast. It's dead at 3.2 - return 0.0 + 17.0 * (vcell - 3.20) / (3.81 - 3.20) - # it's dead or disconnected - return 0.0 - - - def battery_update(self, SYS_STATUS): - '''update battery level''' - # main flight battery - self.battery_level = SYS_STATUS.battery_remaining - self.voltage_level = SYS_STATUS.voltage_battery - self.current_battery = SYS_STATUS.current_battery - if self.settings.numcells != 0: - self.per_cell = (self.voltage_level*0.001) / self.settings.numcells - - def power_status_update(self, POWER_STATUS): - '''update POWER_STATUS warnings level''' - now = time.time() - Vservo = POWER_STATUS.Vservo * 0.001 - Vcc = POWER_STATUS.Vcc * 0.001 - self.high_servo_voltage = max(self.high_servo_voltage, Vservo) - if self.high_servo_voltage > 1 and Vservo < self.settings.servowarn: - if now - self.last_servo_warn_time > 30: - self.last_servo_warn_time = now - self.say("Servo volt %.1f" % Vservo) - if Vservo < 1: - # prevent continuous announcements on power down - self.high_servo_voltage = Vservo - - if Vcc < self.settings.vccwarn: - if now - self.last_vcc_warn_time > 30: - self.last_vcc_warn_time = now - self.say("Vcc %.1f" % Vcc) - - - def mavlink_packet(self, m): - '''handle a mavlink packet''' - mtype = m.get_type() - if mtype == "SYS_STATUS": - self.battery_update(m) - if mtype == "BATTERY2": - self.battery2_voltage = m.voltage * 0.001 - if mtype == "POWER_STATUS": - self.power_status_update(m) - if self.battery_period.trigger(): - self.battery_report() - -def init(mpstate): - '''initialise module''' - return BatteryModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_calibration.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_calibration.py deleted file mode 100644 index 958d62795..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_calibration.py +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env python -'''calibration command handling''' - -import time, os -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module - -class CalibrationModule(mp_module.MPModule): - def __init__(self, mpstate): - super(CalibrationModule, self).__init__(mpstate, "calibration") - self.add_command('ground', self.cmd_ground, 'do a ground start') - self.add_command('level', self.cmd_level, 'set level on a multicopter') - self.add_command('compassmot', self.cmd_compassmot, 'do compass/motor interference calibration') - self.add_command('calpress', self.cmd_calpressure,'calibrate pressure sensors') - self.add_command('accelcal', self.cmd_accelcal, 'do 3D accelerometer calibration') - self.add_command('gyrocal', self.cmd_gyrocal, 'do gyro calibration') - self.add_command('ahrstrim', self.cmd_ahrstrim, 'do AHRS trim') - self.add_command('magcal', self.cmd_magcal, "magcal") - self.accelcal_count = -1 - self.accelcal_wait_enter = False - self.compassmot_running = False - self.empty_input_count = 0 - self.magcal_progess = [] - - def cmd_ground(self, args): - '''do a ground start mode''' - self.master.calibrate_imu() - - def cmd_level(self, args): - '''run a accel level''' - self.master.calibrate_level() - - def cmd_accelcal(self, args): - '''do a full 3D accel calibration''' - mav = self.master - # ack the APM to begin 3D calibration of accelerometers - mav.mav.command_long_send(mav.target_system, mav.target_component, - mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 0, 0, 0, 0, 1, 0, 0) - self.accelcal_count = 0 - self.accelcal_wait_enter = False - - def cmd_gyrocal(self, args): - '''do a full gyro calibration''' - mav = self.master - mav.mav.command_long_send(mav.target_system, mav.target_component, - mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 1, 0, 0, 0, 0, 0, 0) - - def cmd_ahrstrim(self, args): - '''do a AHRS trim''' - mav = self.master - mav.mav.command_long_send(mav.target_system, mav.target_component, - mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 0, 0, 0, 0, 2, 0, 0) - - def mavlink_packet(self, m): - '''handle mavlink packets''' - if self.accelcal_count != -1: - if m.get_type() == 'STATUSTEXT': - # handle accelcal packet - text = str(m.text) - if text.startswith('Place '): - self.accelcal_wait_enter = True - self.empty_input_count = self.mpstate.empty_input_count - if m.get_type() == 'MAG_CAL_PROGRESS': - while m.compass_id >= len(self.magcal_progess): - self.magcal_progess.append("") - self.magcal_progess[m.compass_id] = "%u%%" % m.completion_pct - self.console.set_status('Progress', 'Calibration Progress: ' + " ".join(self.magcal_progess), row=4) - if m.get_type() == 'MAG_CAL_REPORT': - if m.cal_status == mavutil.mavlink.MAG_CAL_SUCCESS: - result = "SUCCESS" - else: - result = "FAILED" - self.magcal_progess[m.compass_id] = result - self.console.set_status('Progress', 'Calibration Progress: ' + " ".join(self.magcal_progess), row=4) - print("Calibration of compass %u %s: fitness %.3f" % (m.compass_id, result, m.fitness)) - - def idle_task(self): - '''handle mavlink packets''' - if self.accelcal_count != -1: - if self.accelcal_wait_enter and self.empty_input_count != self.mpstate.empty_input_count: - self.accelcal_wait_enter = False - self.accelcal_count += 1 - # tell the APM that user has done as requested - self.master.mav.command_ack_send(self.accelcal_count, 1) - if self.accelcal_count >= 6: - self.accelcal_count = -1 - - if self.compassmot_running: - if self.mpstate.empty_input_count != self.empty_input_count: - # user has hit enter, stop the process - self.compassmot_running = False - print("sending stop") - self.master.mav.command_ack_send(0, 1) - - - def cmd_compassmot(self, args): - '''do a compass/motor interference calibration''' - mav = self.master - print("compassmot starting") - mav.mav.command_long_send(mav.target_system, mav.target_component, - mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 0, 0, 0, 0, 0, 1, 0) - self.compassmot_running = True - self.empty_input_count = self.mpstate.empty_input_count - - def cmd_calpressure(self, args): - '''calibrate pressure sensors''' - self.master.calibrate_pressure() - - def cmd_magcal(self, args): - '''control magnetometer calibration''' - if len(args) < 1: - print("Usage: magcal ") - return - - if args[0] == 'start': - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_START_MAG_CAL, # command - 0, # confirmation - 0, # p1: mag_mask - 0, # p2: retry - 1, # p3: autosave - 0, # p4: delay - 0, # param5 - 0, # param6 - 0) # param7 - elif args[0] == 'accept': - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_ACCEPT_MAG_CAL, # command - 0, # confirmation - 0, # p1: mag_mask - 0, # param2 - 1, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - elif args[0] == 'cancel': - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_CANCEL_MAG_CAL, # command - 0, # confirmation - 0, # p1: mag_mask - 0, # param2 - 1, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - -def init(mpstate): - '''initialise module''' - return CalibrationModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cameraview.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cameraview.py deleted file mode 100644 index 162346486..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cameraview.py +++ /dev/null @@ -1,149 +0,0 @@ -#!/usr/bin/env python -''' -camera view module -Malcolm Gill -Feb 2014 -''' - -import math -from MAVProxy.modules.mavproxy_map import mp_slipmap -from MAVProxy.modules.mavproxy_map import mp_elevation -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_settings -from cuav.lib import cuav_util -from cuav.camera.cam_params import CameraParams - -# documented in common.xml, can't find these constants in code -scale_latlon = 1e-7 -scale_hdg = 1e-2 -scale_relative_alt = 1e-3 - -from MAVProxy.modules.lib import mp_module - -class CameraViewModule(mp_module.MPModule): - def __init__(self, mpstate): - super(CameraViewModule, self).__init__(mpstate, "cameraview") - self.add_command('cameraview', self.cmd_cameraview, "camera view") - self.roll = 0 - self.pitch = 0 - self.yaw = 0 - self.mount_roll = 0 - self.mount_pitch = 0 - self.mount_yaw = 0 - self.height = 0 - self.lat = 0 - self.lon = 0 - self.home_height = 0 - self.hdg = 0 - self.elevation_model = mp_elevation.ElevationModel() - self.camera_params = CameraParams() # TODO how to get actual camera params - self.view_settings = mp_settings.MPSettings( - [ ('r', float, 0.5), - ('g', float, 0.5), - ('b', float, 1.0), - ]) - self.update_col() - - def update_col(self): - self.col = tuple(int(255*c) for c in (self.view_settings.r, self.view_settings.g, self.view_settings.b)) - - def cmd_cameraview(self, args): - '''camera view commands''' - state = self - if args and args[0] == 'set': - if len(args) < 3: - state.view_settings.show_all() - else: - state.view_settings.set(args[1], args[2]) - state.update_col() - else: - print('usage: cameraview set') - - def unload(self): - '''unload module''' - pass - - def scale_rc(self, servo, min, max, param): - '''scale a PWM value''' - # default to servo range of 1000 to 2000 - min_pwm = self.get_mav_param('%s_MIN' % param, 0) - max_pwm = self.get_mav_param('%s_MAX' % param, 0) - if min_pwm == 0 or max_pwm == 0: - return 0 - if max_pwm == min_pwm: - p = 0.0 - else: - p = (servo-min_pwm) / float(max_pwm-min_pwm) - v = min + p*(max-min) - if v < min: - v = min - if v > max: - v = max - return v - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - state = self - if m.get_type() == 'GLOBAL_POSITION_INT': - state.lat, state.lon = m.lat*scale_latlon, m.lon*scale_latlon - state.hdg = m.hdg*scale_hdg - agl = state.elevation_model.GetElevation(state.lat, state.lon) - if agl is not None: - state.height = m.relative_alt*scale_relative_alt + state.home_height - agl - elif m.get_type() == 'ATTITUDE': - state.roll, state.pitch, state.yaw = math.degrees(m.roll), math.degrees(m.pitch), math.degrees(m.yaw) - elif m.get_type() in ['GPS_RAW', 'GPS_RAW_INT']: - if self.module('wp').wploader.count() > 0: - home = self.module('wp').wploader.wp(0).x, self.module('wp').wploader.wp(0).y - else: - home = [self.master.field('HOME', c)*scale_latlon for c in ['lat', 'lon']] - old = state.home_height # TODO TMP - agl = state.elevation_model.GetElevation(*home) - if agl is None: - return - state.home_height = agl - - # TODO TMP - if state.home_height != old: - # tridge said to get home pos from wploader, - # but this is not the same as from master() below...!! - # using master() gives the right coordinates - # (i.e. matches GLOBAL_POSITION_INT coords, and $IMHOME in sim_arduplane.sh) - # and wploader is a bit off - print('home height changed from',old,'to',state.home_height) - elif m.get_type() == 'SERVO_OUTPUT_RAW': - for (axis, attr) in [('ROLL', 'mount_roll'), ('TILT', 'mount_pitch'), ('PAN', 'mount_yaw')]: - channel = int(self.get_mav_param('MNT_RC_IN_{0}'.format(axis), 0)) - if self.get_mav_param('MNT_STAB_{0}'.format(axis), 0) and channel: - # enabled stabilisation on this axis - # TODO just guessing that RC_IN_ROLL gives the servo number, but no idea if this is really the case - servo = 'servo{0}_raw'.format(channel) - centidegrees = self.scale_rc(getattr(m, servo), - self.get_mav_param('MNT_ANGMIN_{0}'.format(axis[:3])), - self.get_mav_param('MNT_ANGMAX_{0}'.format(axis[:3])), - param='RC{0}'.format(channel)) - setattr(state, attr, centidegrees*0.01) - #state.mount_roll = min(max(-state.roll,-45),45)#TODO TMP - #state.mount_yaw = min(max(-state.yaw,-45),45)#TODO TMP - #state.mount_pitch = min(max(-state.pitch,-45),45)#TODO TMP - else: - return - if self.mpstate.map: # if the map module is loaded, redraw polygon - # get rid of the old polygon - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('CameraView')) - - # camera view polygon determined by projecting corner pixels of the image onto the ground - pixel_positions = [cuav_util.pixel_position(px[0],px[1], state.height, state.pitch+state.mount_pitch, state.roll+state.mount_roll, state.yaw+state.mount_yaw, state.camera_params) for px in [(0,0), (state.camera_params.xresolution,0), (state.camera_params.xresolution,state.camera_params.yresolution), (0,state.camera_params.yresolution)]] - if any(pixel_position is None for pixel_position in pixel_positions): - # at least one of the pixels is not on the ground - # so it doesn't make sense to try to draw the polygon - return - gps_positions = [mp_util.gps_newpos(state.lat, state.lon, math.degrees(math.atan2(*pixel_position)), math.hypot(*pixel_position)) for pixel_position in pixel_positions] - - # draw new polygon - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('cameraview', gps_positions+[gps_positions[0]], # append first element to close polygon - layer='CameraView', linewidth=2, colour=state.col)) - -def init(mpstate): - '''initialise module''' - return CameraViewModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_checklist.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_checklist.py deleted file mode 100755 index dfbef1ad4..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_checklist.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -''' -Checklist module -Stephen Dade -July 2014 -''' - -import sys, os, time -from MAVProxy.modules.lib import mp_checklist -from MAVProxy.modules.lib import mp_module -from pymavlink import mavutil - -class ChecklistModule(mp_module.MPModule): - def __init__(self, mpstate): - super(ChecklistModule, self).__init__(mpstate, "checklist", "checklist module") - self.checklist = mp_checklist.CheckUI() - - def mavlink_packet(self, msg): - '''handle an incoming mavlink packet''' - if not isinstance(self.checklist, mp_checklist.CheckUI): - return - if not self.checklist.is_alive(): - return - - type = msg.get_type() - master = self.master - - if type == 'HEARTBEAT': - '''beforeEngineList - APM booted''' - if self.mpstate.status.heartbeat_error == True: - self.checklist.set_check("Pixhawk Booted", 0) - else: - self.checklist.set_check("Pixhawk Booted", 1) - - '''beforeEngineList - Flight mode MANUAL''' - if self.mpstate.status.flightmode == "MANUAL": - self.checklist.set_check("Flight mode MANUAL", 1) - else: - self.checklist.set_check("Flight mode MANUAL", 0) - - if type in [ 'GPS_RAW', 'GPS_RAW_INT' ]: - '''beforeEngineList - GPS lock''' - if ((msg.fix_type >= 3 and master.mavlink10()) or - (msg.fix_type == 2 and not master.mavlink10())): - self.checklist.set_check("GPS lock", 1) - else: - self.checklist.set_check("GPS lock", 0) - - '''beforeEngineList - Radio Links > 6db margin TODO: figure out how to read db levels''' - if type in ['RADIO', 'RADIO_STATUS']: - if msg.rssi < msg.noise+6 or msg.remrssi < msg.remnoise+6: - self.checklist.set_check("Radio links > 6db margin", 0) - else: - self.checklist.set_check("Radio Links > 6db margin", 0) - - if type == 'HWSTATUS': - '''beforeEngineList - Avionics Battery''' - if msg.Vcc >= 4600 and msg.Vcc <= 5300: - self.checklist.set_check("Avionics Power", 1) - else: - self.checklist.set_check("Avionics Power", 0) - - if type == 'POWER_STATUS': - '''beforeEngineList - Servo Power''' - if msg.Vservo >= 4900 and msg.Vservo <= 6500: - self.checklist.set_check("Servo Power", 1) - else: - self.checklist.set_check("Servo Power", 0) - - '''beforeEngineList - Waypoints Loaded''' - if type == 'HEARTBEAT': - if self.module('wp').wploader.count() == 0: - self.checklist.set_check("Waypoints Loaded", 0) - else: - self.checklist.set_check("Waypoints Loaded", 1) - - '''beforeTakeoffList - Compass active''' - if type == 'GPS_RAW': - if math.fabs(msg.hdg - master.field('VFR_HUD', 'heading', '-')) < 10 or math.fabs(msg.hdg - master.field('VFR_HUD', 'heading', '-')) > 355: - self.checklist.set_check("Compass active", 1) - else: - self.checklist.set_check("Compass active", 0) - - '''beforeCruiseList - Airspeed > 10 m/s , Altitude > 30 m''' - if type == 'VFR_HUD': - rel_alt = master.field('GLOBAL_POSITION_INT', 'relative_alt', 0) * 1.0e-3 - if rel_alt > 30: - self.checklist.set_check("Altitude > 30 m", 1) - else: - self.checklist.set_check("Altitude > 30 m", 0) - if msg.airspeed > 10 or msg.groundspeed > 10: - self.checklist.set_check("Airspeed > 10 m/s", 1) - else: - self.checklist.set_check("Airspeed > 10 m/s", 0) - - '''beforeEngineList - IMU''' - if type in ['SYS_STATUS']: - sensors = { 'AS' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE, - 'MAG' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_MAG, - 'INS' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_ACCEL | mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_GYRO, - 'AHRS' : mavutil.mavlink.MAV_SYS_STATUS_AHRS} - bits = sensors['INS'] - present = ((msg.onboard_control_sensors_enabled & bits) == bits) - healthy = ((msg.onboard_control_sensors_health & bits) == bits) - if not present or not healthy: - self.checklist.set_check("IMU Check", 1) - else: - self.checklist.set_check("IMU Check", 0) - - -def init(mpstate): - '''initialise module''' - return ChecklistModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cmdlong.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cmdlong.py deleted file mode 100644 index 872f235c9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_cmdlong.py +++ /dev/null @@ -1,269 +0,0 @@ -#!/usr/bin/env python -'''command long''' - -import time, os -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module - -class CmdlongModule(mp_module.MPModule): - def __init__(self, mpstate): - super(CmdlongModule, self).__init__(mpstate, "cmdlong") - self.add_command('setspeed', self.cmd_do_change_speed, "do_change_speed") - self.add_command('setyaw', self.cmd_condition_yaw, "condition_yaw") - self.add_command('takeoff', self.cmd_takeoff, "takeoff") - self.add_command('velocity', self.cmd_velocity, "velocity") - self.add_command('position', self.cmd_position, "position") - self.add_command('attitude', self.cmd_attitude, "attitude") - self.add_command('cammsg', self.cmd_cammsg, "cammsg") - self.add_command('camctrlmsg', self.cmd_camctrlmsg, "camctrlmsg") - self.add_command('posvel', self.cmd_posvel, "posvel") - self.add_command('parachute', self.cmd_parachute, "parachute", - ['']) - - def cmd_takeoff(self, args): - '''take off''' - if ( len(args) != 1): - print("Usage: takeoff ALTITUDE_IN_METERS") - return - - if (len(args) == 1): - altitude = float(args[0]) - print("Take Off started") - self.master.mav.command_long_send( - self.settings.target_system, # target_system - mavutil.mavlink.MAV_COMP_ID_SYSTEM_CONTROL, # target_component - mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, # command - 0, # confirmation - 0, # param1 - 0, # param2 - 0, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - altitude) # param7 - - def cmd_parachute(self, args): - '''parachute control''' - usage = "Usage: parachute " - if len(args) != 1: - print(usage) - return - - cmds = { - 'enable' : mavutil.mavlink.PARACHUTE_ENABLE, - 'disable' : mavutil.mavlink.PARACHUTE_DISABLE, - 'release' : mavutil.mavlink.PARACHUTE_RELEASE - } - if not args[0] in cmds: - print(usage) - return - cmd = cmds[args[0]] - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_PARACHUTE, - 0, - cmd, - 0, 0, 0, 0, 0, 0) - - def cmd_camctrlmsg(self, args): - '''camctrlmsg''' - - print("Sent DIGICAM_CONFIGURE CMD_LONG") - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_DIGICAM_CONFIGURE, # command - 0, # confirmation - 10, # param1 - 20, # param2 - 30, # param3 - 40, # param4 - 50, # param5 - 60, # param6 - 70) # param7 - - def cmd_cammsg(self, args): - '''cammsg''' - - print("Sent DIGICAM_CONTROL CMD_LONG") - self.master.mav.command_long_send( - self.settings.target_system, # target_system - 0, # target_component - mavutil.mavlink.MAV_CMD_DO_DIGICAM_CONTROL, # command - 0, # confirmation - 10, # param1 - 20, # param2 - 30, # param3 - 40, # param4 - 50, # param5 - 60, # param6 - 70) # param7 - - def cmd_do_change_speed(self, args): - '''speed value''' - if ( len(args) != 1): - print("Usage: speed SPEED_VALUE") - return - - if (len(args) == 1): - speed = float(args[0]) - print("SPEED %s" % (str(speed))) - self.master.mav.command_long_send( - self.settings.target_system, # target_system - mavutil.mavlink.MAV_COMP_ID_SYSTEM_CONTROL, # target_component - mavutil.mavlink.MAV_CMD_DO_CHANGE_SPEED, # command - 0, # confirmation - 0, # param1 - speed, # param2 (Speed value) - 0, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - - def cmd_condition_yaw(self, args): - '''yaw angle angular_speed angle_mode''' - if ( len(args) != 3): - print("Usage: yaw ANGLE ANGULAR_SPEED MODE:[0 absolute / 1 relative]") - return - - if (len(args) == 3): - angle = float(args[0]) - angular_speed = float(args[1]) - angle_mode = float(args[2]) - print("ANGLE %s" % (str(angle))) - - self.master.mav.command_long_send( - self.settings.target_system, # target_system - mavutil.mavlink.MAV_COMP_ID_SYSTEM_CONTROL, # target_component - mavutil.mavlink.MAV_CMD_CONDITION_YAW, # command - 0, # confirmation - angle, # param1 (angle value) - angular_speed, # param2 (angular speed value) - 0, # param3 - angle_mode, # param4 (mode: 0->absolute / 1->relative) - 0, # param5 - 0, # param6 - 0) # param7 - - def cmd_velocity(self, args): - '''velocity x-ms y-ms z-ms''' - if (len(args) != 3): - print("Usage: velocity x y z (m/s)") - return - - if (len(args) == 3): - x_mps = float(args[0]) - y_mps = float(args[1]) - z_mps = float(args[2]) - #print("x:%f, y:%f, z:%f" % (x_mps, y_mps, z_mps)) - - self.master.mav.set_position_target_local_ned_send( - 0, # time_boot_ms (not used) - 0, 0, # target system, target component - mavutil.mavlink.MAV_FRAME_LOCAL_NED, # frame - 0b0000111111000111, # type_mask (only speeds enabled) - 0, 0, 0, # x, y, z positions (not used) - x_mps, y_mps, -z_mps, # x, y, z velocity in m/s - 0, 0, 0, # x, y, z acceleration (not supported yet, ignored in GCS_Mavlink) - 0, 0) # yaw, yaw_rate (not supported yet, ignored in GCS_Mavlink) - #self.master.mav.set_position_target_local_ned_send( - # 0, # time_boot_ms (not used) - # 0, 0, # target system, target component - # mavutil.mavlink.MAV_FRAME_LOCAL_NED, # frame - # 0b0000111111000111, # type_mask (only speeds enabled) - # 0, 0, 0, # x, y, z positions (not used) - # x_mps, y_mps, -z_mps, # x, y, z velocity in m/s - # 0, 0, 0, # x, y, z acceleration (not supported yet, ignored in GCS_Mavlink) - # 0, 0) # yaw, yaw_rate (not supported yet, ignored in GCS_Mavlink) - - def cmd_position(self, args): - '''position x-m y-m z-m''' - if (len(args) != 3): - print("Usage: position x y z (meters)") - return - - if (len(args) == 3): - x_m = float(args[0]) - y_m = float(args[1]) - z_m = float(args[2]) - print("x:%f, y:%f, z:%f" % (x_m, y_m, z_m)) - self.master.mav.set_position_target_local_ned_send( - 0, # system time in milliseconds - 1, # target system - 0, # target component - 8, # coordinate frame MAV_FRAME_BODY_NED - 3576, # type mask (pos only) - x_m, y_m, z_m, # position x,y,z - 0, 0, 0, # velocity x,y,z - 0, 0, 0, # accel x,y,z - 0, 0) # yaw, yaw rate - - def cmd_attitude(self, args): - '''attitude q0 q1 q2 q3 thrust''' - if len(args) != 5: - print("Usage: attitude q0 q1 q2 q3 thrust (0~1)") - return - - if len(args) == 5: - q0 = float(args[0]) - q1 = float(args[1]) - q2 = float(args[2]) - q3 = float(args[3]) - thrust = float(args[4]) - att_target = [q0, q1, q2, q3] - print("q0:%.3f, q1:%.3f, q2:%.3f q3:%.3f thrust:%.2f" % (q0, q1, q2, q3, thrust)) - self.master.mav.set_attitude_target_send( - 0, # system time in milliseconds - 1, # target system - 0, # target component - 63, # type mask (ignore all except attitude + thrust) - att_target, # quaternion attitude - 0, # body roll rate - 0, # body pich rate - 0, # body yaw rate - thrust) # thrust - - def cmd_posvel(self, args): - '''posvel mapclick vN vE vD''' - ignoremask = 511 - latlon = None - try: - latlon = self.module('map').click_position - except Exception: - pass - if latlon is None: - print ("set latlon to zeros") - latlon = [0, 0] - else: - ignoremask = ignoremask & 504 - print ("found latlon", ignoremask) - vN = 0 - vE = 0 - vD = 0 - if (len(args) == 3): - vN = float(args[0]) - vE = float(args[1]) - vD = float(args[2]) - ignoremask = ignoremask & 455 - - print ("ignoremask",ignoremask) - print (latlon) - self.master.mav.set_position_target_global_int_send( - 0, # system time in ms - 1, # target system - 0, # target component - mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, - ignoremask, # ignore - int(latlon[0] * 1e7), - int(latlon[1] * 1e7), - 10, - vN, vE, vD, # velocity - 0, 0, 0, # accel x,y,z - 0, 0) # yaw, yaw rate - -def init(mpstate): - '''initialise module''' - return CmdlongModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_console.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_console.py deleted file mode 100644 index 3734355d5..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_console.py +++ /dev/null @@ -1,354 +0,0 @@ -""" - MAVProxy console - - uses lib/console.py for display -""" - -import os, sys, math, time - -from MAVProxy.modules.lib import wxconsole -from MAVProxy.modules.lib import textconsole -from MAVProxy.modules.mavproxy_map import mp_elevation -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import wxsettings -from MAVProxy.modules.lib.mp_menu import * - -class ConsoleModule(mp_module.MPModule): - def __init__(self, mpstate): - super(ConsoleModule, self).__init__(mpstate, "console", "GUI console", public=True) - self.in_air = False - self.start_time = 0.0 - self.total_time = 0.0 - self.speed = 0 - self.max_link_num = 0 - self.last_sys_status_health = 0 - mpstate.console = wxconsole.MessageConsole(title='Console') - - # setup some default status information - mpstate.console.set_status('Mode', 'UNKNOWN', row=0, fg='blue') - mpstate.console.set_status('ARM', 'ARM', fg='grey', row=0) - mpstate.console.set_status('GPS', 'GPS: --', fg='red', row=0) - mpstate.console.set_status('Vcc', 'Vcc: --', fg='red', row=0) - mpstate.console.set_status('Radio', 'Radio: --', row=0) - mpstate.console.set_status('INS', 'INS', fg='grey', row=0) - mpstate.console.set_status('MAG', 'MAG', fg='grey', row=0) - mpstate.console.set_status('AS', 'AS', fg='grey', row=0) - mpstate.console.set_status('RNG', 'RNG', fg='grey', row=0) - mpstate.console.set_status('AHRS', 'AHRS', fg='grey', row=0) - mpstate.console.set_status('EKF', 'EKF', fg='grey', row=0) - mpstate.console.set_status('Heading', 'Hdg ---/---', row=2) - mpstate.console.set_status('Alt', 'Alt ---', row=2) - mpstate.console.set_status('AGL', 'AGL ---/---', row=2) - mpstate.console.set_status('AirSpeed', 'AirSpeed --', row=2) - mpstate.console.set_status('GPSSpeed', 'GPSSpeed --', row=2) - mpstate.console.set_status('Thr', 'Thr ---', row=2) - mpstate.console.set_status('Roll', 'Roll ---', row=2) - mpstate.console.set_status('Pitch', 'Pitch ---', row=2) - mpstate.console.set_status('Wind', 'Wind ---/---', row=2) - mpstate.console.set_status('WP', 'WP --', row=3) - mpstate.console.set_status('WPDist', 'Distance ---', row=3) - mpstate.console.set_status('WPBearing', 'Bearing ---', row=3) - mpstate.console.set_status('AltError', 'AltError --', row=3) - mpstate.console.set_status('AspdError', 'AspdError --', row=3) - mpstate.console.set_status('FlightTime', 'FlightTime --', row=3) - mpstate.console.set_status('ETR', 'ETR --', row=3) - - mpstate.console.ElevationMap = mp_elevation.ElevationModel() - - # create the main menu - if mp_util.has_wxpython: - self.menu = MPMenuTop([]) - self.add_menu(MPMenuSubMenu('MAVProxy', - items=[MPMenuItem('Settings', 'Settings', 'menuSettings'), - MPMenuItem('Map', 'Load Map', '# module load map')])) - - def add_menu(self, menu): - '''add a new menu''' - self.menu.add(menu) - self.mpstate.console.set_menu(self.menu, self.menu_callback) - - def unload(self): - '''unload module''' - self.mpstate.console.close() - self.mpstate.console = textconsole.SimpleConsole() - - def menu_callback(self, m): - '''called on menu selection''' - if m.returnkey.startswith('# '): - cmd = m.returnkey[2:] - if m.handler is not None: - if m.handler_result is None: - return - cmd += m.handler_result - self.mpstate.functions.process_stdin(cmd) - if m.returnkey == 'menuSettings': - wxsettings.WXSettings(self.settings) - - - def estimated_time_remaining(self, lat, lon, wpnum, speed): - '''estimate time remaining in mission in seconds''' - idx = wpnum - if wpnum >= self.module('wp').wploader.count(): - return 0 - distance = 0 - done = set() - while idx < self.module('wp').wploader.count(): - if idx in done: - break - done.add(idx) - w = self.module('wp').wploader.wp(idx) - if w.command == mavutil.mavlink.MAV_CMD_DO_JUMP: - idx = int(w.param1) - continue - idx += 1 - if (w.x != 0 or w.y != 0) and w.command in [mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, - mavutil.mavlink.MAV_CMD_NAV_LOITER_UNLIM, - mavutil.mavlink.MAV_CMD_NAV_LOITER_TURNS, - mavutil.mavlink.MAV_CMD_NAV_LOITER_TIME, - mavutil.mavlink.MAV_CMD_NAV_LAND, - mavutil.mavlink.MAV_CMD_NAV_TAKEOFF]: - distance += mp_util.gps_distance(lat, lon, w.x, w.y) - lat = w.x - lon = w.y - if w.command == mavutil.mavlink.MAV_CMD_NAV_LAND: - break - return distance / speed - - - - def mavlink_packet(self, msg): - '''handle an incoming mavlink packet''' - if not isinstance(self.console, wxconsole.MessageConsole): - return - if not self.console.is_alive(): - self.mpstate.console = textconsole.SimpleConsole() - return - type = msg.get_type() - - master = self.master - # add some status fields - if type in [ 'GPS_RAW', 'GPS_RAW_INT' ]: - if type == "GPS_RAW": - num_sats1 = master.field('GPS_STATUS', 'satellites_visible', 0) - else: - num_sats1 = msg.satellites_visible - num_sats2 = master.field('GPS2_RAW', 'satellites_visible', -1) - if num_sats2 == -1: - sats_string = "%u" % num_sats1 - else: - sats_string = "%u/%u" % (num_sats1, num_sats2) - if ((msg.fix_type == 3 and master.mavlink10()) or - (msg.fix_type == 2 and not master.mavlink10())): - self.console.set_status('GPS', 'GPS: OK (%s)' % sats_string, fg='green') - else: - self.console.set_status('GPS', 'GPS: %u (%s)' % (msg.fix_type, sats_string), fg='red') - if master.mavlink10(): - gps_heading = int(self.mpstate.status.msgs['GPS_RAW_INT'].cog * 0.01) - else: - gps_heading = self.mpstate.status.msgs['GPS_RAW'].hdg - self.console.set_status('Heading', 'Hdg %s/%u' % (master.field('VFR_HUD', 'heading', '-'), gps_heading)) - elif type == 'VFR_HUD': - if master.mavlink10(): - alt = master.field('GPS_RAW_INT', 'alt', 0) / 1.0e3 - else: - alt = master.field('GPS_RAW', 'alt', 0) - if self.module('wp').wploader.count() > 0: - wp = self.module('wp').wploader.wp(0) - home_lat = wp.x - home_lng = wp.y - else: - home_lat = master.field('HOME', 'lat') * 1.0e-7 - home_lng = master.field('HOME', 'lon') * 1.0e-7 - lat = master.field('GLOBAL_POSITION_INT', 'lat', 0) * 1.0e-7 - lng = master.field('GLOBAL_POSITION_INT', 'lon', 0) * 1.0e-7 - rel_alt = master.field('GLOBAL_POSITION_INT', 'relative_alt', 0) * 1.0e-3 - agl_alt = None - if self.settings.basealt != 0: - agl_alt = self.console.ElevationMap.GetElevation(lat, lng) - if agl_alt is not None: - agl_alt = self.settings.basealt - agl_alt - else: - try: - agl_alt_home = self.console.ElevationMap.GetElevation(home_lat, home_lng) - except Exception as ex: - print(ex) - agl_alt_home = None - if agl_alt_home is not None: - agl_alt = self.console.ElevationMap.GetElevation(lat, lng) - if agl_alt is not None: - agl_alt = agl_alt_home - agl_alt - if agl_alt is not None: - agl_alt += rel_alt - vehicle_agl = master.field('TERRAIN_REPORT', 'current_height', None) - if vehicle_agl is None: - vehicle_agl = '---' - else: - vehicle_agl = int(vehicle_agl) - self.console.set_status('AGL', 'AGL %u/%s' % (agl_alt, vehicle_agl)) - self.console.set_status('Alt', 'Alt %u' % rel_alt) - self.console.set_status('AirSpeed', 'AirSpeed %u' % msg.airspeed) - self.console.set_status('GPSSpeed', 'GPSSpeed %u' % msg.groundspeed) - self.console.set_status('Thr', 'Thr %u' % msg.throttle) - t = time.localtime(msg._timestamp) - flying = False - if self.mpstate.vehicle_type == 'copter': - flying = self.master.motors_armed() - else: - flying = msg.groundspeed > 3 - if flying and not self.in_air: - self.in_air = True - self.start_time = time.mktime(t) - elif flying and self.in_air: - self.total_time = time.mktime(t) - self.start_time - self.console.set_status('FlightTime', 'FlightTime %u:%02u' % (int(self.total_time)/60, int(self.total_time)%60)) - elif not flying and self.in_air: - self.in_air = False - self.total_time = time.mktime(t) - self.start_time - self.console.set_status('FlightTime', 'FlightTime %u:%02u' % (int(self.total_time)/60, int(self.total_time)%60)) - elif type == 'ATTITUDE': - self.console.set_status('Roll', 'Roll %u' % math.degrees(msg.roll)) - self.console.set_status('Pitch', 'Pitch %u' % math.degrees(msg.pitch)) - elif type in ['SYS_STATUS']: - sensors = { 'AS' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE, - 'MAG' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_MAG, - 'INS' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_ACCEL | mavutil.mavlink.MAV_SYS_STATUS_SENSOR_3D_GYRO, - 'AHRS' : mavutil.mavlink.MAV_SYS_STATUS_AHRS, - 'RC' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_RC_RECEIVER, - 'TERR' : mavutil.mavlink.MAV_SYS_STATUS_TERRAIN, - 'RNG' : mavutil.mavlink.MAV_SYS_STATUS_SENSOR_LASER_POSITION} - announce = [ 'RC' ] - for s in sensors.keys(): - bits = sensors[s] - present = ((msg.onboard_control_sensors_enabled & bits) == bits) - healthy = ((msg.onboard_control_sensors_health & bits) == bits) - if not present: - fg = 'grey' - elif not healthy: - fg = 'red' - else: - fg = 'green' - # for terrain show yellow if still loading - if s == 'TERR' and fg == 'green' and master.field('TERRAIN_REPORT', 'pending', 0) != 0: - fg = 'yellow' - self.console.set_status(s, s, fg=fg) - for s in announce: - bits = sensors[s] - present = ((msg.onboard_control_sensors_enabled & bits) == bits) - healthy = ((msg.onboard_control_sensors_health & bits) == bits) - was_healthy = ((self.last_sys_status_health & bits) == bits) - if present and not healthy and was_healthy: - self.say("%s fail" % s) - self.last_sys_status_health = msg.onboard_control_sensors_health - - elif type == 'WIND': - self.console.set_status('Wind', 'Wind %u/%.2f' % (msg.direction, msg.speed)) - - elif type == 'EKF_STATUS_REPORT': - highest = 0.0 - vars = ['velocity_variance', - 'pos_horiz_variance', - 'pos_vert_variance', - 'compass_variance', - 'terrain_alt_variance'] - for var in vars: - v = getattr(msg, var, 0) - highest = max(v, highest) - if highest >= 1.0: - fg = 'red' - elif highest >= 0.5: - fg = 'orange' - else: - fg = 'green' - self.console.set_status('EKF', 'EKF', fg=fg) - - elif type == 'HWSTATUS': - if msg.Vcc >= 4600 and msg.Vcc <= 5300: - fg = 'green' - else: - fg = 'red' - self.console.set_status('Vcc', 'Vcc %.2f' % (msg.Vcc * 0.001), fg=fg) - elif type == 'POWER_STATUS': - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_CHANGED: - fg = 'red' - else: - fg = 'green' - status = 'PWR:' - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_USB_CONNECTED: - status += 'U' - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_BRICK_VALID: - status += 'B' - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_SERVO_VALID: - status += 'S' - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_PERIPH_OVERCURRENT: - status += 'O1' - if msg.flags & mavutil.mavlink.MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT: - status += 'O2' - self.console.set_status('PWR', status, fg=fg) - self.console.set_status('Srv', 'Srv %.2f' % (msg.Vservo*0.001), fg='green') - elif type in ['RADIO', 'RADIO_STATUS']: - if msg.rssi < msg.noise+10 or msg.remrssi < msg.remnoise+10: - fg = 'red' - else: - fg = 'black' - self.console.set_status('Radio', 'Radio %u/%u %u/%u' % (msg.rssi, msg.noise, msg.remrssi, msg.remnoise), fg=fg) - elif type == 'HEARTBEAT': - self.console.set_status('Mode', '%s' % master.flightmode, fg='blue') - if self.master.motors_armed(): - arm_colour = 'green' - else: - arm_colour = 'red' - self.console.set_status('ARM', 'ARM', fg=arm_colour) - if self.max_link_num != len(self.mpstate.mav_master): - for i in range(self.max_link_num): - self.console.set_status('Link%u'%(i+1), '', row=1) - self.max_link_num = len(self.mpstate.mav_master) - for m in self.mpstate.mav_master: - linkdelay = (self.mpstate.status.highest_msec - m.highest_msec)*1.0e-3 - linkline = "Link %u " % (m.linknum+1) - if m.linkerror: - linkline += "down" - fg = 'red' - else: - packets_rcvd_percentage = 100 - if (m.mav_loss != 0): #avoid divide-by-zero - packets_rcvd_percentage = (1.0 - (float(m.mav_loss) / float(m.mav_count))) * 100.0 - - linkline += "OK (%u pkts, %.2fs delay, %u lost) %u%%" % (m.mav_count, linkdelay, m.mav_loss, packets_rcvd_percentage) - if linkdelay > 1: - fg = 'orange' - else: - fg = 'dark green' - self.console.set_status('Link%u'%m.linknum, linkline, row=1, fg=fg) - elif type in ['WAYPOINT_CURRENT', 'MISSION_CURRENT']: - self.console.set_status('WP', 'WP %u' % msg.seq) - lat = master.field('GLOBAL_POSITION_INT', 'lat', 0) * 1.0e-7 - lng = master.field('GLOBAL_POSITION_INT', 'lon', 0) * 1.0e-7 - if lat != 0 and lng != 0: - airspeed = master.field('VFR_HUD', 'airspeed', 30) - if abs(airspeed - self.speed) > 5: - self.speed = airspeed - else: - self.speed = 0.98*self.speed + 0.02*airspeed - self.speed = max(1, self.speed) - time_remaining = int(self.estimated_time_remaining(lat, lng, msg.seq, self.speed)) - self.console.set_status('ETR', 'ETR %u:%02u' % (time_remaining/60, time_remaining%60)) - - elif type == 'NAV_CONTROLLER_OUTPUT': - self.console.set_status('WPDist', 'Distance %u' % msg.wp_dist) - self.console.set_status('WPBearing', 'Bearing %u' % msg.target_bearing) - if msg.alt_error > 0: - alt_error_sign = "L" - else: - alt_error_sign = "H" - if msg.aspd_error > 0: - aspd_error_sign = "L" - else: - aspd_error_sign = "H" - self.console.set_status('AltError', 'AltError %d%s' % (msg.alt_error, alt_error_sign)) - self.console.set_status('AspdError', 'AspdError %.1f%s' % (msg.aspd_error*0.01, aspd_error_sign)) - -def init(mpstate): - '''initialise module''' - return ConsoleModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_dataflash_logger.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_dataflash_logger.py deleted file mode 100644 index a4fd638ca..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_dataflash_logger.py +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/env python -''' -DataFlash Logging Module -June 2015 - -ArduPilot supports transmission of DataFlash logs over MavLink. - -This module pokes the UAV to start sending logs, and stores them in a local directory. - -The relevant code in the ArduPilot code base can be found in libraries/DataFlash/DataFlash_MAVLink.* -''' - -import logging -import os -import os.path -import threading -import types -import sys -from pymavlink import mavutil -import random -import errno - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util -import time -from MAVProxy.modules.lib import mp_settings - - -class dataflash_logger(mp_module.MPModule): - def __init__(self, mpstate): - """Initialise module. We start poking the UAV for messages after this is called""" - super(dataflash_logger, self).__init__(mpstate, "dataflash_logger", "logging of mavlink dataflash messages") - self.new_log_started = False - self.stopped = False - self.time_last_start_packet_sent = 0 - self.time_last_stop_packet_sent = 0 - self.dataflash_dir = self._dataflash_dir(mpstate) - - self.log_settings = mp_settings.MPSettings( - [ ('verbose', bool, False), - ]) - self.add_command('dataflash_logger', self.cmd_dataflash_logger, "dataflash logging control", ['status','start','stop','set (LOGSETTING)']) - self.add_completion_function('(LOGSETTING)', self.log_settings.completion) - - def usage(self): - '''show help on a command line options''' - return "Usage: dataflash_logger " - - def cmd_dataflash_logger(self, args): - '''control behaviour of the module''' - if len(args) == 0: - print (self.usage()) - elif args[0] == "status": - print (self.status()) - elif args[0] == "stop": - self.new_log_started = False - self.stopped = True - elif args[0] == "start": - self.stopped = False - elif args[0] == "set": - self.log_settings.command(args[1:]) - else: - print (self.usage()) - - def _dataflash_dir(self, mpstate): - '''returns directory path to store DF logs in. May be relative''' - if mpstate.settings.state_basedir is None: - ret = 'dataflash' - else: - ret = os.path.join(mpstate.settings.state_basedir,'dataflash') - - try: - os.makedirs(ret) - except OSError as e: - if e.errno != errno.EEXIST: - print("DFLogger: OSError making (%s): %s" % (ret, str(e))) - except Exception as e: - print("DFLogger: Unknown exception making (%s): %s" % (ret, str(e))) - - return ret - - def new_log_filepath(self): - '''returns a filepath to a log which does not currently exist and is suitable for DF logging''' - lastlog_filename = os.path.join(self.dataflash_dir,'LASTLOG.TXT') - if os.path.exists(lastlog_filename) and os.stat(lastlog_filename).st_size != 0: - fh = open(lastlog_filename,'rb') - log_cnt = int(fh.read()) + 1 - fh.close() - else: - log_cnt = 1 - - self.lastlog_file = open(lastlog_filename,'w+b') - self.lastlog_file.write(log_cnt.__str__()) - self.lastlog_file.close() - - return os.path.join(self.dataflash_dir, '%u.BIN' % (log_cnt,)); - - def start_new_log(self): - '''open a new dataflash log, reset state''' - filename = self.new_log_filepath() - - self.block_cnt = 0 - self.logfile = open(filename, 'w+b') - print("DFLogger: logging started (%s)" % (filename)) - self.prev_cnt = 0 - self.download = 0 - self.prev_download = 0 - self.last_idle_status_printed_time = time.time() - self.last_status_time = time.time() - self.missing_blocks = {} - self.acking_blocks = {} - self.blocks_to_ack_and_nack = [] - self.missing_found = 0 - self.abandoned = 0 - - def status(self): - '''returns information about module''' - transfered = self.download - self.prev_download - now = time.time() - interval = now - self.last_status_time - self.last_status_time = now - return("DFLogger: %(state)s Rate(%(interval)ds):%(rate).3fkB/s Block:%(block_cnt)d Missing:%(missing)d Fixed:%(fixed)d Abandoned:%(abandoned)d" % - {"interval": interval, - "rate": transfered/(interval*1000), - "block_cnt": self.block_cnt, - "missing": len(self.missing_blocks), - "fixed": self.missing_found, - "abandoned": self.abandoned, - "state": "Inactive" if self.stopped else "Active" - }) - def idle_print_status(self): - '''print out statistics every 10 seconds from idle loop''' - now = time.time() - if (now - self.last_idle_status_printed_time) >= 10: - print (self.status()) - self.last_idle_status_printed_time = now - self.prev_download = self.download - - def idle_send_acks_and_nacks(self): - '''Send packets to UAV in idle loop''' - max_blocks_to_send = 10 - blocks_sent = 0 - i=0 - now = time.time() - while i < len(self.blocks_to_ack_and_nack) and blocks_sent < max_blocks_to_send: -# print("ACKLIST: %s" % ([x[1] for x in self.blocks_to_ack_and_nack],)) - stuff = self.blocks_to_ack_and_nack[i] - - [master, block, status, first_sent, last_sent] = stuff - if status == 1: -# print("DFLogger: ACKing block (%d)" % (block,)) - self.master.mav.remote_log_block_status_send(block,status) - blocks_sent += 1 - del self.acking_blocks[block] - del self.blocks_to_ack_and_nack[i] - continue - - if block not in self.missing_blocks: - # we've received this block now - del self.blocks_to_ack_and_nack[i] - continue - - # give up on packet if we have seen one with a much higher - # number: - if self.block_cnt - block > 200 or \ - now - first_sent > 60: - print("DFLogger: Abandoning block (%d)" % (block,)) - del self.blocks_to_ack_and_nack[i] - del self.missing_blocks[block] - self.abandoned += 1 - continue - - i += 1 - # only send each nack every-so-often: - if last_sent is not None: - if now - last_sent < 0.1: - continue - - print("DFLogger: NACKing block (%d)" % (block,)) - self.master.mav.remote_log_block_status_send(block,status) - blocks_sent += 1 - stuff[4] = now - - def idle_task_started(self): - '''called in idle task only when logging is started''' - if self.log_settings.verbose: - self.idle_print_status() - self.idle_send_acks_and_nacks() - - def idle_task(self): - if self.new_log_started == True: - self.idle_task_started() - - def mavlink_packet(self, m): - '''handle REMOTE_LOG_DATA_BLOCK packets''' - now = time.time() - if m.get_type() == 'REMOTE_LOG_DATA_BLOCK': - if self.stopped: - # send a stop packet every second until the other end gets the idea: - if now - self.time_last_stop_packet_sent > 1: - if self.log_settings.verbose: - print("DFLogger: Sending stop packet") - self.master.mav.remote_log_block_status_send(mavutil.mavlink.MAV_REMOTE_LOG_DATA_BLOCK_STOP,1) - return - -# if random.random() < 0.1: # drop 1 packet in 10 -# return - - - if not self.new_log_started: - if self.log_settings.verbose: - print("DFLogger: Received data packet - starting new log") - self.start_new_log() - self.new_log_started = True - if self.new_log_started == True: - size = m.block_size - data = ''.join(str(chr(x)) for x in m.data[:size]) - ofs = size*(m.block_cnt) - self.logfile.seek(ofs) - self.logfile.write(data) - - if m.block_cnt in self.missing_blocks: - if self.log_settings.verbose: - print("DFLogger: Received missing block: %d" % (m.block_cnt,)) - del self.missing_blocks[m.block_cnt] - self.missing_found += 1 - self.blocks_to_ack_and_nack.append([self.master,m.block_cnt,1,now,None]) - self.acking_blocks[m.block_cnt] = 1 -# print("DFLogger: missing blocks: %s" % (str(self.missing_blocks),)) - else: - # ACK the block we just got: - if m.block_cnt in self.acking_blocks: - # already acking this one; we probably sent - # multiple nacks and received this one - # multiple times - pass - else: - self.blocks_to_ack_and_nack.append([self.master,m.block_cnt,1,now,None]) - self.acking_blocks[m.block_cnt] = 1 - # NACK any blocks we haven't seen and should have: - if(m.block_cnt - self.block_cnt > 1): - for block in range(self.block_cnt+1, m.block_cnt): - if block not in self.missing_blocks and \ - block not in self.acking_blocks: - self.missing_blocks[block] = 1 - if self.log_settings.verbose: - print ("DFLogger: setting %d for nacking" % (block,)) - self.blocks_to_ack_and_nack.append([self.master,block,0,now,None]) - #print "\nmissed blocks: ",self.missing_blocks - if self.block_cnt < m.block_cnt: - self.block_cnt = m.block_cnt - self.download += size - elif not self.new_log_started and not self.stopped: - # send a start packet every second until the other end gets the idea: - if now - self.time_last_start_packet_sent > 1: - if self.log_settings.verbose: - print("DFLogger: Sending start packet") - self.master.mav.remote_log_block_status_send(mavutil.mavlink.MAV_REMOTE_LOG_DATA_BLOCK_START,1) - self.time_last_start_packet_sent = now - -def init(mpstate): - '''initialise module''' - return dataflash_logger(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_fence.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_fence.py deleted file mode 100644 index c0ccff933..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_fence.py +++ /dev/null @@ -1,303 +0,0 @@ -""" - MAVProxy geofence module -""" -import os, time, platform -from pymavlink import mavwp, mavutil -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_module -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - -class FenceModule(mp_module.MPModule): - def __init__(self, mpstate): - super(FenceModule, self).__init__(mpstate, "fence", "geo-fence management", public = True) - self.fenceloader = mavwp.MAVFenceLoader() - self.last_fence_breach = 0 - self.last_fence_status = 0 - self.present = False - self.enabled = False - self.healthy = True - self.add_command('fence', self.cmd_fence, - "geo-fence management", - ["", - " (FILENAME)"]) - - self.have_list = False - - if self.continue_mode and self.logdir != None: - fencetxt = os.path.join(self.logdir, 'fence.txt') - if os.path.exists(fencetxt): - self.fenceloader.load(fencetxt) - self.have_list = True - print("Loaded fence from %s" % fencetxt) - - self.menu_added_console = False - self.menu_added_map = False - if mp_util.has_wxpython: - self.menu = MPMenuSubMenu('Fence', - items=[MPMenuItem('Clear', 'Clear', '# fence clear'), - MPMenuItem('List', 'List', '# fence list'), - MPMenuItem('Load', 'Load', '# fence load ', - handler=MPMenuCallFileDialog(flags=('open',), - title='Fence Load', - wildcard='*.fen')), - MPMenuItem('Save', 'Save', '# fence save ', - handler=MPMenuCallFileDialog(flags=('save', 'overwrite_prompt'), - title='Fence Save', - wildcard='*.fen')), - MPMenuItem('Draw', 'Draw', '# fence draw')]) - - def idle_task(self): - '''called on idle''' - if self.module('console') is not None and not self.menu_added_console: - self.menu_added_console = True - self.module('console').add_menu(self.menu) - if self.module('map') is not None and not self.menu_added_map: - self.menu_added_map = True - self.module('map').add_menu(self.menu) - - def mavlink_packet(self, m): - '''handle and incoming mavlink packet''' - if m.get_type() == "FENCE_STATUS": - self.last_fence_breach = m.breach_time - self.last_fence_status = m.breach_status - elif m.get_type() in ['SYS_STATUS']: - bits = mavutil.mavlink.MAV_SYS_STATUS_GEOFENCE - - present = ((m.onboard_control_sensors_present & bits) == bits) - if self.present == False and present == True: - self.say("fence present") - elif self.present == True and present == False: - self.say("fence removed") - self.present = present - - enabled = ((m.onboard_control_sensors_enabled & bits) == bits) - if self.enabled == False and enabled == True: - self.say("fence enabled") - elif self.enabled == True and enabled == False: - self.say("fence disabled") - self.enabled = enabled - - healthy = ((m.onboard_control_sensors_health & bits) == bits) - if self.healthy == False and healthy == True: - self.say("fence OK") - elif self.healthy == True and healthy == False: - self.say("fence breach") - self.healthy = healthy - - #console output for fence: - if self.enabled == False: - self.console.set_status('Fence', 'FEN', row=0, fg='grey') - elif self.enabled == True and self.healthy == True: - self.console.set_status('Fence', 'FEN', row=0, fg='green') - elif self.enabled == True and self.healthy == False: - self.console.set_status('Fence', 'FEN', row=0, fg='red') - - def set_fence_enabled(self, do_enable): - '''Enable or disable fence''' - self.master.mav.command_long_send( - self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_FENCE_ENABLE, 0, - do_enable, 0, 0, 0, 0, 0, 0) - - def cmd_fence_move(self, args): - '''handle fencepoint move''' - if len(args) < 1: - print("Usage: fence move FENCEPOINTNUM") - return - if not self.have_list: - print("Please list fence points first") - return - - idx = int(args[0]) - if idx <= 0 or idx > self.fenceloader.count(): - print("Invalid fence point number %u" % idx) - return - - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - - # note we don't subtract 1, as first fence point is the return point - self.fenceloader.move(idx, latlon[0], latlon[1]) - if self.send_fence(): - print("Moved fence point %u" % idx) - - def cmd_fence_remove(self, args): - '''handle fencepoint remove''' - if len(args) < 1: - print("Usage: fence remove FENCEPOINTNUM") - return - if not self.have_list: - print("Please list fence points first") - return - - idx = int(args[0]) - if idx <= 0 or idx > self.fenceloader.count(): - print("Invalid fence point number %u" % idx) - return - - # note we don't subtract 1, as first fence point is the return point - self.fenceloader.remove(idx) - if self.send_fence(): - print("Removed fence point %u" % idx) - else: - print("Failed to remove fence point %u" % idx) - - def cmd_fence(self, args): - '''fence commands''' - if len(args) < 1: - self.print_usage() - return - - if args[0] == "enable": - self.set_fence_enabled(1) - elif args[0] == "disable": - self.set_fence_enabled(0) - elif args[0] == "load": - if len(args) != 2: - print("usage: fence load ") - return - self.load_fence(args[1]) - elif args[0] == "list": - self.list_fence(None) - elif args[0] == "move": - self.cmd_fence_move(args[1:]) - elif args[0] == "remove": - self.cmd_fence_remove(args[1:]) - elif args[0] == "save": - if len(args) != 2: - print("usage: fence save ") - return - self.list_fence(args[1]) - elif args[0] == "show": - if len(args) != 2: - print("usage: fence show ") - return - self.fenceloader.load(args[1]) - self.have_list = True - elif args[0] == "draw": - if not 'draw_lines' in self.mpstate.map_functions: - print("No map drawing available") - return - self.mpstate.map_functions['draw_lines'](self.fence_draw_callback) - print("Drawing fence on map") - elif args[0] == "clear": - self.param_set('FENCE_TOTAL', 0, 3) - else: - self.print_usage() - - def load_fence(self, filename): - '''load fence points from a file''' - try: - self.fenceloader.target_system = self.target_system - self.fenceloader.target_component = self.target_component - self.fenceloader.load(filename) - except Exception as msg: - print("Unable to load %s - %s" % (filename, msg)) - return - print("Loaded %u geo-fence points from %s" % (self.fenceloader.count(), filename)) - self.send_fence() - - def send_fence(self): - '''send fence points from fenceloader''' - # must disable geo-fencing when loading - self.fenceloader.target_system = self.target_system - self.fenceloader.target_component = self.target_component - self.fenceloader.reindex() - action = self.get_mav_param('FENCE_ACTION', mavutil.mavlink.FENCE_ACTION_NONE) - self.param_set('FENCE_ACTION', mavutil.mavlink.FENCE_ACTION_NONE, 3) - self.param_set('FENCE_TOTAL', self.fenceloader.count(), 3) - for i in range(self.fenceloader.count()): - p = self.fenceloader.point(i) - self.master.mav.send(p) - p2 = self.fetch_fence_point(i) - if p2 is None: - self.param_set('FENCE_ACTION', action, 3) - return False - if (p.idx != p2.idx or - abs(p.lat - p2.lat) >= 0.00003 or - abs(p.lng - p2.lng) >= 0.00003): - print("Failed to send fence point %u" % i) - self.param_set('FENCE_ACTION', action, 3) - return False - self.param_set('FENCE_ACTION', action, 3) - return True - - def fetch_fence_point(self ,i): - '''fetch one fence point''' - self.master.mav.fence_fetch_point_send(self.target_system, - self.target_component, i) - tstart = time.time() - p = None - while time.time() - tstart < 3: - p = self.master.recv_match(type='FENCE_POINT', blocking=False) - if p is not None: - break - time.sleep(0.1) - continue - if p is None: - self.console.error("Failed to fetch point %u" % i) - return None - return p - - def fence_draw_callback(self, points): - '''callback from drawing a fence''' - self.fenceloader.clear() - if len(points) < 3: - return - self.fenceloader.target_system = self.target_system - self.fenceloader.target_component = self.target_component - bounds = mp_util.polygon_bounds(points) - (lat, lon, width, height) = bounds - center = (lat+width/2, lon+height/2) - self.fenceloader.add_latlon(center[0], center[1]) - for p in points: - self.fenceloader.add_latlon(p[0], p[1]) - # close it - self.fenceloader.add_latlon(points[0][0], points[0][1]) - self.send_fence() - self.have_list = True - - def list_fence(self, filename): - '''list fence points, optionally saving to a file''' - self.fenceloader.clear() - count = self.get_mav_param('FENCE_TOTAL', 0) - if count == 0: - print("No geo-fence points") - return - for i in range(int(count)): - p = self.fetch_fence_point(i) - if p is None: - return - self.fenceloader.add(p) - - if filename is not None: - try: - self.fenceloader.save(filename) - except Exception as msg: - print("Unable to save %s - %s" % (filename, msg)) - return - print("Saved %u geo-fence points to %s" % (self.fenceloader.count(), filename)) - else: - for i in range(self.fenceloader.count()): - p = self.fenceloader.point(i) - self.console.writeln("lat=%f lng=%f" % (p.lat, p.lng)) - if self.status.logdir != None: - fencetxt = os.path.join(self.status.logdir, 'fence.txt') - self.fenceloader.save(fencetxt) - print("Saved fence to %s" % fencetxt) - self.have_list = True - - def print_usage(self): - print("usage: fence ") - -def init(mpstate): - '''initialise module''' - return FenceModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gasheli.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gasheli.py deleted file mode 100644 index 37361ce86..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gasheli.py +++ /dev/null @@ -1,152 +0,0 @@ -""" -helicopter monitoring and control module gas helicopters -""" - -import os, sys, math, time - -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_settings - -class GasHeliModule(mp_module.MPModule): - def __init__(self, mpstate): - super(GasHeliModule, self).__init__(mpstate, "gas_heli", "Gas Heli", public=False) - self.console.set_status('IGN', 'IGN', row=4) - self.console.set_status('THR', 'THR', row=4) - self.console.set_status('RPM', 'RPM: 0', row=4) - self.add_command('gasheli', self.cmd_gasheli, - 'gas helicopter control', - ['', - 'set (GASHELISETTINGS)']) - self.gasheli_settings = mp_settings.MPSettings( - [ ('ignition_chan', int, 0), - ('ignition_disable_time', float, 0.5), - ('ignition_stop_time', float, 3), - ('starter_chan', int, 0), - ('starter_time', float, 3.0), - ('starter_pwm_on', int, 2000), - ('starter_pwm_off', int, 1000), - ] - ) - self.add_completion_function('(GASHELISETTINGS)', self.gasheli_settings.completion) - self.starting_motor = False - self.stopping_motor = False - self.motor_t1 = None - self.old_override = 0 - - def mavlink_packet(self, msg): - '''handle an incoming mavlink packet''' - type = msg.get_type() - - master = self.master - - # add some status fields - if type in [ 'RC_CHANNELS_RAW' ]: - rc6 = msg.chan6_raw - if rc6 > 1500: - ign_colour = 'green' - else: - ign_colour = 'red' - self.console.set_status('IGN', 'IGN', fg=ign_colour, row=4) - - if type in [ 'SERVO_OUTPUT_RAW' ]: - rc8 = msg.servo8_raw - if rc8 < 1200: - thr_colour = 'red' - elif rc8 < 1300: - thr_colour = 'orange' - else: - thr_colour = 'green' - self.console.set_status('THR', 'THR', fg=thr_colour, row=4) - - if type in [ 'RPM' ]: - rpm = msg.rpm1 - if rpm < 3000: - rpm_colour = 'red' - elif rpm < 10000: - rpm_colour = 'orange' - else: - rpm_colour = 'green' - self.console.set_status('RPM', 'RPM: %u' % rpm, fg=rpm_colour, row=4) - - def valid_starter_settings(self): - '''check starter settings''' - if self.gasheli_settings.ignition_chan <= 0 or self.gasheli_settings.ignition_chan > 8: - print("Invalid ignition channel %d" % self.gasheli_settings.ignition_chan) - return False - if self.gasheli_settings.starter_chan <= 0 or self.gasheli_settings.starter_chan > 14: - print("Invalid starter channel %d" % self.gasheli_settings.starter_chan) - return False - return True - - def idle_task(self): - '''run periodic tasks''' - if self.starting_motor: - if self.gasheli_settings.ignition_disable_time > 0: - elapsed = time.time() - self.motor_t1 - if elapsed >= self.gasheli_settings.ignition_disable_time: - self.module('rc').set_override_chan(self.gasheli_settings.ignition_chan-1, self.old_override) - self.starting_motor = False - if self.stopping_motor: - elapsed = time.time() - self.motor_t1 - if elapsed >= self.gasheli_settings.ignition_stop_time: - # hand back control to RC - self.module('rc').set_override_chan(self.gasheli_settings.ignition_chan-1, self.old_override) - self.stopping_motor = False - - def start_motor(self): - '''start motor''' - if not self.valid_starter_settings(): - return - self.motor_t1 = time.time() - self.stopping_motor = False - - if self.gasheli_settings.ignition_disable_time > 0: - self.old_override = self.module('rc').get_override_chan(self.gasheli_settings.ignition_chan-1) - self.module('rc').set_override_chan(self.gasheli_settings.ignition_chan-1, 1000) - self.starting_motor = True - else: - # nothing more to do - self.starting_motor = False - - # setup starter run - self.master.mav.command_long_send(self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_REPEAT_SERVO, 0, - self.gasheli_settings.starter_chan, - self.gasheli_settings.starter_pwm_on, - 1, - self.gasheli_settings.starter_time*2, - 0, 0, 0) - print("Starting motor") - - def stop_motor(self): - '''stop motor''' - if not self.valid_starter_settings(): - return - self.motor_t1 = time.time() - self.starting_motor = False - self.stopping_motor = True - self.old_override = self.module('rc').get_override_chan(self.gasheli_settings.ignition_chan-1) - self.module('rc').set_override_chan(self.gasheli_settings.ignition_chan-1, 1000) - print("Stopping motor") - - def cmd_gasheli(self, args): - '''gas help commands''' - usage = "Usage: gasheli " - if len(args) < 1: - print(usage) - return - if args[0] == "start": - self.start_motor() - elif args[0] == "stop": - self.stop_motor() - elif args[0] == "set": - self.gasheli_settings.command(args[1:]) - else: - print(usage) - -def init(mpstate): - '''initialise module''' - return GasHeliModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gimbal.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gimbal.py deleted file mode 100644 index d27e5c030..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gimbal.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env python -''' -gimbal control module -Andrew Tridgell -January 2015 -''' - -import sys, os, time -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.mavproxy_map import mp_slipmap -from pymavlink import mavutil -from pymavlink.rotmat import Vector3, Matrix3, Plane, Line -from math import radians -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - -class GimbalModule(mp_module.MPModule): - def __init__(self, mpstate): - super(GimbalModule, self).__init__(mpstate, "gimbal", "gimbal control module") - self.add_command('gimbal', self.cmd_gimbal, "gimbal link control", - ['']) - if mp_util.has_wxpython: - self.menu = MPMenuSubMenu('Mount', - items=[MPMenuItem('GPS targeting Mode', 'GPS Mode', '# gimbal mode gps'), - MPMenuItem('MAVLink targeting Mode', 'MAVLink Mode', '# gimbal mode mavlink'), - MPMenuItem('RC targeting Mode', 'RC Mode', '# gimbal mode rc'), - MPMenuItem('Point At', 'Point At', '# gimbal roi')]) - self.menu_added_map = False - else: - self.menu = None - - def idle_task(self): - '''called on idle''' - if self.menu is not None and self.module('map') is not None and not self.menu_added_map: - self.menu_added_map = True - self.module('map').add_menu(self.menu) - - def cmd_gimbal(self, args): - '''control gimbal''' - usage = 'Usage: gimbal ' - if len(args) == 0: - print(usage) - return - if args[0] == 'rate': - self.cmd_gimbal_rate(args[1:]) - elif args[0] == 'point': - self.cmd_gimbal_point(args[1:]) - elif args[0] == 'roi': - self.cmd_gimbal_roi(args[1:]) - elif args[0] == 'mode': - self.cmd_gimbal_mode(args[1:]) - elif args[0] == 'status': - self.cmd_gimbal_status(args[1:]) - elif args[0] == 'roivel': - self.cmd_gimbal_roi_vel(args[1:]) - - def cmd_gimbal_mode(self, args): - '''control gimbal mode''' - if len(args) != 1: - print("usage: gimbal mode ") - return - if args[0].upper() == 'GPS': - mode = mavutil.mavlink.MAV_MOUNT_MODE_GPS_POINT - elif args[0].upper() == 'MAVLINK': - mode = mavutil.mavlink.MAV_MOUNT_MODE_MAVLINK_TARGETING - elif args[0].upper() == 'RC': - mode = mavutil.mavlink.MAV_MOUNT_MODE_RC_TARGETING - else: - print("Unsupported mode %s" % args[0]) - self.master.mav.mount_configure_send(self.target_system, - self.target_component, - mode, - 1, 1, 1) - - def cmd_gimbal_roi(self, args): - '''control roi position''' - latlon = None - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - self.master.mav.mount_control_send(self.target_system, - self.target_component, - latlon[0]*1e7, - latlon[1]*1e7, - 0, # altitude zero for now - 0) - - def cmd_gimbal_roi_vel(self, args): - '''control roi position and velocity''' - if len(args) != 0 and len(args) != 3 and len(args) != 6: - print("usage: gimbal roivel [VEL_NORTH VEL_EAST VEL_DOWN] [ACC_NORTH ACC_EASY ACC_DOWN]") - return - latlon = None - vel = [0,0,0] - acc = [0,0,0] - if (len(args) >= 3): - vel[0:3] = args[0:3] - if (len(args) == 6): - acc[0:3] = args[3:6] - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - latlon = (0,0,0) - self.master.mav.set_roi_global_int_send(0, #time_boot_ms - 1, #target_system - 1, #target_component - mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT, - 0, #type_mask - 0, #roi_index - 0, #timeout_ms - int(latlon[0]*1e7), #lat int - int(latlon[1]*1e7), #lng int - float(0), #alt - float(vel[0]), #vx - float(vel[1]), #vy - float(vel[2]), #vz - float(acc[0]), #ax - float(acc[1]), #ay - float(acc[2])) #az - - def cmd_gimbal_rate(self, args): - '''control gimbal rate''' - if len(args) != 3: - print("usage: gimbal rate ROLL PITCH YAW") - return - (roll, pitch, yaw) = (float(args[0]), float(args[1]), float(args[2])) - self.master.mav.gimbal_control_send(self.target_system, - mavutil.mavlink.MAV_COMP_ID_GIMBAL, - radians(roll), - radians(pitch), - radians(yaw)) - - def cmd_gimbal_point(self, args): - '''control gimbal pointing''' - if len(args) != 3: - print("usage: gimbal point ROLL PITCH YAW") - return - (roll, pitch, yaw) = (float(args[0]), float(args[1]), float(args[2])) - self.master.mav.mount_control_send(self.target_system, - self.target_component, - pitch*100, - roll*100, - yaw*100, - 0) - - def cmd_gimbal_status(self, args): - '''show gimbal status''' - master = self.master - if 'GIMBAL_REPORT' in master.messages: - print(master.messages['GIMBAL_REPORT']) - else: - print("No GIMBAL_REPORT messages") - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - - if not self.mpstate.map: - # don't draw if no map - return - - if m.get_type() != 'GIMBAL_REPORT': - return - - needed = ['ATTITUDE', 'GLOBAL_POSITION_INT'] - for n in needed: - if not n in self.master.messages: - return - - # clear the camera icon - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('GimbalView')) - - gpi = self.master.messages['GLOBAL_POSITION_INT'] - att = self.master.messages['ATTITUDE'] - vehicle_dcm = Matrix3() - vehicle_dcm.from_euler(att.roll, att.pitch, att.yaw) - - rotmat_copter_gimbal = Matrix3() - rotmat_copter_gimbal.from_euler312(m.joint_roll, m.joint_el, m.joint_az) - gimbal_dcm = vehicle_dcm * rotmat_copter_gimbal - - lat = gpi.lat * 1.0e-7 - lon = gpi.lon * 1.0e-7 - alt = gpi.relative_alt * 1.0e-3 - - # ground plane - ground_plane = Plane() - - # the position of the camera in the air, remembering its a right - # hand coordinate system, so +ve z is down - camera_point = Vector3(0, 0, -alt) - - # get view point of camera when not rotated - view_point = Vector3(1, 0, 0) - - # rotate view_point to form current view vector - rot_point = gimbal_dcm * view_point - - # a line from the camera to the ground - line = Line(camera_point, rot_point) - - # find the intersection with the ground - pt = line.plane_intersection(ground_plane, forward_only=True) - if pt is None: - # its pointing up into the sky - return None - - (view_lat, view_lon) = mp_util.gps_offset(lat, lon, pt.y, pt.x) - - icon = self.mpstate.map.icon('camera-small-red.png') - self.mpstate.map.add_object(mp_slipmap.SlipIcon('gimbalview', - (view_lat,view_lon), - icon, layer='GimbalView', rotation=0, follow=False)) - - -def init(mpstate): - '''initialise module''' - return GimbalModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gopro.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gopro.py deleted file mode 100644 index dd7d61b4f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_gopro.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -'''gopro control over mavlink for the solo-gimbal - -To use this module connect to a Solo with a GoPro installed on the gimbal. -''' - -import time, os - -from MAVProxy.modules.lib import mp_module -from pymavlink import mavutil - -class GoProModule(mp_module.MPModule): - - def __init__(self, mpstate): - super(GoProModule, self).__init__(mpstate, "gopro", "gopro handling") - - self.add_command('gopro', self.cmd_gopro, 'gopro control', [ - 'status', - 'shutter ', - 'mode ', - 'power ']) - - def cmd_gopro(self, args): - '''gopro commands''' - usage = "status, shutter , mode , power " - mav = self.master.mav - - if args[0] == "status": - self.cmd_gopro_status(args[1:]) - return - - if args[0] == "shutter": - name = args[1].lower() - if name == 'start': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_SHUTTER, 1) - return - elif name == 'stop': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_SHUTTER, 0) - return - else: - print("unrecognized") - return - - if args[0] == "mode": - name = args[1].lower() - if name == 'video': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_CAPTURE_MODE, 0) - return - elif name == 'camera': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_CAPTURE_MODE, 1) - return - else: - print("unrecognized") - return - - if args[0] == "power": - name = args[1].lower() - if name == 'on': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_POWER, 1) - return - elif name == 'off': - mav.gopro_set_request_send(0, mavutil.mavlink.MAV_COMP_ID_GIMBAL, - mavutil.mavlink.GOPRO_COMMAND_POWER, 0) - return - else: - print("unrecognized") - return - - print(usage) - - def cmd_gopro_status(self, args): - '''show gopro status''' - master = self.master - if 'GOPRO_HEARTBEAT' in master.messages: - print(master.messages['GOPRO_HEARTBEAT']) - else: - print("No GOPRO_HEARTBEAT messages") - -def init(mpstate): - '''initialise module''' - return GoProModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_graph.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_graph.py deleted file mode 100644 index ea6588c2f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_graph.py +++ /dev/null @@ -1,115 +0,0 @@ -""" - MAVProxy realtime graphing module - - uses lib/live_graph.py for display -""" - -from pymavlink import mavutil -import re, os, sys - -from MAVProxy.modules.lib import live_graph - -from MAVProxy.modules.lib import mp_module - -class GraphModule(mp_module.MPModule): - def __init__(self, mpstate): - super(GraphModule, self).__init__(mpstate, "graph", "graph control") - self.timespan = 20 - self.tickresolution = 0.2 - self.graphs = [] - self.add_command('graph', self.cmd_graph, "[expression...] add a live graph", - ['(VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE)']) - - def cmd_graph(self, args): - '''graph command''' - if len(args) == 0: - # list current graphs - for i in range(len(self.graphs)): - print("Graph %u: %s" % (i, self.graphs[i].fields)) - return - - elif args[0] == "help": - print("graph ") - elif args[0] == "timespan": - if len(args) == 1: - print("timespan: %.1f" % self.timespan) - return - self.timespan = float(args[1]) - elif args[0] == "tickresolution": - if len(args) == 1: - print("tickresolution: %.1f" % self.tickresolution) - return - self.tickresolution = float(args[1]) - else: - # start a new graph - self.graphs.append(Graph(self, args[:])) - - def unload(self): - '''unload module''' - for g in self.graphs: - g.close() - self.graphs = [] - - def mavlink_packet(self, msg): - '''handle an incoming mavlink packet''' - - # check for any closed graphs - for i in range(len(self.graphs) - 1, -1, -1): - if not self.graphs[i].is_alive(): - self.graphs[i].close() - self.graphs.pop(i) - - # add data to the rest - for g in self.graphs: - g.add_mavlink_packet(msg) - - -def init(mpstate): - '''initialise module''' - return GraphModule(mpstate) - -class Graph(): - '''a graph instance''' - def __init__(self, state, fields): - self.fields = fields[:] - self.field_types = [] - self.msg_types = set() - self.state = state - - re_caps = re.compile('[A-Z_][A-Z0-9_]+') - for f in self.fields: - caps = set(re.findall(re_caps, f)) - self.msg_types = self.msg_types.union(caps) - self.field_types.append(caps) - print("Adding graph: %s" % self.fields) - - self.values = [None] * len(self.fields) - self.livegraph = live_graph.LiveGraph(self.fields, - timespan=state.timespan, - tickresolution=state.tickresolution, - title=self.fields[0]) - - def is_alive(self): - '''check if this graph is still alive''' - if self.livegraph: - return self.livegraph.is_alive() - return False - - def close(self): - '''close this graph''' - if self.livegraph: - self.livegraph.close() - self.livegraph = None - - def add_mavlink_packet(self, msg): - '''add data to the graph''' - mtype = msg.get_type() - if mtype not in self.msg_types: - return - for i in range(len(self.fields)): - if mtype not in self.field_types[i]: - continue - f = self.fields[i] - self.values[i] = mavutil.evaluate_expression(f, self.state.master.messages) - if self.livegraph is not None: - self.livegraph.add_values(self.values) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_help.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_help.py deleted file mode 100644 index 8e6fdd652..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_help.py +++ /dev/null @@ -1,117 +0,0 @@ -""" - MAVProxy help/versioning module -""" -import os, time, platform, re -from urllib2 import Request, urlopen, URLError, HTTPError -from pymavlink import mavwp, mavutil -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_module -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - import wxversion - -class HelpModule(mp_module.MPModule): - def __init__(self, mpstate): - super(HelpModule, self).__init__(mpstate, "mavhelp", "Help and version information", public = True) - self.enabled = False - self.add_command('mavhelp', self.cmd_help, "help and version information", "") - self.have_list = False - - #versioning info - #pkg_resources doesn't work in the windows exe build, so read the version file - try: - import pkg_resources - self.version = pkg_resources.require("mavproxy")[0].version - except: - start_script = os.path.join(os.environ['LOCALAPPDATA'], "MAVProxy", "version.txt") - f = open(start_script, 'r') - self.version = f.readline() - self.host = platform.system() + platform.release() - self.pythonversion = str(platform.python_version()) - if mp_util.has_wxpython: - self.wxVersion = str(wxversion.getInstalled()) - else: - self.wxVersion = '' - - #check for updates, if able - if platform.system() == 'Windows': - req = Request('http://firmware.diydrones.com/Tools/MAVProxy/') - html = '' - self.newversion = '1.0' - try: - filehandle = urlopen(req) - html = filehandle.read() - except HTTPError as e: - self.newversion = 'Error: ', e.code - except URLError as e: - self.newversion = 'Error: ', e.reason - else: - #parse the webpage for the latest version - begtags = [m.start() for m in re.finditer('>MAVProxySetup-', html)] - for begtag in begtags: - endtag = html.find('.exe', begtag) - versiontag = html[begtag+15:endtag] - if not re.search('[a-zA-Z]', versiontag): - if self.mycmp(self.newversion, versiontag) < 0: - self.newversion = versiontag - elif platform.system() == 'Linux': - import xmlrpclib, pip - pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi') - available = pypi.package_releases('MAVProxy') - if not available: - self.newversion = 'Error finding update' - else: - self.newversion = available[0] - - #and format the update string - if not isinstance(self.newversion, basestring): - self.newversion = "Error finding update" - elif re.search('[a-zA-Z]', self.newversion): - self.newversion = "Error finding update: " + self.newversion - elif self.newversion.strip() == self.version.strip(): - self.newversion = "Running latest version" - else: - self.newversion = "New version " + self.newversion + " available (currently running " + self.version + ")" - - if mp_util.has_wxpython: - self.menu_added_console = False - self.menu = MPMenuSubMenu('Help', - items=[MPMenuItem('MAVProxy website', 'MAVProxy website', '', handler=MPMenuOpenWeblink('http://dronecode.github.io/MAVProxy/')), - MPMenuItem('Check for Updates', 'Check for Updates', '', handler=MPMenuChildMessageDialog(title="Updates", message=self.newversion)), - MPMenuItem('About', 'About', '', handler=MPMenuChildMessageDialog(title="About MAVProxy", message="MAVProxy Version " + self.version + "\nOS: " + self.host + "\nPython " + self.pythonversion + "\nWXPython " + self.wxVersion))]) - - - #version number comparison for update checking - def mycmp(self, version1, version2): - def normalize(v): - return [int(x) for x in re.sub(r'(\.0+)*$','', v).split(".")] - return cmp(normalize(version1), normalize(version2)) - - def idle_task(self): - '''called on idle''' - if self.module('console') is not None and not self.menu_added_console: - self.menu_added_console = True - self.module('console').add_menu(self.menu) - - def cmd_help(self, args): - '''help commands''' - if len(args) < 1: - self.print_usage() - return - - if args[0] == "about": - print("MAVProxy Version " + self.version + "\nOS: " + self.host + "\nPython " + self.pythonversion) - elif args[0] == "site": - print("See http://dronecode.github.io/MAVProxy/ for documentation") - else: - self.print_usage() - - def mavlink_packet(self, m): - '''handle and incoming mavlink packets''' - - def print_usage(self): - print("usage: mavhelp ") - -def init(mpstate): - '''initialise module''' - return HelpModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_joystick.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_joystick.py deleted file mode 100644 index d8eb001c2..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_joystick.py +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env python -'''joystick interface module - -Contributed by AndrewF: - http://diydrones.com/profile/AndrewF - -''' - -import pygame, fnmatch -from time import sleep - -mpstate = None - -from MAVProxy.modules.lib import mp_module - - -''' -A map of joystick identifiers to channels and scalings. -Each joystick type can control 8 channels, each channel is defined -by its axis number, the multiplier and the additive offset -''' -joymap = { - 'CarolBox USB*': - # http://www.hobbyking.com/hobbyking/store/__13597__USB_Simulator_Cable_XTR_AeroFly_FMS.html - # has 6 usable axes. This assumes mode 1 - [(3, 500, 1500), - (0, 500, 1500), - (1, 700, 1500), - (4, 500, 1500), - (5, 500, 1500), - None, - (2, 500, 1500), - (5, 500, 1500)], - - '*SAILI Simulator*': - # Same as above but is reporting a different name - # http://www.hobbyking.com/hobbyking/store/__13597__USB_Simulator_Cable_XTR_AeroFly_FMS.html - # has 4 usable axes. The last 4 are binary switches and not PWM outputs. - # Axis, Scaling Number, - [(0, 500, 1500), - (3, 500, 1500), - (1, 500, 1500), - (2, 500, 1500), - (4, 500, 1500), - (5, 500, 1500), - (6, 500, 1500), - (7, 500, 1500)], - - 'Sony PLAYSTATION(R)3 Controller': - # only 4 axes usable. This assumes mode 1 - [(2, 500, 1500), - (1, -500, 1500), - (3, -500, 1000), - (0, -500, 1500)], - - 'Microsoft X-Box 360 pad': - # This is for a USB cabled X-Box 360 controller - # only 4 axes usable. Left and right trigger are ch5 and ch4. - # This assumes mode 1 - [(3, 500, 1500), - (1, -500, 1500), - (4, -500, 1500), - (0, 500, 1500), - (2, 500, 1500), - (5, 500, 1500)], - - 'GREAT PLANES InterLink Elite': - # 4 axes usable - [(0, 500, 1500), - (1, -500, 1500), - (2, -1000, 1500), - (4, -500, 1500), - None, - None, - None, - (3, 500, 1500)], - - 'Great Planes GP Controller': - # 4 axes usable - [(0, 500, 1500), - (1, -500, 1500), - (2, -1000, 1500), - (4, -500, 1500), - None, - None, - None, - (3, 500, 1500)], - - # This supports a Spektrum DX7s with the USB Adapter from: - # http://www.amazon.com/gp/product/B000RO7JAI/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1 - 'WAILLY PPM TO USB Adapter': - [(1, 570, 1500), # Roll - (2, 614, 1500), # Pitch - (0, 770, 1500), # Throttle - (5, 571, 1500), # Yaw - None, - None], - - # Support for Optic 6 with the IPACS easyFly2 Interface USB Adapter from: - # http://www.ikarus.net/deutsch-infos-zubehor/die-ikarus-interfacekabel/?lang=en - 'IPACS easyFly2 Interface': - [(0, 758, 1242), # Roll - (1, 758, 1242), # Pitch - (2, 770, 1230), # Throttle - (4, 2553, 974), # (custom: flaps?) - None, - (3, 758, 1242), # Yaw - (5, 758, 1242), # (custom: switch) - None], - - # This supports a ADC cheap ebay USB controller - # sold as a "FMS Simulator" joystick - 'ADC': - [(0, -500, 1500), # Roll - (1, -500, 1500), # Pitch - (2, -500, 1500), # Throttle - (4, 500, 1500), # Yaw - None, - None] -} - -class JSModule(mp_module.MPModule): - def __init__(self, mpstate): - super(JSModule, self).__init__(mpstate, "joystick", "joystick aircraft control") - self.js = None - - #initialize joystick, if available - pygame.init() - pygame.joystick.init() # main joystick device system - - for i in range(pygame.joystick.get_count()): - print("Trying joystick %u" % i) - try: - j = pygame.joystick.Joystick(i) - j.init() # init instance - name = j.get_name() - print('joystick found: ' + name) - for jtype in joymap: - if fnmatch.fnmatch(name, jtype): - print("Matched type '%s'" % jtype) - print ('%u axes available' % j.get_numaxes()) - self.js = j - self.num_axes = j.get_numaxes() - self.map = joymap[jtype] - break - except pygame.error: - continue - - def idle_task(self): - '''called in idle time''' - if self.js is None: - return - for e in pygame.event.get(): # iterate over event stack - #the following is somewhat custom for the specific joystick model: - override = self.module('rc').override[:] - for i in range(len(self.map)): - m = self.map[i] - if m is None: - continue - (axis, mul, add) = m - if axis >= self.num_axes: - continue - v = int(self.js.get_axis(axis)*mul + add) - v = max(min(v, 2000), 1000) - override[i] = v - if override != self.module('rc').override: - self.module('rc').override = override - self.module('rc').override_period.force() - -def init(mpstate): - '''initialise module''' - return JSModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_link.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_link.py deleted file mode 100644 index 2ecdc9a54..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_link.py +++ /dev/null @@ -1,435 +0,0 @@ -#!/usr/bin/env python -'''enable run-time addition and removal of master link, just like --master on the cnd line''' -''' TO USE: - link add 10.11.12.13:14550 - link list - link remove 3 # to remove 3rd output -''' - -from pymavlink import mavutil -import time, struct, math, sys, fnmatch, traceback - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util - -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - -dataPackets = frozenset(['BAD_DATA','LOG_DATA']) -delayedPackets = frozenset([ 'MISSION_CURRENT', 'SYS_STATUS', 'VFR_HUD', - 'GPS_RAW_INT', 'SCALED_PRESSURE', 'GLOBAL_POSITION_INT', - 'NAV_CONTROLLER_OUTPUT' ]) -activityPackets = frozenset([ 'HEARTBEAT', 'GPS_RAW_INT', 'GPS_RAW', 'GLOBAL_POSITION_INT', 'SYS_STATUS' ]) - -class LinkModule(mp_module.MPModule): - - def __init__(self, mpstate): - super(LinkModule, self).__init__(mpstate, "link", "link control", public=True) - self.add_command('link', self.cmd_link, "link control", - ["", - 'add (SERIALPORT)', - 'remove (LINKS)']) - self.no_fwd_types = set() - self.no_fwd_types.add("BAD_DATA") - self.add_completion_function('(SERIALPORT)', self.complete_serial_ports) - self.add_completion_function('(LINKS)', self.complete_links) - - self.menu_added_console = False - if mp_util.has_wxpython: - self.menu_add = MPMenuSubMenu('Add', items=[]) - self.menu_rm = MPMenuSubMenu('Remove', items=[]) - self.menu = MPMenuSubMenu('Link', - items=[self.menu_add, - self.menu_rm, - MPMenuItem('Ports', 'Ports', '# link ports'), - MPMenuItem('List', 'List', '# link list'), - MPMenuItem('Status', 'Status', '# link')]) - self.last_menu_update = 0 - - def idle_task(self): - '''called on idle''' - if mp_util.has_wxpython and (not self.menu_added_console and self.module('console') is not None): - self.menu_added_console = True - # we don't dynamically update these yet due to a wx bug - self.menu_add.items = [ MPMenuItem(p, p, '# link add %s' % p) for p in self.complete_serial_ports('') ] - self.menu_rm.items = [ MPMenuItem(p, p, '# link remove %s' % p) for p in self.complete_links('') ] - self.module('console').add_menu(self.menu) - for m in self.mpstate.mav_master: - m.source_system = self.settings.source_system - m.mav.srcSystem = m.source_system - m.mav.srcComponent = self.settings.source_component - - def complete_serial_ports(self, text): - '''return list of serial ports''' - ports = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*']) - return [ p.device for p in ports ] - - def complete_links(self, text): - '''return list of links''' - return [ m.address for m in self.mpstate.mav_master ] - - def cmd_link(self, args): - '''handle link commands''' - if len(args) < 1: - self.show_link() - elif args[0] == "list": - self.cmd_link_list() - elif args[0] == "add": - if len(args) != 2: - print("Usage: link add LINK") - return - self.cmd_link_add(args[1:]) - elif args[0] == "ports": - self.cmd_link_ports() - elif args[0] == "remove": - if len(args) != 2: - print("Usage: link remove LINK") - return - self.cmd_link_remove(args[1:]) - else: - print("usage: link ") - - def show_link(self): - '''show link information''' - for master in self.mpstate.mav_master: - linkdelay = (self.status.highest_msec - master.highest_msec)*1.0e-3 - if master.linkerror: - print("link %u down" % (master.linknum+1)) - else: - print("link %u OK (%u packets, %.2fs delay, %u lost, %.1f%% loss)" % (master.linknum+1, - self.status.counters['MasterIn'][master.linknum], - linkdelay, - master.mav_loss, - master.packet_loss())) - def cmd_link_list(self): - '''list links''' - print("%u links" % len(self.mpstate.mav_master)) - for i in range(len(self.mpstate.mav_master)): - conn = self.mpstate.mav_master[i] - print("%u: %s" % (i, conn.address)) - - def link_add(self, device): - '''add new link''' - try: - print("Connect %s source_system=%d" % (device, self.settings.source_system)) - conn = mavutil.mavlink_connection(device, autoreconnect=True, - source_system=self.settings.source_system, - baud=self.settings.baudrate) - conn.mav.srcComponent = self.settings.source_component - except Exception as msg: - print("Failed to connect to %s : %s" % (device, msg)) - return False - if self.settings.rtscts: - conn.set_rtscts(True) - conn.linknum = len(self.mpstate.mav_master) - conn.mav.set_callback(self.master_callback, conn) - if hasattr(conn.mav, 'set_send_callback'): - conn.mav.set_send_callback(self.master_send_callback, conn) - conn.linknum = len(self.mpstate.mav_master) - conn.linkerror = False - conn.link_delayed = False - conn.last_heartbeat = 0 - conn.last_message = 0 - conn.highest_msec = 0 - self.mpstate.mav_master.append(conn) - self.status.counters['MasterIn'].append(0) - try: - mp_util.child_fd_list_add(conn.port.fileno()) - except Exception: - pass - return True - - def cmd_link_add(self, args): - '''add new link''' - device = args[0] - print("Adding link %s" % device) - self.link_add(device) - - def cmd_link_ports(self): - '''show available ports''' - ports = mavutil.auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*']) - for p in ports: - print("%s : %s : %s" % (p.device, p.description, p.hwid)) - - def cmd_link_remove(self, args): - '''remove an link''' - device = args[0] - if len(self.mpstate.mav_master) <= 1: - print("Not removing last link") - return - for i in range(len(self.mpstate.mav_master)): - conn = self.mpstate.mav_master[i] - if str(i) == device or conn.address == device: - print("Removing link %s" % conn.address) - try: - try: - mp_util.child_fd_list_remove(conn.port.fileno()) - except Exception: - pass - self.mpstate.mav_master[i].close() - except Exception as msg: - print(msg) - pass - self.mpstate.mav_master.pop(i) - self.status.counters['MasterIn'].pop(i) - # renumber the links - for j in range(len(self.mpstate.mav_master)): - conn = self.mpstate.mav_master[j] - conn.linknum = j - return - - def get_usec(self): - '''time since 1970 in microseconds''' - return int(time.time() * 1.0e6) - - def master_send_callback(self, m, master): - '''called on sending a message''' - if self.status.watch is not None: - if fnmatch.fnmatch(m.get_type().upper(), self.status.watch.upper()): - self.mpstate.console.writeln('> '+ str(m)) - - mtype = m.get_type() - if mtype != 'BAD_DATA' and self.mpstate.logqueue: - usec = self.get_usec() - usec = (usec & ~3) | 3 # linknum 3 - self.mpstate.logqueue.put(str(struct.pack('>Q', usec) + m.get_msgbuf())) - - def handle_msec_timestamp(self, m, master): - '''special handling for MAVLink packets with a time_boot_ms field''' - - if m.get_type() == 'GLOBAL_POSITION_INT': - # this is fix time, not boot time - return - - msec = m.time_boot_ms - if msec + 30000 < master.highest_msec: - self.say('Time has wrapped') - print('Time has wrapped', msec, master.highest_msec) - self.status.highest_msec = msec - for mm in self.mpstate.mav_master: - mm.link_delayed = False - mm.highest_msec = msec - return - - # we want to detect when a link is delayed - master.highest_msec = msec - if msec > self.status.highest_msec: - self.status.highest_msec = msec - if msec < self.status.highest_msec and len(self.mpstate.mav_master) > 1: - master.link_delayed = True - else: - master.link_delayed = False - - def report_altitude(self, altitude): - '''possibly report a new altitude''' - master = self.master - if getattr(self.console, 'ElevationMap', None) is not None and self.mpstate.settings.basealt != 0: - lat = master.field('GLOBAL_POSITION_INT', 'lat', 0)*1.0e-7 - lon = master.field('GLOBAL_POSITION_INT', 'lon', 0)*1.0e-7 - alt1 = self.console.ElevationMap.GetElevation(lat, lon) - if alt1 is not None: - alt2 = self.mpstate.settings.basealt - altitude += alt2 - alt1 - self.status.altitude = altitude - if (int(self.mpstate.settings.altreadout) > 0 and - math.fabs(self.status.altitude - self.status.last_altitude_announce) >= - int(self.settings.altreadout)): - self.status.last_altitude_announce = self.status.altitude - rounded_alt = int(self.settings.altreadout) * ((self.settings.altreadout/2 + int(self.status.altitude)) / int(self.settings.altreadout)) - self.say("height %u" % rounded_alt, priority='notification') - - - def master_callback(self, m, master): - '''process mavlink message m on master, sending any messages to recipients''' - - # see if it is handled by a specialised sysid connection - sysid = m.get_srcSystem() - if sysid in self.mpstate.sysid_outputs: - self.mpstate.sysid_outputs[sysid].write(m.get_msgbuf()) - return - - if getattr(m, '_timestamp', None) is None: - master.post_message(m) - self.status.counters['MasterIn'][master.linknum] += 1 - - mtype = m.get_type() - - # and log them - if mtype not in dataPackets and self.mpstate.logqueue: - # put link number in bottom 2 bits, so we can analyse packet - # delay in saved logs - usec = self.get_usec() - usec = (usec & ~3) | master.linknum - self.mpstate.logqueue.put(str(struct.pack('>Q', usec) + m.get_msgbuf())) - - # keep the last message of each type around - self.status.msgs[m.get_type()] = m - if not m.get_type() in self.status.msg_count: - self.status.msg_count[m.get_type()] = 0 - self.status.msg_count[m.get_type()] += 1 - - if m.get_srcComponent() == mavutil.mavlink.MAV_COMP_ID_GIMBAL and m.get_type() == 'HEARTBEAT': - # silence gimbal heartbeat packets for now - return - - if getattr(m, 'time_boot_ms', None) is not None: - # update link_delayed attribute - self.handle_msec_timestamp(m, master) - - if mtype in activityPackets: - if master.linkerror: - master.linkerror = False - self.say("link %u OK" % (master.linknum+1)) - self.status.last_message = time.time() - master.last_message = self.status.last_message - - if master.link_delayed: - # don't process delayed packets that cause double reporting - if mtype in delayedPackets: - return - - if mtype == 'HEARTBEAT' and m.get_srcSystem() != 255: - if self.settings.target_system == 0 and self.settings.target_system != m.get_srcSystem(): - self.settings.target_system = m.get_srcSystem() - self.say("online system %u" % self.settings.target_system,'message') - - if self.status.heartbeat_error: - self.status.heartbeat_error = False - self.say("heartbeat OK") - if master.linkerror: - master.linkerror = False - self.say("link %u OK" % (master.linknum+1)) - - self.status.last_heartbeat = time.time() - master.last_heartbeat = self.status.last_heartbeat - - armed = self.master.motors_armed() - if armed != self.status.armed: - self.status.armed = armed - if armed: - self.say("ARMED") - else: - self.say("DISARMED") - - if master.flightmode != self.status.flightmode and time.time() > self.status.last_mode_announce + 2: - self.status.flightmode = master.flightmode - self.status.last_mode_announce = time.time() - if self.mpstate.functions.input_handler is None: - self.mpstate.rl.set_prompt(self.status.flightmode + "> ") - self.say("Mode " + self.status.flightmode) - - if m.type == mavutil.mavlink.MAV_TYPE_FIXED_WING: - self.mpstate.vehicle_type = 'plane' - self.mpstate.vehicle_name = 'ArduPlane' - elif m.type in [mavutil.mavlink.MAV_TYPE_GROUND_ROVER, - mavutil.mavlink.MAV_TYPE_SURFACE_BOAT, - mavutil.mavlink.MAV_TYPE_SUBMARINE]: - self.mpstate.vehicle_type = 'rover' - self.mpstate.vehicle_name = 'APMrover2' - elif m.type in [mavutil.mavlink.MAV_TYPE_QUADROTOR, - mavutil.mavlink.MAV_TYPE_COAXIAL, - mavutil.mavlink.MAV_TYPE_HEXAROTOR, - mavutil.mavlink.MAV_TYPE_OCTOROTOR, - mavutil.mavlink.MAV_TYPE_TRICOPTER, - mavutil.mavlink.MAV_TYPE_HELICOPTER]: - self.mpstate.vehicle_type = 'copter' - self.mpstate.vehicle_name = 'ArduCopter' - elif m.type in [mavutil.mavlink.MAV_TYPE_ANTENNA_TRACKER]: - self.mpstate.vehicle_type = 'antenna' - self.mpstate.vehicle_name = 'AntennaTracker' - - elif mtype == 'STATUSTEXT': - if m.text != self.status.last_apm_msg or time.time() > self.status.last_apm_msg_time+2: - self.mpstate.console.writeln("APM: %s" % m.text, bg='red') - self.status.last_apm_msg = m.text - self.status.last_apm_msg_time = time.time() - - elif mtype == "VFR_HUD": - have_gps_lock = False - if 'GPS_RAW' in self.status.msgs and self.status.msgs['GPS_RAW'].fix_type == 2: - have_gps_lock = True - elif 'GPS_RAW_INT' in self.status.msgs and self.status.msgs['GPS_RAW_INT'].fix_type == 3: - have_gps_lock = True - if have_gps_lock and not self.status.have_gps_lock and m.alt != 0: - self.say("GPS lock at %u meters" % m.alt, priority='notification') - self.status.have_gps_lock = True - - elif mtype == "GPS_RAW": - if self.status.have_gps_lock: - if m.fix_type != 2 and not self.status.lost_gps_lock and (time.time() - self.status.last_gps_lock) > 3: - self.say("GPS fix lost") - self.status.lost_gps_lock = True - if m.fix_type == 2 and self.status.lost_gps_lock: - self.say("GPS OK") - self.status.lost_gps_lock = False - if m.fix_type == 2: - self.status.last_gps_lock = time.time() - - elif mtype == "GPS_RAW_INT": - if self.status.have_gps_lock: - if m.fix_type < 3 and not self.status.lost_gps_lock and (time.time() - self.status.last_gps_lock) > 3: - self.say("GPS fix lost") - self.status.lost_gps_lock = True - if m.fix_type >= 3 and self.status.lost_gps_lock: - self.say("GPS OK") - self.status.lost_gps_lock = False - if m.fix_type >= 3: - self.status.last_gps_lock = time.time() - - elif mtype == "NAV_CONTROLLER_OUTPUT" and self.status.flightmode == "AUTO" and self.mpstate.settings.distreadout: - rounded_dist = int(m.wp_dist/self.mpstate.settings.distreadout)*self.mpstate.settings.distreadout - if math.fabs(rounded_dist - self.status.last_distance_announce) >= self.mpstate.settings.distreadout: - if rounded_dist != 0: - self.say("%u" % rounded_dist, priority="progress") - self.status.last_distance_announce = rounded_dist - - elif mtype == "GLOBAL_POSITION_INT": - self.report_altitude(m.relative_alt*0.001) - - elif mtype == "COMPASSMOT_STATUS": - print(m) - - elif mtype == "BAD_DATA": - if self.mpstate.settings.shownoise and mavutil.all_printable(m.data): - self.mpstate.console.write(str(m.data), bg='red') - elif mtype in [ "COMMAND_ACK", "MISSION_ACK" ]: - self.mpstate.console.writeln("Got MAVLink msg: %s" % m) - - if mtype == "COMMAND_ACK" and m.command == mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION: - if m.result == mavutil.mavlink.MAV_RESULT_ACCEPTED: - self.say("Calibrated") - else: - #self.mpstate.console.writeln("Got MAVLink msg: %s" % m) - pass - - if self.status.watch is not None: - if fnmatch.fnmatch(m.get_type().upper(), self.status.watch.upper()): - self.mpstate.console.writeln('< '+str(m)) - - # don't pass along bad data - if mtype != 'BAD_DATA': - # pass messages along to listeners, except for REQUEST_DATA_STREAM, which - # would lead a conflict in stream rate setting between mavproxy and the other - # GCS - if self.mpstate.settings.mavfwd_rate or mtype != 'REQUEST_DATA_STREAM': - if not mtype in self.no_fwd_types: - for r in self.mpstate.mav_outputs: - r.write(m.get_msgbuf()) - - # pass to modules - for (mod,pm) in self.mpstate.modules: - if not hasattr(mod, 'mavlink_packet'): - continue - try: - mod.mavlink_packet(m) - except Exception as msg: - if self.mpstate.settings.moddebug == 1: - print(msg) - elif self.mpstate.settings.moddebug > 1: - exc_type, exc_value, exc_traceback = sys.exc_info() - traceback.print_exception(exc_type, exc_value, exc_traceback, - limit=2, file=sys.stdout) - -def init(mpstate): - '''initialise module''' - return LinkModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_log.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_log.py deleted file mode 100644 index 7c61213b7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_log.py +++ /dev/null @@ -1,193 +0,0 @@ -#!/usr/bin/env python -'''log command handling''' - -import time, os - -from MAVProxy.modules.lib import mp_module - -class LogModule(mp_module.MPModule): - def __init__(self, mpstate): - super(LogModule, self).__init__(mpstate, "log", "log transfer") - self.add_command('log', self.cmd_log, "log file handling", ['']) - self.reset() - - def reset(self): - self.download_set = set() - self.download_file = None - self.download_lognum = None - self.download_filename = None - self.download_start = None - self.download_last_timestamp = None - self.download_ofs = 0 - self.retries = 0 - self.entries = {} - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'LOG_ENTRY': - self.handle_log_entry(m) - elif m.get_type() == 'LOG_DATA': - self.handle_log_data(m) - - def handle_log_entry(self, m): - '''handling incoming log entry''' - if m.time_utc == 0: - tstring = '' - else: - tstring = time.ctime(m.time_utc) - self.entries[m.id] = m - print("Log %u numLogs %u lastLog %u size %u %s" % (m.id, m.num_logs, m.last_log_num, m.size, tstring)) - - - def handle_log_data(self, m): - '''handling incoming log data''' - if self.download_file is None: - return - # lose some data - # import random - # if random.uniform(0,1) < 0.05: - # print('dropping ', str(m)) - # return - if m.ofs != self.download_ofs: - self.download_file.seek(m.ofs) - self.download_ofs = m.ofs - if m.count != 0: - data = m.data[:m.count] - s = ''.join(str(chr(x)) for x in data) - self.download_file.write(s) - self.download_set.add(m.ofs // 90) - self.download_ofs += m.count - self.download_last_timestamp = time.time() - if m.count == 0 or (m.count < 90 and len(self.download_set) == 1 + (m.ofs // 90)): - dt = time.time() - self.download_start - self.download_file.close() - size = os.path.getsize(self.download_filename) - speed = size / (1000.0 * dt) - print("Finished downloading %s (%u bytes %u seconds, %.1f kbyte/sec %u retries)" % ( - self.download_filename, - size, - dt, speed, - self.retries)) - self.download_file = None - self.download_filename = None - self.download_set = set() - - def handle_log_data_missing(self): - '''handling missing incoming log data''' - if len(self.download_set) == 0: - return - highest = max(self.download_set) - diff = set(range(highest)).difference(self.download_set) - if len(diff) == 0: - self.master.mav.log_request_data_send(self.target_system, - self.target_component, - self.download_lognum, (1 + highest) * 90, 0xffffffff) - self.retries += 1 - else: - num_requests = 0 - while num_requests < 20: - start = min(diff) - diff.remove(start) - end = start - while end + 1 in diff: - end += 1 - diff.remove(end) - self.master.mav.log_request_data_send(self.target_system, - self.target_component, - self.download_lognum, start * 90, (end + 1 - start) * 90) - num_requests += 1 - self.retries += 1 - if len(diff) == 0: - break - - - def log_status(self): - '''show download status''' - if self.download_filename is None: - print("No download") - return - dt = time.time() - self.download_start - speed = os.path.getsize(self.download_filename) / (1000.0 * dt) - m = self.entries.get(self.download_lognum, None) - if m is None: - size = 0 - else: - size = m.size - highest = max(self.download_set) - diff = set(range(highest)).difference(self.download_set) - print("Downloading %s - %u/%u bytes %.1f kbyte/s (%u retries %u missing)" % (self.download_filename, - os.path.getsize(self.download_filename), - size, - speed, - self.retries, - len(diff))) - - def log_download(self, log_num, filename): - '''download a log file''' - print("Downloading log %u as %s" % (log_num, filename)) - self.download_lognum = log_num - self.download_file = open(filename, "wb") - self.master.mav.log_request_data_send(self.target_system, - self.target_component, - log_num, 0, 0xFFFFFFFF) - self.download_filename = filename - self.download_set = set() - self.download_start = time.time() - self.download_last_timestamp = time.time() - self.download_ofs = 0 - self.retries = 0 - - def cmd_log(self, args): - '''log commands''' - if len(args) < 1: - print("usage: log ") - return - - if args[0] == "status": - self.log_status() - if args[0] == "list": - print("Requesting log list") - self.download_set = set() - self.master.mav.log_request_list_send(self.target_system, - self.target_component, - 0, 0xffff) - - elif args[0] == "erase": - self.master.mav.log_erase_send(self.target_system, - self.target_component) - - elif args[0] == "resume": - self.master.mav.log_request_end_send(self.target_system, - self.target_component) - - elif args[0] == "cancel": - if self.download_file is not None: - self.download_file.close() - self.reset() - - elif args[0] == "download": - if len(args) < 2: - print("usage: log download ") - return - if args[1] == 'latest': - if len(self.entries.keys()) == 0: - print("Please use log list first") - return - log_num = sorted(self.entries, key=lambda id: self.entries[id].time_utc)[-1] - else: - log_num = int(args[1]) - if len(args) > 2: - filename = args[2] - else: - filename = "log%u.bin" % log_num - self.log_download(log_num, filename) - - def idle_task(self): - '''handle missing log data''' - if self.download_last_timestamp is not None and time.time() - self.download_last_timestamp > 0.7: - self.download_last_timestamp = time.time() - self.handle_log_data_missing() - -def init(mpstate): - '''initialise module''' - return LogModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/GAreader.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/GAreader.py deleted file mode 100755 index 4dfcc8161..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/GAreader.py +++ /dev/null @@ -1,199 +0,0 @@ -#!/usr/bin/env python -''' -Module to read DTM files published by Geoscience Australia -Written by Stephen Dade (stephen_dade@hotmail.com -''' - -import os -import sys - -import numpy - - -class ERMap: - '''Class to read GA files''' - def __init__(self): - self.header = None - self.data = None - self.startlongitude = 0 - self.startlatitude = 0 - self.endlongitude = 0 - self.endlatitude = 0 - self.deltalongitude = 0 - self.deltalatitude = 0 - - def read_ermapper(self, ifile): - '''Read in a DEM file and associated .ers file''' - ers_index = ifile.find('.ers') - if ers_index > 0: - data_file = ifile[0:ers_index] - header_file = ifile - else: - data_file = ifile - header_file = ifile + '.ers' - - self.header = self.read_ermapper_header(header_file) - - nroflines = int(self.header['nroflines']) - nrofcellsperlines = int(self.header['nrofcellsperline']) - self.data = self.read_ermapper_data(data_file, offset=int(self.header['headeroffset'])) - self.data = numpy.reshape(self.data,(nroflines,nrofcellsperlines)) - - longy = numpy.fromstring(self.getHeaderParam('longitude'), sep=':') - latty = numpy.fromstring(self.getHeaderParam('latitude'), sep=':') - - self.deltalatitude = float(self.header['ydimension']) - self.deltalongitude = float(self.header['xdimension']) - - if longy[0] < 0: - self.startlongitude = longy[0]+-((longy[1]/60)+(longy[2]/3600)) - self.endlongitude = self.startlongitude - int(self.header['nrofcellsperline'])*self.deltalongitude - else: - self.startlongitude = longy[0]+(longy[1]/60)+(longy[2]/3600) - self.endlongitude = self.startlongitude + int(self.header['nrofcellsperline'])*self.deltalongitude - if latty[0] < 0: - self.startlatitude = latty[0]-((latty[1]/60)+(latty[2]/3600)) - self.endlatitude = self.startlatitude - int(self.header['nroflines'])*self.deltalatitude - else: - self.startlatitude = latty[0]+(latty[1]/60)+(latty[2]/3600) - self.endlatitude = self.startlatitude + int(self.header['nroflines'])*self.deltalatitude - - def read_ermapper_header(self, ifile): - # function for reading an ERMapper header from file - header = {} - - fid = open(ifile,'rt') - header_string = fid.readlines() - fid.close() - - for line in header_string: - if line.find('=') > 0: - tmp_string = line.strip().split('=') - header[tmp_string[0].strip().lower()]= tmp_string[1].strip() - - return header - - def read_ermapper_data(self, ifile, data_format = numpy.float32, offset=0): - # open input file in a binary format and read the input string - fid = open(ifile,'rb') - if offset != 0: - fid.seek(offset) - input_string = fid.read() - fid.close() - - # convert input string to required format (Note default format is numpy.float32) - grid_as_float = numpy.fromstring(input_string,data_format) - return grid_as_float - - def getHeaderParam(self, key): - '''Find a parameter in the associated .ers file''' - return self.header[key] - - def printBoundingBox(self): - '''Print the bounding box that this DEM covers''' - print ("Bounding Latitude: ") - print (self.startlatitude) - print (self.endlatitude) - - print ("Bounding Longitude: ") - print (self.startlongitude) - print (self.endlongitude) - - def getPercentBlank(self): - '''Print how many null cells are in the DEM - Quality measure''' - blank = 0 - nonblank = 0 - for x in self.data.flat: - if x == -99999.0: - blank = blank + 1 - else: - nonblank = nonblank + 1 - - print ("Blank tiles = ", blank, "out of ", (nonblank+blank)) - - def getAltitudeAtPoint(self, latty, longy): - '''Return the altitude at a particular long/lat''' - #check the bounds - if self.startlongitude > 0 and (longy < self.startlongitude or longy > self.endlongitude): - return -1 - if self.startlongitude < 0 and (longy > self.startlongitude or longy < self.endlongitude): - return -1 - if self.startlatitude > 0 and (latty < self.startlatitude or longy > self.endlatitude): - return -1 - if self.startlatitude < 0 and (latty > self.startlatitude or longy < self.endlatitude): - return -1 - - x = numpy.abs((latty - self.startlatitude)/self.deltalatitude) - y = numpy.abs((longy - self.startlongitude)/self.deltalongitude) - - #do some interpolation - # print "x,y", x, y - x_int = int(x) - x_frac = x - int(x) - y_int = int(y) - y_frac = y - int(y) - #print "frac", x_int, x_frac, y_int, y_frac - value00 = self.data[x_int, y_int] - value10 = self.data[x_int+1, y_int] - value01 = self.data[x_int, y_int+1] - value11 = self.data[x_int+1, y_int+1] - #print "values ", value00, value10, value01, value11 - - #check for null values - if value00 == -99999: - value00 = 0 - if value10 == -99999: - value10 = 0 - if value01 == -99999: - value01 = 0 - if value11 == -99999: - value11 = 0 - - value1 = self._avg(value00, value10, x_frac) - value2 = self._avg(value01, value11, x_frac) - value = self._avg(value1, value2, y_frac) - - return value - - @staticmethod - def _avg(value1, value2, weight): - """Returns the weighted average of two values and handles the case where - one value is None. If both values are None, None is returned. - """ - if value1 is None: - return value2 - if value2 is None: - return value1 - return value2 * weight + value1 * (1 - weight) - - - -if __name__ == '__main__': - - print ("./Canberra/GSNSW_P756demg") - mappy = ERMap() - mappy.read_ermapper(os.path.join(os.environ['HOME'], './Documents/Elevation/Canberra/GSNSW_P756demg')) - - #print some header data - mappy.printBoundingBox() - - #get a measure of data quality - #mappy.getPercentBlank() - - #test the altitude (around Canberra): - alt = mappy.getAltitudeAtPoint(-35.274411, 149.097504) - print ("Alt at (-35.274411, 149.097504) is 807m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.239648, 149.126118) - print ("Alt at (-35.239648, 149.126118) is 577m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.362751, 149.165361) - print ("Alt at (-35.362751, 149.165361) is 584m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.306992, 149.194274) - print ("Alt at (-35.306992, 149.194274) is 570m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.261612, 149.542091) - print ("Alt at (-35.261612, 149.542091) is 766m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.052544, 149.509165) - print ("Alt at (-35.052544, 149.509165) is 700m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.045126, 149.257482) - print ("Alt at (-35.045126, 149.257482) is 577m (Google) or " + str(alt)) - alt = mappy.getAltitudeAtPoint(-35.564044, 149.177657) - print ("Alt at (-35.564044, 149.177657) is 1113m (Google) or " + str(alt)) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/__init__.py deleted file mode 100644 index f5f0d2ea6..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/__init__.py +++ /dev/null @@ -1,539 +0,0 @@ -#!/usr/bin/env python -''' -map display module -Andrew Tridgell -June 2012 -''' - -import sys, os, math -import functools -import time -from MAVProxy.modules.mavproxy_map import mp_elevation -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_settings -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib.mp_menu import * -from pymavlink import mavutil - -class MapModule(mp_module.MPModule): - def __init__(self, mpstate): - super(MapModule, self).__init__(mpstate, "map", "map display", public = True) - self.lat = None - self.lon = None - self.heading = 0 - self.wp_change_time = 0 - self.fence_change_time = 0 - self.rally_change_time = 0 - self.have_simstate = False - self.have_vehicle = {} - self.move_wp = -1 - self.moving_wp = None - self.moving_fencepoint = None - self.moving_rally = None - self.mission_list = None - self.icon_counter = 0 - self.click_position = None - self.click_time = 0 - self.draw_line = None - self.draw_callback = None - self.have_global_position = False - self.vehicle_type_name = 'plane' - self.ElevationMap = mp_elevation.ElevationModel() - self.last_unload_check_time = time.time() - self.unload_check_interval = 0.1 # seconds - self.map_settings = mp_settings.MPSettings( - [ ('showgpspos', int, 0), - ('showgps2pos', int, 1), - ('showsimpos', int, 0), - ('showahrs2pos', int, 0), - ('showahrs3pos', int, 0), - ('brightness', float, 1), - ('rallycircle', bool, False), - ('loitercircle',bool, False)]) - service='OviHybrid' - if 'MAP_SERVICE' in os.environ: - service = os.environ['MAP_SERVICE'] - import platform - from MAVProxy.modules.mavproxy_map import mp_slipmap - mpstate.map = mp_slipmap.MPSlipMap(service=service, elevation=True, title='Map') - mpstate.map_functions = { 'draw_lines' : self.draw_lines } - - mpstate.map.add_callback(functools.partial(self.map_callback)) - self.add_command('map', self.cmd_map, "map control", ['icon', - 'set (MAPSETTING)']) - self.add_completion_function('(MAPSETTING)', self.map_settings.completion) - - self.default_popup = MPMenuSubMenu('Popup', items=[]) - self.add_menu(MPMenuItem('Fly To', 'Fly To', '# guided ', - handler=MPMenuCallTextDialog(title='Altitude (m)', default=100))) - self.add_menu(MPMenuItem('Set Home', 'Set Home', '# map sethome ')) - self.add_menu(MPMenuItem('Terrain Check', 'Terrain Check', '# terrain check')) - self.add_menu(MPMenuItem('Show Position', 'Show Position', 'showPosition')) - - def add_menu(self, menu): - '''add to the default popup menu''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - self.default_popup.add(menu) - self.mpstate.map.add_object(mp_slipmap.SlipDefaultPopup(self.default_popup, combine=True)) - - def show_position(self): - '''show map position click information''' - pos = self.click_position - dms = (mp_util.degrees_to_dms(pos[0]), mp_util.degrees_to_dms(pos[1])) - msg = "Coordinates in WGS84\n" - msg += "Decimal: %.6f %.6f\n" % (pos[0], pos[1]) - msg += "DMS: %s %s\n" % (dms[0], dms[1]) - msg += "Grid: %s\n" % mp_util.latlon_to_grid(pos) - if self.logdir: - logf = open(os.path.join(self.logdir, "positions.txt"), "a") - logf.write("Position: %.6f %.6f at %s\n" % (pos[0], pos[1], time.ctime())) - logf.close() - posbox = MPMenuChildMessageDialog('Position', msg, font_size=32) - posbox.show() - - def cmd_map(self, args): - '''map commands''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if args[0] == "icon": - if len(args) < 3: - print("Usage: map icon ") - else: - lat = args[1] - lon = args[2] - flag = 'flag.png' - if len(args) > 3: - flag = args[3] + '.png' - icon = self.mpstate.map.icon(flag) - self.mpstate.map.add_object(mp_slipmap.SlipIcon('icon - %s [%u]' % (str(flag),self.icon_counter), - (float(lat),float(lon)), - icon, layer=3, rotation=0, follow=False)) - self.icon_counter += 1 - elif args[0] == "set": - self.map_settings.command(args[1:]) - self.mpstate.map.add_object(mp_slipmap.SlipBrightness(self.map_settings.brightness)) - elif args[0] == "sethome": - self.cmd_set_home(args) - else: - print("usage: map ") - - def display_waypoints(self): - '''display the waypoints''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - self.mission_list = self.module('wp').wploader.view_list() - polygons = self.module('wp').wploader.polygon_list() - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('Mission')) - for i in range(len(polygons)): - p = polygons[i] - if len(p) > 1: - popup = MPMenuSubMenu('Popup', - items=[MPMenuItem('Set', returnkey='popupMissionSet'), - MPMenuItem('WP Remove', returnkey='popupMissionRemove'), - MPMenuItem('WP Move', returnkey='popupMissionMove')]) - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('mission %u' % i, p, - layer='Mission', linewidth=2, colour=(255,255,255), - popup_menu=popup)) - loiter_rad = self.get_mav_param('WP_LOITER_RAD') - labeled_wps = {} - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('LoiterCircles')) - for i in range(len(self.mission_list)): - next_list = self.mission_list[i] - for j in range(len(next_list)): - #label already printed for this wp? - if (next_list[j] not in labeled_wps): - self.mpstate.map.add_object(mp_slipmap.SlipLabel( - 'miss_cmd %u/%u' % (i,j), polygons[i][j], str(next_list[j]), 'Mission', colour=(0,255,255))) - - if (self.map_settings.loitercircle and - self.module('wp').wploader.wp_is_loiter(next_list[j])): - self.mpstate.map.add_object(mp_slipmap.SlipCircle('Loiter Circle %u' % (next_list[j] + 1), 'LoiterCircles', polygons[i][j], abs(loiter_rad), (255, 255, 255), 2)) - - labeled_wps[next_list[j]] = (i,j) - - def display_fence(self): - '''display the fence''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - self.fence_change_time = self.module('fence').fenceloader.last_change - points = self.module('fence').fenceloader.polygon() - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('Fence')) - if len(points) > 1: - popup = MPMenuSubMenu('Popup', - items=[MPMenuItem('FencePoint Remove', returnkey='popupFenceRemove'), - MPMenuItem('FencePoint Move', returnkey='popupFenceMove')]) - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('Fence', points, layer=1, - linewidth=2, colour=(0,255,0), popup_menu=popup)) - - - def closest_waypoint(self, latlon): - '''find closest waypoint to a position''' - (lat, lon) = latlon - best_distance = -1 - closest = -1 - for i in range(self.module('wp').wploader.count()): - w = self.module('wp').wploader.wp(i) - distance = mp_util.gps_distance(lat, lon, w.x, w.y) - if best_distance == -1 or distance < best_distance: - best_distance = distance - closest = i - if best_distance < 20: - return closest - else: - return -1 - - def remove_rally(self, key): - '''remove a rally point''' - a = key.split(' ') - if a[0] != 'Rally' or len(a) != 2: - print("Bad rally object %s" % key) - return - i = int(a[1]) - self.mpstate.functions.process_stdin('rally remove %u' % i) - - def move_rally(self, key): - '''move a rally point''' - a = key.split(' ') - if a[0] != 'Rally' or len(a) != 2: - print("Bad rally object %s" % key) - return - i = int(a[1]) - self.moving_rally = i - - def selection_index_to_idx(self, key, selection_index): - '''return a mission idx from a selection_index''' - a = key.split(' ') - if a[0] != 'mission' or len(a) != 2: - print("Bad mission object %s" % key) - return None - midx = int(a[1]) - if midx < 0 or midx >= len(self.mission_list): - print("Bad mission index %s" % key) - return None - mlist = self.mission_list[midx] - if selection_index < 0 or selection_index >= len(mlist): - print("Bad mission polygon %s" % selection_index) - return None - idx = mlist[selection_index] - return idx - - def move_mission(self, key, selection_index): - '''move a mission point''' - idx = self.selection_index_to_idx(key, selection_index) - self.moving_wp = idx - print("Moving wp %u" % idx) - - def remove_mission(self, key, selection_index): - '''remove a mission point''' - idx = self.selection_index_to_idx(key, selection_index) - self.mpstate.functions.process_stdin('wp remove %u' % idx) - - def remove_fencepoint(self, key, selection_index): - '''remove a fence point''' - self.mpstate.functions.process_stdin('fence remove %u' % (selection_index+1)) - - def move_fencepoint(self, key, selection_index): - '''move a fence point''' - self.moving_fencepoint = selection_index - print("Moving fence point %u" % selection_index) - - def set_mission(self, key, selection_index): - '''set a mission point''' - idx = self.selection_index_to_idx(key, selection_index) - self.mpstate.functions.process_stdin('wp set %u' % idx) - - def handle_menu_event(self, obj): - '''handle a popup menu event from the map''' - menuitem = obj.menuitem - if menuitem.returnkey.startswith('# '): - cmd = menuitem.returnkey[2:] - if menuitem.handler is not None: - if menuitem.handler_result is None: - return - cmd += menuitem.handler_result - self.mpstate.functions.process_stdin(cmd) - elif menuitem.returnkey == 'popupRallyRemove': - self.remove_rally(obj.selected[0].objkey) - elif menuitem.returnkey == 'popupRallyMove': - self.move_rally(obj.selected[0].objkey) - elif menuitem.returnkey == 'popupMissionSet': - self.set_mission(obj.selected[0].objkey, obj.selected[0].extra_info) - elif menuitem.returnkey == 'popupMissionRemove': - self.remove_mission(obj.selected[0].objkey, obj.selected[0].extra_info) - elif menuitem.returnkey == 'popupMissionMove': - self.move_mission(obj.selected[0].objkey, obj.selected[0].extra_info) - elif menuitem.returnkey == 'popupFenceRemove': - self.remove_fencepoint(obj.selected[0].objkey, obj.selected[0].extra_info) - elif menuitem.returnkey == 'popupFenceMove': - self.move_fencepoint(obj.selected[0].objkey, obj.selected[0].extra_info) - elif menuitem.returnkey == 'showPosition': - self.show_position() - - def map_callback(self, obj): - '''called when an event happens on the slipmap''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if isinstance(obj, mp_slipmap.SlipMenuEvent): - self.handle_menu_event(obj) - return - if not isinstance(obj, mp_slipmap.SlipMouseEvent): - return - if obj.event.m_leftDown and self.moving_rally is not None: - self.click_position = obj.latlon - self.click_time = time.time() - self.mpstate.functions.process_stdin("rally move %u" % self.moving_rally) - self.moving_rally = None - return - if obj.event.m_rightDown and self.moving_rally is not None: - print("Cancelled rally move") - self.moving_rally = None - return - if obj.event.m_leftDown and self.moving_wp is not None: - self.click_position = obj.latlon - self.click_time = time.time() - self.mpstate.functions.process_stdin("wp move %u" % self.moving_wp) - self.moving_wp = None - return - if obj.event.m_leftDown and self.moving_fencepoint is not None: - self.click_position = obj.latlon - self.click_time = time.time() - self.mpstate.functions.process_stdin("fence move %u" % (self.moving_fencepoint+1)) - self.moving_fencepoint = None - return - if obj.event.m_rightDown and self.moving_wp is not None: - print("Cancelled wp move") - self.moving_wp = None - return - if obj.event.m_rightDown and self.moving_fencepoint is not None: - print("Cancelled fence move") - self.moving_fencepoint = None - return - elif obj.event.m_leftDown: - if time.time() - self.click_time > 0.1: - self.click_position = obj.latlon - self.click_time = time.time() - self.drawing_update() - - if self.module('misseditor') is not None: - self.module('misseditor').update_map_click_position(self.click_position) - - if obj.event.m_rightDown: - if self.draw_callback is not None: - self.drawing_end() - return - if time.time() - self.click_time > 0.1: - self.click_position = obj.latlon - self.click_time = time.time() - - - def unload(self): - '''unload module''' - self.mpstate.map.close() - self.mpstate.map = None - self.mpstate.map_functions = {} - - def idle_task(self): - now = time.time() - if self.last_unload_check_time + self.unload_check_interval < now: - self.last_unload_check_time = now - if not self.mpstate.map.is_alive(): - self.needs_unloading = True - - def create_vehicle_icon(self, name, colour, follow=False, vehicle_type=None): - '''add a vehicle to the map''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if vehicle_type is None: - vehicle_type = self.vehicle_type_name - if name in self.have_vehicle and self.have_vehicle[name] == vehicle_type: - return - self.have_vehicle[name] = vehicle_type - icon = self.mpstate.map.icon(colour + vehicle_type + '.png') - self.mpstate.map.add_object(mp_slipmap.SlipIcon(name, (0,0), icon, layer=3, rotation=0, follow=follow, - trail=mp_slipmap.SlipTrail())) - - def drawing_update(self): - '''update line drawing''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if self.draw_callback is None: - return - self.draw_line.append(self.click_position) - if len(self.draw_line) > 1: - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('drawing', self.draw_line, - layer='Drawing', linewidth=2, colour=(128,128,255))) - - def drawing_end(self): - '''end line drawing''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if self.draw_callback is None: - return - self.draw_callback(self.draw_line) - self.draw_callback = None - self.mpstate.map.add_object(mp_slipmap.SlipDefaultPopup(self.default_popup, combine=True)) - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('Drawing')) - - def draw_lines(self, callback): - '''draw a series of connected lines on the map, calling callback when done''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - self.draw_callback = callback - self.draw_line = [] - self.mpstate.map.add_object(mp_slipmap.SlipDefaultPopup(None)) - - def cmd_set_home(self, args): - '''called when user selects "Set Home" on map''' - (lat, lon) = (self.click_position[0], self.click_position[1]) - alt = self.ElevationMap.GetElevation(lat, lon) - print("Setting home to: ", lat, lon, alt) - self.master.mav.command_long_send( - self.settings.target_system, self.settings.target_component, - mavutil.mavlink.MAV_CMD_DO_SET_HOME, - 1, # set position - 0, # param1 - 0, # param2 - 0, # param3 - 0, # param4 - lat, # lat - lon, # lon - alt) # param7 - - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - from MAVProxy.modules.mavproxy_map import mp_slipmap - if m.get_type() == "HEARTBEAT": - if m.type in [mavutil.mavlink.MAV_TYPE_FIXED_WING]: - self.vehicle_type_name = 'plane' - elif m.type in [mavutil.mavlink.MAV_TYPE_GROUND_ROVER, - mavutil.mavlink.MAV_TYPE_SURFACE_BOAT, - mavutil.mavlink.MAV_TYPE_SUBMARINE]: - self.vehicle_type_name = 'rover' - elif m.type in [mavutil.mavlink.MAV_TYPE_QUADROTOR, - mavutil.mavlink.MAV_TYPE_COAXIAL, - mavutil.mavlink.MAV_TYPE_HEXAROTOR, - mavutil.mavlink.MAV_TYPE_OCTOROTOR, - mavutil.mavlink.MAV_TYPE_TRICOPTER]: - self.vehicle_type_name = 'copter' - elif m.type in [mavutil.mavlink.MAV_TYPE_HELICOPTER]: - self.vehicle_type_name = 'heli' - elif m.type in [mavutil.mavlink.MAV_TYPE_ANTENNA_TRACKER]: - self.vehicle_type_name = 'antenna' - - # this is the beginnings of allowing support for multiple vehicles - # in the air at the same time - vehicle = 'Vehicle%u' % m.get_srcSystem() - - if m.get_type() == "SIMSTATE" and self.map_settings.showsimpos: - self.create_vehicle_icon('Sim' + vehicle, 'green') - self.mpstate.map.set_position('Sim' + vehicle, (m.lat*1.0e-7, m.lng*1.0e-7), rotation=math.degrees(m.yaw)) - - if m.get_type() == "AHRS2" and self.map_settings.showahrs2pos: - self.create_vehicle_icon('AHRS2' + vehicle, 'blue') - self.mpstate.map.set_position('AHRS2' + vehicle, (m.lat*1.0e-7, m.lng*1.0e-7), rotation=math.degrees(m.yaw)) - - if m.get_type() == "AHRS3" and self.map_settings.showahrs3pos: - self.create_vehicle_icon('AHRS3' + vehicle, 'orange') - self.mpstate.map.set_position('AHRS3' + vehicle, (m.lat*1.0e-7, m.lng*1.0e-7), rotation=math.degrees(m.yaw)) - - if m.get_type() == "GPS_RAW_INT" and self.map_settings.showgpspos: - (lat, lon) = (m.lat*1.0e-7, m.lon*1.0e-7) - if lat != 0 or lon != 0: - self.create_vehicle_icon('GPS' + vehicle, 'blue') - self.mpstate.map.set_position('GPS' + vehicle, (lat, lon), rotation=m.cog*0.01) - - if m.get_type() == "GPS2_RAW" and self.map_settings.showgps2pos: - (lat, lon) = (m.lat*1.0e-7, m.lon*1.0e-7) - if lat != 0 or lon != 0: - self.create_vehicle_icon('GPS2' + vehicle, 'green') - self.mpstate.map.set_position('GPS2' + vehicle, (lat, lon), rotation=m.cog*0.01) - - if m.get_type() == 'GLOBAL_POSITION_INT': - (self.lat, self.lon, self.heading) = (m.lat*1.0e-7, m.lon*1.0e-7, m.hdg*0.01) - if abs(self.lat) > 1.0e-3 or abs(self.lon) > 1.0e-3: - self.have_global_position = True - self.create_vehicle_icon('Pos' + vehicle, 'red', follow=True) - self.mpstate.map.set_position('Pos' + vehicle, (self.lat, self.lon), rotation=self.heading) - - if m.get_type() == 'LOCAL_POSITION_NED' and not self.have_global_position: - (self.lat, self.lon) = mp_util.gps_offset(0, 0, m.x, m.y) - self.heading = math.degrees(math.atan2(m.vy, m.vx)) - self.create_vehicle_icon('Pos' + vehicle, 'red', follow=True) - self.mpstate.map.set_position('Pos' + vehicle, (self.lat, self.lon), rotation=self.heading) - - if m.get_type() == "NAV_CONTROLLER_OUTPUT": - if (self.master.flightmode in [ "AUTO", "GUIDED", "LOITER", "RTL" ] and - self.lat is not None and self.lon is not None): - trajectory = [ (self.lat, self.lon), - mp_util.gps_newpos(self.lat, self.lon, m.target_bearing, m.wp_dist) ] - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('trajectory', trajectory, layer='Trajectory', - linewidth=2, colour=(255,0,180))) - else: - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('Trajectory')) - - if m.get_type() == "ADSB_VEHICLE": - id = 'ADSB-' + str(m.ICAO_address) - # use plane icon for now - self.create_vehicle_icon(id, 'green', vehicle_type='plane') - self.mpstate.map.set_position(id, (m.lat*1e-7, m.lon*1e-7), rotation=m.heading) - - # if the waypoints have changed, redisplay - last_wp_change = self.module('wp').wploader.last_change - if self.wp_change_time != last_wp_change and abs(time.time() - last_wp_change) > 1: - self.wp_change_time = last_wp_change - self.display_waypoints() - - #this may have affected the landing lines from the rally points: - self.rally_change_time = time.time() - - # if the fence has changed, redisplay - if self.fence_change_time != self.module('fence').fenceloader.last_change: - self.display_fence() - - # if the rallypoints have changed, redisplay - if self.rally_change_time != self.module('rally').rallyloader.last_change: - self.rally_change_time = self.module('rally').rallyloader.last_change - icon = self.mpstate.map.icon('rallypoint.png') - self.mpstate.map.add_object(mp_slipmap.SlipClearLayer('RallyPoints')) - for i in range(self.module('rally').rallyloader.rally_count()): - rp = self.module('rally').rallyloader.rally_point(i) - popup = MPMenuSubMenu('Popup', - items=[MPMenuItem('Rally Remove', returnkey='popupRallyRemove'), - MPMenuItem('Rally Move', returnkey='popupRallyMove')]) - self.mpstate.map.add_object(mp_slipmap.SlipIcon('Rally %u' % (i+1), (rp.lat*1.0e-7, rp.lng*1.0e-7), icon, - layer='RallyPoints', rotation=0, follow=False, - popup_menu=popup)) - - loiter_rad = self.get_mav_param('WP_LOITER_RAD') - - if self.map_settings.rallycircle: - self.mpstate.map.add_object(mp_slipmap.SlipCircle('Rally Circ %u' % (i+1), 'RallyPoints', (rp.lat*1.0e-7, rp.lng*1.0e-7), abs(loiter_rad), (255,255,0), 2)) - - #draw a line between rally point and nearest landing point - nearest_land_wp = None - nearest_distance = 10000000.0 - for j in range(self.module('wp').wploader.count()): - w = self.module('wp').wploader.wp(j) - if (w.command == 21): #if landing waypoint - #get distance between rally point and this waypoint - dis = mp_util.gps_distance(w.x, w.y, rp.lat*1.0e-7, rp.lng*1.0e-7) - if (dis < nearest_distance): - nearest_land_wp = w - nearest_distance = dis - - if nearest_land_wp != None: - points = [] - #tangential approach? - if self.get_mav_param('LAND_BREAK_PATH') == 0: - theta = math.degrees(math.atan(loiter_rad / nearest_distance)) - tan_dis = math.sqrt(nearest_distance * nearest_distance - (loiter_rad * loiter_rad)) - - ral_bearing = mp_util.gps_bearing(nearest_land_wp.x, nearest_land_wp.y,rp.lat*1.0e-7, rp.lng*1.0e-7) - - points.append(mp_util.gps_newpos(nearest_land_wp.x,nearest_land_wp.y, ral_bearing + theta, tan_dis)) - - else: #not tangential approach - points.append((rp.lat*1.0e-7, rp.lng*1.0e-7)) - - points.append((nearest_land_wp.x, nearest_land_wp.y)) - self.mpstate.map.add_object(mp_slipmap.SlipPolygon('Rally Land %u' % (i+1), points, 'RallyPoints', (255,255,0), 2)) - - # check for any events from the map - self.mpstate.map.check_events() - -def init(mpstate): - '''initialise module''' - return MapModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/barrell.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/barrell.png deleted file mode 100644 index c4173873d41b898e8259b67e29ff2184fdf4d71f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1124 zcmV-q1e^PbP)outx9-*dnE&Ue3a>I$1j z1hjw!pbCV50Vco*=m9r@_WF$i5Q#8SZB)d(J8qx{8xYIT+J`n_nvEa%=67fPH%7VNEFMlT8%W%@kFS39y(W&L1+a5 zkH%GwCJ7&3xuRAz0TQ1=oMtNwIoIv*#f|IuB0LsXdAL#`F3SZ_z&fSpEPs#2{4pF5 zh|mfGsd^q=YpXthFS6sz{sYu~pR?^1zUy@Ot)FtCpVIULs-7V-9wX;tNpF#7S zyx+$}(Wbd+?f@oJKyOnGRk`r;D`eg7U38DGVYp4E-kbARcWDVcZ%Z&$MRa4y3g9OR zs*0OTW}N|`&aLt1yqSY~9WRdIzw2uNQw40lj~Fvc_L3?nc=dWQ2jd9a?%=YFd@umO zcDvYi8(UQ8{8Ic|)4oL&^1MjyrR8sLzJ)fj6`^A-z|b$d^@da3wEZ?4uA9Y50XUla zu%iz!Tm|UO11hxj0VnoKR+MZ29C}mPI85&)x_P$BFmrn2`)-#^m9YFU$riqw_N*^L zD8lk+M7t?=1wC9%WKUEf6oZs6(DLc!IhTe5eoa&TroAFn z<8gH|?l@@96KPgN-gNMKWK8`~H6b>FCk92as#L^aQLIyL+KfMkLxA&E^=$`V1DR}b qo!ePn=Mo^8Tbo|zR)A~kH~tR=@Um})=fmm%0000`sfJ!U3WMXux%(VKum*F9YvLo)8Yo#DvWY{0`(c;$cnOgZn>E3!QHWS=@C>3Hn5 z#G!4BK!pqq6Kl(Dw%%QNWc#FE?Jf7GKXsp!V|uahp?jIBHm@a{$R^eMmy@GcX?{D! zI(eEoe7?tU&!14b+&cV8KzMoYi=EHS(w9zMBz*Fl%jTdsWh>3yb%r;O_Ut(* z_;7!C*PHd#KZ-9dzCL|Ytl^GNYI}a{T`86It-0a<>{|t|IxAFH={j6qb}Ku2Zo%iR z?*n6$@02Xs8?u#I%VuSjUudBFm-;#(kTXHxfVBS(B?mR(E5D3ETu)a&mvv4FO#meS BeP;jw diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/bluecopter.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/bluecopter.png deleted file mode 100644 index 02ccbb4a4533b803b235ea10bc83c7cfbdada66e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2191 zcmV;A2ypj_P)=jI}`30vbREMMpp|)x;X>GbY89T`(e2 z3yL6GA5)VV$CMILd`wa`k`SD>3~8_;QQB2}#0Oni6_iJG8DV+2NSClIC@$>lzVF`t z0fD{C?%iEj{%D8KA3Hnep8GrBd+zW2e&=^CzyuRaV3We`aWc#wC%fYZZ(OVnO>mN* z%WePf&G9%eFu~@(woz$K&YE{~uwU6@Tenmdb*S;pHJ%lG%4$}Xk@6VT{PV&$qeE|43Qj%_`OSiMx& ziUw{$zYyyjRDAXd>9?7X*5g*KZT}1jOC^JXXOBTFz>d@UO-F6aA^-q9Q(@EMkVj3Z z<%JQ7E9IoG2y0MM9M+OfBEoF04t8kjKzw7-%&g5yzW@Ho?_vTtoaAhNYx8k8i_NgpA*1AwX*eK&gOai^ndTUfrhG?cDsX23R;a(HtgYph$f=ossaJeOhtpXcd5tXQ}kBAik33$1T7?At+A4WvO9|_w8zT&gj=!kT@s6w~yptXzx0022+d|{gP{NgCGHq={) ziyv4QUG~_xc(;~2#hA115E``?xm!_X_3Afeq<0+oL@|a8GC)N=He(~2b_RK_X1z*r zrD1L|8lP>5&3dI!*?*5k<^4N8?~6T*g(TzON?4|96x8Np*vxqJe)Aao!JKXlu`gHm z(-<^#n_>MS?TQ0>Zy~y9r}2{12mm$BhVV4wfKLxmUaz;18=ay3@jo81o1FYUF(;W^ zvJ2Vu7tC)X`e8nmnRUW7a?Pn~#7pjBH*1jgZdL-b5WOKo@3tP#D;@O6B1!*-3`^ft z_EMLtXlVo0(dYCQ*)`O*pb=@v_pSKK4~?*vgta7Z9r@==2CH(%f-CF1+7|TPL!i;Q zZCRtA;X{>Hz1FVwh<=m2d1A5)M{#AHwhfd?C-njSm2y{BE=xF&m6a zWg4@L?9z|~H7*W1E{eUpI{OUT&XpY(l;51+^DGw`3bGj1<0YWw?LHHypT_;#Ic zU#?qZ2wxyz1OleE#Y6c*AP_JMf-%4MpN_Rc9yJ|(CTRn8xr$cyvU2k6I^Dcv#3E4- zkynZ@-J`QOi)io0Zd9Ws_pqu)=Qe8&Iay}b3B#;|7r!G#>v?rgOd8a^`xO)NI`2@t zDRH&uwMWRu`P7volZQ6=BRN+}e0>M=Y7j{)B*hiT$s$JC!w;WBd3lJx*Lce zAl^b;)@J|VxmcKn=ZLKjP;!r4n5u78qY>%&*=zPg@A)!hK?-uQygwohQ){gE&nrd3 zQ>|AI4sk(BhwZX8yI5GNQPqnBK)H+vNU*>Lis#TAC|H00D}L-qxIcOT2C zPF+TmK6SJVvt-V8@_r+0HxrUHxcANcnzeK`9;b3jxg6uUT6gaH3-cDyC;9V_Rp+~me%8bn~AdyoV*Y4g;*E31+8nf zzDT#8M55BioTUL^<*GH&nM7a$nq5p+D@?a#WS7=d{D6)*Lixtw7yj+s&a2>-!AFFq zoH9yeXi#u40LYctnGz%@5fL4B$bB6x5WbVq1vi<>2Bt>?dqlY2zzdn>u{1#T&aaj@ zr5FIz8thB4sq`W9tW!Wz{Ga=hE5c#t2Hv{Gt~?|dW)xpJCzxP@2`2b|S8~rVhtqt~O4z;PUVJaFFgGRv#XsS>J;n-q09s)uYLJ1TJ3B}r^ zW(Z>t0BLj#8p8`?ieLpmS9*KpmSfoT0MVKI%nwm;Z^(MnA2}t$x^RsBsXkHk?ORZI+LXDSF?J=srh14RI z6hWo160j%=}yT8ltnB&3FuRU)i$2_BYE2$Q3Ngea_vhGF^WDK1ZhQCOV_BLF9g4y=?a#c-Y8Z~}c8v|zfow@=_G zmkW!M6_64g<%&OY*<*4oMo=JFWG70i^5oeN`3y%DZ>>|A`uK#SJlu1rsF>uO& zx%0yHrTQmUhh3uQ`j)151i%?hB>~I~H1inymYqC)O}m7c2-sb})~|bs1M|8D&paH? z$-C9VP4j^3C$@%H>gYWesF%$TwGGaLdybv-=$l1<`tzVy_tw_wjrk!4>Y%^D^_V&9 z#5e40*Fu$Bxtl<)C2$fglqTKkfXGgedsH+Gcq+I9}`tHK@)jWg;e zi%tz}z&p6@YHTaZxYt&zbDP>pa;q}v`q&rm#s$s}ZV^nY)+-6Fb?!C#E9XVk=a6+B z)&+z|pRB3esyJE`Oit{66+zSbHg0@FFwQ@-_wQJAJcFNiJF#M^Rhfs){Ckb@&YyQZ z)~DYICUpB%uA$j3A|Y&VHz276#Er*qkNaW5tAjV3Sx#T)^-_G>Cs3@j!c7Akb5|JM zUnJvzv&)v=-C%v|nhe+J;r3_q?TYn_1;hM&(+YELt`Q8IyYyo5uUpec=ban`(my~vdlU-Sf(rV}oCqc9irZBK{I{F$ z?n6HHT&mB07MGJO&?Y@7%xq}6_xA8Bk-&N5?(*Tx$a+3?*w*MN>pq~%C$9{!x6i|G z^DlRgDi_@El^lpcBNpLjruR&*kU`lx{+l0r%}krq0TFzgzF6y1R_Xml7RRi!>TEQL zaFYrvFPG#Jdro#VIj_Ajr@<~(Z=QVURXJ_Wq~G{o>$KvI3|aainEN*8aM@#UDu-=T`D%6C?mQ4 z#Hz~rtRr{D4#8d_wd-bmd0N+uiTyR6B zcdm&J8ATK;(=^BH+hm64@zRK>aFcxhw(VpGd`q7om3XJ4b%-6CmjOkk#6~^05rlLU z-y0{dJ6zQ7hMZCG+9jJym9i8E!$5PyEydN!ndw1CiuHLE57tg5@qyy%sq=S)%AssDPVtg jtyXT^s;zz#l8(pi$+_wxFRD0U`Nf3>g>#Pt3Nrrz@*3-0 diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/blueplane.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/blueplane.png deleted file mode 100644 index 8d96e974850ea0a958d82913cb78f29f484d3d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2386 zcmV-Y39a^tP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn? z0UR!MI)IS?00`1aL_t(&-rZYka8*|o{?6;3d-J$?zX*Ahk~S!HYHcD7lmO{1w2qFwCF<`m543+~R?awP&mF(p@U;4cO`~cD!tL$2H` z(!+sMt;t@VDSsw^P51tuQ<{1nz%YO~`P?}vS%EC=xJ^kUG5}5=-@_ouV)MA^o&r*FI(Iiiky2tWa# zr8>{$QwUN3ARjF%U)#B={o=>jVWJ{g1!Y-}76FtVRIn0L(j)v~Y)v5&?Kl6jwa?Qr+QqB2tb&RVvp}wsGZ) z9_@)*?ec|YB|bpIiJ6uxN7597g$rwUENeO9cG}d`-f(c+aOkK1RAN^E!~m!O3<95U z3oH*n+>u>S7+iVmDrUI7*xs;jW$%@p0EWmHYoyv%D#6+Y$aA)&a`Sg1a`T;DygOAHpnY-}q?PWwraSO`8UKg8(9o5gXTCaT9># z07wV(7gW7eclZouY5PS-;N4$Ghns#G8SDZOB_C}h1I%Rx|Ns%ZP)Qf z-Uur3-#kCm-^LiR+a%2;QCZK4;)<_qt$lMp=3uJ{wcJ!sZ~fYyTaq5L+#G9V59Tkp zXEv+sR9mjvYxKMw2pk;^J%{K#oA$kn*jZBf)%gGv00!hD@p*slvlMpv?Fxu!*NL{& z1P`R@$98uFtS((O&gz=cTHls7+59CfH3|>TSSX0xQjaYDY*~wZr!*`UrR4z1$u*4t z&^U~iFmoCj&tLzTj@~?{tJ+yzQ_tw?NT;So2Q1U}efV8o@uCCE-^m?ktrbmJ#^Zh0 zE|Je1A!EYl@j}`I9y$9ykDO5|i1HFi_D+`x&4;SK58xDl4*}e?CF`5Y;?1qA^)6l2 z&gq)+p039KttsK=Q3Ie*AE9nXH`o}u@xkN4`|nW$oew(qTi@T^H)xqX0B%qZQ*a=L zEYlZM;=Z5~_fdZ9#i1(iG?|bG=B7}zEigOd=N$pPOV`XUUDdjDRq52!*hNE+GQdV0 zz+z0tFKC3qi#EM5kUN~5^pa~4t5B@bpThXhe(a>SX`tok@ne7 zClj0u0MXe;dny1dkv5Of3yHWZ6S3m~V?pV}IfKbSOeS9zyL7GF33hAS>S*&Q6Nd@( zFvYlb+Qu<~j=(&{Buwx)n7|V~Q92qi0ES3|apHi^Ot!`WW;%dbljM~eG07QxCveLK zu%R88L_I-cMv}OlWrA&JCHkAEwFa}lDKelelAvAhu^3RM1JqO#<}qTw(7k`?Z>1Zu zZ&A!87_Bg;xu=r}Y$V7t3`wv8;h9AWi9Jjz6(;d3j6|nf?X!Q(e6;74+x+-{4J~p9 z`;Nx|llIgYtsKjMM8{+|ngzgA5{Vc)7_}^oIqUQ0)1U+Zv&S?(a-3Oi^|vTTYjWtvIVEh zpIQ2P__aC(iF2nkb(nEiiP$o13vZs9&@}u@OFR$*sx`PSvQYvLGl|Xmp z6coMj@Ud%mx>@C04}Ni9bof0AZrIZ3tT0dl0BGs;Ctll~Q`kt!cgk+!`4kx= z=}bxG=2V`qYRR)6zyeA)rb(WRww&}-4C@$$<`I{LKT4xGevK6Hh>)~>uf*XaII5Q^|zF`c~Vo1&lvhxrJyM* zzYIX}b<I(Q}t53HiLBe!%m?Nb&bkVv39tzwGU08@7i- zQZsNbfKn=#*aZLu0H4Y8J^;ls$0-0VQ?echp#MvW*>xw-_;uX6gT-tC3jo&kaOezx zMF6^qSf29Z2)PhXE-zF7SgI!y!vOxn)QMsQ#{Te2C-v>Ks|=}dKdEp%5=k)|Kmi#P z4@uRoM4AL7AETfDWYQVzqcTvK=F7C7UB!qHGa`%&`a~sbS2~87svc(-^6dIC6~dy_ zGic3Cnjf+2#f+P=Q$Y4JAy z3n|B@a?}}nnU#~-l+9#WlUa=!j5Ow0kv$Zs>7`&o=vZKavMdHH4_QcAWcNP%16}sz z-m|zkHQmo&_nh=N|U{&H^$rGBPqUGBPqUV}*hwXzm9mcBH%5mtPs*^HZJK&kG&#r6!KIYdW18&a63A`W*A}FPTRzRnsVs*5mXw~v&ebw4r@2sDW zwUYLO)G&KEA;sk(_Bo*)s4-&=C2+P-?ZqP0H2+<6~F!2{nivD-|RAp#9bD?{;bc%*#rg_1e>LkWL1GTfC$s<1TCO zkU_6r^=AbtJo=;xr0baWl4N+HxYk}=YiBMx(;Od%;TPcd?{~36ajm`Vj~>eFF3`l5 zNgZoxrQdbd_~>bkr0cnB=60a%os9ChFeQm0-R ze>{|H(gPT$rbhJD#OsqJC~rrdb#k_+d1OEZU|KAuxc7zO^a}K$Z|6*oZQ3~dv_93- zX`PZCBE=gb$4)n|o_$-B>i#-@sWo$Bhp55!yK=kFjKVH}Nt*Kf@ic(*maGffHQE9LF~`hO^Veg%yRVDrh`3U_>>rr*IZOr$1?jN{(c9O|v9dbaGs zuLWw;RI#lMCICqO=Cg$E_DdHBqtY{gdm=JdWE>|=ss{@Iu{ek};7S>BLho)+Ks>^F z-ww_Hdw07&5Uq+YtD5I9T?{We6zZSV#;1xFv$o^cKKJx(HLGWiFJL=pQP64CgIU?e zglNeuX~*q#4QU(9fO)uiHg4tbTT6%EcCL|?GmMK1^OG%q4mTavEc2wv=UQ!{v!qwW zC3}~5Q*E=x>LT;J#<~VPb^+XCsytSEQZh^0vB}=z-Aw80yvaCj6#fF4t@o)zpHoka zcXVAX*aN{m_N{Mog2)nAPD3-q^8P)He@`INj@`UZEt(fZRv@iTODG3axk>8Y(vE!% zLlncP^@b*}%FPoJzh?4{upN zSEGrmKaSYKaMOn|y!q;q6ob&!4tx@BZrF|;r_)dGI(er15?x(^@^G`Sh&=nEO%a_Z zIB> z<5)xc#L!BGN*S5&Pg>evhvaNQIwDHt^F&ihg(~3Qj1Ha3f3FDa2}Ig)d#c5|*^^+b zYr7bhv#aq-pU+=j=-7Kcd4gn?^j@Kx=%X^2mE-0_0BZd>cYBT~2$_cRrk(;4i<-20 zcY6+i{hBfWE`6N6?Uq#2<&)DlhPD}!iXz}RZF=U>I;-FuWCbBsOCRPo9{A=IfC_W& zx&6P)=xY4YR;78oQBr5c`c2KuMte#1&zWj&+ zI7okIfG&f1$lAJQMv7m*B~eEzLGr5`E-w$gy+Ma+81t>d8Ct6$pYL^Q`ID|aYE|&n zsF*j8+O{pUg0y4SY*wXT)At^7xYU(&X=&(~|K7W_^gZTFOEENb9jpLQSS-r?{OdE9 kjEszojEszoj7%W^0M5c@Uun6sVE_OC07*qoM6N<$g5{>4AOHXW diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/camera-small-red.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/camera-small-red.png deleted file mode 100644 index f5d9ad11af46f395aa80c07785f36ba2ea9cea50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 zcmV-94#x3`P)Oz@Z0f2-7z;ux~O9+4z06=<WDR*FRcSTFz- zW=q650N5=6FiBTtNC2?60Km==3$g$R3;-}uh=nNt1bYBr$Ri_o0EC$U6h`t_Jn<{8 z5a%iY0C<_QJh>z}MS)ugEpZ1|S1ukX&Pf+56gFW3VVXcL!g-k)GJ!M?;PcD?0HBc- z5#WRK{dmp}uFlRjj{U%*%WZ25jX z{P*?XzTzZ-GF^d31o+^>%=Ap99M6&ogks$0k4OBs3;+Bb(;~!4V!2o<6ys46agIcq zjPo+3B8fthDa9qy|77CdEc*jK-!%ZRYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S z1Au6Q;m>#f??3%Vpd|o+W=WE9003S@Bra6Svp>fO002awfhw>;8}z{#EWidF!3EsG z3;bXU&9EIRU@z1_9W=mEXoiz;4lcq~xDGvV5BgyU zp1~-*fe8db$Osc*A=-!mVv1NJjtCc-h4>-CNCXm#Bp}I%6j35eku^v$Qi@a{RY)E3 zJ#qp$hg?Rwkvqr$GJ^buyhkyVfwECO)C{#lxu`c9ghrwZ&}4KmnvWKso6vH!8a<3Q zq36)6Xb;+tK10Vaz~~qUGsJ8#F2=(`u{bOVlVi)VBCHIn#u~6ztOL7=^<&SmcLWlF zMZgI*1b0FpVIDz9SWH+>*hr`#93(Um+6gxa1B6k+CnA%mOSC4s5&6UzVlpv@SV$}* z))J2sFA#f(L&P^E5{W}HC%KRUNwK6<(h|}}(r!{C=`5+6G)NjFlgZj-YqAG9lq?`C z$c5yc>d>VnA`E_*3F2Qp##d8RZb=H01_mm@+|Cqnc9PsG(F5HIG_C zt)aG3uTh7n6Et<2In9F>NlT@zqLtGcXcuVrX|L#Xx)I%#9!{6gSJKPrN9dR61N3(c z4Tcqi$B1Vr8Jidf7-t!G7_XR2rWwr)$3XQ?}=hpK0&Z&W{| zep&sA23f;Q!%st`QJ}G3cbou<7-yIK2z4nfCCCtN2-XOGSWo##{8Q{ATurxr~;I`ytDs%xbip}RzP zziy}Qn4Z2~fSycmr`~zJ=lUFdFa1>gZThG6M+{g7vkW8#+YHVaJjFF}Z#*3@$J_By zLtVo_L#1JrVVB{Ak-5=4qt!-@Mh}c>#$4kh<88)m#-k<%CLtzEP3leVno>={htGUuD;o7bD)w_sX$S}eAxwzy?UvgBH(S?;#HZiQMoS*2K2 zT3xe7t(~nU*1N5{rxB;QPLocnp4Ml>u<^FZwyC!nu;thW+pe~4wtZn|Vi#w(#jeBd zlf9FDx_yoPJqHbk*$%56S{;6Kv~mM9!g3B(KJ}#RZ#@)!hR|78Dq|Iq-afF%KE1Brn_fm;Im z_u$xr8UFki1L{Ox>G0o)(&RAZ;=|I=wN2l97;cLaHH6leTB-XXa*h%dBOEvi`+x zi?=Txl?TadvyiL>SuF~-LZ;|cS}4~l2eM~nS7yJ>iOM;atDY;(?aZ^v+mJV$@1Ote z62cPUlD4IWOIIx&SmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGA zUct(O!LkCy1<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}Ti zncS4LsjI}fWY1>OX6feMEuLErma3QLmkw?X+1j)X-&VBk_4Y;EFPF_I+q;9dL%E~B zJh;4Nr^(LEJ3myURP{Rblsw%57T)g973R8o)DE9*xN#~;4_o$q%o z4K@u`jhx2fBXC4{U8Qn{*%*B$Ge=nny$HAYq{=vy|sI0 z_vss+H_qMky?OB#|JK!>IX&II^LlUh#rO5!7TtbwC;iULyV-Xq?ybB}ykGP{?LpZ? z-G|jbTmIbG@7#ZCz;~eY(cDM(28Dyq{*m>M4?_iynUBkc4TkHUI6gT!;y-fz>HMcd z&t%Ugo)`Y2{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P` z?ZJ24cOCDe-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60 z|De66lK=n!32;bRa{vGf6951U69E94oEQKA00(qQO+^Ra0UQP&0k*@3cK`qbYe_^w zR5;6(m0f5YRTRg6=gv$v+k6-kLs6`2np(sbjE$)u!4UOD6eKE`?Sr(SVohH9pdyNo z1*xEjBpR&6QXe*!stEd4At5b(^g|Gd##UX6FHKTQ+NRl^x##$>o9%9*70)m*mzn?X z&i|Zq?-l+b4rRI<>YeL#NLEDp1Tp{yc{7_-EVrb3!H{vZfbfjFGFs?Q8H#hc=NQYffye>8t=d|6uoezLBM$IpDvmpAu}L@pQ#U4(N| zJ>QBjRE^4xLAV;8q!D@R%3~im_;9F2hN-vm+>1mH8e%_^YuYps+2FVB*6^Y zAL?iG*y}aGnOFDl=SPP?1Q!G#f||1Ai-imEQd^jIVQ(ms5(G0t!hp_Kb`hr2wBCQu zDx)1QK1b8$jcAl^Rk7cV0Sp-3w2!rlS|y=Jo5sxho?Y<)_c3@I`9tVs)2Ku z8JHm$V%Fy{GNy`I=?1I7PVIgh*O;b%dV>Dx3F6|-ZUqB+d3Lr!}NSA2vZKBrKgL#4!(~> z5&sp(w(VqY@@o{M;FH3+?ubbYxEt!VqFzR(8S%>tANTv+SD>kWSxrHP?^8ESysw3cU6aTTMC!T~`00000 LNkvXXu0mjfoTA&p diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/flag.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/flag.png deleted file mode 100644 index 3d93e125ceb687b33dc4d3078c8361512b713313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2676 zcmV-)3XAoLP)+hwnH5QLX-O{A48{yIVl?h%Fv?|S%ybd8wW8#5ut}*T2c3s* z7%f_-ZCMqojxEG$T}o1ligntMirq47u^rvkFuupn{GQIU=RD_+^T&4HuRmVT_m7$9 zJ)h_O3|LO!kVNzhdKx_gfEq>(rG{~N>&Mssx_)euY7t=?R0;@>aNuxSEt4k%4#eDens zrccu+=}LIS_2n+-1_E$x)x%7JH6iw4}_Q&wQ>!W$K%LO}{*dIfM4-2_PI5 zX$U8%*X^_IgY5IBYpf|DOO|>6J$luRk{4XszQcS*S+1?RUC;76h0WAXwMK?T!P2Ff z0FJV+`{?Q5=<0a7f*Au~?0eMLxDw!wvm$NB6hPaV$&ToK0D}Vv?REkf4?!s14%G4w zjApE^1aVG?TuqV=#yPy<*OCl?+)4S@QYK(T(SL>akoPI?HC8IB2zVjZ01$2#jSFei zi|jO3Is5b^gFdiPWP%X#Q2(nps|B@tTr2CcDVovsZa(M1W)Bn!eX9iaPUVl*=6rX3 z#rQ7!O;~fhbG?7#wwN|c_grgbY<9;^PhW%T#7$jq1RFIayB2hx5|ohbj3YBShBaUj z25n9*9RSDnJnaaK1~XY6UQm~~tk&SaU04Eq7hWx2ik%e)3wMjl0fZ;Tmcn4_Yg-XJ z&Ng0QNqM{ex7u0gHTjhJBRn_jMt90_cXj${^RC8`H$wS0-lCs#12#h(EH9DZGCDM7~5qjyE$SY z-O=}%EKB}G8t|liw(y8_wT!7MXkoh2aWG9mzN=Xz+pPIzVoMTtm_i+}vV0OELxk{58CL{GGFf zlY}|qVF1x8alP;ds={_D+ut@=p>4Hd(_5pX2>G2kd%?B~rL5a?S(E!2LK{*WIZoLK zh4!=@a@~*6_Tn2u9>)=iyVSYGvjd@B?%g10Laixfy=Q%k&__r5BQ0CsrOTOZ*W(-r+8RkWdYHC z#{ymg_@5T)_)}<_tOT1`4#x)2@TmCkm6N^$dldg2StVAfR>{^4HFG7)f zZU%acqnX%u9d4dmXNv}Oj|gs|XKAL7b^I41N~Y+sLU>BKIr6v4-`wkzd5&B5b(}wBNfwz*jPTKef8I-7j=zFm7=}t!EZO!aJXT z;h>4$Iwl`0Wn`gh!K-u4>?;Uu=xOS68h&;=MtUoi?{w1rz}DVT-=9U^xx3^aOJ)pG zv$dX)1GizdWj&Lm4VnP?5x+cIJp}sTaKu5+p%MFrm*jqpZw|n_>dE5i(Il1^ES}J{ z6;|BX$Tt)Pau4IyzjPT!F7eZM!7CY|MDMPv0)M1Tkli-%>OsoT!x!1kCg{P+{`@Db zhX}dU=V@7Q`ZeE!dHNu$vX$pYuWhx{NuLN(d|$<#cDfcF(DaB0AHCZ#*1W^BA0S-P zl;S!Ju3P@pOm?+}{~p^e+l|XLu?pu5#~v3UfXhDDSI*~Y@iZ!xODk3^ayu1QMw`8G zjLX$xp4PjLJzw6xwsLRV*$9`KJ+1{`ID6Xf@1aMg^|IU&`^~~aGghdb(xh`-c1o>! zV>xO1A^>%|b_vWTP;F@>ST6tRFx{pIK zmmY>&$A+Hv1v)p<^`Jj_%_~V3E4}e!? zts!d_Xz+ikxnk1|;PUawceX!cQ3B`6Vz!c;D?M1-<&Z$~3$JR8bo&+J!^kb^uJ-^! zS{p7o=>mE6cwK=*H9+#V`+@#`@SmaU;$Roqp*R4nK^)o@lU5wXW|#|m0rs3+f~f=8 zeX)MX^jk9ZK-1$5ekaIcv3|}g_EvJ{^2#Jb$`G077F6<(8BG%V6xQu#_h4#Xb(Ia4 z4`7L4UiA+85&*&FOL^ADfC=tia<)!^|2@<~YCiP@R>ja{kQv$lR>f8&R>ib?Mt?Gj zF^W~xkVEF>W2MW7fQZ(BzU_Q1(!3=ntPFGjAgyC?!v8gplFNTAU-cLG<6~-ugH_Wm z;{eds%rRy_!BKP(7tRJEY^rJ&K@Zq!MI~=UWbT1ANKfqi=?;eig9Z~qg`@)7e z*e~RJIPl@K*boQ1WcV5f!0;O!bMr-?;!K$mh2K{rW#P;&+6V_ee01l6)h*tJ1E4>K zV}5C&8qU-z;?M8>hOtj@NIk^!3gHgImkE~>K0){p;bg+`gtrn7Asj&1jWCn2Az^h; z3&z1}=M~}r%qze#_abHDDEf&D{{p`Y_5uv%_2D?NY%?PN(TTo*alb-Q_5Tb0000`sfJ!U3WB_=n!24|qqO-~ockc@k8XL$298}P6uul~N@=x)hHFF_@F``Jc^#X5U( z<2cqb0#!0N$hlh^$-VYp^>J~^TfWETo2t4eu2r*A{L{5AZRrH%1ryfp@aNwbw5}rj z-SwMV2UX-BpLyrk_hCm)S-E(3&Z}2>f^%!urH4gnTHU`nFC%2SdFQ&5Y&vSYW{8Q& zY@5N(7@VA_T&{Z7{k^{GZsi?J!g0IvS2^kaRS0-6JF5QG#`9AH7^atPHQ(lx=r4Ug zzi{G)(=OGqqU=+amYBW_NlkV6|3V$?PLNywd|p=fS?83{1OTrB Bae4p% diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greencopter.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greencopter.png deleted file mode 100644 index afe6b85e58b15fd01c6a78f61bffe15875305d6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2066 zcmV+t2<`WYP)AyzC=2#@j*7O1p1Qh~u@cp06V#sYiqIlpuJ z$F^`;mJ6)Q*mn31!`%BlzxzEO4(FbG_bkAI7PO%0bZv0SJS8jUDR=(F%}40?0B>~u z%H-kydt+>R=>}N(TSf!qA9Kw&n`K=kmj4>g)j{0@#Updk%t!Rz1aSx8O(*4xbM3N1 zQ=*4QN5eHX=qcinf1<|SE>pwD&o@K`ifZa5C8z#sUbYrJI+BRXmo`2x#46y7VjRf%-7)L+Z3 zZ&2#bvDp%5n7{WB9*v*2)0Rd>GXOl{MlNy}rIla9!@FXqOw_P)&`IGWbv}Xf0uTTw zQeJr|`KLLFFFwM58cD1KGYigQ{Pb68ryQ7_?$}TCl~$(F)K^8r>xoX5@WQv^sMK)~ zZFL7e%+op|rAM@2gm*MCB=%ZIK zb**p~+^e9lc5GEKn^G(`*jh=yh@fiuM~qbK`Pgt_Wkr+W1^$9isG^Ry zNQaTE0hm-j9pf}PDW=xsG zPL1Pk{15K9`pAP~QeG=)?vux+2c3;t@MZ{8w_$S(t_Bf61Wx3BNsk-E{clkV-n3&X z5Mc*NI4JD(KvxhU7Ju-pxnz|nCV~jz7+fU$#*g`c2u-Bcv|Y^0C(}(Vc98W8B0nGD z^FsW*mOQ4z{oKHOgwG4{4a-(@3%h0F()kECIk5-;(HOO5#CTB@dg@-IVY*y(ZT0{m?#s#VN7ny%bH*ZQHC4YN8x_YJc_)8N*THW%JC zN&A{cnDic4I9lRO0^_t>Vujd#{M(EW5yXv{2gAi(Pv#brG|#!7rZ{ z_ZI0;QO65Hp~2Q7p(s>X@k1egmTB=cb}0?+!Mg@qOR-qRY}(P-%?h1@gox}h!#isw ztSE^3b&;MBVR;t$bjGMlm>Yn;mq~623mOs)Pk=v!*^ zA7J;#eRmpID>O|Bn9yIbBZT^opBB(d!5ElH-#)mjf_={wG)ktDb5?qIqc6z+g zL-&Blpg)!RTS;;@8lF5l^^(pr{D)E}o^I4dEyr-Fe+{q5PYk&o?-3@b*u-Yp0~~Zz zIO~o(xk;b-tU1e3cp?*(&s{Du`<>Jo;)Znx?cAg#NDz7C3Wkj3}Bz0X)D-w@x3s;`mk5UUeGgp@a~_mMbF%iY3ca3QM>?++E!<++{o#aEqokB z*3DS923McPZ26kXmI^zj>ZDJxWwDv;Odd^@DYz|ke@}2|;Pr=Us+zFg9&Ni(ZVPl9 zChVrkbEcHa&BI+yLsLff8EmZ`YgkNNvv|2xLaLKA)0MfjqT!w9owy^Mg&GMeRm>|f zvHVt7-u)QOY$ms_Ya0gXHwC0@6HT%sj(J+c8(h=rJUwg6Y*I0~3U5?vDgfXPcAUTu z+}M(Mj9atL6yG)JR8H!)(Ou5eQ;FYs^Y2Gfp6q{5_^?7#V?@*t_P>LN)EHpF%oQT% wgbsi_@% diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenheli.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenheli.png deleted file mode 100644 index a5d094ec0bbf28469684eb633767077a014f37ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmV;|0Vw{7P)MW%5Jq)hHrW_G4#?<|sum(D5KW6d->FnjTJ`EC z2owJ3JJ2`;cC>HnVub)ZDV7sBiMp{0*DQoFY&>vFGl0zv?3CjS0c)ggPGCn^tQ=kv z*je3Nz!PBehO`sx1+4dH1Dh!kVHG*1xE<$`h4MS_W1wH56`{Vn!mki5#@+&c(gI5L z1X|Qj3j05Yd)2qxrHvOuOcaSMX~#>?0H*r`P^QFnf+L~sw2?{L*mE*H0+D!zrY8^Z zB-4{q;a<~I0WZ_SaEAI7p)cuSZ9<>0HZ8+4C{XJ5s85AnXC%wORvH(M7!>1p*lP}c zZ88D3ChQ8k#qlutT^F0HyYzV&@FtUYg7q&;%K!sk%JWXJ;~@?ByM>3;-6n@Y)$Ioc zg>64P0E5QY;h@Dk#^V4V-~+sHS+aCx-@Z@Sxj6(j(7K)+KER84?He6uf1y(CH5C8= N002ovPDHLkV1lK!!iN9= diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenplane.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenplane.png deleted file mode 100644 index 12bc82ece36634942549ba3f8429226acd212f40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2329 zcmV+!3Fh{RP)w)xP^-3rf`~+w z;(S2jLzM(2qL8Q{R0L^4T7nvdFDbpSC;}0YN`Tx(o0O;xzVCI`dwK5Vga6~a3_j!8 zjqN8rjWzF>_xs=f|2_+-ToV9D07Uv50Bo+8%6$N_f2WuHb|2I)Fd>yqCIC$U0+k@VSRt;;hr&&p`Ik{ix(7fzfO-J_jRe;B zS;fDTf4QS~sDr>Z00GS?T8wb``P9r6jk*m_9RiWs^{UhI6Y~nZjM;pIi6TX8JWw~7E zDkoUw2Q}gEE@$!|Ci7ptiOC5La9I)qu}nbaL*b^)5B3f3TJEBQb&*FXDX1-1tSpoR z=(C~v_^T7SODkRcL{sR+z0>KJ0rUZw0-#Z@yQVnnB<9MQXj|vC00n@f z-2SzleZ$AS*0HXxa9`oL-SxxFm{bDRLQ0dyviMH60yT}U;Qqo{8*NBNL zAPNKEKOal(xgJ0P;L-k(rxKcc@pL5qJ#teaN)4Bl3k%B>S@}$~ZTrLhBd4)OT31)N z&;N?B_vxvzZcd+##q?QN1f&2!KGoQA%QHh0=decG+sXLfU(8SM{dw+k3P2u!x{whQ z7IP&Zyr7?W>!IRZSO@L3_Leuh)#7jVWG2pXM(iq13-gGquUxLA675T;1CtF;O5Zqi zh0}AETi~tism7LD*Rseiw?&5})88R%KcmfjM3#F7faUz|!g^xKuWtmP05BG}*q%`R zE($wCP6dQHb)x%whhFjOW3MOUcFNGq^M-C78_x!pn!mHLN);iP35f|?d?*~cfba(b<-1VG3$b%>E{hyJ7;J!J-U|vq}^L2q;4#lI3FboLH4LqP(-gcF1a1T>n^ zm=VNmAw8J3tzfrW40Nl- zD@0J>znS@JZ(yuyn-Z)^GA1;NOur9N<7DnKJ;zzpBM|7XX_9FaltJdYZ)8 zNgo+?nWWEox{2T>0O*|Kw5JNdX0&;M24teHLWf-l7!S%I%9&gSV$laB04!zbLkY-N zp?s+|n!g)^c}mVR^vrQ-o4^G+68B{D5W(jnf=K7dlWG(In2cT)i2?>U*A1c)RWb<4+3bVP}PU4FLZi#IIn^FwhSvHnFc$w(hXj2Yd-eHv4I0zh^KpLsRb{A zJ|B)m507RBSG!qfL-2tk`RVs4xZz8qYXU3-;7@3B&MPt5-5lPv`||i3#N{Hc{I+vl zt+5C|J{L>w_ENt#%f2s@(W>Q=lT~xX3$XrsdWW8yZ}5#|+)5dm`43GsJ|_FvzL6>a z>&du%vXIm7R07h|gJbf1>ms6b3xUmYMQ>{@fSoJroNA8^_UM}Nj#{+-rK{#A%-*?5 z!QR@&RshW-mZ|N}rUwA%P-auRyZu$6cE)@+Fj;C8CGDc9Ps8K;QOqObBt9MqJ+?oa zmbapR6M#6COPm6L3P7w8#Q=b2MG#cX-kZqLxbY{o;MAQ!??+sEx+cH^fW1GPJ_q1N z07GLUfe8-(CgBR|{3u`PB7wZ5-xS+u1 zDv=feX~gXBsx_p8<5UL9(tL&XbE+6QB1VpLLD!YDPNid-tLh0(A&;*gQ*j_qx~LJ* zG=Z_W@`|(GAdtEje%33nPNbvZ>i^ksa#fK#bdfk{5J*RFEmui}uXL2wiWtwgS7{!L z&0HCd#g$JCczC(15@475j=&YfM7};%sl4`o8%e17K%^Du00000NkvXXu0mjfr@v2p diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenrover.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/greenrover.png deleted file mode 100644 index a2263004c224a79d9b5e134a9b9aa1e7b874b6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1722 zcmV;r21WUaP)ux98s6du{C@3f>C?*RUN>KK_E}dO z?gwq#Bxt?$P&_^2$k##PfgU@oj6&J%ou7dPMz&)Y?>Pk2UY1!$oo)jn@!?8^LzeV- znKhuPQif=TjuKRrpCVK=*$%+RXg|9Ar#lfRi(M-Ov^Hldq*Dv(tUdAj>JkQ()~2w% z$yuHgkQ@Vm&S0|c4;jq%L-WHKF-HnX6}U&fdpjxEzQYx6gae*98-YVFPB;tRf`23yzUabKD_#Dhw z(P+~*TgJ|F%Q0@TDF%PIF4xcRX``<{q^Z$)4gulOLRD59ox>SvG8FBw$*Pa2f$W%0 zv)u=kdk=lp%?5y+guv8-jQ};M)c{Nj78S>5$@_=H_^g$8%K`HL(??Z6oyVA+q`{0A zNtH!XrD0GTd8!26E&!NMpVk@iBB`?URxiWuEMUl%Q5|zIy2E}#s8>>RJ+jrOL|wZy zH^9us=m5ZB+G#RTogh1A+vblKn*jiCCI<7)okO>tH(XZ0MIj_1%SN8Z!O(d!p7*5l(5ujKhms;QhV@w*H1q#wqs>~xm_3a z%KQI7Ii7qd$CD4`c=DkfPd=V>te%qz0FOoSrraFO>vI7>o0UB>q?mtdDlXt-r^Z3iEhkem;)=qV_C@MOJ)DQWrc%oF2 zzAUJ?F1<;bMebOjY`1SlHPpQn?(K#@B5C|l>(CFXg#K#PSix2h&hhB=Z2&MLubjGO z*yyM{OsGYK+_B#5xE5{1QCFu)lnJZcDC^$jjtPdxvDWJv;wrZpL7LpLiJ&41;%zTr&NKzThdOS>%qnFN{(dN|>fMSpa~=_tuNWx~Ws6 zGvw$l^g|p$cW><9IR@U_t|rI z0H8c7<-zG|GgZx36g9C3(`4zokGC6!m6x|vcI#^u{{X;`vhJ|r->%mT@tE`wAJ*cq z_n?Jb2Z@MJs-5=lD3{mge{}e2yVFr3H5Jm^pC5hg8^^bSBB|18yi<^_dPeC7PWy8h z13vLWHR}HiKou4>EWe*WGsK}^7|2DHK;h)}gt1;FYDM$L`}VPC+8!69=8YRYVcFeR zBR4jagnUus`FocpzsSucB``ev46FbEO(>*iW=t8_S3*&x)1Hc7ZYLR5monj^YEs_4<)5X$nt^6_m8S5+UeQW?}&Va05Up*}vrTxo^CC|Gk%eOqJv`fG7Y> z(Y3l=+S&bahcRRUyr2Le@O>9niI7?j$VABAqimugFN$%9MqvB3P@LuaEY#JsH zpyepeGU%hCzx-h56#dU^x3<3;qa(ufW_cgff|B;XEc5QCgBHiR25nPX_JS|WC7fDz z*#kNrF} z{5M&6twv4S%_Gd(oNnmeVS}#nM}-59RX1z3&%Xdhr<^L{^(fQ;0000PTg`*|4l?5-j$|@(#?y1}UF-gH&${QIyY4zW>z7RC zvG@M`_V4%o?Svd4^}v+RS4FJ?Y-|9)hI#?yFc3j~``6n0PX4tXsHe#mz{TPHoM<+4 zfC(-(G#4AP4Pa99wEMGf;2+Iq0?pRWp6=l2vh(X*yAzXm$*F1S-(?8@nwh`8T>NZWg_Lp0~cK6)v?du;H95NV3{&@K4@sp>| z(3h`XzcIhX-i^QKde8YE?N6}(#^pkBO|Z44+0x&0*-XfwjOJo%H+!-D)bRE6?ccc0 zS(4}A_UWODdX=M3;0DBf$G3N!Jmv-&e9`x4e<%Cr!1n#G$o>=Tzqp2gi8LE(@n|jp z2oS{lGsVEa?f;PvWK2wA`4pdkeQcB!uihGRK6o_3&BNo+ zR87=*42py%;){{DMQ?7hIOtfRCkGWANNc>K@K3Bw_CJr6tIhKUzI+~<#$l^g*txC$ zhjDUq?m}{Ai*(?IKDG?vK|@?Eh}7jcih@aCeum)=Hz!Jt;I6|2)l$1nRBu=vxxl)e|5Pq_iw2iZR;A81BwAyIRYs(~^B~ zqfAQ;gya*y!3~kPzXXeer;>nSvuFnzg3n_jjf6KJ^k6d~jTc2Me((X7XCMJ=HJgb+ zoPH88UO>(jS&y1yO?3iG$d+sJp4}EA*J=Klf7-zBS=h2MV#5g%u-B5nAPGDJ$M0}2 zPlC8|JP%T7p_fN=*iw+_B7yZJ&{u5D<&RrWGqh4{ei!cHYS5Vi&_un?RE>=2#cf@~ zUS_@ZbRBmi#<48Iy_bB!ce|UC?;fcL%pV1IvW;-BqbbomWbWK&LzhY_xAKnl9lsYJ+J3!aK={Keb=RdN*?A&c z6mq%M_GO4>W6<0XP@Y&u0s~1y~U~44E%kE1})glE!aiT7Lq+k{pDZ zBHNfnMI(HPNoRwN8FZ~IF~~>>b0-0ZVtcFtrYA>beb6ZS8Yt&J)(_hgbJRibQf_- z);8W1EJ`~`Gj`<%aVI_z)ZLFbn_SOZaBh&F8Svu5xdiOH=LtQE7{<$xuo?jCb=U$4?sixof=|_%d3T{CUD-GM2On(hn!i z)h%8~DSLrvRo|#g79?{@a?D*V0{g8e*2dOiFpPd|QIwXT8vm zGHek8caxb*upSby-EFPTnMn-7NK98L^Rj&%YF6tfJvKczGCV|Uk;rzbJ-+&`BE%9c za>ep%F}jAMbm>+E8zuQ%ci6xcLT$?6o-i8fry7rWaG?SN+qbP8PY$I$eY@=q3D8$X zrx>I|0>U8x1&#iZ0?Sg2VaCe1rEka2dA6Fr>%mu8Pbeb39(sLs$1NW=4H0XK%11w= zRSzedz_fDrH(j`QiIFQF0&$m!krzK1hwB!CQ?L$Wi0N$w?pO9Q8j^3r9`%p-?GNKz zm{&M+?ASZ@G-0aI_qX=pC6neYU-{!Z`?wX%r9_{!v8jbM5J5~bQlStbO0b?Gf$iLU z5<(jI62|wY zDEzCR`K?9I)oe%Y>MkpKIo>8SUr>KLMy6)QnXud9ivAjaXk<_w!zSUh(S9FPtymGX#T3uL|tn*{@7B=92> zV^!ld9n`9ENI>x|^t_o^!qHIxnN9ea4n5Njzix_)v)KLtxs*EP9mP_xn(mb>+Dx`4#!K8`lcx_$m^}KNS{I z@kEM*gTt;7-LHqEV_2={@xEn5h@A@@r!&`8xOXuE83wt)TY<(PAWBQ}^a^8|WblLs@NGne?ZbtfED` zLQDI_a{p<>Ez0c+Ayqt8FA?a9Rs!=NY#ogJPAy(OaeLN6jM66u4j#b7wn9Tv2t_Hu^dQ8I!xRY>fnU+u(imVpJ5i5Vw*^Se-Gkim#ISt#{|?<9{}T1ZkWT+ zhc7A(a?DphHsGwfgKxU|10OUwf6SgG@=x&^dC6bfY2NgpOEbhMGon+!oYIlyJ$|1N z_?!DXU#hHrK?1*isANM_ZN=lL5}Iy3nnWA7o++LW{0~NZnNK(+P{Emt*-^r~3gwto zBeD{BI>@8obCz1a$HPY?9-`@}!~~-Z6*LLoSc%nYXGqlE+wnETY!p<3g`rBRk>Qj~ z<%Yt)M#$QX)IBbcdo$LD^tV5H@#JauQ}`oDy^jQ*2Qv}w7`}-L|Dt9qaV8gB1_>yK z`EpERYVgp})EX+$Fadkik8dvp9;gY=S4fP&1kKD*dQSV22#*+(;?Yhm4C7ZhEDG_U5t)Vk!>=GV)A?aoEc$Zn+nJK}&v=&!B(-qn& zD{X$N*!pY|xC5U4G4F1I1EjF^Wp+S$G+ z=RjBp2{^^IjOaElg8l^61ZY)>{Uc8tz(SYx!JtzA3bcDMo>}Qq-_D+ ziB4$)3FMCA*@#y2?O?L~AZt;>$t?A@x!p512eGDMVB1oLN2NjM_T-07a6s<$@x%;| zj4cHvwOf-j?dxiJ9NqWL)woxb#RY3J=b&AtS7-#41*2oAECTgAfG^ey0Abe%XVhmq z8loYAtI~aVFiLOHxiHn>)nkW@keCBI5z_~;;0mZWOwN{%AXO-PfzV>ky`AHja|=eQAVY$%x@Fb^EWHZ< zq7OEFCh|mCEwBS6viv%%#K0+5_+EgLuxQPef=VN3V$rbF(NjJJzmBaTv^_r3)z{1n zY#|+|HpzNV-2H^!b3d2}4h2#ZpBCn+m)hZ9-DU?r&8$|%K&qUX=tga^;$uBrILofS z=Z*82w+O@}XQK`8(ji4YN-_VuvXWmFGr88T!Sh&#uJZLd`Y+5TnJEsrN;vsi z{6z8AGG*{{5||RkLOMq1_y;g@m=8Orb0j(X`} zYq#3CCX-bt!*?P5DkdYXtKg$8!g2rQUXjR)8yQBH^V1?m@lH8nEpo+Tzjs>mE4(OPWwcIxL#JC_crmb`|Bx2{K-EtDtX zdMYJcWb%R9oL~Mj@Dz3zg@1Tz;pN)_olWf}ogDRXVPh^Ho_cy9*-2W(MR*dE7WFby zdbuwuX^W(-i;_kr6}1lpa(va1#k;#M=X2^*#{~&F5nMHObN$)KT=BBU&}Je|t6_BK}>5)@tHA z`Nq1`_Txo8d%{46-j$t~D*swTNbam){>+>NzQ+KR?o`!{hLX70LWx+xMRQ)6^Q~2E z#uL~sEL}gE$VC#gsye^c=E;WJ(g}j c16Ni>ct0xlC>;k^x&iC|ZU0w%U_%c64Fb#gGynhq diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/orangeplane.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/orangeplane.png deleted file mode 100644 index 9b1cb3e72ebfeaf7c1e34238fa21d262bd285755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2346 zcmV+_3Dx$AP)D^oML?*O1T{4wPJp5)MXf3xlBjQ$ ziU<;@NT^O8`cNp1Lco}ZsOlw&n^sLq10roqT-%{w8f>t^_TpXdZSKl5^_5*? z`$$K#Iy2|^eE#bH!t3$#AFA z|Anqy1`q>~qL{lNH7k&(ov^8nlLsK5OgX0^h@XS=Iw@FV3~Y$N$_o`N2S7X&E`5Bm zhaQ!bDoQLCv}Sn#(t5?ed9sJT2Jez-$FI@yC2EA@cd<&T}$ z)k^@PPD9BZ=EaU>{>!G5my}Qi+%w*!SRmM{Jt6=;SE!_h^1)yiU&K0rEvZPw-$5T$;KwLaTJ8Zg{5V?p0Ur1VXG<|()-)Vz?OV%ART_Xn;GO%SS&oth`SXg}ZBI3&KIMH*C|f31zslI~6TWC`Swgw;v6{M_4efHX zoWlbU+sdlHwPt(blU$cg-7TRr`(lw_eyApU0VDxvOn7o~1(pXO9t@Y3?b&JcVUAlz zOX%o^TfK*vc&w9Y+t~y=?tr=~>t3sDjPA#MY@ePC?t6CV#_s@(66k52XKtD%E1fN` z+4#r{qrb;IX`>ec*FLyp?ca0zRvUmgHz2~pjH(&v@uTK~JxlK*|=4a8NbBq(aOVeBila)WO zsQtn6ZLxQ-0Grk;4Ild0+)p1i=gqc!&hG}$Ul{ee@WrV0APtOPgL6&eK%WwthY66cN&`6W$5PX zyR5)e&;R_lPwIFgUWkp=OJ)zv|9v%>-Zv&{I(3A$CyI=#eU9_VmWOW;w-eu@o zhoPn0buDq*j=HfA%TH7++xn7PG{Iau;n?Qe@$0=5Gt&SZG=neZg}`cA39pisyedId zR!E9(CPG-!7_C4vssRkSNeD+k%SZNxuTHhVKTqZvorb1&8@hVY&{F@_)lqT)D)lsV zH@g9V!1w&YhfcgIt@%b-_jdf|h;8))xJiAKk^_;7c(?o9J`*7nHb>tCa1Ov%0B(w| z2WB6--WoPK4c+QAG`-W%)OKAv8_Oxn)0`)sXIbwhVKDUE~pp9;CdyHUnh!O2`}nn3LOij z0J!m24sGuRj{YH?kUmh8d4pEeeY2){KurWJAjz3b1!6Jvve;?pH@sjkoXSf8(F7IeQM$&NvW;UB9f7%u8H6Bvguv5& z5_B|@08EhvQzQX{dDxx+nB@UxPf=IuBqVS0?J&-bP3>43#-TAYL*C8`!Hp^s{pM+| z$*gaQ3@Dp4=(2h?1IqG%nr^{7zS(4_FB*JQ4d2-@=P*`b&2UYx5ZFwRX9VJ~3K1C) z7JQ}Ltj%cFS}b7gv5JGc%e>-_t$7^XqWS2{KBuR@WCyO9Ml#38C#$^ibV)kj z@#2cjyLT9Gu{XD@=Bh4U6s}$|jULK$lE~59yL;h{r)x37!EkB$RFv!cCw!-NM{fQK zKrba1dall}kRxr%XUl6gZ+R(wVX6rYkC`iX_ExM@;dFnYYcVEVIrCYw<3J;O3I}*) z=C4B9Tk?;8_g3FQCdJFDmbq*KJzQ8?{>l#H`n@jp#xduaqlwr>%9mMcbY7UT2*B6! zBY8L*i*0&>YbyV5sOLj9d1DsoWKKg54?yauta~k+=c_@Ip98Rj%1tF3dlj<;)>qva z-IwWRUu)RvG&J)wO*I~oWbuWUHD7OQ*gl<%>+2N1u~MF<_b6fze1G03FR^rQIf9FjOmwa=j=C zCA^>oc|C?Ke;*}g$vN?dj|)2wj7B6N`Y?bhqDx!?Kn1|(^SmEGg~D+vfNNB&rvMlq zsY#c20*w!Nl8ku)769x6qmd2(%K+S<&GJ+q$0>x!MZ8c8V5Q+WF=G58O!ma#&WB$H zneSjWGplTb9*MLV22e^4MJBDfOr%9XN-*~MPd=T&L85_1>3N0Lb6Jcy2_w#gp!=#> zm+6QxtRCkQc`ScSoKS+!qDDX?1jb_M6?eXYyFU}cd;qI6Ob7cvJ8rGYGn-D41`Pt~ zo?FX9slbyu&I>cnw3d^>V~Ye*rr#EU&qTH@sH!K^-{BZSjA!|&xvFdb4;KWgWdy^a QJOBUy07*qoM6N<$f+@O4aR2}S diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/purpleplane.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/purpleplane.png deleted file mode 100644 index 63b840af0b6b56f01e1f6c59153454b166b186a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2260 zcmV;_2rKuAP)`|1)!EXV=eN+v``H*h$>PCJCuqS_u=C_Cwl$REj8|k`G8#K@}(x zQYaN5@gWL9iKrAI_yAIanu;Po`Bb6OU;)AqDL{*z8rvjtLgU0vVtc*2-q*bD3?F>P zxtXrtJAPg1YOHzOy}xtMIrp41V+m{5BmfEknf?XIqogDzFj&^=z!ZLp<4_D4zk)3ZMo+ zcrE6#Rmu07L+=tpLjaM8-x3 z9`Rr3)*>AMss&hSGs8*%)HiFJo-B6pNThr(fGPmxf>++Ourh#98y`Af>|#3~?s%!9 zx{Ew=IOr`XXjp|H=54y`Rsg6ZRaQ4MEL#lLnuV<**wAK$l>o3a(fGp)-Ly~Dwvifd z>XnrNsE4%3GYj4H>2PF+02>O@Ny!1Os&cfvs(~9O*Iu@vl%~P#sjPEC&Jl?W&sQ zN8PLcT+V~__F(r9s%xJm;3~3Txzv*@)i^Q$^-{x*!`!&?_DTo(kKFN#Z%*HP9l$t% zGyoF-rv!i9VPycyYq5BJcla+K+J$W;3FxQPeLwudqey)ujXUSsPQ z^LqcArM9uw&V4uE8aBW4{nXTD02zX|S6arAR-v-2r@rNJ%^c_rJZ;hrUO16X{P?1t z8wHR9U=Xys9B63;D$7nsM`g3VkQB zjxD9`Kk>QAvGV|C2zp8OEGe+r3D}*0P2Oh=7;L- z!2xX0RvYR1`_HrKlRwQQ2LWUO=<_)-X`!v;=ppIXBY(U41U5md3_tvb9zFm1tEtJ$ zf)jgSrKKV&8wzSGS&O#k$vsnN{$#&!_WnxGd2UJcvKQ)__iSX9T~7O6q4}vxM&UYn z?g9Yry?0^#O>JM=Dxd)HYE{iK08K)iEitc7G*jsNRjGccI@09~T82GjnfBAtNZDfd z|Bmm}Wk`05!leBnja8Tf+G^*}&eTr<*g;!U0f6bjmaTYH?I0hv40FgbjRDIj^qWR@ zI>o)c54&qSckSlGHS;{{WL?Mp*+goT_RPYpGl|KyvQqX)NQ)i_X%*WPrgf@XcsW8y z6#5#0SPOtjF9`8qBTE?|qaLsZEyEnPO#O;wILdvbb}WYcdvam(z55f z+U-yH$9ryaY$ECKaR7Iz&roo{5)O~_==n&Go{vy|8wO(GWeTAd!ka?od0_F5SftAu zv`ju|8Rnp6=>4XVyJ1^d0j%Hy%aP|3k0uE+S|!OEfRDf?9X<)*Ljc$5I87QM6JUh2 zt_-t<^sUq`3EH z&G13Z2bT8|m^qfq!D2;kp=#gSV7_rUr5!;OP==m@S zECC=X%*AE2>6%}j8h;BwCx8|zjYtF{Lixcw^);xQ)Vd$Bm9u9Eh7N52sK0szf(g2vPVIE)6*(FK*HtI=fV0~4VvlAJAMAe??s0l)?= zbIebvhYn;(h-rdOQ;h4SZITe^D8i8y5kkl(1exZOCDX_Ouo<1qlLRc`W@jES?gMic z$tz6~l0W!%1s@=Wc3$(wbm;f|al0r4&(W&%w@lC4!uXsCP!6r2SLAX8DDHz=YQj7> z*Oy; zBy1UhPADiLDyO6IhQ&&**OkuSyqLKA69A(WT$n-GuoBQ}hAuVic&3F9{cEuYYTRS{ zUy1#;TZcQ`XBuf?yK*=3%FcoIMw7Xf48XOIzwy+)Tc?E(ucWJ7%C~sRYq5C4O^Zb2Nx38zHxk|yw>bmWa(0GU2#;KXatyu>Yvj8|x zhsǤK-Xs!}H_M!7AgQR45TSc#mIe9>wD>ZzH83ScjQZB#Dt3II9)xl)!RaM7qq zk`CY|CF^+r)*tnpS9b!PzvHvh4FL-P&Z(Ki0DxTp#%QuK<;NM?LP9mN(h83Kmg}Yg z{8y+GPqE*T igo2nX)~D7gul+yCn0g7o#mZ>_00007r6X)l%xB2(G#l3N92;*MhV} z=+d2N1@Tew(fVky+Adtwph-<@q9si-&8rE?bn=)?XYRe<_Z=6_G)Y|)4L$H*eenDK z9M1V4);+$La0f~Pz=vH!%ox*_%jLeykB#n|7%NXxCeG2Uq;GHK?{K>vFJH) z>9)}B@x3GgpsubC02T)Z228P7i~ykT$lvbZo4YVoUf@~@7HCO%0R%9{z}B{c2mk|2Vyxk2TP3a>hNeS}P2p(Z)&K5m(HD4fuwzT( z*wG991y6}(#t?n>!+_nra|^b$HA4#C03ZRdd=tzVKn!4vvB<EM zLu1;VjvY@P23tOK(ZDZ$}u0pF8Qf-|jz@RWe31hnMPN+4aQ zfryNW+&eF{wI6yA4ff;8MUWxPm!nm%wH5?o&N)cQ;d>H+mXLx&D-I=ZfWx$g26rRp ziuj{<+J)`@{-O5yJ!fkqR5VRN`|{8R;idx}`DIBso9H8BQ>U-;8y0%?$xcmAD2@07)>$A`~2f7A){3 zQ=G%a4wF|FadmPT%hoN(EFZ{b{j+JMPS(Tg(`9C+mP?qpTEa)W&eaxV)iHAfYYns( z2z*ryJbAu2TK@BLPhqA|t>*m>e<-&j96H`Pd=1Zr=-knO>kk>+cXwLcTc4(;`oJBT z+=s_EHKKQ7ZUvmgfFW3Cd3n~p{>aXIKJRWjJ@d=R%k+KM2=e(N&gbVae>uYT_cpUs zmU!CNl+E}qii{neSis#dPQXocLhkBKnU{ zVSHu@VMmIB7D+r?At+``WKmkI;LP5?ZjS3Ww}w!XBsDOEX57Yv;WGt#|M?zw@W<_V z^t#32j?@1=-QqY#ZR~7J4ge|(F;y26yuJC<|BuZiNdSNuW7a(q(Z=$4jbpYJ${5=i z*jfuBf^)96-5?_7oTCkamzI_Q0LB>q zsA!PrkZ9=XSRpOh&DT11Vmto!d+*+%aI{b$A*PvPbk3ZknIrta62JiV@aTz*hyB&z z;OfY^>`9g;>#F)x{)3pQi^0nOH9e*FF$ zy6uxf@DFef*aSA}`>l1= z*sja3KmYJn5XCDdE?2&I_k)k$D_7R*e++|~Hk9@ue0_wdw@5H%` zEK3m)08#6y-#=tApMD)QTaRoQ7QXuElg}$_tE=p6Z!nxBOlK*os$RV$$^37y>T64? ziiqHy=kC2j1wJ(0_Gx*y-mFx28ie_X;dsV)GRHfIF)CpoMET&>-jd8(gNR^6@Lo~% z6pAHTyR%I&>~~u`d;2(-si;bpc|>5h8naf;)9KB~=PW1f5u0lfQNd!3d97|TOBsw7 zs4BHalfb#`sMdIZcTTJURfr2A z_w3aV2y%t!VRiQ&-g&Gsh`?}?@cVI}zzWXma*GHrF2>8_s9^2#~q~YFq29Tp^0xVm`}Mz5ff*YJ7`E2b%x@0000OD diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redantenna.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redantenna.png deleted file mode 100644 index de39d7e027866e2b3c3fb5cf44a66000683cb10e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^)*#Hm1|*NFe%cJAI14-?iy0WWg+Z8+Vb&Z8pdfpR zr>`sfJ!VER8N)6AJl+F^ZhN{ohGg7(JHwIhkO2=%ZukHCopUBQbP0Gq-s+uxZtAU% zyP}&UfeINIrWDSQ75(08&HFQKQ(f!V-=99rQ@ZV2;`(Ev?O8uncSptBAFOSEd$m4_ z-5Ikfw##$hv8gZDt^2Sgr*v0(` zchlYE_ium44cum*b$0#meNAwPE-6Wuv&~7IG+isxTAnIFnHx}WApU4S>FWi6W0e); z$^}%Ahdf=;7ZoPIHCgY{HFd1Fk79Ec)p$BLJ4fEsMt5Il_8(9N1ydQD(j^ir5aWbc zl$&ibMY^t{Ab;-A2U8@b$|{(EAZ2r_NjK{CLRD9WIS z8)bd{8Cl1)IQ39=zk`Z)7zNdB&FY6k#+9zlcKt z)<*rfEJs1?Grrw&-f4M=@7Qb06;*q+P{BkQ2OAZ=H_=iR<^^#LJxNX zvd=3469BNSX(W%vPny=lOGz;n5`&EmJoC)h(dr$)*Sait(q6E^Nhbwc1(|#|sMgU@ z!z%S78khM`Qh~m93q8i-c8?#~i|j2Wj*Nisz8^cfc=?LW`Sa>sMY_^r;iu)=f$_WE zrtEVe*6=v#!os1mbL>zht+MIq(|-78&3kX#oIR^wsqW~seLj?ribuGimP?2+nbKVT z8b^eULgOYi^< zR2Z(VGE4mUNF|+^MAscttz9u$bMmqZIxfL-TmT?Fo!H$KH`bcW;>+h$%c9Zdj48TN z>()O`m9$+vZ!$|Cm(t!os-Ei>vW|%~T|z!ys4$-l-q4SuMkxvl;j%K>P3!cp>B*$3 zsiJ=Knqt#tCOndr))}yNU#GX`G66yKwXT`sj!HdppDTJ3xjAzYp{kcwax28h-37%* zqq=GUKpm}IT$B+sYPw*6E3Hy(cyaWzqV@!pELJ+Z(h*T~viNrKUS_eMykw7cra{K& z?JcCf2A?}g?iliQw4&H?Xzt~;*wKNMADW0eCU$6qI(?RDm+dYtu|DWjL^|71Tr}yD zpl#EJGo`AR-Z$ zlJM&s(+k_DEbi-5C_I#;im{`E{)^4u!buXJ8gyxK3EeKEPM>9mMhtK-oN`Wkh+@jBcJN|#9FC3~2~ez%MF(n(@EB1-A(N+pXGwI=`o zfAvq*(lGwXkoxdvW6)T748=zycNcDjSoP9ME+Q1UIdesCszuGQvDPeynzbyk&hQ?x-?TN;gojQUo;$t-TH#qO@8r_*G1s-oi(praL4V_e@1yNoEhLslEmgJ4 z^dsDo=SCk8XwSR)aVjTISc7%{J34s3H^ZJrx9KFjlmG4B^+q@wm$gg6%J00 z!lCi2&CbPByY58*0DC*ZwjBLR&CoFM@Z@VIFa%s(^dq{0*FY!$0BxS(L=eC?=PaF9ccG1i+BMTSqJOu zZ?=psJ1k$h+H4uODjk=7%wJP|v;uj$;r`yKB2JV%Ynx(wK2HJLe^cq@%}!yD8p~SH zA`ddq$5Vs0WN-y})21|%DmIRKz0hQeZEj@(f~ZLzF%!id`Tzy_lP=TaAj-|g2{Zm5 z1OU<{5-MYpGANkYe}L}3E^lf}lcZ9OrxlyCSZ^P?rp~;DKGqi%$kP=SJ_>vQYnOQRHr?gF}=~^9PIfJ}BHt|K*_HVqXia)FVHll6TP3 z2;}s0>@bh>^F~`T@uhQCV>OZm|8mZ0PIH>mocMy+{;)>gj9uUwV;I`}Aa)OGnYLPBp%r4~*DnaT2CdUoWx|m>x8Z zwjFFB)n|a-J`2s#D!vZK0YD8^DwjO)q(om&-}li-diXQXErlp<1TK zUSuBdddj3r-?oBvs(6txfD3Her)*)Tgk(E`4}m%MXc(C8R6nmZw5%I854*@%mIHU% z{b69HQ~lbDL{4=yuOBHH;8bA5sqU_EE6A%1+jV^KY_3z?k~e6)^+do9gX;l0t?h_Y z-B~dBIbLKH@SxTIFv*fPXxcuzDW-YHJ_;-f>I1-R+h(F7VK>|L#xn53 zUgUaHw+I*v;WJJy>3E(k5)`0h1K(tm{>tpAlsHy(#;R`RkQbQ+oDCdGNU>>q+R{}mPzW@&bXQs3b0rvyXRhYxizynToYqc;kuYkPb;9jHz ztOo`SYDNb8EVp022D}GMNE`zlu-T~|$ouqBQ-E&u@xU4b9|0z2fUji{0OmN=wMBX3 zO4)`Od=R)jcy=|gy~fGcy4dkJBYE0vUEyLG+Zi%RZ%mo|XamyT1@skhh|c2-I>pj2 zgTN8sQsCx{LvI4^bE^G$I;mWO?6keni_8Yz&p2c+unjm5Sm{&;^6=2PWGc$+jpG_{ zQVW9nE4|1z^UhtsGN*bt3wS%EWg=h$u+@@tj{;MI_9qkHpX^2U+G6%P)g!fn=MEdF z^j~#!d&jA+u>M=k*8eu=_mpjKaR~#I30`DB(B)K@ro;y)z?X^u^&*piC+g^WTF`$r zusRs?N1(?}L<@m4f`0Q8`~UBzDbA@b37jWRHD6c*y%<;)ABH|+5u+w=3?db~(C@HTLZt#(HZA!OVpS-}JN{l_1{k1Lgt;4Ei_VZs3tX#n%EK z0be-Py?JFQl4InWH}fLhUSvz~7l6LBzX5oWdBJx^y~u)48qJ7aIvSB`5Ef3e``y63 zPIXrbz}Q5+vr4$x9DIL#E#h}dsDD)r@fSv_>X37Toz=H4*g$=UflKUu4{)7R{WT6QP6=3(>V?2JVPB`ZuL-X;TjHQ3NS7SM zUV@!0p!LGW-|Yu3cd7?l_@=(_pyDUs3fpD|8c^T(#M9N5umd|JKK}RcnMYEk-2mhh+KWw9^nsQBL?rZ6rONsIZwP@=uj^&sB4Ey0SLcFc9EtBQ=sq5>p)5AZ?8?vI6U08R#*9n+$|ErC5XG8HujAZz$HKipR3 YAG))mtH|b;0000007*qoM6N<$f{T*bkN^Mx diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redplane.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redplane.png deleted file mode 100644 index 1bdd94bed20d3a36b9f784cb40fd2699288d9d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3207 zcmaJ^c{r4N8y-a=yJV|ljD4LMyJ0M2?2%>0k`%LGFiSII8>F-$hq8qvm9mwTQue*F z9BYw1q=^O{LPEaLsm}Mu*Y{r6`~H^ezVGLLp5Jp_@B79(Ia>4cO7Q{!0DfB=qzijA z+PS&+u%E38OXciAl5XiicP0DL!+fcDfH{tg!2@lHzW#U@ye}@|WE%R7z6_Rae>&;s5n2E z3)1RGEcOZx3ZT;|FfceQEKD;@Ta!%n2SW`F4Ro&J*ok@8EHMEg-DcEP~mz7#N26S9-iPoRUt|A!KZztA+g z3;tif|5KQTilE@ZE_fO_go93|`FMhQ>p2Y5TD!Zw1x$js20QZ(H(i{~& zJn9t`e9&DiH_`D49tB?X>ztgGHd1jL`s{E#^Xt6-^ zc&Ytdw~F&JT!dW2xc)AP%Wy&pixr`=FJHc^aMB{D#W9#Xx55Zx!gH!krbiElJ$(qD z9=%fF5zCQh67RWFzd-tih}t~7QM ziR0mmBld9Z>WHyk%v+k?G*iGWm*Q4^-^_E`(X7Dn0Cfk#e0uZh`puEs-lGrHUr{AkbP0zT{H07KA(V(u&M-VI!Zz`Wj>(CT-MRH68q z!={pTW#0C|ryVW*1OKW z&2c*iCON%Yjb#eRly_=VJUEMeI=xd;W_&`*y2q{bCF;5ra?R06x}3dSW$uUahsQqb ziIfUH&{%9QrhYqf1B@A4OZ%xTizu{HsZO;k_?Z3{rbplZGeAfD%!JR6# z^!bVO_JesM&eCIV6w32wH(K>Irr`!TW=b%s!C~IaH@@u?tdOduCr=w1PH3PpnbqU*C-_%*$ZlM*sW-3s2MkoDg zm3uTn%vGR|uvc_QVr^8k{y|zUBN(%(d@w`kv9|k)B8{`{PFoUvHJXunYhLWqlEL%H zijXhXtxf$8q-Jiy1Ui%V1@phlJ!Z{xPtA&!w5xyQ#=*>ivz_K z;tFph_kMQlp0kGGDvSctYkQqnw$#X8&&vf9y&1v+O2VJ{hqNor)6oqb+or-zEBQcc0p z6kdS>h}B>SCf`#z0(j-yDd}{X^o#}xD$Dc`RJD7Hf?*ZDZ7EIFDZ2egRZu}qa-$97 zJT#P8k{ij&>T6lp8kC1mSH^$9o8t$`{UY^=Mrkc@MdQWML0-9uC@gFx$1F1R>|AVp zcK9dJ;#G00mv)4BK_RzO3a(mUw4D;f_;ro$zOTsZs8j02GSweo<0>Qc@rN4Bn<#sb zJ;C+CHuB`?>A9D)sggst0)s_e#o{KHRZaJ1Hf_AxlE{9ByAKE!QB887WqnQ~Ru&NZ zclo@x9l7_%(@vGLYrs`or-D*0>%rl-p5*qmoU?c0WfQZ|bjAG#u}f~~jbG84IMxtRtrD?R8B(&6<(&8fLen(djEd;Jyo%@I8{p;4t?4hb7{ zKCpUHjtAZIb)sS=YR+O*#w2WgclV+9!kh$=)ZG^>qs$m)<-UlK*775b7b2Nq>znGI z8m1hYOR=>0lRjp9Y)Urkut#_rie-K9pQEM*5ck{gJTv^C1kZ5g<$T=UE!8rQe#M>e zRz#W4vF1vydN@f0aX2>hC8zQ?uK`F#mAAd0o3_=kN_mS@dvt%N+Qq@d_GPepL7ICa zmGLU%tbULmH%iVYU1)b~Lsv}xeRPJjVXZT;)VbiKQBt=vODE8#$}FC7*x;jw3b2dw zkfht&&HV#Y+I&?5S6^I=**o%QAyeb!IVv|w!XvLvF-0NVRPgn~r7Gu$a=qJ-1~>1= zcZBoy*>Itzf#Uu)yn!dm__bv_0X&0-3A80$2A>jmnv1KlWD+CIA!l5R7c|G~HQqRc5PJV;!Iyh-or_u=X%|KKYOqpPg&m zTlV_{+_1o_uKz@NpdGZU#9yVhe!SJbwAtv7E>nl*@%%zQ#N{q&>cw`2pz4gv>y-@t zN&(f0b3RJv?>?=TXecffROGNXnf4G*_PV>}etYU$hgOdHi`?1$#zTEwMhC{^O0nO< zA5qNJKQ9ir4xtl^f-*r*U55@kx5H`q6V?yoazvv~6^8==pDh1Q21h>h7SRD1_+;Nq z1J_8ivSn_(z|;=Jp9`1%d|lqyRK!l}0N0zNFmAIWO`#ft$BwDDetmXM1m#uKX?k}Y zvvEq;=oFW1B&hF+V0|!ZqE}hFM0x67tV`!fSBs0cZlTUP=3g=!zB9Ych3na4{g8kE zIZ1xzzA6a?oRw`rPV_w=JZAy6+`c&ie)Eppog_IO9B%I6Lf*NYd%< zrrDzO)O4C#wppA{0)3Jj#S5i&sqln;yl_<2ML8rV3?m#;B|%D!`{SCdjo6xZnn$hQ sNJ=qdZc9K|3WH)D(Li}`#Bl5Z3|QW~ud>S%x$|paYw3tAMfk-22T}Zm-~a#s diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redrover.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/data/redrover.png deleted file mode 100644 index ef078cb69bbff8bfba47867ee1da9355947dce77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1876 zcmV-a2dnsrP)UdvxAB;12jTLl|Dav?ERRk4=;z0#kXe=G&5~OVkZPSA$#T;$2r+);~Z4$aK zb<60upUEHl-uu1p@7wKrFUfBMprWFpqN1XrqM|ZZU?@Rz-*2j%6k=a|IkWdL$2Zk?7c?UCw8^+yKTF)IvR zb3@lN-ub1tVTU2;lU2xSs$W3=iK00&Bw`#Vh|y~Ug;zD4`G-!n(e#3Q5k;(@ZrFOb zuQ$K|fSD%Qnx-LrUOfA}VW2t|#39A>Cm)(`v7Bj~>a(^SK@`cY{>aeQjMH?aNw``i z`iL6Hj&W@09CW|>*1KI=04OiA&3NrmIDov(S(aOP!+scH-Cld^lvDhwg0rOB+m>0 zMv55Hr;yhtN|2+nv1P*4$aO$x-0jx@z_b*w?Ax83UjP6gw|!SSA?4UpGk-T{M>|_4 zPDP!L5)=sY)XXbdXP5g!y!C>~ouU@rx~gQ>Hq$_IOCo~xU{hHp`8vR1X%v%Q2^-iGhfY}2mt+^J^7>X3!o1V^mqdRuwcUiu?9gjV# zxmuJj)^CcvxrTFS%5yL`l3$k4$e-arpC1q3guz?*ofbU>4?dVOZ;m2~6uZa#qT64paZwd_069Ra?sMmAs zXeT!R+OFC2T-|=95-D?!IZ7)|E3VwNxpV%_p8g*zo?a~0)d7I7rtSAI45LUQ zP|9&I-EMjFbzSZE*?a4$yvbsFd!#@8+b>dkItF|}{iH%g5`j{VQ##wAvkd_Bb-TvF zu4sS8mTCYn1DKEerbr_AU!QL045U@@^`7QZrkmkK4@T8e_D7a1WL^9JdG6xX4a+aj zoX>WWqM)OxV9`{2szG*^yyK3>L$=u$lN<{G=@_Ofzv;JC8zbL#{vmfww=b+Hvvi-? zrfgPj{`d(e+G5MhG03lq0e5%AE&yPnNV!^4bPDa)ke}@LMw@~^u+RCc>@4}*dG1ze zGsD|;k=-~7fAP#T^Tu#6+Oz~u^PX9SnIx>SSAKSyk_QWIaILr^L zMe~Bl3aHg-8RfVtH%i@G-tln5Ac{%UdPgR{%FQE4%RA{$`t6OX*(j_d+yvp3b=*gl%ld^|sUv7lBTZF-HVr_ys|XUU%xx^X#StzH`*h%|#m z7lt_z04TFj$R95X0(;s=r6N_>nLaO-mI?rrRs#Sbvt=MN$8hp^WK^`-a?|8LvB*2l zEuK=}*dhditRSS&q?0pl{`N2cY|k$_QT_Au?xUQmZQ^}PWOWul^z3uYAo1i=wO!#l z*J%LwxUnm1!w)lBz~s!{PvcH70;~Q*_v=Po;@|rgKvL0 zXHD!|PnFZ1Fg_tjyPnweM8f`Z!fPrl@Sy(A0J^jC2V2@!OwWkvFRn_Ma?Dk>@}Dk>@}@%#mIWQ&_6m1mOx O0000MDuwu6Qc0$qJIgt9`p2BPf9A}&l~d;=mCBcT z-uHQ*=lP5;j4H@>%f`(cArlh_G9h1(u@72Le)`9b&x`zHE0Di7HbZvPK0g!1#1)!i zXF{wB z)6WIhO0JjQD7$&<_T8G=y84EDzcxywGI>kuZx0`}cXW1j_q^y;s5JwxUcY(!Zg2?y z@Ns-X`w9GQ@-wc_IRE4LJFx$T%Z|h~#nhByYW^9Q$&_UBq}Z97&0jHf#@cP>-yWUm zx-xB={kk8nR*R=E@Y;?!>_7J0!f~OudJ+B^+P@+Dp8-q%Um^QXVE=_n0a;N@$mUV( zAOtcP7GKMO{(1iYr~#n@aYo2&4KTyQ3>MM4bw)_+(G;kr=4#Pec%%nIH-Mf2!K`6F z^Yl@Jb$q`=Pc1)fQeMngBepMyHJzMDSVlb;WCNm0 z&~M|4m*I?b4w9&4*|Ph#G<6!G+JJ30PWt%>uO4M;`(9Mm>O^nNwZ2B^(nCa5!O-r5 zZIFqnMkqb5M`?txXz#Hu@r5pHU;#k8HzBKQ?n6Lcr`bo+1`9p zf(sC=V}OxSD{_n)><(Jm!STSu#3{7%O@U>gpf$KF>7{F%%rRx-{TNn-Vld@RO{0E6z5-PhiLiuL!me+CF_MHw8|;mcOli+S$Oq$amiKT% zjnFijl$8x1!QAR}=Ipofg5pel9v&j@Uxn!#6r8mxzEwP|IFS-Atfp#XdJ`t5RS1$S znWF9F68VNM7~5@xUhuU?pP{Pq%Y0ZkC6chI#v`Q5nHm}~^E}$ClXgUNd_V*q%xL$9 zrwzI+)0ePVb+mIqs{xOB6YwPcvjFd?dLuZgen6A^3CnJ>*Cqv8eqC4F1Q{CN2@0D0 z@o2fSmOgUwD(9%azzw^RHPCjRU$gaRJX(w117%aoZvr?NPnL~kK4Xj2Un}h@Io{8P zll$#ECW=^VQ77@0fT+r+KiHJG{P-|=p(%>D0fu*?Y68KDvXs(y}x{yNu_`@6vvWMSEn zvBkC^)BSAFY62S9M3Y9fp;4UEBrS-<{!>Jzm;7xI@)NwbJHcQU%Ak{XN0% zpPwZa&g&STN1;E!>5?ZQ66YQ*H?L&SFN~f0P3Q3^ZjV-9*>u``oU#E86k$i`qjX&| z_a%DQR}S~V+HO#2gr*m^3-DASg6EkXXaj^ztG3!58hEk+0)a#;czW_4Lnug6YaE-#7u(3a>U z(4N0~J$Rua^NRWSQN}MY7Gi|@q6fxCm6#>@Cr)T=+lz<+b7JOjOaELT77(l34ORrR zu;n5sm-Rcg2h7IEq0k~TYd_&V5^8$mJO$E(sk3he*L|>fDUL|c@B8OqkM}lY9u_WQdj`5qelSAP z>9_VU;&&Fn=Qt}gh$XwKZA&MM^?rO+&%tM}Iw#U@R0&SuEW%l@OEGjK*f!b=C(T%k zsLx5$KzLHm37zx;;uO}f4)-O#5LpXheO7Y;P0Z^xLh^z`$q9 z*OAxKznZT~7QsIN0w!-uHi;-)8rF`-feSxTcVPN3`z=lWZWNTLI3lKGFACl`vDC-#anWGV+ zAZi~YlvzU3b&T*tYB?JKIYm^k1y#=_uP3S6Ktv&;-iR{M{V0n)kW4H>_8EE@BlP-s z14$}VPg3#(fwzT`p7l2l#s0F;7Wa8sYJ|=m4~6CR zeuwjY9$PLf)GOd>hy9i6MRwocy2`?|V&05jwgBmu?lS)-x>6nK~ubNw+` z>xO?iEsA+Uis)#^0N;tTMPDBD1;?)eJaH0}T_XJT*HPxE*Ji9WO=uVI+>&;cE!EIv zMTwfZUV~11J-e=A#Tjat!XA3_LGda2SL~H3MfXYY8=QfD=0G%xMbZ?lhUxA`$im5B zM|SHVsdyw)`STF<6+|6tgyPBSku0A+HB;w3%)oL{3EADuq#NXAFD)I!@@mio^8G{H zT!E;mA4PZPlm40U=y{M6Stk;&c%A5o;0%K8K+f^8UXvi6 zTqu}hE_RoZTTHF5=I`qCMrHzY>8i$Lvb9e$Z?JE_d0AWJCZSWAB5FX~wLL?{EAMm$ z1Pa6-gGX3K$m0Sk-X$7o4w{P&S(6RwxI!J)<`_;Osw?CWjVW|3D7KAymh|6ERNxju ztiaGw%W{qnnupZ#Mt$+bH5Xfij{08=vwa#FyQ102&8{12arg6rkt!mPZF4{7_Pa$* z391JU%dREFMB=mzZiK!BJ*)&vNlRTYKpSZop!F%W6(E{qoV7j^jics9#fYidsNEYgx~dnVhm#y2nOB&@H!`^#X|jY?+4m)$qIqQu^zPJ23QmBR;Gl{Q?MvlFW?Rk3n{ zOfi;>Z#um6Tm>6x?Vt5L;D9kU09&dZNuniz5O5GKlxqw z$@%vRHoZ!+dbDc_g!~l&esopKRo!Y5t%!kzj`hCXdB48XhjCgtS9D-3!?{R*vG#Iu zW0qv>MVU4O3mkoU{rt_bgv7+Fo4sw`egE9gF?|0TeU1^zxYiYBm=>x#dOh}Lwy4JS z+U+wt!u5BIP)t{NIAj(+m)vyiv+?6T<1qEbLKAL#u|o%8soTh*0tDBI{pi`tIgzEn ze}EySn-M#(szOcqJpb_LBb?AOklGsM`QUmaNN?NJlk~*1BeJ1}x4ogGu4re=oFD5u zS+0dwKqAsm8*!6Gf=j6f69U%2Z4vUZTv4rWGY|MM)WLE=@BXnp z9YMZqf5UW!&VCO_WMH!G4>ibikoXOV#(Xz|qJadP*cl;t{^3|KnJrq1J*&GbC4a>F zIxkD99K+fuSU1%&hHnZa4dKTf3*oxeZ$!m(a73bGFx*RW& zGirm=jZkbZ?W{tXV{l`)%FwBVKkmNqPP=fnp)D+~e+fQegmOraUH4JKb;W#7Z+QLw z)_~=cl&4a1-Ay7Z;45*lz_PN0FxyvBJO|4^%~_;=;4T*0W60U#fwZ+))>+Q{D}yH{ z-LlklDx0~buI~A9mi4>F<)u|WTz?mpaH&4OEbhd!U6BfDoYhfU8k?@2ug~R}naiSC z6z*?~yPwiWg@0iu?!{1fIXay%0o&BS1uX`_@|`u2Y`#QkxBofe9s}n!eW~&HFU$>1 z{R&??lyaz=8PGkMSt;Azc*p!TOgO*VOwO7;SNhe3tw>zjh0UuOeU{p^@VVM>lQr)k z=wCd*ee#ClDDHC<+sf*jW3WgiE6CIHn|zZINgF9ga$awr29{X6(+i^AYMv7)?lvHg zVr2$c##YjZpHRbYp7|w@P1k+JYhmMk0em@*pyg?CD(#O5(q=p z`I%%SAU%IJNFsv;Ng-54w=qHq!_HaRb^H<9G(Zn+4?su*0vQqHZiKEw=nXn<^{pZ2 zqMpLk)Wm?MnDgi%YHzs)m5ot|!{CxGfUpKxc%ho7jUhZpz5fz~s9;B8D@fJnmhT>( zM2Ig8K|KU=lU*)Bd;LaV_t)J(_r*7&FMOEgMO%6vH5EtxM0s80uHxs2_K^y>u@Vc` z?rIN{G3=3pq8IrsjWqFn|9J};4+nU8#T2lAKqgOJ9 zQbvDwQy%UQM`!S{P~KS-`-)641KK%VNE`~52;@|ILm!NV@n?fR&7s1Z1O)PQ-w;Qt z$+R#4pL5!~ylWiIAoGe9XE8>V2~0sl3r?)>P>P>83NI^^S>tqDcHz#Bi9Lx@KRD~i zx9w>A3}Fh^Gm@uU3}~9FGQ5Yh@EUkzLXG4py5tkx)i_VeFcZ#s$8hjr7HwM?x^*B7 zWR`;X9(m8lArJ4zr+m5v%kr7aa{r~>eBT=6CmvXN^CC%sYM`CIkT$Bvzh1nMOfoU7 z-pD(FQ#H|)?=Kv^5QnH9@&C3VzqRf2*yW&;Pepet(J+x25+gXxs9|I#QKuN5q7(y_ zFu}G~YAgkg@x?Y^3DzM-EeMZW?AyAn?X{_6Gvi%cFwfj8gHFX?G_`v#r-t0`KCaX;I=U!(IJt=kc%1VsOAI=D5|1pnbY27T>GhiFA0RreKWm1;#b zJ*}vMrV&WyEokOK&zBwk?HSp%K#cZ1$3ereXGXEkBkC2{I*u2%r2GB&9I6F~xAvF( zW%qFU+Z{$|9W9+-)6-1r6-XMh($E+rjkHM8&)s+8W<9w+baRe9h*OC&xelF8;it;t zq5?mitD{ocP8*&b&uz2a8|UnpRr+$+*YQ|EgF4 z?YO_AHQf*Jo~^}?hUuWIlH&+iw>eSOzjkb2Jw9BBWPj>+=C`b>8N{VCB15Ov%)NZe zo=Mqw^9qE1A;Mx$WU2XyM2DHvvy1F^4YU-{7JHJAu1-*K!PAm zS#5*}#}I=Jr2~nh&Ss-3rKIh9MnjCu+V$~(Ko+>AP4amM=!MfH4ANp!Z?hxRZQlo^ zmWMFaWWk1EJI?Z3#JZlQB}X+OdfKKgR2?~75Fby8$lrXYliZ1C!Jn&~QM{CN5y2S- zMMxz)@P?K)TUu_=O3OZMM*%O}=M3&E8?yxmzG|O9T|inA>Ilkr?1_;_ z6x3g9B)=nmClxrw!8=CTR2}NjIA|>(LXw&F_J zH}Q)1qNxw?pBG?_0=aekykxnHTlclDfFnMS-%YUWn2kAGX+EdcF;7!pGgbLA)B+W6 zM^%GLOK!Ijx?5ic%NV`6hUqVL3*u3WfN${*={cWPDUTEnxzGi?RqL!_>0Z}e-EF&5 zpD?xQxT)WA`TfA+2R8^B4rhCB9vh!^e01x_Mtz4DnM-;4wIWqPl71KA z20Sp9%KgkWjM^+ZBeF7Bf*F>N^VU(#IBpo6NviXfIl8)Yo`P%G+l=wbIl<>Yyxy02 z#B=-ap(~}fKfKs@`rtd|=la@k4&toQ+3K-0rTI8bL2VVn^%(!W&_7mb9pF?-9K_2q z538^zmHe}uNIdBAhK!c}1(?3FA)T1VN+@AEzkX9>>M|4ieMR)L6vxZ;S70ehIMisj z=zj>ZMa5#N_D6Ck?-295iIe1DzSjR5WCzwuxGta?&L&+lLJXS+1p%tM=d=Nit7eO2 zjHw*DnqeRLM|31-`O4jc5%~>Kb4frYzPZtKp^HuT7{_1xpn;evHCVmw3W&rWHw$NV ziVlv!?6(8v=LtKkL*1HTn8oc^)+*(QJ;-WB>^Q-tfG$>0wNxozv0m<6mA9%~V|^g> z&V^5V>)OXh-P@Rzhd$EpHvIZ)*5rF!bef>zUQ%a4deB0)mxON{;8Z24S18YLSn8Jx z 0: - t0 = time.time() - while time.time() < t0+timeout and tile == 0: - tile = self.downloader.getTile(numpy.floor(latitude), numpy.floor(longitude)) - if tile == 0: - time.sleep(0.1) - if tile == 0: - return None - self.tileDict[TileID] = tile - alt = tile.getAltitudeFromLatLon(latitude, longitude) - if self.database == 'geoscience': - alt = self.mappy.getAltitudeAtPoint(latitude, longitude) - return alt - - -if __name__ == "__main__": - - from optparse import OptionParser - parser = OptionParser("mp_elevation.py [options]") - parser.add_option("--lat", type='float', default=-35.052544, help="start latitude") - parser.add_option("--lon", type='float', default=149.509165, help="start longitude") - parser.add_option("--database", type='string', default='srtm', help="elevation database") - parser.add_option("--debug", action='store_true', help="enabled debugging") - - (opts, args) = parser.parse_args() - - EleModel = ElevationModel(opts.database, debug=opts.debug) - - lat = opts.lat - lon = opts.lon - - '''Do a few lat/long pairs to demonstrate the caching - Note the +0.000001 to the time. On faster PCs, the two time periods - may in fact be equal, so we add a little extra time on the end to account for this''' - t0 = time.time() - alt = EleModel.GetElevation(lat, lon, timeout=10) - if alt is None: - print("Tile not available") - sys.exit(1) - t1 = time.time()+.000001 - print("Altitude at (%.6f, %.6f) is %u m. Pulled at %.1f FPS" % (lat, lon, alt, 1/(t1-t0))) - - lat = opts.lat+0.001 - lon = opts.lon+0.001 - t0 = time.time() - alt = EleModel.GetElevation(lat, lon, timeout=10) - t1 = time.time()+.000001 - print("Altitude at (%.6f, %.6f) is %u m. Pulled at %.1f FPS" % (lat, lon, alt, 1/(t1-t0))) - - lat = opts.lat-0.001 - lon = opts.lon-0.001 - t0 = time.time() - alt = EleModel.GetElevation(lat, lon, timeout=10) - t1 = time.time()+.000001 - print("Altitude at (%.6f, %.6f) is %u m. Pulled at %.1f FPS" % (lat, lon, alt, 1/(t1-t0))) - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap.py deleted file mode 100755 index aa9a81bd4..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap.py +++ /dev/null @@ -1,230 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -''' -slipmap based on mp_tile -Andrew Tridgell -June 2012 -''' - -import functools -import math -import os, sys -import time - -try: - import cv2.cv as cv -except ImportError: - import cv - -from MAVProxy.modules.mavproxy_map import mp_elevation -from MAVProxy.modules.mavproxy_map import mp_tile -from MAVProxy.modules.lib import mp_util -from mp_slipmap_util import * - - -class MPSlipMap(): - ''' - a generic map viewer widget for use in mavproxy - ''' - def __init__(self, - title='SlipMap', - lat=-35.362938, - lon=149.165085, - width=800, - height=600, - ground_width=1000, - tile_delay=0.3, - service="MicrosoftSat", - max_zoom=19, - debug=False, - brightness=1.0, - elevation=False, - download=True): - import multiprocessing - - self.lat = lat - self.lon = lon - self.width = width - self.height = height - self.ground_width = ground_width - self.download = download - self.service = service - self.tile_delay = tile_delay - self.debug = debug - self.max_zoom = max_zoom - self.elevation = elevation - self.oldtext = None - self.brightness = brightness - - self.drag_step = 10 - - self.title = title - from ..lib.multiprocessing_queue import makeIPCQueue - self.event_queue = makeIPCQueue() - self.object_queue = makeIPCQueue() - self.close_window = multiprocessing.Semaphore() - self.close_window.acquire() - self.child = multiprocessing.Process(target=self.child_task) - self.child.start() - self._callbacks = set() - - - def child_task(self): - '''child process - this holds all the GUI elements''' - mp_util.child_close_fds() - - from ..lib import wx_processguard - from ..lib.wx_loader import wx - from mp_slipmap_ui import MPSlipMapFrame - - state = self - - self.mt = mp_tile.MPTile(download=self.download, - service=self.service, - tile_delay=self.tile_delay, - debug=self.debug, - max_zoom=self.max_zoom) - state.layers = {} - state.info = {} - state.need_redraw = True - - self.app = wx.App(False) - self.app.SetExitOnFrameDelete(True) - self.app.frame = MPSlipMapFrame(state=self) - self.app.frame.Show() - self.app.MainLoop() - - def close(self): - '''close the window''' - self.close_window.release() - count=0 - while self.child.is_alive() and count < 30: # 3 seconds to die... - time.sleep(0.1) #? - count+=1 - - if self.child.is_alive(): - self.child.terminate() - - self.child.join() - - def is_alive(self): - '''check if graph is still going''' - return self.child.is_alive() - - def add_object(self, obj): - '''add or update an object on the map''' - self.object_queue.put(obj) - - def remove_object(self, key): - '''remove an object on the map by key''' - self.object_queue.put(SlipRemoveObject(key)) - - def hide_object(self, key, hide=True): - '''hide an object on the map by key''' - self.object_queue.put(SlipHideObject(key, hide)) - - def set_position(self, key, latlon, layer=None, rotation=0): - '''move an object on the map''' - self.object_queue.put(SlipPosition(key, latlon, layer, rotation)) - - def event_count(self): - '''return number of events waiting to be processed''' - return self.event_queue.qsize() - - def get_event(self): - '''return next event or None''' - if self.event_queue.qsize() == 0: - return None - return self.event_queue.get() - - def add_callback(self, callback): - '''add a callback for events from the map''' - self._callbacks.add(callback) - - def check_events(self): - '''check for events, calling registered callbacks as needed''' - while self.event_count() > 0: - event = self.get_event() - for callback in self._callbacks: - callback(event) - - def icon(self, filename): - '''load an icon from the data directory''' - return mp_tile.mp_icon(filename) - -if __name__ == "__main__": - import multiprocessing - multiprocessing.freeze_support() - import time - - from optparse import OptionParser - parser = OptionParser("mp_slipmap.py [options]") - parser.add_option("--lat", type='float', default=-26.582218, help="start latitude") - parser.add_option("--lon", type='float', default=151.840113, help="start longitude") - parser.add_option("--service", default="MicrosoftSat", help="tile service") - parser.add_option("--offline", action='store_true', default=False, help="no download") - parser.add_option("--delay", type='float', default=0.3, help="tile download delay") - parser.add_option("--max-zoom", type='int', default=19, help="maximum tile zoom") - parser.add_option("--debug", action='store_true', default=False, help="show debug info") - parser.add_option("--boundary", default=None, help="show boundary") - parser.add_option("--mission", default=[], action='append', help="show mission") - parser.add_option("--thumbnail", default=None, help="show thumbnail") - parser.add_option("--icon", default=None, help="show icon") - parser.add_option("--flag", default=[], type='str', action='append', help="flag positions") - parser.add_option("--grid", default=False, action='store_true', help="add a UTM grid") - parser.add_option("--elevation", action='store_true', default=False, help="show elevation information") - parser.add_option("--verbose", action='store_true', default=False, help="show mount actions") - (opts, args) = parser.parse_args() - - sm = MPSlipMap(lat=opts.lat, - lon=opts.lon, - download=not opts.offline, - service=opts.service, - debug=opts.debug, - max_zoom=opts.max_zoom, - elevation=opts.elevation, - tile_delay=opts.delay) - - if opts.boundary: - boundary = mp_util.polygon_load(opts.boundary) - sm.add_object(SlipPolygon('boundary', boundary, layer=1, linewidth=2, colour=(0,255,0))) - - if opts.mission: - from pymavlink import mavwp - for file in opts.mission: - wp = mavwp.MAVWPLoader() - wp.load(file) - boundary = wp.polygon() - sm.add_object(SlipPolygon('mission-%s' % file, boundary, layer=1, linewidth=1, colour=(255,255,255))) - - if opts.grid: - sm.add_object(SlipGrid('grid', layer=3, linewidth=1, colour=(255,255,0))) - - if opts.thumbnail: - thumb = cv.LoadImage(opts.thumbnail) - sm.add_object(SlipThumbnail('thumb', (opts.lat,opts.lon), layer=1, img=thumb, border_width=2, border_colour=(255,0,0))) - - if opts.icon: - icon = cv.LoadImage(opts.icon) - sm.add_object(SlipIcon('icon', (opts.lat,opts.lon), icon, layer=3, rotation=90, follow=True)) - sm.set_position('icon', mp_util.gps_newpos(opts.lat,opts.lon, 180, 100), rotation=45) - sm.add_object(SlipInfoImage('detail', icon)) - sm.add_object(SlipInfoText('detail text', 'test text')) - - for flag in opts.flag: - (lat,lon) = flag.split(',') - icon = sm.icon('flag.png') - sm.add_object(SlipIcon('icon - %s' % str(flag), (float(lat),float(lon)), icon, layer=3, rotation=0, follow=False)) - - while sm.is_alive(): - while sm.event_count() > 0: - obj = sm.get_event() - if not opts.verbose: - continue - if isinstance(obj, SlipMouseEvent): - print("Mouse event at %s (X/Y=%u/%u) for %u objects" % (obj.latlon, - obj.event.X, obj.event.Y, - len(obj.selected))) - if isinstance(obj, SlipKeyEvent): - print("Key event at %s for %u objects" % (obj.latlon, len(obj.selected))) - time.sleep(0.1) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py deleted file mode 100644 index 0184f4fce..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_ui.py +++ /dev/null @@ -1,577 +0,0 @@ -from MAVProxy.modules.lib.mp_menu import * -from ..lib.wx_loader import wx -import mp_elevation -import os -import functools -from mp_slipmap_util import * - -try: - import cv2.cv as cv -except ImportError: - import cv - -class MPSlipMapFrame(wx.Frame): - """ The main frame of the viewer - """ - def __init__(self, state): - wx.Frame.__init__(self, None, wx.ID_ANY, state.title) - self.state = state - state.frame = self - state.grid = True - state.follow = True - state.download = True - state.popup_object = None - state.popup_latlon = None - state.popup_started = False - state.default_popup = None - state.panel = MPSlipMapPanel(self, state) - self.Bind(wx.EVT_IDLE, self.on_idle) - self.Bind(wx.EVT_SIZE, state.panel.on_size) - - # create the View menu - self.menu = MPMenuTop([MPMenuSubMenu('View', - items=[MPMenuCheckbox('Follow\tCtrl+F', 'Follow Aircraft', 'toggleFollow', - checked=state.follow), - MPMenuCheckbox('Grid\tCtrl+G', 'Enable Grid', 'toggleGrid', - checked=state.grid), - MPMenuItem('Goto\tCtrl+P', 'Goto Position', 'gotoPosition'), - MPMenuItem('Brightness +\tCtrl+B', 'Increase Brightness', 'increaseBrightness'), - MPMenuItem('Brightness -\tCtrl+Shift+B', 'Decrease Brightness', 'decreaseBrightness'), - MPMenuCheckbox('Download Tiles\tCtrl+D', 'Enable Tile Download', 'toggleDownload', - checked=state.download), - MPMenuRadio('Service', 'Select map service', - returnkey='setService', - selected=state.mt.get_service(), - items=state.mt.get_service_list())])]) - self.SetMenuBar(self.menu.wx_menu()) - self.Bind(wx.EVT_MENU, self.on_menu) - - def on_menu(self, event): - '''handle menu selection''' - state = self.state - # see if it is a popup menu - if state.popup_object is not None: - obj = state.popup_object - ret = obj.popup_menu.find_selected(event) - if ret is not None: - ret.call_handler() - state.event_queue.put(SlipMenuEvent(state.popup_latlon, event, - [SlipObjectSelection(obj.key, 0, obj.layer, obj.selection_info())], - ret)) - state.popup_object = None - state.popup_latlon = None - if state.default_popup is not None: - ret = state.default_popup.popup.find_selected(event) - if ret is not None: - ret.call_handler() - state.event_queue.put(SlipMenuEvent(state.popup_latlon, event, [], ret)) - - # otherwise a normal menu - ret = self.menu.find_selected(event) - if ret is None: - return - ret.call_handler() - if ret.returnkey == 'toggleGrid': - state.grid = ret.IsChecked() - elif ret.returnkey == 'toggleFollow': - state.follow = ret.IsChecked() - elif ret.returnkey == 'toggleDownload': - state.download = ret.IsChecked() - elif ret.returnkey == 'setService': - state.mt.set_service(ret.get_choice()) - elif ret.returnkey == 'gotoPosition': - state.panel.enter_position() - elif ret.returnkey == 'increaseBrightness': - state.brightness *= 1.25 - elif ret.returnkey == 'decreaseBrightness': - state.brightness /= 1.25 - state.need_redraw = True - - def find_object(self, key, layers): - '''find an object to be modified''' - state = self.state - - if layers is None: - layers = state.layers.keys() - for layer in layers: - if key in state.layers[layer]: - return state.layers[layer][key] - return None - - def follow(self, object): - '''follow an object on the map''' - state = self.state - (px,py) = state.panel.pixmapper(object.latlon) - ratio = 0.25 - if (px > ratio*state.width and - px < (1.0-ratio)*state.width and - py > ratio*state.height and - py < (1.0-ratio)*state.height): - # we're in the mid part of the map already, don't move - return - - if not state.follow: - # the user has disabled following - return - - (lat, lon) = object.latlon - state.panel.re_center(state.width/2, state.height/2, lat, lon) - - def add_object(self, obj): - '''add an object to a later''' - state = self.state - if not obj.layer in state.layers: - # its a new layer - state.layers[obj.layer] = {} - state.layers[obj.layer][obj.key] = obj - state.need_redraw = True - - def remove_object(self, key): - '''remove an object by key from all layers''' - state = self.state - for layer in state.layers: - state.layers[layer].pop(key, None) - state.need_redraw = True - - def on_idle(self, event): - '''prevent the main loop spinning too fast''' - state = self.state - - if state.close_window.acquire(False): - self.state.app.ExitMainLoop() - - # receive any display objects from the parent - obj = None - - while not state.object_queue.empty(): - obj = state.object_queue.get() - - if isinstance(obj, SlipObject): - self.add_object(obj) - - if isinstance(obj, SlipPosition): - # move an object - object = self.find_object(obj.key, obj.layer) - if object is not None: - object.update_position(obj) - if getattr(object, 'follow', False): - self.follow(object) - state.need_redraw = True - - if isinstance(obj, SlipDefaultPopup): - state.default_popup = obj - - if isinstance(obj, SlipInformation): - # see if its a existing one or a new one - if obj.key in state.info: -# print('update %s' % str(obj.key)) - state.info[obj.key].update(obj) - else: -# print('add %s' % str(obj.key)) - state.info[obj.key] = obj - state.need_redraw = True - - if isinstance(obj, SlipCenter): - # move center - (lat,lon) = obj.latlon - state.panel.re_center(state.width/2, state.height/2, lat, lon) - state.need_redraw = True - - if isinstance(obj, SlipBrightness): - # set map brightness - state.brightness = obj.brightness - state.need_redraw = True - - if isinstance(obj, SlipClearLayer): - # remove all objects from a layer - if obj.layer in state.layers: - state.layers.pop(obj.layer) - state.need_redraw = True - - if isinstance(obj, SlipRemoveObject): - # remove an object by key - for layer in state.layers: - if obj.key in state.layers[layer]: - state.layers[layer].pop(obj.key) - state.need_redraw = True - - if isinstance(obj, SlipHideObject): - # hide an object by key - for layer in state.layers: - if obj.key in state.layers[layer]: - state.layers[layer][obj.key].set_hidden(obj.hide) - state.need_redraw = True - - if obj is None: - time.sleep(0.05) - - -class MPSlipMapPanel(wx.Panel): - """ The image panel - """ - def __init__(self, parent, state): - from MAVProxy.modules.lib import mp_widgets - - wx.Panel.__init__(self, parent) - self.state = state - self.img = None - self.map_img = None - self.redraw_timer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.on_redraw_timer, self.redraw_timer) - self.Bind(wx.EVT_SET_FOCUS, self.on_focus) - self.redraw_timer.Start(200) - self.mouse_pos = None - self.mouse_down = None - self.click_pos = None - self.last_click_pos = None - if state.elevation: - self.ElevationMap = mp_elevation.ElevationModel() - - self.mainSizer = wx.BoxSizer(wx.VERTICAL) - self.SetSizer(self.mainSizer) - - # display for lat/lon/elevation - self.position = wx.TextCtrl(self, style=wx.TE_MULTILINE|wx.TE_READONLY) - if os.name == 'nt': - self.position.SetValue("line 1\nline 2\n") - size = self.position.GetBestSize() - self.position.SetMinSize(size) - self.position.SetValue("") - else: - textsize = tuple(self.position.GetFullTextExtent('line 1\nline 2\n')[0:2]) - self.position.SetMinSize(textsize) - - self.mainSizer.AddSpacer(2) - self.mainSizer.Add(self.position, flag=wx.LEFT | wx.BOTTOM | wx.GROW, border=0) - self.position.Bind(wx.EVT_SET_FOCUS, self.on_focus) - - # a place to put control flags - self.controls = wx.BoxSizer(wx.HORIZONTAL) - self.mainSizer.Add(self.controls, 0, flag=wx.ALIGN_LEFT | wx.TOP | wx.GROW) - self.mainSizer.AddSpacer(2) - - # a place to put information like image details - self.information = wx.BoxSizer(wx.HORIZONTAL) - self.mainSizer.Add(self.information, 0, flag=wx.ALIGN_LEFT | wx.TOP | wx.GROW) - self.mainSizer.AddSpacer(2) - - # panel for the main map image - self.imagePanel = mp_widgets.ImagePanel(self, wx.EmptyImage(state.width,state.height)) - self.mainSizer.Add(self.imagePanel, flag=wx.GROW, border=5) - self.imagePanel.Bind(wx.EVT_MOUSE_EVENTS, self.on_mouse) - self.imagePanel.Bind(wx.EVT_KEY_DOWN, self.on_key_down) - self.imagePanel.Bind(wx.EVT_MOUSEWHEEL, self.on_mouse_wheel) - - # a function to convert from (lat,lon) to (px,py) on the map - self.pixmapper = functools.partial(self.pixel_coords) - - self.last_view = None - self.redraw_map() - state.frame.Fit() - - def on_focus(self, event): - '''called when the panel gets focus''' - self.imagePanel.SetFocus() - - def current_view(self): - '''return a tuple representing the current view''' - state = self.state - return (state.lat, state.lon, state.width, state.height, - state.ground_width, state.mt.tiles_pending()) - - def coordinates(self, x, y): - '''return coordinates of a pixel in the map''' - state = self.state - return state.mt.coord_from_area(x, y, state.lat, state.lon, state.width, state.ground_width) - - def re_center(self, x, y, lat, lon): - '''re-center view for pixel x,y''' - state = self.state - if lat is None or lon is None: - return - (lat2,lon2) = self.coordinates(x, y) - distance = mp_util.gps_distance(lat2, lon2, lat, lon) - bearing = mp_util.gps_bearing(lat2, lon2, lat, lon) - (state.lat, state.lon) = mp_util.gps_newpos(state.lat, state.lon, bearing, distance) - - def change_zoom(self, zoom): - '''zoom in or out by zoom factor, keeping centered''' - state = self.state - if self.mouse_pos: - (x,y) = (self.mouse_pos.x, self.mouse_pos.y) - else: - (x,y) = (state.width/2, state.height/2) - (lat,lon) = self.coordinates(x, y) - state.ground_width *= zoom - # limit ground_width to sane values - state.ground_width = max(state.ground_width, 20) - state.ground_width = min(state.ground_width, 20000000) - self.re_center(x,y, lat, lon) - - def enter_position(self): - '''enter new position''' - state = self.state - dlg = wx.TextEntryDialog(self, 'Enter new position', 'Position') - dlg.SetValue("%f %f" % (state.lat, state.lon)) - if dlg.ShowModal() == wx.ID_OK: - latlon = dlg.GetValue().split() - dlg.Destroy() - state.lat = float(latlon[0]) - state.lon = float(latlon[1]) - self.re_center(state.width/2,state.height/2, state.lat, state.lon) - self.redraw_map() - - def update_position(self): - '''update position text''' - state = self.state - pos = self.mouse_pos - newtext = '' - alt = 0 - if pos is not None: - (lat,lon) = self.coordinates(pos.x, pos.y) - newtext += 'Cursor: %f %f (%s)' % (lat, lon, mp_util.latlon_to_grid((lat, lon))) - if state.elevation: - alt = self.ElevationMap.GetElevation(lat, lon) - if alt is not None: - newtext += ' %.1fm' % alt - state.mt.set_download(state.download) - pending = 0 - if state.download: - pending = state.mt.tiles_pending() - if pending: - newtext += ' Map Downloading %u ' % pending - if alt == -1: - newtext += ' SRTM Downloading ' - newtext += '\n' - if self.click_pos is not None: - newtext += 'Click: %f %f (%s %s) (%s)' % (self.click_pos[0], self.click_pos[1], - mp_util.degrees_to_dms(self.click_pos[0]), - mp_util.degrees_to_dms(self.click_pos[1]), - mp_util.latlon_to_grid(self.click_pos)) - if self.last_click_pos is not None: - distance = mp_util.gps_distance(self.last_click_pos[0], self.last_click_pos[1], - self.click_pos[0], self.click_pos[1]) - bearing = mp_util.gps_bearing(self.last_click_pos[0], self.last_click_pos[1], - self.click_pos[0], self.click_pos[1]) - newtext += ' Distance: %.1fm Bearing %.1f' % (distance, bearing) - if newtext != state.oldtext: - self.position.Clear() - self.position.WriteText(newtext) - state.oldtext = newtext - - def pixel_coords(self, latlon, reverse=False): - '''return pixel coordinates in the map image for a (lat,lon) - if reverse is set, then return lat/lon for a pixel coordinate - ''' - state = self.state - if reverse: - (x,y) = latlon - return self.coordinates(x,y) - (lat,lon) = (latlon[0], latlon[1]) - return state.mt.coord_to_pixel(state.lat, state.lon, state.width, state.ground_width, lat, lon) - - def draw_objects(self, objects, bounds, img): - '''draw objects on the image''' - keys = objects.keys() - keys.sort() - for k in keys: - obj = objects[k] - bounds2 = obj.bounds() - if bounds2 is None or mp_util.bounds_overlap(bounds, bounds2): - obj.draw(img, self.pixmapper, bounds) - - def redraw_map(self): - '''redraw the map with current settings''' - state = self.state - - view_same = (self.last_view and self.map_img and self.last_view == self.current_view()) - - if view_same and not state.need_redraw: - return - - # get the new map - self.map_img = state.mt.area_to_image(state.lat, state.lon, - state.width, state.height, state.ground_width) - if state.brightness != 1.0: - cv.ConvertScale(self.map_img, self.map_img, scale=state.brightness) - - - # find display bounding box - (lat2,lon2) = self.coordinates(state.width-1, state.height-1) - bounds = (lat2, state.lon, state.lat-lat2, lon2-state.lon) - - # get the image - img = cv.CloneImage(self.map_img) - - # possibly draw a grid - if state.grid: - SlipGrid('grid', layer=3, linewidth=1, colour=(255,255,0)).draw(img, self.pixmapper, bounds) - - # draw layer objects - keys = state.layers.keys() - keys.sort() - for k in keys: - self.draw_objects(state.layers[k], bounds, img) - - # draw information objects - for key in state.info: - state.info[key].draw(state.panel, state.panel.information) - - # display the image - self.img = wx.EmptyImage(state.width,state.height) - self.img.SetData(img.tostring()) - self.imagePanel.set_image(self.img) - - self.update_position() - - self.mainSizer.Fit(self) - self.Refresh() - self.last_view = self.current_view() - self.SetFocus() - state.need_redraw = False - - def on_redraw_timer(self, event): - '''the redraw timer ensures we show new map tiles as they - are downloaded''' - state = self.state - self.redraw_map() - - def on_size(self, event): - '''handle window size changes''' - state = self.state - size = event.GetSize() - state.width = size.width - state.height = size.height - self.redraw_map() - - def on_mouse_wheel(self, event): - '''handle mouse wheel zoom changes''' - state = self.state - rotation = event.GetWheelRotation() / event.GetWheelDelta() - if rotation > 0: - zoom = 1.0/(1.1 * rotation) - elif rotation < 0: - zoom = 1.1 * (-rotation) - self.change_zoom(zoom) - self.redraw_map() - - def selected_objects(self, pos): - '''return a list of matching objects for a position''' - state = self.state - selected = [] - (px, py) = pos - for layer in state.layers: - for key in state.layers[layer]: - obj = state.layers[layer][key] - distance = obj.clicked(px, py) - if distance is not None: - selected.append(SlipObjectSelection(key, distance, layer, extra_info=obj.selection_info())) - selected.sort(key=lambda c: c.distance) - return selected - - def show_popup(self, selected, pos): - '''show popup menu for an object''' - state = self.state - if selected.popup_menu is not None: - import copy - popup_menu = selected.popup_menu - if state.default_popup.popup is not None and state.default_popup.combine: - popup_menu = copy.deepcopy(popup_menu) - popup_menu.add(MPMenuSeparator()) - popup_menu.combine(state.default_popup.popup) - wx_menu = popup_menu.wx_menu() - state.frame.PopupMenu(wx_menu, pos) - - def show_default_popup(self, pos): - '''show default popup menu''' - state = self.state - if state.default_popup.popup is not None: - wx_menu = state.default_popup.popup.wx_menu() - state.frame.PopupMenu(wx_menu, pos) - - def on_mouse(self, event): - '''handle mouse events''' - state = self.state - pos = event.GetPosition() - if event.Leaving(): - self.mouse_pos = None - else: - self.mouse_pos = pos - self.update_position() - - if event.ButtonIsDown(wx.MOUSE_BTN_ANY) or event.ButtonUp(): - # send any event with a mouse button to the parent - latlon = self.coordinates(pos.x, pos.y) - selected = self.selected_objects(pos) - state.event_queue.put(SlipMouseEvent(latlon, event, selected)) - if event.RightDown(): - state.popup_object = None - state.popup_latlon = None - if len(selected) > 0: - obj = state.layers[selected[0].layer][selected[0].objkey] - if obj.popup_menu is not None: - state.popup_object = obj - state.popup_latlon = latlon - self.show_popup(obj, pos) - state.popup_started = True - if not state.popup_started and state.default_popup is not None: - state.popup_latlon = latlon - self.show_default_popup(pos) - state.popup_started = True - - if not event.ButtonIsDown(wx.MOUSE_BTN_RIGHT): - state.popup_started = False - - if event.LeftDown() or event.RightDown(): - self.mouse_down = pos - self.last_click_pos = self.click_pos - self.click_pos = self.coordinates(pos.x, pos.y) - - if event.Dragging() and event.ButtonIsDown(wx.MOUSE_BTN_LEFT): - # drag map to new position - newpos = pos - if self.mouse_down and newpos: - dx = (self.mouse_down.x - newpos.x) - dy = -(self.mouse_down.y - newpos.y) - pdist = math.sqrt(dx**2 + dy**2) - if pdist > state.drag_step: - bearing = math.degrees(math.atan2(dx, dy)) - distance = (state.ground_width/float(state.width)) * pdist - newlatlon = mp_util.gps_newpos(state.lat, state.lon, bearing, distance) - (state.lat, state.lon) = newlatlon - self.mouse_down = newpos - self.redraw_map() - - def clear_thumbnails(self): - '''clear all thumbnails from the map''' - state = self.state - for l in state.layers: - keys = state.layers[l].keys()[:] - for key in keys: - if (isinstance(state.layers[l][key], SlipThumbnail) - and not isinstance(state.layers[l][key], SlipIcon)): - state.layers[l].pop(key) - - def on_key_down(self, event): - '''handle keyboard input''' - state = self.state - - # send all key events to the parent - if self.mouse_pos: - latlon = self.coordinates(self.mouse_pos.x, self.mouse_pos.y) - selected = self.selected_objects(self.mouse_pos) - state.event_queue.put(SlipKeyEvent(latlon, event, selected)) - - c = event.GetUniChar() - if c == ord('+') or (c == ord('=') and event.ShiftDown()): - self.change_zoom(1.0/1.2) - event.Skip() - elif c == ord('-'): - self.change_zoom(1.2) - event.Skip() - elif c == ord('G'): - self.enter_position() - event.Skip() - elif c == ord('C'): - self.clear_thumbnails() - event.Skip() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_util.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_util.py deleted file mode 100644 index 68223058e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_slipmap_util.py +++ /dev/null @@ -1,554 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -''' -slipmap based on mp_tile -Andrew Tridgell -June 2012 -''' - -import functools -import math -import os, sys -import time - -try: - import cv2.cv as cv -except ImportError: - import cv - -from MAVProxy.modules.mavproxy_map import mp_elevation -from MAVProxy.modules.mavproxy_map import mp_tile -from MAVProxy.modules.lib import mp_util - - -class SlipObject: - '''an object to display on the map''' - def __init__(self, key, layer, popup_menu=None): - self.key = key - self.layer = layer - self.latlon = None - self.popup_menu = popup_menu - self.hidden = False - - def clip(self, px, py, w, h, img): - '''clip an area for display on the map''' - sx = 0 - sy = 0 - - if px < 0: - sx = -px - w += px - px = 0 - if py < 0: - sy = -py - h += py - py = 0 - if px+w > img.width: - w = img.width - px - if py+h > img.height: - h = img.height - py - return (px, py, sx, sy, w, h) - - def draw(self, img, pixmapper, bounds): - '''default draw method''' - pass - - def update_position(self, newpos): - '''update object position''' - if getattr(self, 'trail', None) is not None: - self.trail.update_position(newpos) - self.latlon = newpos.latlon - if hasattr(self, 'rotation'): - self.rotation = newpos.rotation - - def clicked(self, px, py): - '''check if a click on px,py should be considered a click - on the object. Return None if definately not a click, - otherwise return the distance of the click, smaller being nearer - ''' - return None - - def selection_info(self): - '''extra selection information sent when object is selected''' - return None - - def bounds(self): - '''return bounding box or None''' - return None - - def set_hidden(self, hidden): - '''set hidden attribute''' - self.hidden = hidden - -class SlipLabel(SlipObject): - '''a text label to display on the map''' - def __init__(self, key, point, label, layer, colour): - SlipObject.__init__(self, key, layer) - self.point = point - self.colour = colour - self.label = label - - def draw_label(self, img, pixmapper): - pix1 = pixmapper(self.point) - cv.PutText(img, self.label, pix1, cv.InitFont(cv.CV_FONT_HERSHEY_SIMPLEX, 1.0,1.0), self.colour) - - def draw(self, img, pixmapper, bounds): - if self.hidden: - return - self.draw_label(img, pixmapper) - - def bounds(self): - '''return bounding box''' - if self.hidden: - return None - return (self.point[0], self.point[1], 0, 0) - -class SlipCircle(SlipObject): - '''a circle to display on the map''' - def __init__(self, key, layer, latlon, radius, color, linewidth, popup_menu=None): - SlipObject.__init__(self, key, layer, popup_menu=popup_menu) - self.latlon = latlon - self.radius = float(radius) - self.color = color - self.linewidth = linewidth - - def draw(self, img, pixmapper, bounds): - if self.hidden: - return - center_px = pixmapper(self.latlon) - #figure out pixels per meter - ref_pt = (self.latlon[0] + 1.0, self.latlon[1]) - dis = mp_util.gps_distance(self.latlon[0], self.latlon[1], ref_pt[0], ref_pt[1]) - ref_px = pixmapper(ref_pt) - dis_px = math.sqrt(float(center_px[1] - ref_px[1]) ** 2.0) - pixels_per_meter = dis_px / dis - - cv.Circle(img, center_px, int(self.radius * pixels_per_meter), self.color, self.linewidth) - - def bounds(self): - '''return bounding box''' - if self.hidden: - return None - return (self.latlon[0], self.latlon[1], 0, 0) - -class SlipPolygon(SlipObject): - '''a polygon to display on the map''' - def __init__(self, key, points, layer, colour, linewidth, popup_menu=None): - SlipObject.__init__(self, key, layer, popup_menu=popup_menu) - self.points = points - self.colour = colour - self.linewidth = linewidth - self._bounds = mp_util.polygon_bounds(self.points) - self._pix_points = [] - self._selected_vertex = None - - def bounds(self): - '''return bounding box''' - if self.hidden: - return None - return self._bounds - - def draw_line(self, img, pixmapper, pt1, pt2, colour, linewidth): - '''draw a line on the image''' - pix1 = pixmapper(pt1) - pix2 = pixmapper(pt2) - clipped = cv.ClipLine((img.width, img.height), pix1, pix2) - if clipped is None: - if len(self._pix_points) == 0: - self._pix_points.append(None) - self._pix_points.append(None) - return - (pix1, pix2) = clipped - cv.Line(img, pix1, pix2, colour, linewidth) - cv.Circle(img, pix2, linewidth*2, colour) - if len(self._pix_points) == 0: - self._pix_points.append(pix1) - self._pix_points.append(pix2) - - def draw(self, img, pixmapper, bounds): - '''draw a polygon on the image''' - if self.hidden: - return - self._pix_points = [] - for i in range(len(self.points)-1): - if len(self.points[i]) > 2: - colour = self.points[i][2] - else: - colour = self.colour - self.draw_line(img, pixmapper, self.points[i], self.points[i+1], - colour, self.linewidth) - - def clicked(self, px, py): - '''see if the polygon has been clicked on. - Consider it clicked if the pixel is within 6 of the point - ''' - if self.hidden: - return None - for i in range(len(self._pix_points)): - if self._pix_points[i] is None: - continue - (pixx,pixy) = self._pix_points[i] - if abs(px - pixx) < 6 and abs(py - pixy) < 6: - self._selected_vertex = i - return math.sqrt((px - pixx)**2 + (py - pixy)**2) - return None - - def selection_info(self): - '''extra selection information sent when object is selected''' - return self._selected_vertex - - -class SlipGrid(SlipObject): - '''a map grid''' - def __init__(self, key, layer, colour, linewidth): - SlipObject.__init__(self, key, layer, ) - self.colour = colour - self.linewidth = linewidth - - def draw_line(self, img, pixmapper, pt1, pt2, colour, linewidth): - '''draw a line on the image''' - pix1 = pixmapper(pt1) - pix2 = pixmapper(pt2) - clipped = cv.ClipLine((img.width, img.height), pix1, pix2) - if clipped is None: - return - (pix1, pix2) = clipped - cv.Line(img, pix1, pix2, colour, linewidth) - cv.Circle(img, pix2, linewidth*2, colour) - - def draw(self, img, pixmapper, bounds): - '''draw a polygon on the image''' - if self.hidden: - return - (x,y,w,h) = bounds - spacing = 1000 - while True: - start = mp_util.latlon_round((x,y), spacing) - dist = mp_util.gps_distance(x,y,x+w,y+h) - count = int(dist / spacing) - if count < 2: - spacing /= 10 - elif count > 50: - spacing *= 10 - else: - break - - for i in range(count*2+2): - pos1 = mp_util.gps_newpos(start[0], start[1], 90, i*spacing) - pos3 = mp_util.gps_newpos(pos1[0], pos1[1], 0, 3*count*spacing) - self.draw_line(img, pixmapper, pos1, pos3, self.colour, self.linewidth) - - pos1 = mp_util.gps_newpos(start[0], start[1], 0, i*spacing) - pos3 = mp_util.gps_newpos(pos1[0], pos1[1], 90, 3*count*spacing) - self.draw_line(img, pixmapper, pos1, pos3, self.colour, self.linewidth) - -class SlipThumbnail(SlipObject): - '''a thumbnail to display on the map''' - def __init__(self, key, latlon, layer, img, - border_colour=None, border_width=0, - popup_menu=None): - SlipObject.__init__(self, key, layer, popup_menu=popup_menu) - self.latlon = latlon - self._img = None - self.imgstr = img.tostring() - self.width = img.width - self.height = img.height - self.border_width = border_width - self.border_colour = border_colour - self.posx = -1 - self.posy = -1 - - def bounds(self): - '''return bounding box''' - if self.hidden: - return None - return (self.latlon[0], self.latlon[1], 0, 0) - - def img(self): - '''return a cv image for the thumbnail''' - if self._img is not None: - return self._img - self._img = cv.CreateImage((self.width, self.height), 8, 3) - cv.SetData(self._img, self.imgstr) - cv.CvtColor(self._img, self._img, cv.CV_BGR2RGB) - if self.border_width and self.border_colour is not None: - cv.Rectangle(self._img, (0, 0), (self.width-1, self.height-1), - self.border_colour, self.border_width) - return self._img - - def draw(self, img, pixmapper, bounds): - '''draw the thumbnail on the image''' - if self.hidden: - return - thumb = self.img() - (px,py) = pixmapper(self.latlon) - - # find top left - px -= thumb.width/2 - py -= thumb.height/2 - w = thumb.width - h = thumb.height - - (px, py, sx, sy, w, h) = self.clip(px, py, w, h, img) - - cv.SetImageROI(thumb, (sx, sy, w, h)) - cv.SetImageROI(img, (px, py, w, h)) - cv.Copy(thumb, img) - cv.ResetImageROI(img) - cv.ResetImageROI(thumb) - - # remember where we placed it for clicked() - self.posx = px+w/2 - self.posy = py+h/2 - - def clicked(self, px, py): - '''see if the image has been clicked on''' - if self.hidden: - return None - if (abs(px - self.posx) > self.width/2 or - abs(py - self.posy) > self.height/2): - return None - return math.sqrt((px-self.posx)**2 + (py-self.posy)**2) - -class SlipTrail: - '''trail information for a moving icon''' - def __init__(self, timestep=0.2, colour=(255,255,0), count=60, points=[]): - self.timestep = timestep - self.colour = colour - self.count = count - self.points = points - self.last_time = time.time() - - def update_position(self, newpos): - '''update trail''' - tnow = time.time() - if tnow >= self.last_time + self.timestep: - self.points.append(newpos.latlon) - self.last_time = tnow - while len(self.points) > self.count: - self.points.pop(0) - - def draw(self, img, pixmapper, bounds): - '''draw the trail''' - for p in self.points: - (px,py) = pixmapper(p) - if px >= 0 and py >= 0 and px < img.width and py < img.height: - cv.Circle(img, (px,py), 1, self.colour) - - -class SlipIcon(SlipThumbnail): - '''a icon to display on the map''' - def __init__(self, key, latlon, img, layer=1, rotation=0, - follow=False, trail=None, popup_menu=None): - SlipThumbnail.__init__(self, key, latlon, layer, img, popup_menu=popup_menu) - self.rotation = rotation - self.follow = follow - self.trail = trail - - def img(self): - '''return a cv image for the icon''' - SlipThumbnail.img(self) - - if self.rotation: - # rotate the image - mat = cv.CreateMat(2, 3, cv.CV_32FC1) - cv.GetRotationMatrix2D((self.width/2,self.height/2), - -self.rotation, 1.0, mat) - self._rotated = cv.CloneImage(self._img) - cv.WarpAffine(self._img, self._rotated, mat) - else: - self._rotated = self._img - return self._rotated - - def draw(self, img, pixmapper, bounds): - '''draw the icon on the image''' - - if self.hidden: - return - - if self.trail is not None: - self.trail.draw(img, pixmapper, bounds) - - icon = self.img() - (px,py) = pixmapper(self.latlon) - - # find top left - px -= icon.width/2 - py -= icon.height/2 - w = icon.width - h = icon.height - - (px, py, sx, sy, w, h) = self.clip(px, py, w, h, img) - - cv.SetImageROI(icon, (sx, sy, w, h)) - cv.SetImageROI(img, (px, py, w, h)) - cv.Add(icon, img, img) - cv.ResetImageROI(img) - cv.ResetImageROI(icon) - - # remember where we placed it for clicked() - self.posx = px+w/2 - self.posy = py+h/2 - - -class SlipPosition: - '''an position object to move an existing object on the map''' - def __init__(self, key, latlon, layer=None, rotation=0): - self.key = key - self.layer = layer - self.latlon = latlon - self.rotation = rotation - -class SlipCenter: - '''an object to move the view center''' - def __init__(self, latlon): - self.latlon = latlon - -class SlipBrightness: - '''an object to change map brightness''' - def __init__(self, brightness): - self.brightness = brightness - -class SlipClearLayer: - '''remove all objects in a layer''' - def __init__(self, layer): - self.layer = layer - -class SlipRemoveObject: - '''remove an object by key''' - def __init__(self, key): - self.key = key - -class SlipHideObject: - '''hide an object by key''' - def __init__(self, key, hide): - self.key = key - self.hide = hide - - -class SlipInformation: - '''an object to display in the information box''' - def __init__(self, key): - self.key = key - - def draw(self, parent, box): - '''default draw method''' - pass - - def update(self, newinfo): - '''update the information''' - pass - -class SlipDefaultPopup: - '''an object to hold a default popup menu''' - def __init__(self, popup, combine=False): - self.popup = popup - self.combine = combine - -class SlipInfoImage(SlipInformation): - '''an image to display in the info box''' - def __init__(self, key, img): - SlipInformation.__init__(self, key) - self.imgstr = img.tostring() - self.width = img.width - self.height = img.height - self.imgpanel = None - - def img(self): - '''return a wx image''' - import wx - img = wx.EmptyImage(self.width, self.height) - img.SetData(self.imgstr) - return img - - def draw(self, parent, box): - '''redraw the image''' - import wx - from MAVProxy.modules.lib import mp_widgets - if self.imgpanel is None: - self.imgpanel = mp_widgets.ImagePanel(parent, self.img()) - box.Add(self.imgpanel, flag=wx.LEFT, border=0) - box.Layout() - - def update(self, newinfo): - '''update the image''' - self.imgstr = newinfo.imgstr - self.width = newinfo.width - self.height = newinfo.height - if self.imgpanel is not None: - self.imgpanel.set_image(self.img()) - - -class SlipInfoText(SlipInformation): - '''text to display in the info box''' - def __init__(self, key, text): - SlipInformation.__init__(self, key) - self.text = text - self.textctrl = None - - def _resize(self): - '''calculate and set text size, handling multi-line''' - lines = self.text.split('\n') - xsize, ysize = 0, 0 - for line in lines: - size = self.textctrl.GetTextExtent(line) - xsize = max(xsize, size[0]) - ysize = ysize + size[1] - xsize = int(xsize*1.2) - self.textctrl.SetSize((xsize, ysize)) - self.textctrl.SetMinSize((xsize, ysize)) - - - def draw(self, parent, box): - '''redraw the text''' - import wx - if self.textctrl is None: - self.textctrl = wx.TextCtrl(parent, style=wx.TE_MULTILINE|wx.TE_READONLY) - self.textctrl.WriteText(self.text) - self._resize() - box.Add(self.textctrl, flag=wx.LEFT, border=0) - box.Layout() - - def update(self, newinfo): - '''update the image''' - self.text = newinfo.text - if self.textctrl is not None: - self.textctrl.Clear() - self.textctrl.WriteText(self.text) - self._resize() - -class SlipObjectSelection: - '''description of a object under the cursor during an event''' - def __init__(self, objkey, distance, layer, extra_info=None): - self.distance = distance - self.objkey = objkey - self.layer = layer - self.extra_info = extra_info - -class SlipEvent: - '''an event sent to the parent. - - latlon = (lat,lon) of mouse on map - event = wx event - objkeys = list of SlipObjectSelection selections - ''' - def __init__(self, latlon, event, selected): - self.latlon = latlon - self.event = mp_util.object_container(event) - self.selected = selected - -class SlipMouseEvent(SlipEvent): - '''a mouse event sent to the parent''' - def __init__(self, latlon, event, selected): - SlipEvent.__init__(self, latlon, event, selected) - -class SlipKeyEvent(SlipEvent): - '''a key event sent to the parent''' - def __init__(self, latlon, event, selected): - SlipEvent.__init__(self, latlon, event, selected) - -class SlipMenuEvent(SlipEvent): - '''a menu event sent to the parent''' - def __init__(self, latlon, event, selected, menuitem): - SlipEvent.__init__(self, latlon, event, selected) - self.menuitem = menuitem diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_tile.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_tile.py deleted file mode 100755 index 1707f6e68..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/mp_tile.py +++ /dev/null @@ -1,618 +0,0 @@ -#!/usr/bin/env python -''' -access satellite map tile database - -some functions are based on code from mapUtils.py in gmapcatcher - -Andrew Tridgell -May 2012 -released under GNU GPL v3 or later -''' - -import collections -import errno -import hashlib -import urllib2 -import math -import threading -import os -import sys -import string -import time - -try: - import cv2.cv as cv -except ImportError: - import cv - -from MAVProxy.modules.lib import mp_util - -class TileException(Exception): - '''tile error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - -TILE_SERVICES = { - # thanks to http://go2log.com/2011/09/26/fetching-tiles-for-offline-map/ - # for the URL mapping info - "GoogleSat" : "https://khm${GOOG_DIGIT}.google.com/kh/v=157&hl=pt-PT&x=${X}&y=${Y}&z=${ZOOM}&s=${GALILEO}", - "GoogleMap" : "https://mt${GOOG_DIGIT}.google.com/vt/lyrs=m@132&hl=pt-PT&x=${X}&y=${Y}&z=${ZOOM}&s=${GALILEO}", - "GoogleTer" : "https://mt${GOOG_DIGIT}.google.com/vt/v=t@132,r@249&hl=pt-PT&x=${X}&y=${Y}&z=${ZOOM}&s=${GALILEO}", - "GoogleChina" : "http://mt${GOOG_DIGIT}.google.cn/vt/lyrs=m@121&hl=en&gl=cn&x=${X}&y=${Y}&z=${ZOOM}&s=${GALILEO}", - "MicrosoftBrMap" : "http://imakm${MS_DIGITBR}.maplink3.com.br/maps.ashx?v=${QUAD}|t&call=2.2.4", - "MicrosoftHyb" : "http://ecn.t${MS_DIGIT}.tiles.virtualearth.net/tiles/h${QUAD}.png?g=441&mkt=en-us&n=z", - "MicrosoftSat" : "http://ecn.t${MS_DIGIT}.tiles.virtualearth.net/tiles/a${QUAD}.png?g=441&mkt=en-us&n=z", - "MicrosoftMap" : "http://ecn.t${MS_DIGIT}.tiles.virtualearth.net/tiles/r${QUAD}.png?g=441&mkt=en-us&n=z", - "MicrosoftTer" : "http://ecn.t${MS_DIGIT}.tiles.virtualearth.net/tiles/r${QUAD}.png?g=441&mkt=en-us&shading=hill&n=z", - "OviSat" : "http://maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/satellite.day/${Z}/${X}/${Y}/256/png8", - "OviHybrid" : "http://maptile.maps.svc.ovi.com/maptiler/v2/maptile/newest/hybrid.day/${Z}/${X}/${Y}/256/png8", - "OpenStreetMap" : "http://tile.openstreetmap.org/${ZOOM}/${X}/${Y}.png", - "OSMARender" : "http://tah.openstreetmap.org/Tiles/tile/${ZOOM}/${X}/${Y}.png", - "OpenAerialMap" : "http://tile.openaerialmap.org/tiles/?v=mgm&layer=openaerialmap-900913&x=${X}&y=${Y}&zoom=${OAM_ZOOM}", - "OpenCycleMap" : "http://andy.sandbox.cloudmade.com/tiles/cycle/${ZOOM}/${X}/${Y}.png", - "StatKartTopo2" : "http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=topo2&zoom=${ZOOM}&x=${X}&y=${Y}" - - } - -# these are the md5sums of "unavailable" tiles -BLANK_TILES = set(["d16657bbee25d7f15c583f5c5bf23f50", - "c0e76e6e90ff881da047c15dbea380c7", - "d41d8cd98f00b204e9800998ecf8427e"]) - -# all tiles are 256x256 -TILES_WIDTH = 256 -TILES_HEIGHT = 256 - -class TileServiceInfo: - '''a lookup object for the URL templates''' - def __init__(self, x, y, zoom): - self.X = x - self.Y = y - self.Z = zoom - quadcode = '' - for i in range(zoom - 1, -1, -1): - quadcode += str((((((y >> i) & 1) << 1) + ((x >> i) & 1)))) - self.ZOOM = zoom - self.QUAD = quadcode - self.OAM_ZOOM = 17 - zoom - self.GOOG_DIGIT = (x + y) & 3 - self.MS_DIGITBR = (((y & 1) << 1) + (x & 1)) + 1 - self.MS_DIGIT = (((y & 3) << 1) + (x & 1)) - self.Y_DIGIT = (x + y + zoom) % 3 + 1 - self.GALILEO = "Galileo"[0:(3 * x + y) & 7] - - def __getitem__(self, a): - return str(getattr(self, a)) - - -class TileInfo: - '''description of a tile''' - def __init__(self, tile, zoom, service, offset=(0,0)): - self.tile = tile - (self.x, self.y) = tile - self.zoom = zoom - self.service = service - (self.offsetx, self.offsety) = offset - self.refresh_time() - - def key(self): - '''tile cache key''' - return (self.tile, self.zoom, self.service) - - def refresh_time(self): - '''reset the request time''' - self.request_time = time.time() - - def coord(self, offset=(0,0)): - '''return lat,lon within a tile given (offsetx,offsety)''' - (tilex, tiley) = self.tile - (offsetx, offsety) = offset - world_tiles = 1< 0: - time.sleep(self.tile_delay) - - keys = self._download_pending.keys()[:] - - # work out which one to download next, choosing by request_time - tile_info = self._download_pending[keys[0]] - for key in keys: - if self._download_pending[key].request_time > tile_info.request_time: - tile_info = self._download_pending[key] - - url = tile_info.url(self.service) - path = self.tile_to_path(tile_info) - key = tile_info.key() - - try: - if self.debug: - print("Downloading %s [%u left]" % (url, len(keys))) - req = urllib2.Request(url) - if url.find('google') != -1: - req.add_header('Referer', 'https://maps.google.com/') - resp = urllib2.urlopen(req) - headers = resp.info() - except urllib2.URLError as e: - #print('Error loading %s' % url) - if not key in self._tile_cache: - self._tile_cache[key] = self._unavailable - self._download_pending.pop(key) - if self.debug: - print("Failed %s: %s" % (url, str(e))) - continue - if 'content-type' not in headers or headers['content-type'].find('image') == -1: - if not key in self._tile_cache: - self._tile_cache[key] = self._unavailable - self._download_pending.pop(key) - if self.debug: - print("non-image response %s" % url) - continue - else: - img = resp.read() - - # see if its a blank/unavailable tile - md5 = hashlib.md5(img).hexdigest() - if md5 in BLANK_TILES: - if self.debug: - print("blank tile %s" % url) - if not key in self._tile_cache: - self._tile_cache[key] = self._unavailable - self._download_pending.pop(key) - continue - - mp_util.mkdir_p(os.path.dirname(path)) - h = open(path+'.tmp','wb') - h.write(img) - h.close() - try: - os.unlink(path) - except Exception: - pass - os.rename(path+'.tmp', path) - self._download_pending.pop(key) - self._download_thread = None - - def start_download_thread(self): - '''start the downloader''' - if self._download_thread: - return - t = threading.Thread(target=self.downloader) - t.daemon = True - self._download_thread = t - t.start() - - def load_tile_lowres(self, tile): - '''load a lower resolution tile from cache to fill in a - map while waiting for a higher resolution tile''' - if tile.zoom == self.min_zoom: - return None - - # find the equivalent lower res tile - (lat,lon) = tile.coord() - - width2 = TILES_WIDTH - height2 = TILES_HEIGHT - - for zoom2 in range(tile.zoom-1, self.min_zoom-1, -1): - width2 /= 2 - height2 /= 2 - - if width2 == 0 or height2 == 0: - break - - tile_info = self.coord_to_tile(lat, lon, zoom2) - - # see if its in the tile cache - key = tile_info.key() - if key in self._tile_cache: - img = self._tile_cache[key] - if img == self._unavailable: - continue - else: - path = self.tile_to_path(tile_info) - try: - img = cv.LoadImage(path) - # add it to the tile cache - self._tile_cache[key] = img - while len(self._tile_cache) > self.cache_size: - self._tile_cache.popitem(0) - except IOError as e: - continue - - # copy out the quadrant we want - availx = min(TILES_WIDTH - tile_info.offsetx, width2) - availy = min(TILES_HEIGHT - tile_info.offsety, height2) - if availx != width2 or availy != height2: - continue - cv.SetImageROI(img, (tile_info.offsetx, tile_info.offsety, width2, height2)) - img2 = cv.CreateImage((width2,height2), 8, 3) - try: - cv.Copy(img, img2) - except Exception: - continue - cv.ResetImageROI(img) - - # and scale it - scaled = cv.CreateImage((TILES_WIDTH, TILES_HEIGHT), 8, 3) - cv.Resize(img2, scaled) - #cv.Rectangle(scaled, (0,0), (255,255), (0,255,0), 1) - return scaled - return None - - def load_tile(self, tile): - '''load a tile from cache or tile server''' - - # see if its in the tile cache - key = tile.key() - if key in self._tile_cache: - img = self._tile_cache[key] - if img == self._unavailable: - img = self.load_tile_lowres(tile) - if img is None: - img = self._unavailable - return img - - - path = self.tile_to_path(tile) - try: - ret = cv.LoadImage(path) - # if it is an old tile, then try to refresh - if os.path.getmtime(path) + self.refresh_age < time.time(): - try: - self._download_pending[key].refresh_time() - except Exception: - self._download_pending[key] = tile - self.start_download_thread() - # add it to the tile cache - self._tile_cache[key] = ret - while len(self._tile_cache) > self.cache_size: - self._tile_cache.popitem(0) - return ret - except IOError as e: - # windows gives errno 0 for some versions of python, treat that as ENOENT - # and try a download - if not e.errno in [errno.ENOENT,0]: - raise - pass - if not self.download: - img = self.load_tile_lowres(tile) - if img is None: - img = self._unavailable - return img - - try: - self._download_pending[key].refresh_time() - except Exception: - self._download_pending[key] = tile - self.start_download_thread() - - img = self.load_tile_lowres(tile) - if img is None: - img = self._loading - return img - - - def scaled_tile(self, tile): - '''return a scaled tile''' - width = int(TILES_WIDTH / tile.scale) - height = int(TILES_HEIGHT / tile.scale) - scaled_tile = cv.CreateImage((width,height), 8, 3) - full_tile = self.load_tile(tile) - cv.Resize(full_tile, scaled_tile) - return scaled_tile - - - def coord_from_area(self, x, y, lat, lon, width, ground_width): - '''return (lat,lon) for a pixel in an area image''' - - pixel_width = ground_width / float(width) - dx = x * pixel_width - dy = y * pixel_width - - return mp_util.gps_offset(lat, lon, dx, -dy) - - - def coord_to_pixel(self, lat, lon, width, ground_width, lat2, lon2): - '''return pixel coordinate (px,py) for position (lat2,lon2) - in an area image. Note that the results are relative to top,left - and may be outside the image''' - pixel_width = ground_width / float(width) - - if lat is None or lon is None or lat2 is None or lon2 is None: - return (0,0) - - dx = mp_util.gps_distance(lat, lon, lat, lon2) - if lon2 < lon: - dx = -dx - dy = mp_util.gps_distance(lat, lon, lat2, lon) - if lat2 > lat: - dy = -dy - - dx /= pixel_width - dy /= pixel_width - return (int(dx), int(dy)) - - - def area_to_tile_list(self, lat, lon, width, height, ground_width, zoom=None): - '''return a list of TileInfoScaled objects needed for - an area of land, with ground_width in meters, and - width/height in pixels. - - lat/lon is the top left corner. If unspecified, the - zoom is automatically chosen to avoid having to grow - the tiles - ''' - - pixel_width = ground_width / float(width) - ground_height = ground_width * (height/(float(width))) - top_right = mp_util.gps_newpos(lat, lon, 90, ground_width) - bottom_left = mp_util.gps_newpos(lat, lon, 180, ground_height) - bottom_right = mp_util.gps_newpos(bottom_left[0], bottom_left[1], 90, ground_width) - - # choose a zoom level if not provided - if zoom is None: - zooms = range(self.min_zoom, self.max_zoom+1) - else: - zooms = [zoom] - for zoom in zooms: - tile_min = self.coord_to_tile(lat, lon, zoom) - (twidth,theight) = tile_min.size() - tile_pixel_width = twidth / float(TILES_WIDTH) - scale = pixel_width / tile_pixel_width - if scale >= 1.0: - break - - scaled_tile_width = int(TILES_WIDTH / scale) - scaled_tile_height = int(TILES_HEIGHT / scale) - - # work out the bottom right tile - tile_max = self.coord_to_tile(bottom_right[0], bottom_right[1], zoom) - - ofsx = int(tile_min.offsetx / scale) - ofsy = int(tile_min.offsety / scale) - srcy = ofsy - dsty = 0 - - ret = [] - - # place the tiles - for y in range(tile_min.y, tile_max.y+1): - srcx = ofsx - dstx = 0 - for x in range(tile_min.x, tile_max.x+1): - if dstx < width and dsty < height: - ret.append(TileInfoScaled((x,y), zoom, scale, - (srcx,srcy), (dstx,dsty), self.service)) - dstx += scaled_tile_width-srcx - srcx = 0 - dsty += scaled_tile_height-srcy - srcy = 0 - return ret - - def area_to_image(self, lat, lon, width, height, ground_width, zoom=None, ordered=True): - '''return an RGB image for an area of land, with ground_width - in meters, and width/height in pixels. - - lat/lon is the top left corner. The zoom is automatically - chosen to avoid having to grow the tiles''' - - img = cv.CreateImage((width,height),8,3) - - tlist = self.area_to_tile_list(lat, lon, width, height, ground_width, zoom) - - # order the display by distance from the middle, so the download happens - # close to the middle of the image first - if ordered: - (midlat, midlon) = self.coord_from_area(width/2, height/2, lat, lon, width, ground_width) - tlist.sort(key=lambda d: d.distance(midlat, midlon), reverse=True) - - for t in tlist: - scaled_tile = self.scaled_tile(t) - - w = min(width - t.dstx, scaled_tile.width - t.srcx) - h = min(height - t.dsty, scaled_tile.height - t.srcy) - if w > 0 and h > 0: - cv.SetImageROI(scaled_tile, (t.srcx, t.srcy, w, h)) - cv.SetImageROI(img, (t.dstx, t.dsty, w, h)) - cv.Copy(scaled_tile, img) - cv.ResetImageROI(img) - cv.ResetImageROI(scaled_tile) - - # return as an RGB image - cv.CvtColor(img, img, cv.CV_BGR2RGB) - return img - -def mp_icon(filename): - '''load an icon from the data directory''' - # we have to jump through a lot of hoops to get an OpenCV image - # when we may be in a package zip file - try: - import pkg_resources - name = __name__ - if name == "__main__": - name = "MAVProxy.modules.mavproxy_map.mp_tile" - raw = pkg_resources.resource_stream(name, "data/%s" % filename).read() - except Exception: - raw = open(os.path.join(__file__, 'data', filename)).read() - imagefiledata = cv.CreateMatHeader(1, len(raw), cv.CV_8UC1) - cv.SetData(imagefiledata, raw, len(raw)) - img = cv.DecodeImage(imagefiledata, cv.CV_LOAD_IMAGE_COLOR) - return img - - -if __name__ == "__main__": - - from optparse import OptionParser - parser = OptionParser("mp_tile.py [options]") - parser.add_option("--lat", type='float', default=-35.362938, help="start latitude") - parser.add_option("--lon", type='float', default=149.165085, help="start longitude") - parser.add_option("--width", type='float', default=1000.0, help="width in meters") - parser.add_option("--service", default="OviHybrid", help="tile service") - parser.add_option("--zoom", default=None, type='int', help="zoom level") - parser.add_option("--max-zoom", type='int', default=19, help="maximum tile zoom") - parser.add_option("--delay", type='float', default=1.0, help="tile download delay") - parser.add_option("--boundary", default=None, help="region boundary") - parser.add_option("--debug", action='store_true', default=False, help="show debug info") - (opts, args) = parser.parse_args() - - lat = opts.lat - lon = opts.lon - ground_width = opts.width - - if opts.boundary: - boundary = mp_util.polygon_load(opts.boundary) - bounds = mp_util.polygon_bounds(boundary) - lat = bounds[0]+bounds[2] - lon = bounds[1] - ground_width = max(mp_util.gps_distance(lat, lon, lat, lon+bounds[3]), - mp_util.gps_distance(lat, lon, lat-bounds[2], lon)) - print (lat, lon, ground_width) - - mt = MPTile(debug=opts.debug, service=opts.service, - tile_delay=opts.delay, max_zoom=opts.max_zoom) - if opts.zoom is None: - zooms = range(mt.min_zoom, mt.max_zoom+1) - else: - zooms = [opts.zoom] - for zoom in zooms: - tlist = mt.area_to_tile_list(lat, lon, width=1024, height=1024, - ground_width=ground_width, zoom=zoom) - print("zoom %u needs %u tiles" % (zoom, len(tlist))) - for tile in tlist: - mt.load_tile(tile) - while mt.tiles_pending() > 0: - time.sleep(2) - print("Waiting on %u tiles" % mt.tiles_pending()) - print('Done') diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/srtm.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/srtm.py deleted file mode 100755 index 5f6f5e8eb..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_map/srtm.py +++ /dev/null @@ -1,446 +0,0 @@ -#!/usr/bin/env python - -# Pylint: Disable name warnings -# pylint: disable-msg=C0103 - -"""Load and process SRTM data. Originally written by OpenStreetMap -Edited by CanberraUAV""" - -from html.parser import HTMLParser -import http -import re -import pickle -import os.path -import os -import zipfile -import array -import math -import multiprocessing -from MAVProxy.modules.lib import mp_util -import tempfile - -childTileDownload = None -childFileListDownload = None - -class NoSuchTileError(Exception): - """Raised when there is no tile for a region.""" - def __init__(self, lat, lon): - Exception.__init__(self) - self.lat = lat - self.lon = lon - - def __str__(self): - return "No SRTM tile for %d, %d available!" % (self.lat, self.lon) - - -class WrongTileError(Exception): - """Raised when the value of a pixel outside the tile area is requested.""" - def __init__(self, tile_lat, tile_lon, req_lat, req_lon): - Exception.__init__(self) - self.tile_lat = tile_lat - self.tile_lon = tile_lon - self.req_lat = req_lat - self.req_lon = req_lon - - def __str__(self): - return "SRTM tile for %d, %d does not contain data for %d, %d!" % ( - self.tile_lat, self.tile_lon, self.req_lat, self.req_lon) - -class InvalidTileError(Exception): - """Raised when the SRTM tile file contains invalid data.""" - def __init__(self, lat, lon): - Exception.__init__(self) - self.lat = lat - self.lon = lon - - def __str__(self): - return "SRTM tile for %d, %d is invalid!" % (self.lat, self.lon) - -class SRTMDownloader(): - """Automatically download SRTM tiles.""" - def __init__(self, server="firmware.diydrones.com", - directory="/SRTM/", - cachedir=None, - offline=0, - debug=False): - - if cachedir is None: - try: - cachedir = os.path.join(os.environ['HOME'], '.tilecache/SRTM') - except Exception: - cachedir = os.path.join(tempfile.gettempdir(), 'MAVProxySRTM') - - self.debug = debug - self.offline = offline - self.first_failure = False - self.server = server - self.directory = directory - self.cachedir = cachedir - '''print "SRTMDownloader - server= %s, directory=%s." % \ - (self.server, self.directory)''' - if not os.path.exists(cachedir): - mp_util.mkdir_p(cachedir) - self.filelist = {} - self.filename_regex = re.compile( - r"([NS])(\d{2})([EW])(\d{3})\.hgt\.zip") - self.filelist_file = os.path.join(self.cachedir, "filelist_python") - self.min_filelist_len = 14500 - - def loadFileList(self): - """Load a previously created file list or create a new one if none is - available.""" - try: - data = open(self.filelist_file, 'rb') - except IOError: - '''print "No SRTM cached file list. Creating new one!"''' - if self.offline == 0: - self.createFileList() - return - try: - self.filelist = pickle.load(data) - data.close() - if len(self.filelist) < self.min_filelist_len: - self.filelist = {} - if self.offline == 0: - self.createFileList() - except: - '''print "Unknown error loading cached SRTM file list. Creating new one!"''' - if self.offline == 0: - self.createFileList() - - def createFileList(self): - """SRTM data is split into different directories, get a list of all of - them and create a dictionary for easy lookup.""" - global childFileListDownload - if childFileListDownload is None or not childFileListDownload.is_alive(): - childFileListDownload = multiprocessing.Process(target=self.createFileListHTTP) - childFileListDownload.start() - - def createFileListHTTP(self): - """Create a list of the available SRTM files on the server using - HTTP file transfer protocol (rather than ftp). - 30may2010 GJ ORIGINAL VERSION - """ - mp_util.child_close_fds() - if self.debug: - print("Connecting to %s" % self.server) - #conn = http.client.HTTPConnection(self.server) - #conn.request("GET",self.directory) - #r1 = conn.getresponse() - '''if r1.status==200: - print "status200 received ok" - else: - print "oh no = status=%d %s" \ - % (r1.status,r1.reason)''' - - #data = r1.read() - #parser = parseHTMLDirectoryListing() - #parser.feed(str(data)) - #continents = parser.getDirListing() - '''print continents''' - #conn.close() - - #for continent in continents: - # if not continent[0].isalpha() or continent.startswith('README'): - # continue - # '''print "Downloading file list for", continent''' - # url = "%s%s" % (self.directory,continent) - # if self.debug: - # print("fetching %s" % url) - # try: - # conn = http.client.HTTPConnection(self.server) - # conn.request("GET", url) - # r1 = conn.getresponse() - # except Exception as ex: - # print("Failed to download %s : %s" % (url, ex)) - # continue - # '''if r1.status==200: - # print "status200 received ok" - # else: - # print "oh no = status=%d %s" \ - # % (r1.status,r1.reason)''' - # data = r1.read() - # conn.close() - # parser = parseHTMLDirectoryListing() - # parser.feed(str(data)) - # files = parser.getDirListing() - - # for filename in files: - # self.filelist[self.parseFilename(filename)] = ( - # continent, filename) - - # '''print self.filelist''' - ## Add meta info - #self.filelist["server"] = self.server - #self.filelist["directory"] = self.directory - #tmpname = self.filelist_file + ".tmp" - #with open(tmpname , 'wb') as output: - # pickle.dump(self.filelist, output) - # output.close() - # try: - # os.unlink(self.filelist_file) - # except Exception: - # pass - # os.rename(tmpname, self.filelist_file) - #if self.debug: - # print("created file list with %u entries" % len(self.filelist)) - - def parseFilename(self, filename): - """Get lat/lon values from filename.""" - match = self.filename_regex.match(filename) - if match is None: - # TODO?: Raise exception? - '''print "Filename", filename, "unrecognized!"''' - return None - lat = int(match.group(2)) - lon = int(match.group(4)) - if match.group(1) == "S": - lat = -lat - if match.group(3) == "W": - lon = -lon - return lat, lon - - def getTile(self, lat, lon): - """Get a SRTM tile object. This function can return either an SRTM1 or - SRTM3 object depending on what is available, however currently it - only returns SRTM3 objects.""" - global childFileListDownload - if childFileListDownload is not None and childFileListDownload.is_alive(): - '''print "Getting file list"''' - return 0 - elif not self.filelist: - '''print "Filelist download complete, loading data"''' - data = open(self.filelist_file, 'rb') - self.filelist = pickle.load(data) - data.close() - - try: - continent, filename = self.filelist[(int(lat), int(lon))] - except KeyError: - '''print "here??"''' - if len(self.filelist) > self.min_filelist_len: - # we appear to have a full filelist - this must be ocean - return SRTMOceanTile(int(lat), int(lon)) - return 0 - - global childTileDownload - if not os.path.exists(os.path.join(self.cachedir, filename)): - if childTileDownload is None or not childTileDownload.is_alive(): - try: - childTileDownload = multiprocessing.Process(target=self.downloadTile, args=(str(continent), str(filename))) - childTileDownload.start() - except Exception as ex: - childTileDownload = None - return 0 - '''print "Getting Tile"''' - return 0 - elif childTileDownload is not None and childTileDownload.is_alive(): - '''print "Still Getting Tile"''' - return 0 - # TODO: Currently we create a new tile object each time. - # Caching is required for improved performance. - try: - return SRTMTile(os.path.join(self.cachedir, filename), int(lat), int(lon)) - except InvalidTileError: - return 0 - - def downloadTile(self, continent, filename): - #Use HTTP - mp_util.child_close_fds() - if self.offline == 1: - return - conn = http.client.HTTPConnection(self.server) - conn.set_debuglevel(0) - filepath = "%s%s%s" % \ - (self.directory,continent,filename) - try: - conn.request("GET", filepath) - r1 = conn.getresponse() - if r1.status==200: - '''print "status200 received ok"''' - data = r1.read() - self.ftpfile = open(os.path.join(self.cachedir, filename), 'wb') - self.ftpfile.write(data) - self.ftpfile.close() - self.ftpfile = None - else: - '''print "oh no = status=%d %s" \ - % (r1.status,r1.reason)''' - except Exception as e: - if not self.first_failure: - #print("SRTM Download failed: %s" % str(e)) - self.first_failure = True - pass - - -class SRTMTile: - """Base class for all SRTM tiles. - Each SRTM tile is size x size pixels big and contains - data for the area from (lat, lon) to (lat+1, lon+1) inclusive. - This means there is a 1 pixel overlap between tiles. This makes it - easier for as to interpolate the value, because for every point we - only have to look at a single tile. - """ - def __init__(self, f, lat, lon): - try: - zipf = zipfile.ZipFile(f, 'r') - except Exception: - raise InvalidTileError(lat, lon) - names = zipf.namelist() - if len(names) != 1: - raise InvalidTileError(lat, lon) - data = zipf.read(names[0]) - self.size = int(math.sqrt(len(data)/2)) # 2 bytes per sample - # Currently only SRTM1/3 is supported - if self.size not in (1201, 3601): - raise InvalidTileError(lat, lon) - self.data = array.array('h', data) - self.data.byteswap() - if len(self.data) != self.size * self.size: - raise InvalidTileError(lat, lon) - self.lat = lat - self.lon = lon - - @staticmethod - def _avg(value1, value2, weight): - """Returns the weighted average of two values and handles the case where - one value is None. If both values are None, None is returned. - """ - if value1 is None: - return value2 - if value2 is None: - return value1 - return value2 * weight + value1 * (1 - weight) - - def calcOffset(self, x, y): - """Calculate offset into data array. Only uses to test correctness - of the formula.""" - # Datalayout - # X = longitude - # Y = latitude - # Sample for size 1201x1201 - # ( 0/1200) ( 1/1200) ... (1199/1200) (1200/1200) - # ( 0/1199) ( 1/1199) ... (1199/1199) (1200/1199) - # ... ... ... ... - # ( 0/ 1) ( 1/ 1) ... (1199/ 1) (1200/ 1) - # ( 0/ 0) ( 1/ 0) ... (1199/ 0) (1200/ 0) - # Some offsets: - # (0/1200) 0 - # (1200/1200) 1200 - # (0/1199) 1201 - # (1200/1199) 2401 - # (0/0) 1201*1200 - # (1200/0) 1201*1201-1 - return x + self.size * (self.size - y - 1) - - def getPixelValue(self, x, y): - """Get the value of a pixel from the data, handling voids in the - SRTM data.""" - assert x < self.size, "x: %d<%d" % (x, self.size) - assert y < self.size, "y: %d<%d" % (y, self.size) - # Same as calcOffset, inlined for performance reasons - offset = x + self.size * (self.size - y - 1) - #print offset - value = self.data[offset] - if value == -32768: - return -1 # -32768 is a special value for areas with no data - return value - - - def getAltitudeFromLatLon(self, lat, lon): - """Get the altitude of a lat lon pair, using the four neighbouring - pixels for interpolation. - """ - # print "-----\nFromLatLon", lon, lat - lat -= self.lat - lon -= self.lon - # print "lon, lat", lon, lat - if lat < 0.0 or lat >= 1.0 or lon < 0.0 or lon >= 1.0: - raise WrongTileError(self.lat, self.lon, self.lat+lat, self.lon+lon) - x = lon * (self.size - 1) - y = lat * (self.size - 1) - # print "x,y", x, y - x_int = int(x) - x_frac = x - int(x) - y_int = int(y) - y_frac = y - int(y) - # print "frac", x_int, x_frac, y_int, y_frac - value00 = self.getPixelValue(x_int, y_int) - value10 = self.getPixelValue(x_int+1, y_int) - value01 = self.getPixelValue(x_int, y_int+1) - value11 = self.getPixelValue(x_int+1, y_int+1) - value1 = self._avg(value00, value10, x_frac) - value2 = self._avg(value01, value11, x_frac) - value = self._avg(value1, value2, y_frac) - # print "%4d %4d | %4d\n%4d %4d | %4d\n-------------\n%4d" % ( - # value00, value10, value1, value01, value11, value2, value) - return value - -class SRTMOceanTile(SRTMTile): - '''a tile for areas of zero altitude''' - def __init__(self, lat, lon): - self.lat = lat - self.lon = lon - - def getAltitudeFromLatLon(self, lat, lon): - return 0 - - -class parseHTMLDirectoryListing(HTMLParser): - - def __init__(self): - #print "parseHTMLDirectoryListing.__init__" - HTMLParser.__init__(self) - self.title="Undefined" - self.isDirListing = False - self.dirList=[] - self.inTitle = False - self.inHyperLink = False - self.currAttrs="" - self.currHref="" - - def handle_starttag(self, tag, attrs): - #print "Encountered the beginning of a %s tag" % tag - if tag=="title": - self.inTitle = True - if tag == "a": - self.inHyperLink = True - self.currAttrs=attrs - for attr in attrs: - if attr[0]=='href': - self.currHref = attr[1] - - - def handle_endtag(self, tag): - #print "Encountered the end of a %s tag" % tag - if tag=="title": - self.inTitle = False - if tag == "a": - # This is to avoid us adding the parent directory to the list. - if self.currHref!="": - self.dirList.append(self.currHref) - self.currAttrs="" - self.currHref="" - self.inHyperLink = False - - def handle_data(self,data): - if self.inTitle: - self.title = data - '''print "title=%s" % data''' - if "Index of" in self.title: - #print "it is an index!!!!" - self.isDirListing = True - if self.inHyperLink: - # We do not include parent directory in listing. - if "Parent Directory" in data: - self.currHref="" - - def getDirListing(self): - return self.dirList - -#DEBUG ONLY -if __name__ == '__main__': - downloader = SRTMDownloader() - downloader.loadFileList() - tile = downloader.getTile(-36, 149) - print (tile.getAltitudeFromLatLon(-35.282, 149.1287)) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misc.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misc.py deleted file mode 100644 index ba2c1c2c1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misc.py +++ /dev/null @@ -1,222 +0,0 @@ -#!/usr/bin/env python -'''miscellaneous commands''' - -import time, math -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module - - -from os import kill -from signal import signal -from subprocess import PIPE, Popen - -class RepeatCommand(object): - '''repeated command object''' - def __init__(self, period, cmd): - self.period = period - self.cmd = cmd - self.event = mavutil.periodic_event(1.0/period) - - def __str__(self): - return "Every %.1f seconds: %s" % (self.period, self.cmd) - - -def run_command(args, cwd = None, shell = False, timeout = None, env = None): - ''' - Run a shell command with a timeout. - See http://stackoverflow.com/questions/1191374/subprocess-with-timeout - ''' - from subprocess import PIPE, Popen - from StringIO import StringIO - import fcntl, os, signal - p = Popen(args, shell = shell, cwd = cwd, stdout = PIPE, stderr = PIPE, env = env) - tstart = time.time() - buf = StringIO() - - # try to make it non-blocking - try: - fcntl.fcntl(p.stdout, fcntl.F_SETFL, fcntl.fcntl(p.stdout, fcntl.F_GETFL) | os.O_NONBLOCK) - except Exception: - pass - - while True: - time.sleep(0.1) - retcode = p.poll() - try: - buf.write(p.stdout.read()) - except Exception: - pass - if retcode is not None: - break - if timeout is not None and time.time() > tstart + timeout: - print("timeout in process %u" % p.pid) - try: - os.kill(p.pid, signal.SIGKILL) - except OSError: - pass - p.wait() - return buf.getvalue() - -class MiscModule(mp_module.MPModule): - def __init__(self, mpstate): - super(MiscModule, self).__init__(mpstate, "misc", "misc commands") - self.add_command('alt', self.cmd_alt, "show altitude information") - self.add_command('up', self.cmd_up, "adjust pitch trim by up to 5 degrees") - self.add_command('reboot', self.cmd_reboot, "reboot autopilot") - self.add_command('time', self.cmd_time, "show autopilot time") - self.add_command('shell', self.cmd_shell, "run shell command") - self.add_command('changealt', self.cmd_changealt, "change target altitude") - self.add_command('land', self.cmd_land, "auto land") - self.add_command('repeat', self.cmd_repeat, "repeat a command at regular intervals", - [""]) - self.add_command('version', self.cmd_version, "show version") - self.add_command('rcbind', self.cmd_rcbind, "bind RC receiver") - self.repeats = [] - - def altitude_difference(self, pressure1, pressure2, ground_temp): - '''calculate barometric altitude''' - scaling = pressure2 / pressure1 - temp = ground_temp + 273.15 - return 153.8462 * temp * (1.0 - math.exp(0.190259 * math.log(scaling))) - - def qnh_estimate(self): - '''estimate QNH pressure from GPS altitude and scaled pressure''' - alt_gps = self.master.field('GPS_RAW_INT', 'alt', 0) * 0.001 - pressure2 = self.master.field('SCALED_PRESSURE', 'press_abs', 0) - ground_temp = self.get_mav_param('GND_TEMP', 21) - temp = ground_temp + 273.15 - pressure1 = pressure2 / math.exp(math.log(1.0 - (alt_gps / (153.8462 * temp))) / 0.190259) - return pressure1 - - def cmd_alt(self, args): - '''show altitude''' - print("Altitude: %.1f" % self.status.altitude) - qnh_pressure = self.get_mav_param('AFS_QNH_PRESSURE', None) - if qnh_pressure is not None and qnh_pressure > 0: - ground_temp = self.get_mav_param('GND_TEMP', 21) - pressure = self.master.field('SCALED_PRESSURE', 'press_abs', 0) - qnh_alt = self.altitude_difference(qnh_pressure, pressure, ground_temp) - print("QNH Alt: %u meters %u feet for QNH pressure %.1f" % (qnh_alt, qnh_alt*3.2808, qnh_pressure)) - print("QNH Estimate: %.1f millibars" % self.qnh_estimate()) - - def cmd_shell(self, args): - '''shell command''' - print(run_command(args, shell=False, timeout=3)) - - def cmd_up(self, args): - '''adjust TRIM_PITCH_CD up by 5 degrees''' - if len(args) == 0: - adjust = 5.0 - else: - adjust = float(args[0]) - old_trim = self.get_mav_param('TRIM_PITCH_CD', None) - if old_trim is None: - print("Existing trim value unknown!") - return - new_trim = int(old_trim + (adjust*100)) - if math.fabs(new_trim - old_trim) > 1000: - print("Adjustment by %d too large (from %d to %d)" % (adjust*100, old_trim, new_trim)) - return - print("Adjusting TRIM_PITCH_CD from %d to %d" % (old_trim, new_trim)) - self.param_set('TRIM_PITCH_CD', new_trim) - - def cmd_reboot(self, args): - '''reboot autopilot''' - self.master.reboot_autopilot() - - def cmd_time(self, args): - '''show autopilot time''' - tusec = self.master.field('SYSTEM_TIME', 'time_unix_usec', 0) - if tusec == 0: - print("No SYSTEM_TIME time available") - return - print("%s (%s)\n" % (time.ctime(tusec * 1.0e-6), time.ctime())) - - def cmd_changealt(self, args): - '''change target altitude''' - if len(args) < 1: - print("usage: changealt ") - return - relalt = float(args[0]) - self.master.mav.mission_item_send(self.settings.target_system, - self.settings.target_component, - 0, - 3, - mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, - 3, 1, 0, 0, 0, 0, - 0, 0, relalt) - print("Sent change altitude command for %.1f meters" % relalt) - - def cmd_land(self, args): - '''auto land commands''' - if len(args) < 1: - self.master.mav.command_long_send(self.settings.target_system, - 0, - mavutil.mavlink.MAV_CMD_DO_LAND_START, - 0, 0, 0, 0, 0, 0, 0, 0) - elif args[0] == 'abort': - self.master.mav.command_long_send(self.settings.target_system, - 0, - mavutil.mavlink.MAV_CMD_DO_GO_AROUND, - 0, 0, 0, 0, 0, 0, 0, 0) - else: - print("Usage: land [abort]") - - def cmd_version(self, args): - '''show version''' - self.master.mav.command_long_send(self.settings.target_system, - self.settings.target_component, - mavutil.mavlink.MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES, - 0, - 1, 0, 0, 0, 0, 0, 0) - - def cmd_rcbind(self, args): - '''start RC bind''' - if len(args) < 1: - print("Usage: rcbind ") - return - self.master.mav.command_long_send(self.settings.target_system, - self.settings.target_component, - mavutil.mavlink.MAV_CMD_START_RX_PAIR, - 0, - float(args[0]), 0, 0, 0, 0, 0, 0) - - def cmd_repeat(self, args): - '''repeat a command at regular intervals''' - if len(args) == 0: - if len(self.repeats) == 0: - print("No repeats") - return - for i in range(len(self.repeats)): - print("%u: %s" % (i, self.repeats[i])) - return - if args[0] == 'add': - if len(args) < 3: - print("Usage: repeat add PERIOD CMD") - return - self.repeats.append(RepeatCommand(float(args[1]), " ".join(args[2:]))) - elif args[0] == 'remove': - if len(args) < 2: - print("Usage: repeat remove INDEX") - return - i = int(args[1]) - if i < 0 or i >= len(self.repeats): - print("Invalid index %d" % i) - return - self.repeats.pop(i) - return - elif args[0] == 'clean': - self.repeats = [] - else: - print("Usage: repeat ") - - def idle_task(self): - '''called on idle''' - for r in self.repeats: - if r.event.trigger(): - self.mpstate.functions.process_stdin(r.cmd, immediate=True) - -def init(mpstate): - '''initialise module''' - return MiscModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/__init__.py deleted file mode 100644 index 31c4e109b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/__init__.py +++ /dev/null @@ -1,265 +0,0 @@ -#!/usr/bin/env python -''' -mission editor module -Michael Day -June 2104 -''' - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util - -from MAVProxy.modules.mavproxy_misseditor import me_event -MissionEditorEvent = me_event.MissionEditorEvent - -from pymavlink import mavutil - -import multiprocessing, time -import threading - -class MissionEditorEventThread(threading.Thread): - def __init__(self, mp_misseditor, q, l): - threading.Thread.__init__(self) - self.mp_misseditor = mp_misseditor - self.event_queue = q - self.event_queue_lock = l - self.time_to_quit = False - - def run(self): - while not self.time_to_quit: - queue_access_start_time = time.time() - self.event_queue_lock.acquire() - request_read_after_processing_queue = False - while self.event_queue.qsize() > 0 and (time.time() - queue_access_start_time) < 0.6: - event = self.event_queue.get() - - if event.get_type() == me_event.MEE_READ_WPS: - self.mp_misseditor.mpstate.module('wp').cmd_wp(['list']) - #list the rally points while I'm add it: - #TODO: DON'T KNOW WHY THIS DOESN'T WORK - #self.mp_misseditor.mpstate.module('rally').cmd_rally(['list']) - - #means I'm doing a read & don't know how many wps to expect: - self.mp_misseditor.num_wps_expected = -1 - self.wps_received = {} - - elif event.get_type() == me_event.MEE_TIME_TO_QUIT: - self.time_to_quit = True - - elif event.get_type() == me_event.MEE_GET_WP_RAD: - wp_radius = self.mp_misseditor.module('param').mav_param.get('WP_RADIUS') - if (wp_radius is None): - continue - self.mp_misseditor.gui_event_queue_lock.acquire() - self.mp_misseditor.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_SET_WP_RAD,wp_rad=wp_radius)) - self.mp_misseditor.gui_event_queue_lock.release() - - elif event.get_type() == me_event.MEE_SET_WP_RAD: - self.mp_misseditor.param_set('WP_RADIUS',event.get_arg("rad")) - - elif event.get_type() == me_event.MEE_GET_LOIT_RAD: - loiter_radius = self.mp_misseditor.module('param').mav_param.get('WP_LOITER_RAD') - if (loiter_radius is None): - continue - self.mp_misseditor.gui_event_queue_lock.acquire() - self.mp_misseditor.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_SET_LOIT_RAD,loit_rad=loiter_radius)) - self.mp_misseditor.gui_event_queue_lock.release() - - elif event.get_type() == me_event.MEE_SET_LOIT_RAD: - loit_rad = event.get_arg("rad") - if (loit_rad is None): - continue - - self.mp_misseditor.param_set('WP_LOITER_RAD', loit_rad) - - #need to redraw rally points - # Don't understand why this rally refresh isn't lagging... - # likely same reason why "timeout setting WP_LOITER_RAD" - #comes back: - #TODO: fix timeout issue - self.mp_misseditor.mpstate.module('rally').rallyloader.last_change = time.time() - - elif event.get_type() == me_event.MEE_GET_WP_DEFAULT_ALT: - self.mp_misseditor.gui_event_queue_lock.acquire() - self.mp_misseditor.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_SET_WP_DEFAULT_ALT,def_wp_alt=self.mp_misseditor.mpstate.settings.wpalt)) - self.mp_misseditor.gui_event_queue_lock.release() - elif event.get_type() == me_event.MEE_SET_WP_DEFAULT_ALT: - self.mp_misseditor.mpstate.settings.command(["wpalt",event.get_arg("alt")]) - - elif event.get_type() == me_event.MEE_WRITE_WPS: - self.mp_misseditor.module('wp').wploader.clear() - self.mp_misseditor.master.waypoint_count_send(event.get_arg("count")) - self.mp_misseditor.num_wps_expected = event.get_arg("count") - self.mp_misseditor.wps_received = {} - elif event.get_type() == me_event.MEE_WRITE_WP_NUM: - w = mavutil.mavlink.MAVLink_mission_item_message( - self.mp_misseditor.target_system, - self.mp_misseditor.target_component, - event.get_arg("num"), - event.get_arg("frame"), - event.get_arg("cmd_id"), - 0, 1, - event.get_arg("p1"), event.get_arg("p2"), - event.get_arg("p3"), event.get_arg("p4"), - event.get_arg("lat"), event.get_arg("lon"), - event.get_arg("alt")) - - self.mp_misseditor.module('wp').wploader.add(w) - self.mp_misseditor.master.mav.send( - self.mp_misseditor.module('wp').wploader.wp(w.seq)) - - #tell the wp module to expect some waypoints - self.mp_misseditor.module('wp').loading_waypoints = True - - elif event.get_type() == me_event.MEE_LOAD_WP_FILE: - self.mp_misseditor.module('wp').cmd_wp(['load',event.get_arg("path")]) - #Wait for the other thread to finish loading waypoints. - #don't let this loop run forever in case we have a lousy - #link to the plane - i = 0 - while (i < 10 and - self.mp_misseditor.module('wp').loading_waypoints): - time.sleep(1) - i = i + 1 - - #don't modify queue while in the middile of processing it: - request_read_after_processing_queue = True - - elif event.get_type() == me_event.MEE_SAVE_WP_FILE: - self.mp_misseditor.module('wp').cmd_wp(['save',event.get_arg("path")]) - - self.event_queue_lock.release() - - #if event processing operations require a mission referesh in GUI - #(e.g., after a load or a verified-completed write): - if (request_read_after_processing_queue): - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_READ_WPS)) - self.event_queue_lock.release() - - #periodically re-request WPs that were never received: - #DON'T NEED TO! -- wp module already doing this - - time.sleep(0.2) - -class MissionEditorModule(mp_module.MPModule): - ''' - A Mission Editor for use with MAVProxy - ''' - def __init__(self, mpstate): - super(MissionEditorModule, self).__init__(mpstate, "misseditor", "mission editor", public = True) - - self.num_wps_expected = 0 #helps me to know if all my waypoints I'm expecting have arrived - self.wps_received = {} - - from ..lib.multiprocessing_queue import makeIPCQueue - self.event_queue = makeIPCQueue() - self.event_queue_lock = multiprocessing.Lock() - self.gui_event_queue = makeIPCQueue() - self.gui_event_queue_lock = multiprocessing.Lock() - - self.event_thread = MissionEditorEventThread(self, self.event_queue, self.event_queue_lock) - self.event_thread.start() - - self.close_window = multiprocessing.Event() - self.close_window.clear() - - self.child = multiprocessing.Process(target=self.child_task,args=(self.event_queue,self.event_queue_lock,self.gui_event_queue,self.gui_event_queue_lock)) - self.child.start() - - self.mpstate.miss_editor = self - - def unload(self): - '''unload module''' - self.mpstate.miss_editor.close() - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - mtype = m.get_type() - - #MAKE SURE YOU RELEASE THIS LOCK BEFORE LEAVING THIS METHOD!!! - #No "return" statement should be put in this method! - self.gui_event_queue_lock.acquire() - - if mtype in ['WAYPOINT_COUNT','MISSION_COUNT']: - if (self.num_wps_expected == 0): - #I haven't asked for WPs, or these messages are duplicates - #of msgs I've already received. - self.console.error("No waypoint load started (from Editor).") - #I only clear the mission in the Editor if this was a read event - elif (self.num_wps_expected == -1): - self.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_CLEAR_MISS_TABLE)) - self.num_wps_expected = m.count - self.wps_received = {} - - if (m.count > 0): - self.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_ADD_MISS_TABLE_ROWS,num_rows=m.count-1)) - #write has been sent by the mission editor: - elif (self.num_wps_expected > 1): - if (m.count != self.num_wps_expected): - self.console.error("Unepxected waypoint count from APM after write (Editor)") - #since this is a write operation from the Editor there - #should be no need to update number of table rows - - elif mtype in ['WAYPOINT', 'MISSION_ITEM']: - #still expecting wps? - if (len(self.wps_received) < self.num_wps_expected): - #if we haven't already received this wp, write it to the GUI: - if (m.seq not in self.wps_received.keys()): - self.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_SET_MISS_ITEM, - num=m.seq,command=m.command,param1=m.param1, - param2=m.param2,param3=m.param3,param4=m.param4, - lat=m.x,lon=m.y,alt=m.z,frame=m.frame)) - - self.wps_received[m.seq] = True - - self.gui_event_queue_lock.release() - - def child_task(self, q, l, gq, gl): - '''child process - this holds GUI elements''' - mp_util.child_close_fds() - - from ..lib import wx_processguard - from ..lib.wx_loader import wx - from MAVProxy.modules.mavproxy_misseditor import missionEditorFrame - - self.app = wx.App(False) - self.app.frame = missionEditorFrame.MissionEditorFrame(parent=None,id=wx.ID_ANY) - - self.app.frame.set_event_queue(q) - self.app.frame.set_event_queue_lock(l) - self.app.frame.set_gui_event_queue(gq) - self.app.frame.set_gui_event_queue_lock(gl) - - self.app.frame.Show() - self.app.MainLoop() - - def close(self): - '''close the Mission Editor window''' - self.close_window.set() - if self.child.is_alive(): - self.child.join(1) - - self.child.terminate() - - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_TIME_TO_QUIT)); - self.event_queue_lock.release() - - def read_waypoints(self): - self.module('wp').cmd_wp(['list']) - - def update_map_click_position(self, new_click_pos): - self.gui_event_queue_lock.acquire() - self.gui_event_queue.put(MissionEditorEvent( - me_event.MEGE_SET_LAST_MAP_CLICK_POS,click_pos=new_click_pos)) - self.gui_event_queue_lock.release() - -def init(mpstate): - '''initialise module''' - return MissionEditorModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/button_renderer.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/button_renderer.py deleted file mode 100644 index e68cc6eeb..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/button_renderer.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env python -''' -Custom button render class for use inside a wx.grid -(ported from http://forums.wxwidgets.org/viewtopic.php?t=14403 ) -Michael Day -June 2014 -''' - -from ..lib.wx_loader import wx -from wx import grid -import copy - -class ButtonRenderer(wx.grid.PyGridCellRenderer): - def __init__(self,label,width=75,height=25): - self.label = label - self.width = width - self.height = height - - wx.grid.PyGridCellRenderer.__init__(self) - - def Clone(self): - return copy.copy(self) - - def GetBestSize(self, grid, dc, row, col): - return wx.Size(self.width,self.height) - - def Draw(self, grid, attr, dc, rect, row, col, isSelected): - dc.SetBrush(wx.Brush(wx.SystemSettings.GetColour( - wx.SYS_COLOUR_BTNFACE))) - dc.DrawRectangle( rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight()) - #draw a shaded rectangle to emulate a button - #(taken from src/generic/renderg.cpp) - strength = 1 - pen1 = wx.Pen(wx.WHITE, strength) - dc.SetPen(pen1) - dc.DrawLine(rect.GetLeft()+strength-1, rect.GetTop()+strength-1, - rect.GetLeft()+strength-1, rect.GetBottom()-strength+1) - dc.DrawLine(rect.GetLeft()+strength-1, rect.GetTop()+strength-1, - rect.GetRight()-strength, rect.GetTop()+strength-1) - pen2 = wx.Pen(wx.BLACK, strength) - dc.SetPen(pen2) - dc.DrawLine(rect.GetRight()-strength, rect.GetTop(), - rect.GetRight()-strength, rect.GetBottom()); - dc.DrawLine(rect.GetLeft(), rect.GetBottom(), - rect.GetRight() - strength, rect.GetBottom()); - - ''' - #another drawing routine - #(taken from src/generic/renderg.cpp) - #Could port this later for animating the button when clicking - - const wxCoord x = rect.x, - y = rect.y, - w = rect.width, - h = rect.height; - - dc.SetBrush(*wxTRANSPARENT_BRUSH); - - wxPen pen(*wxBLACK, 1); - - dc.SetPen(pen); - dc.DrawLine( x+w, y, x+w, y+h ); // right (outer) - dc.DrawRectangle( x, y+h, w+1, 1 ); // bottom (outer) - - pen.SetColour(wxColour(wxT("DARK GREY"))); - dc.SetPen(pen); - dc.DrawLine( x+w-1, y, x+w-1, y+h ); // right (inner) - dc.DrawRectangle( x+1, y+h-1, w-2, 1 ); // bottom (inner) - - pen.SetColour(*wxWHITE); - dc.SetPen(pen); - dc.DrawRectangle( x, y, w, 1 ); // top (outer) - dc.DrawRectangle( x, y, 1, h ); // left (outer) - dc.DrawLine( x, y+h-1, x+1, y+h-1 ); - dc.DrawLine( x+w-1, y, x+w-1, y+1 ); - ''' - - # draw the button-label - dc.SetBackgroundMode(wx.TRANSPARENT ) - dc.SetTextForeground(attr.GetTextColour() ) - dc.SetFont( attr.GetFont() ) - #dc.DrawLabel( wxT("Delete"), rect, - dc.DrawLabel( self.label, rect, - wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER_HORIZONTAL) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_defines.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_defines.py deleted file mode 100644 index b5db6fbfa..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_defines.py +++ /dev/null @@ -1,68 +0,0 @@ -from pymavlink import mavutil -import fnmatch - -miss_cmds = {} -frame_enum = {0: "Abs", 3: "Rel", 10: "AGL"} -frame_enum_rev = {v:k for k,v in frame_enum.items()} - -# auto-generate the list of mission commands -for cmd in mavutil.mavlink.enums['MAV_CMD']: - enum = mavutil.mavlink.enums['MAV_CMD'][cmd] - name = enum.name - name = name.replace('MAV_CMD_','') - if name == 'ENUM_END': - continue - miss_cmds[cmd] = name - -def cmd_reverse_lookup(command_name): - '''returns 0 if key not found''' - for key, value in miss_cmds.items(): - if (value.upper() == command_name.upper()): - return key - return 0 - -# a wildcard map from parameter descriptions to column names. If not found in this map -# then the default "Pn" is used -description_map = [ - ('Empty' , '-'), - ('Latitude*' , 'Lat'), - ('Longitude*' , 'Lon'), - ('Altitude*' , 'Alt'), - ('Minimum pitch*' , 'Pitch'), - ('Yaw*' , 'Yaw'), - ('Desired yaw*' , 'Yaw'), - ('Radius*' , 'Radius'), - ('Turns*' , 'Turns'), - ('Seconds*' , 'Time(s)'), - ('Delay in seconds*' , 'Time(s)'), - ('On / Off*' , 'Enable'), - ('Descent / Ascend' , 'Rate'), - ('Finish Altitude' , 'Altitude'), - ('Distance*' , 'Distance'), - ('Mode*' , 'Mode'), - ('Custom mode*' , 'CustomMode'), - ('Sequence*' , 'Seq'), - ('Repeat*' , 'Repeat'), - ('Speed type*' , 'SpeedType'), - ('Speed*' , 'Speed'), - ('Throttle*' , 'Throttle') - ] - -def make_column_label(command_name, description, default): - '''try to work out a reasonable column name from parameter description''' - for (pattern, label) in description_map: - if fnmatch.fnmatch(description, pattern): - return label - return default - - -def get_column_labels(command_name): - '''return dictionary of column labels if available''' - cmd = cmd_reverse_lookup(command_name) - if cmd == 0: - return {} - labels = {} - enum = mavutil.mavlink.enums['MAV_CMD'][cmd] - for col in enum.param.keys(): - labels[col] = make_column_label(command_name, enum.param[col], "P%u" % col) - return labels diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_event.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_event.py deleted file mode 100644 index 0e61051a8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/me_event.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python -''' -Event class and enums for Mission Editor -Michael Day -June 2014 -''' -#MissionEditorEvents come FROM the GUI (with a few exceptions where the Mission Editor Module sends a message to itself, e.g., MEE_TIME_TO_QUIT) -#MissionEditorGUIEvents go TO the GUI -#enum for MissionEditorEvent types -MEE_READ_WPS = 0 -MEE_WRITE_WPS = 1 -MEE_TIME_TO_QUIT = 2 -MEE_GET_WP_RAD = 3 -MEE_GET_LOIT_RAD = 4 -MEE_GET_WP_DEFAULT_ALT = 5 -MEE_WRITE_WP_NUM = 6 -MEE_LOAD_WP_FILE = 7 -MEE_SAVE_WP_FILE = 8 -MEE_SET_WP_RAD = 9 -MEE_SET_LOIT_RAD = 10 -MEE_SET_WP_DEFAULT_ALT = 11 -#enum of MissionEditorGUIEvent types -MEGE_CLEAR_MISS_TABLE = 0 -MEGE_ADD_MISS_TABLE_ROWS = 1 -MEGE_SET_MISS_ITEM = 2 -MEGE_SET_WP_RAD = 3 -MEGE_SET_LOIT_RAD = 4 -MEGE_SET_WP_DEFAULT_ALT = 5 -MEGE_SET_LAST_MAP_CLICK_POS = 6 - -class MissionEditorEvent: - def __init__(self, type, **kwargs): - self.type = type - self.arg_dict = kwargs - - if not self.type in [MEE_READ_WPS, MEE_WRITE_WPS, MEGE_CLEAR_MISS_TABLE, - MEGE_ADD_MISS_TABLE_ROWS, MEGE_SET_MISS_ITEM, MEE_TIME_TO_QUIT, - MEE_GET_WP_RAD, MEE_GET_LOIT_RAD, MEGE_SET_WP_RAD, MEGE_SET_LOIT_RAD, - MEE_GET_WP_DEFAULT_ALT, MEGE_SET_WP_DEFAULT_ALT, MEE_WRITE_WP_NUM, - MEE_LOAD_WP_FILE, MEE_SAVE_WP_FILE, MEE_SET_WP_RAD, MEE_SET_LOIT_RAD, - MEE_SET_WP_DEFAULT_ALT]: - raise TypeError("Unrecongized MissionEditorEvent type:" + str(self.type)) - - def get_type(self): - return self.type - - def get_arg(self, key): - if not key in self.arg_dict: - print("No key %s in %s" % (key, str(self.type))) - return None - return self.arg_dict[key] diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditor.wxg b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditor.wxg deleted file mode 100644 index 8285fe948..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditor.wxg +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - - Mission Editor - 820, 480 - - wxVERTICAL - - wxEXPAND - 0 - - - wxHORIZONTAL - - wxLEFT|wxALIGN_CENTER_VERTICAL - 10 - - - #0c981a - - 1 - - - 14 - default - - normal - 0 - Droid Sans - - - - - 0 - - - 0 - 10 - - - - wxEXPAND - 0 - - - wxVERTICAL - - 0 - - - 1 - - - - - 0 - - - - - on_wp_radius_changed - on_wp_radius_enter - - 50, 27 - - - - 0 - - - 1 - - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - - - on_loiter_rad_change - on_loiter_rad_enter - - 50, 27 - - - - 0 - - - - - on_loiter_dir_cb_change - - - - - - - - - 0 - - - 20 - 20 - - - - wxEXPAND - 0 - - - wxVERTICAL - - 0 - - - 1 - - - - - 0 - - - - - on_wp_default_alt_change - on_wp_default_alt_enter - - 70, 27 - - - - - - 0 - - - 20 - 20 - - - - wxEXPAND - 0 - - - wxVERTICAL - - 0 - - - 1 - - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - 1 - - - - - 0 - - - 0 - 40 - - - - 0 - - - #007fff - 1 - - 100, 17 - - - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - 1 - - - - - 0 - - - 0 - 36 - - - - 0 - - - #007fff - 1 - - 100, 17 - - - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - 1 - - - - - 0 - - - 0 - 11 - - - - 0 - - - #007fff - 1 - - - - - - - - - wxEXPAND - 0 - - - wxVERTICAL - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - - - read_wp_pushed - - - - - 0 - - - 20 - 20 - - - - 0 - - - - - write_wp_pushed - - - - - - - 0 - - - 20 - 20 - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - - - load_wp_file_pushed - - - - - 0 - - - 20 - 20 - - - - 0 - - - - - save_wp_file_pushed - - - - - - - - - - - wxEXPAND - 0 - - - 1 - 20 - 20 - 1 - 1 - 0 - 1 - 1 - 1 - wxGrid.wxGridSelectCells - - Command - P1 - P2 - P3 - P4 - Lat - Lon - Alt - Frame - Delete - Up - Down - - - on_mission_grid_cell_left_click - on_mission_grid_cell_changed - on_mission_grid_cell_select - - - - - wxEXPAND - 0 - - - wxHORIZONTAL - - 0 - - - - - add_wp_below_pushed - - - - - - - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditorFrame.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditorFrame.py deleted file mode 100755 index 3e4db3445..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_misseditor/missionEditorFrame.py +++ /dev/null @@ -1,654 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- -# -# generated by wxGlade 0.6.8 on Wed Jun 11 13:41:49 2014 -# - -from ..lib.wx_loader import wx -from wx import grid - -# begin wxGlade: dependencies -# end wxGlade - -import time, math, os - -from MAVProxy.modules.mavproxy_misseditor import me_event -MissionEditorEvent = me_event.MissionEditorEvent - -from MAVProxy.modules.mavproxy_misseditor import me_defines - -from MAVProxy.modules.mavproxy_misseditor import button_renderer - -#define column names via "enums": -ME_COMMAND_COL = 0 -ME_P1_COL = 1 -ME_P2_COL = 2 -ME_P3_COL = 3 -ME_P4_COL = 4 -ME_LAT_COL = 5 -ME_LON_COL = 6 -ME_ALT_COL = 7 -ME_FRAME_COL = 8 -ME_DELETE_COL = 9 -ME_UP_COL = 10 -ME_DOWN_COL = 11 - -class MissionEditorFrame(wx.Frame): - def __init__(self, *args, **kwds): - # begin wxGlade: MissionEditorFrame.__init__ - kwds["style"] = wx.DEFAULT_FRAME_STYLE - wx.Frame.__init__(self, *args, **kwds) - self.label_sync_state = wx.StaticText(self, wx.ID_ANY, "SYNCED \n", style=wx.ALIGN_CENTRE) - self.label_wp_radius = wx.StaticText(self, wx.ID_ANY, "WP Radius") - self.text_ctrl_wp_radius = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB) - self.label_loiter_rad = wx.StaticText(self, wx.ID_ANY, "Loiter Radius") - self.text_ctrl_loiter_radius = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB) - self.checkbox_loiter_dir = wx.CheckBox(self, wx.ID_ANY, "CW") - self.checkbox_agl = wx.CheckBox(self, wx.ID_ANY, "AGL") - self.label_default_alt = wx.StaticText(self, wx.ID_ANY, "Default Alt") - self.text_ctrl_wp_default_alt = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_PROCESS_ENTER | wx.TE_PROCESS_TAB) - self.label_home_location = wx.StaticText(self, wx.ID_ANY, "Home Location") - self.label_home_lat = wx.StaticText(self, wx.ID_ANY, "Lat") - self.label_home_lat_value = wx.StaticText(self, wx.ID_ANY, "0.0") - self.label_home_lon = wx.StaticText(self, wx.ID_ANY, "Lon") - self.label_home_lon_value = wx.StaticText(self, wx.ID_ANY, "0.0") - self.label_home_alt = wx.StaticText(self, wx.ID_ANY, "Alt (abs)") - self.label_home_alt_value = wx.StaticText(self, wx.ID_ANY, "0.0") - self.button_read_wps = wx.Button(self, wx.ID_ANY, "Read WPs") - self.button_write_wps = wx.Button(self, wx.ID_ANY, "Write WPs") - self.button_load_wp_file = wx.Button(self, wx.ID_ANY, "Load WP File") - self.button_save_wp_file = wx.Button(self, wx.ID_ANY, "Save WP File") - self.grid_mission = wx.grid.Grid(self, wx.ID_ANY, size=(1, 1)) - self.button_add_wp = wx.Button(self, wx.ID_ANY, "Add Below") - - self.__set_properties() - self.__do_layout() - - self.Bind(wx.EVT_TEXT_ENTER, self.on_wp_radius_enter, self.text_ctrl_wp_radius) - self.Bind(wx.EVT_TEXT, self.on_wp_radius_changed, self.text_ctrl_wp_radius) - self.Bind(wx.EVT_TEXT_ENTER, self.on_loiter_rad_enter, self.text_ctrl_loiter_radius) - self.Bind(wx.EVT_TEXT, self.on_loiter_rad_change, self.text_ctrl_loiter_radius) - self.Bind(wx.EVT_CHECKBOX, self.on_loiter_dir_cb_change, self.checkbox_loiter_dir) - self.Bind(wx.EVT_TEXT_ENTER, self.on_wp_default_alt_enter, self.text_ctrl_wp_default_alt) - self.Bind(wx.EVT_TEXT, self.on_wp_default_alt_change, self.text_ctrl_wp_default_alt) - self.Bind(wx.EVT_BUTTON, self.read_wp_pushed, self.button_read_wps) - self.Bind(wx.EVT_BUTTON, self.write_wp_pushed, self.button_write_wps) - self.Bind(wx.EVT_BUTTON, self.load_wp_file_pushed, self.button_load_wp_file) - self.Bind(wx.EVT_BUTTON, self.save_wp_file_pushed, self.button_save_wp_file) - self.Bind(wx.grid.EVT_GRID_CMD_CELL_CHANGE, self.on_mission_grid_cell_changed, self.grid_mission) - self.Bind(wx.grid.EVT_GRID_CMD_CELL_LEFT_CLICK, self.on_mission_grid_cell_left_click, self.grid_mission) - self.Bind(wx.grid.EVT_GRID_CMD_SELECT_CELL, self.on_mission_grid_cell_select, self.grid_mission) - self.Bind(wx.EVT_BUTTON, self.add_wp_below_pushed, self.button_add_wp) - # end wxGlade - - #use a timer to facilitate event an event handlers for events - #passed from another process. - self.timer = wx.Timer(self) - self.Bind(wx.EVT_TIMER, self.time_to_process_gui_events, self.timer) - self.timer.Start(200) - - delete_br = button_renderer.ButtonRenderer("Delete",70,20) - up_br = button_renderer.ButtonRenderer("+",20,20) - down_br = button_renderer.ButtonRenderer("-",1,1) - - self.del_attr = wx.grid.GridCellAttr() - self.del_attr.SetReadOnly(True) - self.del_attr.SetRenderer(delete_br) - - self.up_attr = wx.grid.GridCellAttr() - self.up_attr.SetReadOnly(True) - self.up_attr.SetRenderer(up_br) - - self.down_attr = wx.grid.GridCellAttr() - self.down_attr.SetReadOnly(True) - self.down_attr.SetRenderer(down_br) - - self.grid_mission.SetColAttr(ME_DELETE_COL, self.del_attr) - self.grid_mission.SetColAttr(ME_UP_COL, self.up_attr) - self.grid_mission.SetColAttr(ME_DOWN_COL, self.down_attr) - - #remember what mission we opened/saved last - self.last_mission_file_path = "" - - #remember last map click position - self.last_map_click_pos = None - - def __set_properties(self): - # begin wxGlade: MissionEditorFrame.__set_properties - self.SetTitle("Mission Editor") - self.SetSize((820, 480)) - self.label_sync_state.SetForegroundColour(wx.Colour(12, 152, 26)) - self.label_sync_state.SetFont(wx.Font(14, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "Droid Sans")) - self.text_ctrl_wp_radius.SetMinSize((50, 27)) - self.text_ctrl_loiter_radius.SetMinSize((50, 27)) - self.text_ctrl_wp_default_alt.SetMinSize((70, 27)) - self.label_home_lat_value.SetMinSize((100, 17)) - self.label_home_lat_value.SetForegroundColour(wx.Colour(0, 127, 255)) - self.label_home_lon_value.SetMinSize((100, 17)) - self.label_home_lon_value.SetForegroundColour(wx.Colour(0, 127, 255)) - self.label_home_alt_value.SetForegroundColour(wx.Colour(0, 127, 255)) - self.grid_mission.CreateGrid(0, 12) - self.grid_mission.SetRowLabelSize(20) - self.grid_mission.SetColLabelSize(20) - self.grid_mission.SetColLabelValue(0, "Command") - self.grid_mission.SetColSize(0, 150) - self.grid_mission.SetColLabelValue(1, "P1") - self.grid_mission.SetColLabelValue(2, "P2") - self.grid_mission.SetColLabelValue(3, "P3") - self.grid_mission.SetColLabelValue(4, "P4") - self.grid_mission.SetColLabelValue(5, "Lat") - self.grid_mission.SetColLabelValue(6, "Lon") - self.grid_mission.SetColLabelValue(7, "Alt") - self.grid_mission.SetColLabelValue(8, "Frame") - self.grid_mission.SetColLabelValue(9, "Delete") - self.grid_mission.SetColLabelValue(10, "Up") - self.grid_mission.SetColLabelValue(11, "Down") - # end wxGlade - - def __do_layout(self): - # begin wxGlade: MissionEditorFrame.__do_layout - sizer_3 = wx.BoxSizer(wx.VERTICAL) - sizer_16 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4 = wx.BoxSizer(wx.HORIZONTAL) - sizer_12 = wx.BoxSizer(wx.VERTICAL) - sizer_14 = wx.BoxSizer(wx.HORIZONTAL) - sizer_13 = wx.BoxSizer(wx.HORIZONTAL) - sizer_1 = wx.BoxSizer(wx.VERTICAL) - sizer_11 = wx.BoxSizer(wx.HORIZONTAL) - sizer_10 = wx.BoxSizer(wx.HORIZONTAL) - sizer_2 = wx.BoxSizer(wx.HORIZONTAL) - sizer_9 = wx.BoxSizer(wx.VERTICAL) - sizer_5 = wx.BoxSizer(wx.VERTICAL) - sizer_15 = wx.BoxSizer(wx.HORIZONTAL) - sizer_4.Add(self.label_sync_state, 0, wx.LEFT | wx.ALIGN_CENTER_VERTICAL, 10) - sizer_4.Add((10, 0), 0, 0, 0) - sizer_5.Add(self.label_wp_radius, 0, 0, 0) - sizer_5.Add(self.text_ctrl_wp_radius, 0, 0, 0) - sizer_5.Add(self.label_loiter_rad, 0, 0, 0) - sizer_15.Add(self.text_ctrl_loiter_radius, 0, 0, 0) - sizer_15.Add(self.checkbox_loiter_dir, 0, 0, 0) - sizer_5.Add(sizer_15, 1, wx.EXPAND, 0) - sizer_4.Add(sizer_5, 0, wx.EXPAND, 0) - sizer_4.Add((20, 20), 0, 0, 0) - sizer_9.Add(self.label_default_alt, 0, 0, 0) - sizer_9.Add(self.text_ctrl_wp_default_alt, 0, 0, 0) - sizer_4.Add(sizer_9, 0, wx.EXPAND, 0) - sizer_4.Add((20, 20), 0, 0, 0) - sizer_1.Add(self.label_home_location, 0, 0, 0) - sizer_2.Add(self.label_home_lat, 0, 0, 0) - sizer_2.Add((40, 0), 0, 0, 0) - sizer_2.Add(self.label_home_lat_value, 0, 0, 0) - sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) - sizer_10.Add(self.label_home_lon, 0, 0, 0) - sizer_10.Add((36, 0), 0, 0, 0) - sizer_10.Add(self.label_home_lon_value, 0, 0, 0) - sizer_1.Add(sizer_10, 1, wx.EXPAND, 0) - sizer_11.Add(self.label_home_alt, 0, 0, 0) - sizer_11.Add((11, 0), 0, 0, 0) - sizer_11.Add(self.label_home_alt_value, 0, 0, 0) - sizer_1.Add(sizer_11, 1, wx.EXPAND, 0) - sizer_4.Add(sizer_1, 0, wx.EXPAND, 0) - sizer_13.Add(self.button_read_wps, 0, 0, 0) - sizer_13.Add((20, 20), 0, 0, 0) - sizer_13.Add(self.button_write_wps, 0, 0, 0) - sizer_12.Add(sizer_13, 1, wx.EXPAND, 0) - sizer_12.Add((20, 20), 0, 0, 0) - sizer_14.Add(self.button_load_wp_file, 0, 0, 0) - sizer_14.Add((20, 20), 0, 0, 0) - sizer_14.Add(self.button_save_wp_file, 0, 0, 0) - sizer_12.Add(sizer_14, 1, wx.EXPAND, 0) - sizer_4.Add(sizer_12, 0, wx.EXPAND, 0) - sizer_3.Add(sizer_4, 0, wx.EXPAND, 0) - sizer_3.Add(self.grid_mission, 1, wx.EXPAND, 0) - sizer_16.Add(self.button_add_wp, 0, 0, 0) - sizer_3.Add(sizer_16, 0, wx.EXPAND, 0) - self.SetSizer(sizer_3) - self.Layout() - # end wxGlade - - def set_event_queue(self, q): - self.event_queue = q - - def set_event_queue_lock(self, l): - self.event_queue_lock = l - - def set_gui_event_queue(self, q): - self.gui_event_queue = q - - def set_gui_event_queue_lock(self, l): - self.gui_event_queue_lock = l - - def time_to_process_gui_events(self, evt): - event_processed = False - queue_access_start_time = time.time() - self.gui_event_queue_lock.acquire() - while self.gui_event_queue.qsize() > 0 and (time.time() < queue_access_start_time) < 0.6: - event_processed = True - event = self.gui_event_queue.get() - if event.get_type() == me_event.MEGE_CLEAR_MISS_TABLE: - self.grid_mission.ClearGrid() - if (self.grid_mission.GetNumberRows() > 0): - self.grid_mission.DeleteRows(0, - self.grid_mission.GetNumberRows()) - self.grid_mission.SetDefaultColSize(50, True) - self.grid_mission.SetColSize(ME_COMMAND_COL, 150) - self.grid_mission.SetColSize(ME_LAT_COL, 100) - self.grid_mission.SetColSize(ME_LON_COL, 100) - self.grid_mission.SetColSize(ME_ALT_COL, 75) - - self.grid_mission.ForceRefresh() - elif event.get_type() == me_event.MEGE_ADD_MISS_TABLE_ROWS: - num_new_rows = event.get_arg("num_rows") - if (num_new_rows < 1): - continue - old_num_rows = self.grid_mission.GetNumberRows() - self.grid_mission.AppendRows(num_new_rows) - self.prep_new_rows(old_num_rows, num_new_rows) - self.grid_mission.ForceRefresh() - elif event.get_type() == me_event.MEGE_SET_MISS_ITEM: - row = event.get_arg("num") - 1 - command = event.get_arg("command") - - if row == -1: - #1st mission item is special: it's the immutable home poitn - self.label_home_lat_value.SetLabel( - str(event.get_arg("lat"))) - self.label_home_lon_value.SetLabel( - str(event.get_arg("lon"))) - self.label_home_alt_value.SetLabel( - str(event.get_arg("alt"))) - - else: #not the first mission item - if (me_defines.miss_cmds.has_key(command)): - self.grid_mission.SetCellValue(row, ME_COMMAND_COL, - me_defines.miss_cmds[command]) - else: - self.grid_mission.SetCellValue(row, ME_COMMAND_COL, - str(command)) - - self.grid_mission.SetCellValue(row, ME_P1_COL, - str(event.get_arg("param1"))) - self.grid_mission.SetCellValue(row, ME_P2_COL, - str(event.get_arg("param2"))) - self.grid_mission.SetCellValue(row, ME_P3_COL, - str(event.get_arg("param3"))) - self.grid_mission.SetCellValue(row, ME_P4_COL, - str(event.get_arg("param4"))) - self.grid_mission.SetCellValue(row, ME_LAT_COL, - str(event.get_arg("lat"))) - self.grid_mission.SetCellValue(row, ME_LON_COL, - str(event.get_arg("lon"))) - self.grid_mission.SetCellValue(row, ME_ALT_COL, - "%.2f" % event.get_arg("alt")) - - frame_num = event.get_arg("frame") - if (me_defines.frame_enum.has_key(frame_num)): - self.grid_mission.SetCellValue(row, ME_FRAME_COL, - me_defines.frame_enum[frame_num]) - else: - self.grid_mission.SetCellValue(row, ME_FRAME_COL, "Und") - - - elif event.get_type() == me_event.MEGE_SET_WP_RAD: - self.text_ctrl_wp_radius.SetValue(str(event.get_arg("wp_rad"))) - self.text_ctrl_wp_radius.SetForegroundColour(wx.Colour(0, 0, 0)) - elif event.get_type() == me_event.MEGE_SET_LOIT_RAD: - loiter_radius = event.get_arg("loit_rad") - self.text_ctrl_loiter_radius.SetValue( - str(math.fabs(loiter_radius))) - self.text_ctrl_loiter_radius.SetForegroundColour(wx.Colour(0, 0, 0)) - if (loiter_radius < 0.0): - self.checkbox_loiter_dir.SetValue(False) - else: - self.checkbox_loiter_dir.SetValue(True) - elif event.get_type() == me_event.MEGE_SET_WP_DEFAULT_ALT: - self.text_ctrl_wp_default_alt.SetValue(str( - event.get_arg("def_wp_alt"))) - self.text_ctrl_wp_default_alt.SetForegroundColour(wx.Colour(0, 0, 0)) - elif event.get_type() == me_event.MEGE_SET_LAST_MAP_CLICK_POS: - self.last_map_click_pos = event.get_arg("click_pos") - - self.gui_event_queue_lock.release() - - if (event_processed == True): - #redraw window to apply changes - self.Refresh() - self.Update() - - def prep_new_row(self, row_num): - command_choices = me_defines.miss_cmds.values() - command_choices.sort() - - cell_ed = wx.grid.GridCellChoiceEditor(command_choices) - self.grid_mission.SetCellEditor(row_num, ME_COMMAND_COL, cell_ed) - self.grid_mission.SetCellValue(row_num, ME_COMMAND_COL, "NAV_WAYPOINT") - - for i in range(1, 7): - self.grid_mission.SetCellValue(row_num, i, "0.0") - - #set altitude to default: - self.grid_mission.SetCellValue(row_num, ME_ALT_COL, - self.text_ctrl_wp_default_alt.GetValue()) - - #populate frm cell editor and set to default value - - frame_cell_ed = wx.grid.GridCellChoiceEditor(me_defines.frame_enum.values()) - self.grid_mission.SetCellEditor(row_num, ME_FRAME_COL, frame_cell_ed) - - # default to previous rows frame - if row_num > 0: - frame = self.grid_mission.GetCellValue(row_num-1, ME_FRAME_COL) - if frame not in ["Rel", "AGL"]: - frame = "Rel" - else: - frame = "Rel" - self.grid_mission.SetCellValue(row_num, ME_FRAME_COL, frame) - - #this makes newest row always have the cursor in it, - #making the "Add Below" button work like I want: - self.grid_mission.SetGridCursor(row_num, ME_COMMAND_COL) - - def prep_new_rows(self, start_row, num_rows): - num_remaining = num_rows - current_row = start_row - while num_remaining > 0: - self.prep_new_row(current_row) - current_row = current_row + 1 - num_remaining = num_remaining - 1 - - def set_modified_state(self, modified): - if (modified): - self.label_sync_state.SetLabel("MODIFIED") - self.label_sync_state.SetForegroundColour(wx.Colour(255, 0, 0)) - else: - self.label_sync_state.SetLabel("SYNCED") - self.label_sync_state.SetForegroundColour(wx.Colour(12, 152, 26)) - - def read_wp_pushed(self, event): # wxGlade: MissionEditorFrame. - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_READ_WPS)) - - #sneak in some queries about a few other items as well: - self.event_queue.put(MissionEditorEvent(me_event.MEE_GET_WP_RAD)) - self.event_queue.put(MissionEditorEvent(me_event.MEE_GET_LOIT_RAD)) - self.event_queue.put(MissionEditorEvent(me_event.MEE_GET_WP_DEFAULT_ALT)) - - self.event_queue_lock.release() - event.Skip() - - #TODO: the read actually has to succeed before I can say this: - self.set_modified_state(False) - - def write_wp_pushed(self, event): # wxGlade: MissionEditorFrame. - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_WRITE_WPS,count= - self.grid_mission.GetNumberRows()+1)) - - #home point first: - lat = float(self.label_home_lat_value.GetLabel()) - lon = float(self.label_home_lon_value.GetLabel()) - alt = float(self.label_home_alt_value.GetLabel()) - self.event_queue.put(MissionEditorEvent(me_event.MEE_WRITE_WP_NUM, - num=0,cmd_id=16,p1=0.0,p2=0.0,p3=0.0,p4=0.0, - lat=lat,lon=lon,alt=alt,frame=0)) - - for i in range(0, self.grid_mission.GetNumberRows()): - cmd_id = me_defines.cmd_reverse_lookup(self.grid_mission.GetCellValue(i,0)) - #don't lock up the misseditor on missing input! - #anything missing will just be zero - try: - p1 = float(self.grid_mission.GetCellValue(i,ME_P1_COL)) - except: - p1 = 0.0 - try: - p2 = float(self.grid_mission.GetCellValue(i,ME_P2_COL)) - except: - p2 = 0.0 - try: - p3 = float(self.grid_mission.GetCellValue(i,ME_P3_COL)) - except: - p3 = 0.0 - try: - p4 = float(self.grid_mission.GetCellValue(i,ME_P4_COL)) - except: - p4 = 0.0 - try: - lat = float(self.grid_mission.GetCellValue(i,ME_LAT_COL)) - except: - lat = 0.0 - try: - lon = float(self.grid_mission.GetCellValue(i,ME_LON_COL)) - except: - lon = 0.0 - try: - alt = float(self.grid_mission.GetCellValue(i,ME_ALT_COL)) - except: - alt = 0.0 - try: - frame = float(me_defines.frame_enum_rev[self.grid_mission.GetCellValue(i,ME_FRAME_COL)]) - except: - frame = 0.0 - - self.event_queue.put(MissionEditorEvent(me_event.MEE_WRITE_WP_NUM, - num=i+1,cmd_id=cmd_id,p1=p1,p2=p2,p3=p3,p4=p4, - lat=lat,lon=lon,alt=alt,frame=frame)) - - self.event_queue_lock.release() - - self.set_modified_state(False) - - event.Skip() - - def load_wp_file_pushed(self, event): # wxGlade: MissionEditorFrame. - fd = wx.FileDialog(self, "Open Mission File", os.getcwd(), "", - "*.wp|*", wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) - if (fd.ShowModal() == wx.ID_CANCEL): - return #user changed their mind... - - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_LOAD_WP_FILE, - path=fd.GetPath())) - self.event_queue_lock.release() - - self.last_mission_file_path = fd.GetPath() - - event.Skip() - - def add_wp_below_pushed(self, event): # wxGlade: MissionEditorFrame. - row_selected = self.grid_mission.GetGridCursorRow() - if (row_selected < 0): - row_selected = self.grid_mission.GetNumberRows()-1 - - self.grid_mission.InsertRows(row_selected+1) - self.prep_new_row(row_selected+1) - - #set lat/lon based on last map click position: - if self.last_map_click_pos is not None: - self.grid_mission.SetCellValue(row_selected + 1, ME_LAT_COL, - str(self.last_map_click_pos[0])) - self.grid_mission.SetCellValue(row_selected + 1, ME_LON_COL, - str(self.last_map_click_pos[1])) - - #highlight new row - self.grid_mission.SelectRow(row_selected+1) - self.set_modified_state(True) - - event.Skip() - - def save_wp_file_pushed(self, event): # wxGlade: MissionEditorFrame. - fd = wx.FileDialog(self, "Save Mission File", os.getcwd(), - self.last_mission_file_path, "*.wp|*", - wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) - if (fd.ShowModal() == wx.ID_CANCEL): - return #user change their mind... - - #ask mp_misseditor module to save file - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_SAVE_WP_FILE, - path=fd.GetPath())) - self.event_queue_lock.release() - - self.last_mission_file_path = fd.GetPath() - - event.Skip() - - def on_mission_grid_cell_select(self, event): # wxGlade: MissionEditorFrame. - command = self.grid_mission.GetCellValue(event.GetRow(), ME_COMMAND_COL) - self.grid_mission.SetColLabelValue(ME_P1_COL, "P1") - self.grid_mission.SetColLabelValue(ME_P2_COL, "P2") - self.grid_mission.SetColLabelValue(ME_P3_COL, "P3") - self.grid_mission.SetColLabelValue(ME_P4_COL, "P4") - self.grid_mission.SetColLabelValue(ME_LAT_COL, "Lat") - self.grid_mission.SetColLabelValue(ME_LON_COL, "Lon") - self.grid_mission.SetColLabelValue(ME_ALT_COL, "Alt") - - col_labels = me_defines.get_column_labels(command) - for col in col_labels.keys(): - self.grid_mission.SetColLabelValue(col, col_labels[col]) - - event.Skip() - - def on_mission_grid_cell_left_click(self, event): # wxGlade: MissionEditorFrame. - #delete column? - if (event.GetCol() == ME_DELETE_COL): - row = event.GetRow() - dlg = wx.MessageDialog(self, 'Sure you want to delete item ' + str(row+1) + '?', 'Really Delete?', wx.YES_NO | wx.ICON_EXCLAMATION) - result = dlg.ShowModal() - - if (result == wx.ID_YES): - #delete this row - self.grid_mission.DeleteRows(row) - self.set_modified_state(True) - #up column? - elif (event.GetCol() == ME_UP_COL): - row = event.GetRow() - if (row == 0): #can't go any higher - return - #insert a copy of this row above the previous row, then delete this row - self.grid_mission.InsertRows(row-1) - self.prep_new_row(row-1) - for i in range(0, self.grid_mission.GetNumberCols()): - self.grid_mission.SetCellValue(row-1, i, - self.grid_mission.GetCellValue(row+1,i)) - self.grid_mission.DeleteRows(row+1) - #move the cursor to where the row moved and highlight the row - self.grid_mission.SetGridCursor(row-1,ME_UP_COL) - self.grid_mission.SelectRow(row-1) - - self.set_modified_state(True) - - #Return so we don't skip the event so the cursor will go where expected - return - - #down column? - elif (event.GetCol() == ME_DOWN_COL): - row = event.GetRow() - if (row == self.grid_mission.GetNumberRows() - 1): #can't go lower - return - - #insert a copy of this row 2 rows down, then delete this row - self.grid_mission.InsertRows(row+2) - self.prep_new_row(row+2) - for i in range(0, self.grid_mission.GetNumberCols()): - self.grid_mission.SetCellValue(row+2, i, - self.grid_mission.GetCellValue(row, i)) - self.grid_mission.DeleteRows(row) - - #move the cursor to where the row moved and highlight the row - self.grid_mission.SetGridCursor(row+1,ME_DOWN_COL) - self.grid_mission.SelectRow(row+1) - - self.set_modified_state(True) - - #Return so we don't skip the event so the cursor will go where expected - return - - event.Skip() - - def on_mission_grid_cell_changed(self, event): # wxGlade: MissionEditorFrame. - self.set_modified_state(True) - event.Skip() - def on_wp_radius_changed(self, event): # wxGlade: MissionEditorFrame. - #change text red - self.text_ctrl_wp_radius.SetForegroundColour(wx.Colour(255, 0, 0)) - - event.Skip() - def on_wp_radius_enter(self, event): # wxGlade: MissionEditorFrame. - try: - wp_radius = float(self.text_ctrl_wp_radius.GetValue()) - except Exception as e: - print (e.strerror) - return - - #text back to black - self.text_ctrl_wp_radius.SetForegroundColour(wx.Colour(0, 0, 0)) - - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_SET_WP_RAD, - rad=wp_radius)) - self.event_queue_lock.release() - - event.Skip() - - def send_loiter_rad_msg(self): - try: - loit_radius = float(self.text_ctrl_loiter_radius.GetValue()) - except Exception as e: - print (e.strerror) - return - - if (not self.checkbox_loiter_dir.IsChecked()): - loit_radius = loit_radius * -1.0 - - #text back to black - self.text_ctrl_loiter_radius.SetForegroundColour(wx.Colour(0, 0, 0)) - - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_SET_LOIT_RAD, - rad=loit_radius)) - self.event_queue_lock.release() - - def on_loiter_rad_enter(self, event): # wxGlade: MissionEditorFrame. - self.send_loiter_rad_msg() - - event.Skip() - - def on_loiter_rad_change(self, event): # wxGlade: MissionEditorFrame. - #change text red - self.text_ctrl_loiter_radius.SetForegroundColour(wx.Colour(255, 0, 0)) - - event.Skip() - def on_loiter_dir_cb_change(self, event): # wxGlade: MissionEditorFrame. - self.send_loiter_rad_msg() - event.Skip() - - def on_wp_default_alt_enter(self, event): # wxGlade: MissionEditorFrame. - try: - def_alt = float(self.text_ctrl_wp_default_alt.GetValue()) - except Exception as e: - print (e.strerror) - return - - #text back to black - self.text_ctrl_wp_default_alt.SetForegroundColour(wx.Colour(0, 0, 0)) - - self.event_queue_lock.acquire() - self.event_queue.put(MissionEditorEvent(me_event.MEE_SET_WP_DEFAULT_ALT, - alt=def_alt)) - self.event_queue_lock.release() - - event.Skip() - - def on_wp_default_alt_change(self, event): # wxGlade: MissionEditorFrame. - #change text red - self.text_ctrl_wp_default_alt.SetForegroundColour(wx.Colour(255, 0, 0)) - - event.Skip() -# end of class MissionEditorFrame -if __name__ == "__main__": - app = wx.App(False) - wx.InitAllImageHandlers() - missionEditor = (None, wx.ID_ANY, "") - app.SetTopWindow(missionEditor) - missionEditor.Show() - app.MainLoop() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/__init__.py deleted file mode 100644 index 85e0d088f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/__init__.py +++ /dev/null @@ -1,45 +0,0 @@ -import os -import sys -import webbrowser - -import mmap_server - -g_module_context = None - -from MAVProxy.modules.lib import mp_module - -class MMapModule(mp_module.MPModule): - def __init__(self, mpstate): - super(MMapModule, self).__init__(mpstate, 'mmap', 'modest map display') - self.lat = None - self.lon = None - self.alt = None - self.speed = None - self.airspeed = None - self.groundspeed = None - self.heading = 0 - self.wp_change_time = 0 - self.fence_change_time = 0 - self.server = None - self.server = mmap_server.start_server('127.0.0.1', port=9999, module_state=self) - webbrowser.open('http://127.0.0.1:9999/', autoraise=True) - - def unload(self): - """unload module""" - self.server.terminate() - - def mavlink_packet(self, m): - """handle an incoming mavlink packet""" - if m.get_type() == 'GPS_RAW': - (self.lat, self.lon) = (m.lat, m.lon) - elif m.get_type() == 'GPS_RAW_INT': - (self.lat, self.lon) = (m.lat / 1.0e7, m.lon / 1.0e7) - elif m.get_type() == "VFR_HUD": - self.heading = m.heading - self.alt = m.alt - self.airspeed = m.airspeed - self.groundspeed = m.groundspeed - -def init(mpstate): - '''initialise module''' - return MMapModule(mpstate) \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bing.js b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bing.js deleted file mode 100644 index 0aec623dd..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bing.js +++ /dev/null @@ -1,68 +0,0 @@ -// namespacing! -if (!MM) { - MM = { }; -} - -MM.BingProvider = function(key, style, onready) { - - this.key = key; - this.style = style; - - // hit the imagery metadata service - // http://msdn.microsoft.com/en-us/library/ff701716.aspx - - // Aerial, AerialWithLabels, Road - var script = document.createElement('script'); - script.type = 'text/javascript'; - document.getElementsByTagName('head')[0].appendChild(script); - script.src = 'http://dev.virtualearth.net/REST/V1/Imagery/Metadata/'+style+'/?key='+key+'&jsonp=onBingComplete'; - - function toMicrosoft(column, row, zoom) { - // generate zoom string by interleaving row/col bits - // NB:- this assumes you're only asking for positive row/cols - var quadKey = ""; - for (var i = 1; i <= zoom; i++) { - var rowBit = (row >> zoom-i) & 1; - var colBit = (column >> zoom-i) & 1; - quadKey += (rowBit << 1) + colBit; - } - return quadKey; - } - - var provider = this; - - window.onBingComplete = function(data) { - var resourceSets = data.resourceSets; - for (var i = 0; i < resourceSets.length; i++) { - var resources = data.resourceSets[i].resources; - for (var j = 0; j < resources.length; j++) { - var resource = resources[j]; - - var serverSalt = Math.floor(Math.random() * 4); - provider.getTile = function(coord) { - var quadKey = toMicrosoft(coord.column, coord.row, coord.zoom); - // this is so that requests will be consistent in this session, rather than totally random - var server = Math.abs(serverSalt + coord.column + coord.row + coord.zoom) % 4; - return resource.imageUrl - .replace('{quadkey}',quadKey) - .replace('{subdomain}', resource.imageUrlSubdomains[server]); - }; - // TODO: use resource.imageWidth - // TODO: use resource.imageHeight - } - } - - // TODO: display data.brandLogoUri - // TODO: display data.copyright - onready(provider); - }; -}; - -MM.BingProvider.prototype = { - key: null, - style: null, - subdomains: null, - getTileUrl: null -}; - -MM.extend(MM.BingProvider, MM.MapProvider); diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bluemarble.js b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bluemarble.js deleted file mode 100644 index 759115bf8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/bluemarble.js +++ /dev/null @@ -1,10 +0,0 @@ -MM.BlueMarbleProvider = function() { - MM.MapProvider.call(this, function(coordinate) { - coordinate = this.sourceCoordinate(coordinate); - if (!coordinate) return null; - var img = coordinate.zoom.toFixed(0) +'-r'+ coordinate.row.toFixed(0) +'-c'+ coordinate.column.toFixed(0) + '.jpg'; - return 'http://s3.amazonaws.com/com.modestmaps.bluemarble/' + img; - }); -}; - -com.modestmaps.extend(MM.BlueMarbleProvider, MM.MapProvider); diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-md.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-md.png deleted file mode 100644 index 04d84ab8e74961118986532c220ed2bc68d344a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 880 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!PjIjR$sgB5?g1&LByV>YhX3vTXZ8bmoCO|{ z#X#BvjNMLV+W}Q<@^o=$=z~WVb-xI9Tr)Z zwLy^_Zdd-4q<>>BYgZ{g@6)#9mkqn)BBgnIV$S#kF#(N40YCI}m%e}L{&QohsLtsq zsio6R{#xokeV!fWR4)DUTX{(Rvu!mzR=d`uhMrxz^}^YQJ!@83Zjrk6dzReumah?Y zyirzjCx@CYzvgWHy7>I+`1EVLL@ypY*aTFyLFv|x435`_x;lPOnkRLrN^3uRQ<>DJ zRcXg(by%I^czps$o#uFbW>&{8An(+y4yp7O(`{;tSyO zvAXVrVaU4k1xkda2QfY1xv#+__xiQ!2 zSHUHLYn?zRl{rV;4s)?K=ianyqui}qu>#lDeZ6q+>zp;~*0$;GJG)2HR#U#+?^{~S z)^yzx^Hr&)n}nt%MsR0msB&;8D(VP`9de3L&}nJi;1B^6Xxtzmw%SZ%{)@WhD_TRp z{F82f8h_N<+TZS&h3NmPrf}ne4Q~ z^4JdZUEc^bYTAZr@{Jpi6IO$274tjA#fAFK4BkL-)e_f;l9a@fRIB8oR3OD*WMF8d zYhbKvWD;U%X=P++WniLfU}9xp@ZD(XJQNMN`6-!cmAEyu<;yC8Z1!~Zb6Mw<&;$S} C16zFn diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-sm.png b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/drone-sm.png deleted file mode 100644 index 77ee10c92f65a476f4ac410f05cfc21259e9802f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmeAS@N?(olHy`uVBq!ia0vp^(||aIg9S*Q3u3GWQcOwS?k)`f+xyS#2l6-zJR*yM zvEaktaqI2vz21i%BpN=7+b`g_%Eu)s)8xz^cw*6uMWQlXp&U-% zA1FA=Xmu>}o^5}(!StG3zMlB4sM*gepC7op{;8Cgl9LMrgv|f;B)}|j!*<1TqiG>= z#s-^8W;@oNZGUqp@XEfPqBS9M44SLVU8klM_wtWPd%Is0N+%i-ry5L6DoCI0NMEzL_KLZ+A#Uc_KS;PKrdzU)9e74Gd&C

qFZ^{ z&z=4^^TrSL#6sclxYY8x`F|2RrT@+LJXM?hcWe8M^FI?ZR) zea2P3JC5kKPYst`b8M}%^5U}D@9&@Iey%NjXNnNW4xmMX#L(C5Pp|%B<+XiY#MOBR z`VTOjX4KZJ*<#IdI-KJS^FHQjZK4wT4Gpf~u-tOOjUftDnm{r-UW|)_UU) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/index.html b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/index.html deleted file mode 100644 index 4bf7f3696..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/index.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - - - - - - - -modest mavmap - - -

-ALT m | -HDG | -GNDSPD m/s | -AIRSPD m/s | -LINK | -
- -
-
-(, ) -
-
-
- - diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/modestmaps.js b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/modestmaps.js deleted file mode 100644 index b96cebb1b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_app/modestmaps.js +++ /dev/null @@ -1,2940 +0,0 @@ -/*! - * Modest Maps JS v1.0.0-beta1 - * http://modestmaps.com/ - * - * Copyright (c) 2011 Stamen Design, All Rights Reserved. - * - * Open source under the BSD License. - * http://creativecommons.org/licenses/BSD/ - * - * Versioned using Semantic Versioning (v.major.minor.patch) - * See CHANGELOG and http://semver.org/ for more details. - * - */ - -var previousMM = MM; - -// namespacing for backwards-compatibility -if (!com) { - var com = {}; - if (!com.modestmaps) com.modestmaps = {}; -} - -var MM = com.modestmaps = { - noConflict: function() { - MM = previousMM; - return this; - } -}; - -(function(MM) { - // Make inheritance bearable: clone one level of properties - MM.extend = function(child, parent) { - for (var property in parent.prototype) { - if (typeof child.prototype[property] == "undefined") { - child.prototype[property] = parent.prototype[property]; - } - } - return child; - }; - - MM.getFrame = function () { - // native animation frames - // http://webstuff.nfshost.com/anim-timing/Overview.html - // http://dev.chromium.org/developers/design-documents/requestanimationframe-implementation - // http://paulirish.com/2011/requestanimationframe-for-smart-animating/ - // can't apply these directly to MM because Chrome needs window - // to own webkitRequestAnimationFrame (for example) - // perhaps we should namespace an alias onto window instead? - // e.g. window.mmRequestAnimationFrame? - return function(callback) { - (window.requestAnimationFrame || - window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame || - window.msRequestAnimationFrame || - function (callback) { - window.setTimeout(function () { - callback(+new Date()); - }, 10); - })(callback); - }; - }(); - - // Inspired by LeafletJS - MM.transformProperty = (function(props) { - if (!this.document) return; // node.js safety - var style = document.documentElement.style; - for (var i = 0; i < props.length; i++) { - if (props[i] in style) { - return props[i]; - } - } - return false; - })(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']); - - MM.matrixString = function(point) { - // Make the result of point.scale * point.width a whole number. - if (point.scale * point.width % 1) { - point.scale += (1 - point.scale * point.width % 1) / point.width; - } - - var scale = point.scale || 1; - if (MM._browser.webkit3d) { - // return 'scale3d(' + scale + ',' + scale + ', 1) translate3d(' + point.x.toFixed(6) + 'px,' + point.y.toFixed(6) + 'px, 0px)'; - return 'scale3d(' + scale + ',' + scale + ', 1) translate3d(' + point.x.toFixed(0) + 'px,' + point.y.toFixed(0) + 'px, 0px)'; - } else { - return 'scale(' + scale + ',' + scale + ') translate(' + point.x.toFixed(6) + 'px,' + point.y.toFixed(6) + 'px)'; - } - }; - - MM._browser = (function(window) { - return { - webkit: ('WebKitCSSMatrix' in window), - webkit3d: ('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()) - }; - })(this); // use this for node.js global - - MM.moveElement = function(el, point) { - if (MM.transformProperty) { - // Optimize for identity transforms, where you don't actually - // need to change this element's string. Browsers can optimize for - // the .style.left case but not for this CSS case. - if (!point.scale) point.scale = 1; - if (!point.width) point.width = 0; - if (!point.height) point.height = 0; - var ms = MM.matrixString(point); - if (el[MM.transformProperty] !== ms) { - el.style[MM.transformProperty] = - el[MM.transformProperty] = ms; - } - } else { - el.style.left = point.x + 'px'; - el.style.top = point.y + 'px'; - // Don't set width unless asked to: this is performance-intensive - // and not always necessary - if (point.width && point.height && point.scale) { - el.style.width = Math.ceil(point.width * point.scale) + 'px'; - el.style.height = Math.ceil(point.height * point.scale) + 'px'; - } - } - }; - - // Events - // Cancel an event: prevent it from bubbling - MM.cancelEvent = function(e) { - // there's more than one way to skin this cat - e.cancelBubble = true; - e.cancel = true; - e.returnValue = false; - if (e.stopPropagation) { e.stopPropagation(); } - if (e.preventDefault) { e.preventDefault(); } - return false; - }; - - // From underscore.js - MM.bind = function(func, obj) { - var slice = Array.prototype.slice; - var nativeBind = Function.prototype.bind; - if (func.bind === nativeBind && nativeBind) { - return nativeBind.apply(func, slice.call(arguments, 1)); - } - var args = slice.call(arguments, 2); - return function() { - return func.apply(obj, args.concat(slice.call(arguments))); - }; - }; - - MM.coerceLayer = function(layerish) { - if (typeof layerish == 'string') { - // Probably a template string - return new MM.Layer(new MM.TemplatedMapProvider(layerish)); - } else if ('draw' in layerish && typeof layerish.draw == 'function') { - // good enough, though we should probably enforce .parent and .destroy() too - return layerish; - } else { - // probably a MapProvider - return new MM.Layer(layerish); - } - }; - - // see http://ejohn.org/apps/jselect/event.html for the originals - MM.addEvent = function(obj, type, fn) { - if (obj.addEventListener) { - obj.addEventListener(type, fn, false); - if (type == 'mousewheel') { - obj.addEventListener('DOMMouseScroll', fn, false); - } - } else if (obj.attachEvent) { - obj['e'+type+fn] = fn; - obj[type+fn] = function(){ obj['e'+type+fn](window.event); }; - obj.attachEvent('on'+type, obj[type+fn]); - } - }; - - MM.removeEvent = function( obj, type, fn ) { - if (obj.removeEventListener) { - obj.removeEventListener(type, fn, false); - if (type == 'mousewheel') { - obj.removeEventListener('DOMMouseScroll', fn, false); - } - } else if (obj.detachEvent) { - obj.detachEvent('on'+type, obj[type+fn]); - obj[type+fn] = null; - } - }; - - // Cross-browser function to get current element style property - MM.getStyle = function(el,styleProp) { - if (el.currentStyle) - return el.currentStyle[styleProp]; - else if (window.getComputedStyle) - return document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp); - }; - // Point - MM.Point = function(x, y) { - this.x = parseFloat(x); - this.y = parseFloat(y); - }; - - MM.Point.prototype = { - x: 0, - y: 0, - toString: function() { - return "(" + this.x.toFixed(3) + ", " + this.y.toFixed(3) + ")"; - }, - copy: function() { - return new MM.Point(this.x, this.y); - } - }; - - // Get the euclidean distance between two points - MM.Point.distance = function(p1, p2) { - return Math.sqrt( - Math.pow(p2.x - p1.x, 2) + - Math.pow(p2.y - p1.y, 2)); - }; - - // Get a point between two other points, biased by `t`. - MM.Point.interpolate = function(p1, p2, t) { - return new MM.Point( - p1.x + (p2.x - p1.x) * t, - p1.y + (p2.y - p1.y) * t); - }; - // Coordinate - // ---------- - // An object representing a tile position, at as specified zoom level. - // This is not necessarily a precise tile - `row`, `column`, and - // `zoom` can be floating-point numbers, and the `container()` function - // can be used to find the actual tile that contains the point. - MM.Coordinate = function(row, column, zoom) { - this.row = row; - this.column = column; - this.zoom = zoom; - }; - - MM.Coordinate.prototype = { - - row: 0, - column: 0, - zoom: 0, - - toString: function() { - return "(" + this.row.toFixed(3) + - ", " + this.column.toFixed(3) + - " @" + this.zoom.toFixed(3) + ")"; - }, - // Quickly generate a string representation of this coordinate to - // index it in hashes. - toKey: function() { - // We've tried to use efficient hash functions here before but we took - // them out. Contributions welcome but watch out for collisions when the - // row or column are negative and check thoroughly (exhaustively) before - // committing. - return this.zoom + ',' + this.row + ',' + this.column; - }, - // Clone this object. - copy: function() { - return new MM.Coordinate(this.row, this.column, this.zoom); - }, - // Get the actual, rounded-number tile that contains this point. - container: function() { - // using floor here (not parseInt, ~~) because we want -0.56 --> -1 - return new MM.Coordinate(Math.floor(this.row), - Math.floor(this.column), - Math.floor(this.zoom)); - }, - // Recalculate this Coordinate at a different zoom level and return the - // new object. - zoomTo: function(destination) { - var power = Math.pow(2, destination - this.zoom); - return new MM.Coordinate(this.row * power, - this.column * power, - destination); - }, - // Recalculate this Coordinate at a different relative zoom level and return the - // new object. - zoomBy: function(distance) { - var power = Math.pow(2, distance); - return new MM.Coordinate(this.row * power, - this.column * power, - this.zoom + distance); - }, - // Move this coordinate up by `dist` coordinates - up: function(dist) { - if (dist === undefined) dist = 1; - return new MM.Coordinate(this.row - dist, this.column, this.zoom); - }, - // Move this coordinate right by `dist` coordinates - right: function(dist) { - if (dist === undefined) dist = 1; - return new MM.Coordinate(this.row, this.column + dist, this.zoom); - }, - // Move this coordinate down by `dist` coordinates - down: function(dist) { - if (dist === undefined) dist = 1; - return new MM.Coordinate(this.row + dist, this.column, this.zoom); - }, - // Move this coordinate left by `dist` coordinates - left: function(dist) { - if (dist === undefined) dist = 1; - return new MM.Coordinate(this.row, this.column - dist, this.zoom); - } - }; - // Location - // -------- - MM.Location = function(lat, lon) { - this.lat = parseFloat(lat); - this.lon = parseFloat(lon); - }; - - MM.Location.prototype = { - lat: 0, - lon: 0, - toString: function() { - return "(" + this.lat.toFixed(3) + ", " + this.lon.toFixed(3) + ")"; - }, - copy: function() { - return new MM.Location(this.lat, this.lon); - } - }; - - // returns approximate distance between start and end locations - // - // default unit is meters - // - // you can specify different units by optionally providing the - // earth's radius in the units you desire - // - // Default is 6,378,000 metres, suggested values are: - // - // * 3963.1 statute miles - // * 3443.9 nautical miles - // * 6378 km - // - // see [Formula and code for calculating distance based on two lat/lon locations](http://jan.ucc.nau.edu/~cvm/latlon_formula.html) - MM.Location.distance = function(l1, l2, r) { - if (!r) { - // default to meters - r = 6378000; - } - var deg2rad = Math.PI / 180.0, - a1 = l1.lat * deg2rad, - b1 = l1.lon * deg2rad, - a2 = l2.lat * deg2rad, - b2 = l2.lon * deg2rad, - c = Math.cos(a1) * Math.cos(b1) * Math.cos(a2) * Math.cos(b2), - d = Math.cos(a1) * Math.sin(b1) * Math.cos(a2) * Math.sin(b2), - e = Math.sin(a1) * Math.sin(a2); - return Math.acos(c + d + e) * r; - }; - - // Interpolates along a great circle, f between 0 and 1 - // - // * FIXME: could be heavily optimized (lots of trig calls to cache) - // * FIXME: could be inmproved for calculating a full path - MM.Location.interpolate = function(l1, l2, f) { - if (l1.lat === l2.lat && l1.lon === l2.lon) { - return new MM.Location(l1.lat, l1.lon); - } - var deg2rad = Math.PI / 180.0, - lat1 = l1.lat * deg2rad, - lon1 = l1.lon * deg2rad, - lat2 = l2.lat * deg2rad, - lon2 = l2.lon * deg2rad; - - var d = 2 * Math.asin( - Math.sqrt( - Math.pow(Math.sin((lat1 - lat2) / 2), 2) + - Math.cos(lat1) * Math.cos(lat2) * - Math.pow(Math.sin((lon1 - lon2) / 2), 2))); - - var A = Math.sin((1-f)*d)/Math.sin(d); - var B = Math.sin(f*d)/Math.sin(d); - var x = A * Math.cos(lat1) * Math.cos(lon1) + - B * Math.cos(lat2) * Math.cos(lon2); - var y = A * Math.cos(lat1) * Math.sin(lon1) + - B * Math.cos(lat2) * Math.sin(lon2); - var z = A * Math.sin(lat1) + B * Math.sin(lat2); - - var latN = Math.atan2(z, Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))); - var lonN = Math.atan2(y,x); - - return new MM.Location(latN / deg2rad, lonN / deg2rad); - }; - - // Returns bearing from one point to another - // - // * FIXME: bearing is not constant along significant great circle arcs. - MM.Location.bearing = function(l1, l2) { - var result = Math.atan2( - Math.sin(lon1 - lon2) * - Math.cos(lat2), - Math.cos(lat1) * - Math.sin(lat2) - - Math.sin(lat1) * - Math.cos(lat2) * - Math.cos(lon1 - lon2) - ) / -(Math.PI / 180); - - // map it into 0-360 range - return (result < 0) ? result + 360 : result; - }; - // Extent - // ---------- - // An object representing a map's rectangular extent, defined by its north, - // south, east and west bounds. - - MM.Extent = function(north, west, south, east) { - if (north instanceof MM.Location && - west instanceof MM.Location) { - var northwest = north, - southeast = west; - - north = northwest.lat; - west = northwest.lon; - south = southeast.lat; - east = southeast.lon; - } - if (isNaN(south)) south = north; - if (isNaN(east)) east = west; - this.north = Math.max(north, south); - this.south = Math.min(north, south); - this.east = Math.max(east, west); - this.west = Math.min(east, west); - }; - - MM.Extent.prototype = { - // boundary attributes - north: 0, - south: 0, - east: 0, - west: 0, - - copy: function() { - return new MM.Extent(this.north, this.west, this.south, this.east); - }, - - toString: function(precision) { - if (isNaN(precision)) precision = 3; - return [ - this.north.toFixed(precision), - this.west.toFixed(precision), - this.south.toFixed(precision), - this.east.toFixed(precision) - ].join(", "); - }, - - // getters for the corner locations - northWest: function() { - return new MM.Location(this.north, this.west); - }, - southEast: function() { - return new MM.Location(this.south, this.east); - }, - northEast: function() { - return new MM.Location(this.north, this.east); - }, - southWest: function() { - return new MM.Location(this.south, this.west); - }, - // getter for the center location - center: function() { - return new MM.Location( - this.south + (this.north - this.south) / 2, - this.east + (this.west - this.east) / 2 - ); - }, - - // extend the bounds to include a location's latitude and longitude - encloseLocation: function(loc) { - if (loc.lat > this.north) this.north = loc.lat; - if (loc.lat < this.south) this.south = loc.lat; - if (loc.lon > this.east) this.east = loc.lon; - if (loc.lon < this.west) this.west = loc.lon; - }, - - // extend the bounds to include multiple locations - encloseLocations: function(locations) { - var len = locations.length; - for (var i = 0; i < len; i++) { - this.encloseLocation(locations[i]); - } - }, - - // reset bounds from a list of locations - setFromLocations: function(locations) { - var len = locations.length, - first = locations[0]; - this.north = this.south = first.lat; - this.east = this.west = first.lon; - for (var i = 1; i < len; i++) { - this.encloseLocation(locations[i]); - } - }, - - // extend the bounds to include another extent - encloseExtent: function(extent) { - if (extent.north > this.north) this.north = extent.north; - if (extent.south < this.south) this.south = extent.south; - if (extent.east > this.east) this.east = extent.east; - if (extent.west < this.west) this.west = extent.west; - }, - - // determine if a location is within this extent - containsLocation: function(loc) { - return loc.lat >= this.south && - loc.lat <= this.north && - loc.lon >= this.west && - loc.lon <= this.east; - }, - - // turn an extent into an array of locations containing its northwest - // and southeast corners (used in MM.Map.setExtent()) - toArray: function() { - return [this.northWest(), this.southEast()]; - } - }; - - MM.Extent.fromString = function(str) { - var parts = str.split(/\s*,\s*/); - if (parts.length != 4) { - throw "Invalid extent string (expecting 4 comma-separated numbers)"; - } - return new MM.Extent( - parseFloat(parts[0]), - parseFloat(parts[1]), - parseFloat(parts[2]), - parseFloat(parts[3]) - ); - }; - - MM.Extent.fromArray = function(locations) { - var extent = new MM.Extent(); - extent.setFromLocations(locations); - return extent; - }; - - // Transformation - // -------------- - MM.Transformation = function(ax, bx, cx, ay, by, cy) { - this.ax = ax; - this.bx = bx; - this.cx = cx; - this.ay = ay; - this.by = by; - this.cy = cy; - }; - - MM.Transformation.prototype = { - - ax: 0, - bx: 0, - cx: 0, - ay: 0, - by: 0, - cy: 0, - - transform: function(point) { - return new MM.Point(this.ax * point.x + this.bx * point.y + this.cx, - this.ay * point.x + this.by * point.y + this.cy); - }, - - untransform: function(point) { - return new MM.Point((point.x * this.by - point.y * this.bx - - this.cx * this.by + this.cy * this.bx) / - (this.ax * this.by - this.ay * this.bx), - (point.x * this.ay - point.y * this.ax - - this.cx * this.ay + this.cy * this.ax) / - (this.bx * this.ay - this.by * this.ax)); - } - - }; - - - // Generates a transform based on three pairs of points, - // a1 -> a2, b1 -> b2, c1 -> c2. - MM.deriveTransformation = function(a1x, a1y, a2x, a2y, - b1x, b1y, b2x, b2y, - c1x, c1y, c2x, c2y) { - var x = MM.linearSolution(a1x, a1y, a2x, - b1x, b1y, b2x, - c1x, c1y, c2x); - var y = MM.linearSolution(a1x, a1y, a2y, - b1x, b1y, b2y, - c1x, c1y, c2y); - return new MM.Transformation(x[0], x[1], x[2], y[0], y[1], y[2]); - }; - - // Solves a system of linear equations. - // - // t1 = (a * r1) + (b + s1) + c - // t2 = (a * r2) + (b + s2) + c - // t3 = (a * r3) + (b + s3) + c - // - // r1 - t3 are the known values. - // a, b, c are the unknowns to be solved. - // returns the a, b, c coefficients. - MM.linearSolution = function(r1, s1, t1, r2, s2, t2, r3, s3, t3) { - // make them all floats - r1 = parseFloat(r1); - s1 = parseFloat(s1); - t1 = parseFloat(t1); - r2 = parseFloat(r2); - s2 = parseFloat(s2); - t2 = parseFloat(t2); - r3 = parseFloat(r3); - s3 = parseFloat(s3); - t3 = parseFloat(t3); - - var a = (((t2 - t3) * (s1 - s2)) - ((t1 - t2) * (s2 - s3))) / - (((r2 - r3) * (s1 - s2)) - ((r1 - r2) * (s2 - s3))); - - var b = (((t2 - t3) * (r1 - r2)) - ((t1 - t2) * (r2 - r3))) / - (((s2 - s3) * (r1 - r2)) - ((s1 - s2) * (r2 - r3))); - - var c = t1 - (r1 * a) - (s1 * b); - return [ a, b, c ]; - }; - // Projection - // ---------- - - // An abstract class / interface for projections - MM.Projection = function(zoom, transformation) { - if (!transformation) { - transformation = new MM.Transformation(1, 0, 0, 0, 1, 0); - } - this.zoom = zoom; - this.transformation = transformation; - }; - - MM.Projection.prototype = { - - zoom: 0, - transformation: null, - - rawProject: function(point) { - throw "Abstract method not implemented by subclass."; - }, - - rawUnproject: function(point) { - throw "Abstract method not implemented by subclass."; - }, - - project: function(point) { - point = this.rawProject(point); - if(this.transformation) { - point = this.transformation.transform(point); - } - return point; - }, - - unproject: function(point) { - if(this.transformation) { - point = this.transformation.untransform(point); - } - point = this.rawUnproject(point); - return point; - }, - - locationCoordinate: function(location) { - var point = new MM.Point(Math.PI * location.lon / 180.0, - Math.PI * location.lat / 180.0); - point = this.project(point); - return new MM.Coordinate(point.y, point.x, this.zoom); - }, - - coordinateLocation: function(coordinate) { - coordinate = coordinate.zoomTo(this.zoom); - var point = new MM.Point(coordinate.column, coordinate.row); - point = this.unproject(point); - return new MM.Location(180.0 * point.y / Math.PI, - 180.0 * point.x / Math.PI); - } - }; - - // A projection for equilateral maps, based on longitude and latitude - MM.LinearProjection = function(zoom, transformation) { - MM.Projection.call(this, zoom, transformation); - }; - - // The Linear projection doesn't reproject points - MM.LinearProjection.prototype = { - rawProject: function(point) { - return new MM.Point(point.x, point.y); - }, - rawUnproject: function(point) { - return new MM.Point(point.x, point.y); - } - }; - - MM.extend(MM.LinearProjection, MM.Projection); - - MM.MercatorProjection = function(zoom, transformation) { - // super! - MM.Projection.call(this, zoom, transformation); - }; - - // Project lon/lat points into meters required for Mercator - MM.MercatorProjection.prototype = { - rawProject: function(point) { - return new MM.Point(point.x, - Math.log(Math.tan(0.25 * Math.PI + 0.5 * point.y))); - }, - - rawUnproject: function(point) { - return new MM.Point(point.x, - 2 * Math.atan(Math.pow(Math.E, point.y)) - 0.5 * Math.PI); - } - }; - - MM.extend(MM.MercatorProjection, MM.Projection); - // Providers - // --------- - // Providers provide tile URLs and possibly elements for layers. - // - // MapProvider -> - // TemplatedMapProvider - // - MM.MapProvider = function(getTile) { - if (getTile) { - this.getTile = getTile; - } - }; - - MM.MapProvider.prototype = { - - // these are limits for available *tiles* - // panning limits will be different (since you can wrap around columns) - // but if you put Infinity in here it will screw up sourceCoordinate - tileLimits: [ - new MM.Coordinate(0,0,0), // top left outer - new MM.Coordinate(1,1,0).zoomTo(18) // bottom right inner - ], - - getTileUrl: function(coordinate) { - throw "Abstract method not implemented by subclass."; - }, - - getTile: function(coordinate) { - throw "Abstract method not implemented by subclass."; - }, - - // releaseTile is not required - releaseTile: function(element) { }, - - // use this to tell MapProvider that tiles only exist between certain zoom levels. - // should be set separately on Map to restrict interactive zoom/pan ranges - setZoomRange: function(minZoom, maxZoom) { - this.tileLimits[0] = this.tileLimits[0].zoomTo(minZoom); - this.tileLimits[1] = this.tileLimits[1].zoomTo(maxZoom); - }, - - // return null if coord is above/below row extents - // wrap column around the world if it's outside column extents - // ... you should override this function if you change the tile limits - // ... see enforce-limits in examples for details - sourceCoordinate: function(coord) { - var TL = this.tileLimits[0].zoomTo(coord.zoom), - BR = this.tileLimits[1].zoomTo(coord.zoom), - columnSize = Math.pow(2, coord.zoom), - wrappedColumn; - - if (coord.column < 0) { - wrappedColumn = (coord.column + columnSize) % columnSize; - } else { - wrappedColumn = coord.column % columnSize; - } - - if (coord.row < TL.row || coord.row >= BR.row) { - return null; - } else if (wrappedColumn < TL.column || wrappedColumn >= BR.column) { - return null; - } else { - return new MM.Coordinate(coord.row, wrappedColumn, coord.zoom); - } - } - }; - - /** - * FIXME: need a better explanation here! This is a pretty crucial part of - * understanding how to use ModestMaps. - * - * TemplatedMapProvider is a tile provider that generates tile URLs from a - * template string by replacing the following bits for each tile - * coordinate: - * - * {Z}: the tile's zoom level (from 1 to ~20) - * {X}: the tile's X, or column (from 0 to a very large number at higher - * zooms) - * {Y}: the tile's Y, or row (from 0 to a very large number at higher - * zooms) - * - * E.g.: - * - * var osm = new MM.TemplatedMapProvider("http://tile.openstreetmap.org/{Z}/{X}/{Y}.png"); - * - * Or: - * - * var placeholder = new MM.TemplatedMapProvider("http://placehold.it/256/f0f/fff.png&text={Z}/{X}/{Y}"); - * - */ - MM.TemplatedMapProvider = function(template, subdomains) { - var isQuadKey = template.match(/{(Q|quadkey)}/); - // replace Microsoft style substitution strings - if (isQuadKey) template = template - .replace('{subdomains}', '{S}') - .replace('{zoom}', '{Z}') - .replace('{quadkey}', '{Q}'); - - var hasSubdomains = (subdomains && - subdomains.length && template.indexOf("{S}") >= 0); - - var getTileUrl = function(coordinate) { - var coord = this.sourceCoordinate(coordinate); - if (!coord) { - return null; - } - var base = template; - if (hasSubdomains) { - var index = parseInt(coord.zoom + coord.row + coord.column, 10) % - subdomains.length; - base = base.replace('{S}', subdomains[index]); - } - if (isQuadKey) { - return base - .replace('{Z}', coord.zoom.toFixed(0)) - .replace('{Q}', this.quadKey(coord.row, - coord.column, - coord.zoom)); - } else { - return base - .replace('{Z}', coord.zoom.toFixed(0)) - .replace('{X}', coord.column.toFixed(0)) - .replace('{Y}', coord.row.toFixed(0)); - } - }; - - MM.MapProvider.call(this, getTileUrl); - }; - - MM.TemplatedMapProvider.prototype = { - // quadKey generator - quadKey: function(row, column, zoom) { - var key = ''; - for (var i = 1; i <= zoom; i++) { - key += (((row >> zoom - i) & 1) << 1) | ((column >> zoom - i) & 1); - } - return key || '0'; - }, - getTile: function(coord) { - return this.getTileUrl(coord); - } - }; - - MM.extend(MM.TemplatedMapProvider, MM.MapProvider); - - MM.TemplatedLayer = function(template, subdomains) { - return new MM.Layer(new MM.TemplatedMapProvider(template, subdomains)); - }; - // Event Handlers - // -------------- - - // A utility function for finding the offset of the - // mouse from the top-left of the page - MM.getMousePoint = function(e, map) { - // start with just the mouse (x, y) - var point = new MM.Point(e.clientX, e.clientY); - - // correct for scrolled document - point.x += document.body.scrollLeft + document.documentElement.scrollLeft; - point.y += document.body.scrollTop + document.documentElement.scrollTop; - - // correct for nested offsets in DOM - for (var node = map.parent; node; node = node.offsetParent) { - point.x -= node.offsetLeft; - point.y -= node.offsetTop; - } - return point; - }; - - // A handler that allows mouse-wheel zooming - zooming in - // when page would scroll up, and out when the page would scroll down. - MM.MouseWheelHandler = function(map, precise) { - // only init() if we get a map - if (map) { - this.init(map, precise); - // allow (null, true) as constructor args - } else if (arguments.length > 1) { - this.precise = precise ? true : false; - } - }; - - MM.MouseWheelHandler.prototype = { - precise: false, - - init: function(map) { - this.map = map; - this._mouseWheel = MM.bind(this.mouseWheel, this); - - this._zoomDiv = document.body.appendChild(document.createElement('div')); - this._zoomDiv.style.cssText = 'visibility:hidden;top:0;height:0;width:0;overflow-y:scroll'; - var innerDiv = this._zoomDiv.appendChild(document.createElement('div')); - innerDiv.style.height = '2000px'; - MM.addEvent(map.parent, 'mousewheel', this._mouseWheel); - }, - - remove: function() { - MM.removeEvent(this.map.parent, 'mousewheel', this._mouseWheel); - this._zoomDiv.parentNode.removeChild(this._zoomDiv); - }, - - mouseWheel: function(e) { - var delta = 0; - this.prevTime = this.prevTime || new Date().getTime(); - - try { - this._zoomDiv.scrollTop = 1000; - this._zoomDiv.dispatchEvent(e); - delta = 1000 - this._zoomDiv.scrollTop; - } catch (error) { - delta = e.wheelDelta || (-e.detail * 5); - } - - // limit mousewheeling to once every 200ms - var timeSince = new Date().getTime() - this.prevTime; - - if (Math.abs(delta) > 0 && (timeSince > 200) && !this.precise) { - var point = MM.getMousePoint(e, this.map); - this.map.zoomByAbout(delta > 0 ? 1 : -1, point); - - this.prevTime = new Date().getTime(); - } else if (this.precise) { - var point = MM.getMousePoint(e, this.map); - this.map.zoomByAbout(delta * 0.001, point); - } - - // Cancel the event so that the page doesn't scroll - return MM.cancelEvent(e); - } - }; - - // Handle double clicks, that zoom the map in one zoom level. - MM.DoubleClickHandler = function(map) { - if (map !== undefined) { - this.init(map); - } - }; - - MM.DoubleClickHandler.prototype = { - - init: function(map) { - this.map = map; - this._doubleClick = MM.bind(this.doubleClick, this); - MM.addEvent(map.parent, 'dblclick', this._doubleClick); - }, - - remove: function() { - MM.removeEvent(this.map.parent, 'dblclick', this._doubleClick); - }, - - doubleClick: function(e) { - // Ensure that this handler is attached once. - // Get the point on the map that was double-clicked - var point = MM.getMousePoint(e, this.map); - - // use shift-double-click to zoom out - this.map.zoomByAbout(e.shiftKey ? -1 : 1, point); - - return MM.cancelEvent(e); - } - }; - - // Handle the use of mouse dragging to pan the map. - MM.DragHandler = function(map) { - if (map !== undefined) { - this.init(map); - } - }; - - MM.DragHandler.prototype = { - - init: function(map) { - this.map = map; - this._mouseDown = MM.bind(this.mouseDown, this); - MM.addEvent(map.parent, 'mousedown', this._mouseDown); - }, - - remove: function() { - MM.removeEvent(this.map.parent, 'mousedown', this._mouseDown); - }, - - mouseDown: function(e) { - MM.addEvent(document, 'mouseup', this._mouseUp = MM.bind(this.mouseUp, this)); - MM.addEvent(document, 'mousemove', this._mouseMove = MM.bind(this.mouseMove, this)); - - this.prevMouse = new MM.Point(e.clientX, e.clientY); - this.map.parent.style.cursor = 'move'; - - return MM.cancelEvent(e); - }, - - mouseMove: function(e) { - if (this.prevMouse) { - this.map.panBy( - e.clientX - this.prevMouse.x, - e.clientY - this.prevMouse.y); - this.prevMouse.x = e.clientX; - this.prevMouse.y = e.clientY; - this.prevMouse.t = +new Date(); - } - - return MM.cancelEvent(e); - }, - - mouseUp: function(e) { - MM.removeEvent(document, 'mouseup', this._mouseUp); - MM.removeEvent(document, 'mousemove', this._mouseMove); - - this.prevMouse = null; - this.map.parent.style.cursor = ''; - - return MM.cancelEvent(e); - } - }; - - // A shortcut for adding drag, double click, - // and mouse wheel events to the map. This is the default - // handler attached to a map if the handlers argument isn't given. - MM.MouseHandler = function(map) { - if (map !== undefined) { - this.init(map); - } - }; - - MM.MouseHandler.prototype = { - init: function(map) { - this.map = map; - this.handlers = [ - new MM.DragHandler(map), - new MM.DoubleClickHandler(map), - new MM.MouseWheelHandler(map) - ]; - }, - remove: function() { - for (var i = 0; i < this.handlers.length; i++) { - this.handlers[i].remove(); - } - } - }; - - var HAS_HASHCHANGE = (function() { - var doc_mode = window.documentMode; - return ('onhashchange' in window) && - (doc_mode === undefined || doc_mode > 7); - })(); - - MM.Hash = function(map) { - this.onMapMove = MM.bind(this.onMapMove, this); - this.onHashChange = MM.bind(this.onHashChange, this); - if (map) { - this.init(map); - } - }; - - MM.Hash.prototype = { - map: null, - lastHash: null, - - parseHash: function(hash) { - var args = hash.split("/"); - if (args.length == 3) { - var zoom = parseInt(args[0], 10), - lat = parseFloat(args[1]), - lon = parseFloat(args[2]); - if (isNaN(zoom) || isNaN(lat) || isNaN(lon)) { - return false; - } else { - return { - center: new MM.Location(lat, lon), - zoom: zoom - }; - } - } else { - return false; - } - }, - - formatHash: function(map) { - var center = map.getCenter(), - zoom = map.getZoom(), - precision = Math.max(0, Math.ceil(Math.log(zoom) / Math.LN2)); - return "#" + [zoom, - center.lat.toFixed(precision), - center.lon.toFixed(precision) - ].join("/"); - }, - - init: function(map) { - this.map = map; - this.map.addCallback("drawn", this.onMapMove); - // reset the hash - this.lastHash = null; - this.onHashChange(); - - if (!this.isListening) { - this.startListening(); - } - }, - - remove: function() { - this.map = null; - if (this.isListening) { - this.stopListening(); - } - }, - - onMapMove: function(map) { - // bail if we're moving the map (updating from a hash), - // or if the map has no zoom set - if (this.movingMap || this.map.zoom === 0) { - return false; - } - var hash = this.formatHash(map); - if (this.lastHash != hash) { - location.replace(hash); - this.lastHash = hash; - } - }, - - movingMap: false, - update: function() { - var hash = location.hash; - if (hash === this.lastHash) { - // console.info("(no change)"); - return; - } - var sansHash = hash.substr(1), - parsed = this.parseHash(sansHash); - if (parsed) { - // console.log("parsed:", parsed.zoom, parsed.center.toString()); - this.movingMap = true; - this.map.setCenterZoom(parsed.center, parsed.zoom); - this.movingMap = false; - } else { - // console.warn("parse error; resetting:", this.map.getCenter(), this.map.getZoom()); - this.onMapMove(this.map); - } - }, - - // defer hash change updates every 100ms - changeDefer: 100, - changeTimeout: null, - onHashChange: function() { - // throttle calls to update() so that they only happen every - // `changeDefer` ms - if (!this.changeTimeout) { - var that = this; - this.changeTimeout = setTimeout(function() { - that.update(); - that.changeTimeout = null; - }, this.changeDefer); - } - }, - - isListening: false, - hashChangeInterval: null, - startListening: function() { - if (HAS_HASHCHANGE) { - window.addEventListener("hashchange", this.onHashChange, false); - } else { - clearInterval(this.hashChangeInterval); - this.hashChangeInterval = setInterval(this.onHashChange, 50); - } - this.isListening = true; - }, - - stopListening: function() { - if (HAS_HASHCHANGE) { - window.removeEventListener("hashchange", this.onHashChange); - } else { - clearInterval(this.hashChangeInterval); - } - this.isListening = false; - } - }; - MM.TouchHandler = function(map, options) { - if (map) { - this.init(map, options); - } - }; - - MM.TouchHandler.prototype = { - - maxTapTime: 250, - maxTapDistance: 30, - maxDoubleTapDelay: 350, - locations: {}, - taps: [], - wasPinching: false, - lastPinchCenter: null, - - init: function(map, options) { - this.map = map; - options = options || {}; - - // Fail early if this isn't a touch device. - if (!this.isTouchable()) return false; - - this._touchStartMachine = MM.bind(this.touchStartMachine, this); - this._touchMoveMachine = MM.bind(this.touchMoveMachine, this); - this._touchEndMachine = MM.bind(this.touchEndMachine, this); - MM.addEvent(map.parent, 'touchstart', - this._touchStartMachine); - MM.addEvent(map.parent, 'touchmove', - this._touchMoveMachine); - MM.addEvent(map.parent, 'touchend', - this._touchEndMachine); - - this.options = {}; - this.options.snapToZoom = options.snapToZoom || true; - }, - - isTouchable: function() { - var el = document.createElement('div'); - el.setAttribute('ongesturestart', 'return;'); - return (typeof el.ongesturestart === 'function'); - }, - - remove: function() { - // Fail early if this isn't a touch device. - if (!this.isTouchable()) return false; - - MM.removeEvent(this.map.parent, 'touchstart', - this._touchStartMachine); - MM.removeEvent(this.map.parent, 'touchmove', - this._touchMoveMachine); - MM.removeEvent(this.map.parent, 'touchend', - this._touchEndMachine); - }, - - updateTouches: function(e) { - for (var i = 0; i < e.touches.length; i += 1) { - var t = e.touches[i]; - if (t.identifier in this.locations) { - var l = this.locations[t.identifier]; - l.x = t.screenX; - l.y = t.screenY; - l.scale = e.scale; - } - else { - this.locations[t.identifier] = { - scale: e.scale, - startPos: { x: t.screenX, y: t.screenY }, - x: t.screenX, - y: t.screenY, - time: new Date().getTime() - }; - } - } - }, - - // Test whether touches are from the same source - - // whether this is the same touchmove event. - sameTouch: function(event, touch) { - return (event && event.touch) && - (touch.identifier == event.touch.identifier); - }, - - touchStartMachine: function(e) { - this.updateTouches(e); - return MM.cancelEvent(e); - }, - - touchMoveMachine: function(e) { - switch (e.touches.length) { - case 1: - this.onPanning(e.touches[0]); - break; - case 2: - this.onPinching(e); - break; - } - this.updateTouches(e); - return MM.cancelEvent(e); - }, - - touchEndMachine: function(e) { - var now = new Date().getTime(); - // round zoom if we're done pinching - if (e.touches.length === 0 && this.wasPinching) { - this.onPinched(this.lastPinchCenter); - } - - // Look at each changed touch in turn. - for (var i = 0; i < e.changedTouches.length; i += 1) { - var t = e.changedTouches[i], - loc = this.locations[t.identifier]; - // if we didn't see this one (bug?) - // or if it was consumed by pinching already - // just skip to the next one - if (!loc || loc.wasPinch) { - continue; - } - - // we now know we have an event object and a - // matching touch that's just ended. Let's see - // what kind of event it is based on how long it - // lasted and how far it moved. - var pos = { x: t.screenX, y: t.screenY }, - time = now - loc.time, - travel = MM.Point.distance(pos, loc.startPos); - if (travel > this.maxTapDistance) { - // we will to assume that the drag has been handled separately - } else if (time > this.maxTapTime) { - // close in space, but not in time: a hold - pos.end = now; - pos.duration = time; - this.onHold(pos); - } else { - // close in both time and space: a tap - pos.time = now; - this.onTap(pos); - } - } - - // Weird, sometimes an end event doesn't get thrown - // for a touch that nevertheless has disappeared. - // Still, this will eventually catch those ids: - - var validTouchIds = {}; - for (var j = 0; j < e.touches.length; j++) { - validTouchIds[e.touches[j].identifier] = true; - } - for (var id in this.locations) { - if (!(id in validTouchIds)) { - delete validTouchIds[id]; - } - } - - return MM.cancelEvent(e); - }, - - onHold: function(hold) { - // TODO - }, - - // Handle a tap event - mainly watch for a doubleTap - onTap: function(tap) { - if (this.taps.length && - (tap.time - this.taps[0].time) < this.maxDoubleTapDelay) { - this.onDoubleTap(tap); - this.taps = []; - return; - } - this.taps = [tap]; - }, - - // Handle a double tap by zooming in a single zoom level to a - // round zoom. - onDoubleTap: function(tap) { - - var z = this.map.getZoom(), // current zoom - tz = Math.round(z) + 1, // target zoom - dz = tz - z; // desired delate - // zoom in to a round number - var p = new MM.Point(tap.x, tap.y); - this.map.zoomByAbout(dz, p); - }, - - // Re-transform the actual map parent's CSS transformation - onPanning: function(touch) { - var pos = { x: touch.screenX, y: touch.screenY }, - prev = this.locations[touch.identifier]; - this.map.panBy(pos.x - prev.x, pos.y - prev.y); - }, - - onPinching: function(e) { - // use the first two touches and their previous positions - var t0 = e.touches[0], - t1 = e.touches[1], - p0 = new MM.Point(t0.screenX, t0.screenY), - p1 = new MM.Point(t1.screenX, t1.screenY), - l0 = this.locations[t0.identifier], - l1 = this.locations[t1.identifier]; - - // mark these touches so they aren't used as taps/holds - l0.wasPinch = true; - l1.wasPinch = true; - - // scale about the center of these touches - var center = MM.Point.interpolate(p0, p1, 0.5); - - this.map.zoomByAbout( - Math.log(e.scale) / Math.LN2 - - Math.log(l0.scale) / Math.LN2, - center ); - - // pan from the previous center of these touches - var prevCenter = MM.Point.interpolate(l0, l1, 0.5); - - this.map.panBy(center.x - prevCenter.x, - center.y - prevCenter.y); - this.wasPinching = true; - this.lastPinchCenter = center; - }, - - // When a pinch event ends, round the zoom of the map. - onPinched: function(p) { - // TODO: easing - if (this.options.snapToZoom) { - var z = this.map.getZoom(), // current zoom - tz = Math.round(z); // target zoom - this.map.zoomByAbout(tz - z, p); - } - this.wasPinching = false; - } - }; - // CallbackManager - // --------------- - // A general-purpose event binding manager used by `Map` - // and `RequestManager` - - // Construct a new CallbackManager, with an list of - // supported events. - MM.CallbackManager = function(owner, events) { - this.owner = owner; - this.callbacks = {}; - for (var i = 0; i < events.length; i++) { - this.callbacks[events[i]] = []; - } - }; - - // CallbackManager does simple event management for modestmaps - MM.CallbackManager.prototype = { - // The element on which callbacks will be triggered. - owner: null, - - // An object of callbacks in the form - // - // { event: function } - callbacks: null, - - // Add a callback to this object - where the `event` is a string of - // the event name and `callback` is a function. - addCallback: function(event, callback) { - if (typeof(callback) == 'function' && this.callbacks[event]) { - this.callbacks[event].push(callback); - } - }, - - // Remove a callback. The given function needs to be equal (`===`) to - // the callback added in `addCallback`, so named functions should be - // used as callbacks. - removeCallback: function(event, callback) { - if (typeof(callback) == 'function' && this.callbacks[event]) { - var cbs = this.callbacks[event], - len = cbs.length; - for (var i = 0; i < len; i++) { - if (cbs[i] === callback) { - cbs.splice(i,1); - break; - } - } - } - }, - - // Trigger a callback, passing it an object or string from the second - // argument. - dispatchCallback: function(event, message) { - if(this.callbacks[event]) { - for (var i = 0; i < this.callbacks[event].length; i += 1) { - try { - this.callbacks[event][i](this.owner, message); - } catch(e) { - //console.log(e); - // meh - } - } - } - } - }; - // RequestManager - // -------------- - // an image loading queue - MM.RequestManager = function() { - - // The loading bay is a document fragment to optimize appending, since - // the elements within are invisible. See - // [this blog post](http://ejohn.org/blog/dom-documentfragments/). - this.loadingBay = document.createDocumentFragment(); - - this.requestsById = {}; - this.openRequestCount = 0; - - this.maxOpenRequests = 4; - this.requestQueue = []; - - this.callbackManager = new MM.CallbackManager(this, [ - 'requestcomplete', 'requesterror']); - }; - - MM.RequestManager.prototype = { - - // DOM element, hidden, for making sure images dispatch complete events - loadingBay: null, - - // all known requests, by ID - requestsById: null, - - // current pending requests - requestQueue: null, - - // current open requests (children of loadingBay) - openRequestCount: null, - - // the number of open requests permitted at one time, clamped down - // because of domain-connection limits. - maxOpenRequests: null, - - // for dispatching 'requestcomplete' - callbackManager: null, - - addCallback: function(event, callback) { - this.callbackManager.addCallback(event,callback); - }, - - removeCallback: function(event, callback) { - this.callbackManager.removeCallback(event,callback); - }, - - dispatchCallback: function(event, message) { - this.callbackManager.dispatchCallback(event,message); - }, - - // Clear everything in the queue by excluding nothing - clear: function() { - this.clearExcept({}); - }, - - clearRequest: function(id) { - if(id in this.requestsById) { - delete this.requestsById[id]; - } - - for(var i = 0; i < this.requestQueue.length; i++) { - var request = this.requestQueue[i]; - if(request && request.id == id) { - this.requestQueue[i] = null; - } - } - }, - - // Clear everything in the queue except for certain keys, specified - // by an object of the form - // - // { key: throwawayvalue } - clearExcept: function(validIds) { - - // clear things from the queue first... - for (var i = 0; i < this.requestQueue.length; i++) { - var request = this.requestQueue[i]; - if (request && !(request.id in validIds)) { - this.requestQueue[i] = null; - } - } - - // then check the loadingBay... - var openRequests = this.loadingBay.childNodes; - for (var j = openRequests.length-1; j >= 0; j--) { - var img = openRequests[j]; - if (!(img.id in validIds)) { - this.loadingBay.removeChild(img); - this.openRequestCount--; - /* console.log(this.openRequestCount + " open requests"); */ - img.src = img.coord = img.onload = img.onerror = null; - } - } - - // hasOwnProperty protects against prototype additions - // > "The standard describes an augmentable Object.prototype. - // Ignore standards at your own peril." - // -- http://www.yuiblog.com/blog/2006/09/26/for-in-intrigue/ - for (var id in this.requestsById) { - if (!(id in validIds)) { - if (this.requestsById.hasOwnProperty(id)) { - var requestToRemove = this.requestsById[id]; - // whether we've done the request or not... - delete this.requestsById[id]; - if (requestToRemove !== null) { - requestToRemove = - requestToRemove.id = - requestToRemove.coord = - requestToRemove.url = null; - } - } - } - } - }, - - // Given a tile id, check whether the RequestManager is currently - // requesting it and waiting for the result. - hasRequest: function(id) { - return (id in this.requestsById); - }, - - // * TODO: remove dependency on coord (it's for sorting, maybe call it data?) - // * TODO: rename to requestImage once it's not tile specific - requestTile: function(id, coord, url) { - if (!(id in this.requestsById)) { - var request = { id: id, coord: coord.copy(), url: url }; - // if there's no url just make sure we don't request this image again - this.requestsById[id] = request; - if (url) { - this.requestQueue.push(request); - /* console.log(this.requestQueue.length + ' pending requests'); */ - } - } - }, - - getProcessQueue: function() { - // let's only create this closure once... - if (!this._processQueue) { - var theManager = this; - this._processQueue = function() { - theManager.processQueue(); - }; - } - return this._processQueue; - }, - - // Select images from the `requestQueue` and create image elements for - // them, attaching their load events to the function returned by - // `this.getLoadComplete()` so that they can be added to the map. - processQueue: function(sortFunc) { - // When the request queue fills up beyond 8, start sorting the - // requests so that spiral-loading or another pattern can be used. - if (sortFunc && this.requestQueue.length > 8) { - this.requestQueue.sort(sortFunc); - } - while (this.openRequestCount < this.maxOpenRequests && this.requestQueue.length > 0) { - var request = this.requestQueue.pop(); - if (request) { - this.openRequestCount++; - /* console.log(this.openRequestCount + ' open requests'); */ - - // JSLitmus benchmark shows createElement is a little faster than - // new Image() in Firefox and roughly the same in Safari: - // http://tinyurl.com/y9wz2jj http://tinyurl.com/yes6rrt - var img = document.createElement('img'); - - // FIXME: id is technically not unique in document if there - // are two Maps but toKey is supposed to be fast so we're trying - // to avoid a prefix ... hence we can't use any calls to - // `document.getElementById()` to retrieve images - img.id = request.id; - img.style.position = 'absolute'; - // * FIXME: store this elsewhere to avoid scary memory leaks? - // * FIXME: call this 'data' not 'coord' so that RequestManager is less Tile-centric? - img.coord = request.coord; - // add it to the DOM in a hidden layer, this is a bit of a hack, but it's - // so that the event we get in image.onload has srcElement assigned in IE6 - this.loadingBay.appendChild(img); - // set these before img.src to avoid missing an img that's already cached - img.onload = img.onerror = this.getLoadComplete(); - img.src = request.url; - - // keep things tidy - request = request.id = request.coord = request.url = null; - } - } - }, - - _loadComplete: null, - - // Get the singleton `_loadComplete` function that is called on image - // load events, either removing them from the queue and dispatching an - // event to add them to the map, or deleting them if the image failed - // to load. - getLoadComplete: function() { - // let's only create this closure once... - if (!this._loadComplete) { - var theManager = this; - this._loadComplete = function(e) { - // this is needed because we don't use MM.addEvent for images - e = e || window.event; - - // srcElement for IE, target for FF, Safari etc. - var img = e.srcElement || e.target; - - // unset these straight away so we don't call this twice - img.onload = img.onerror = null; - - // pull it back out of the (hidden) DOM - // so that draw will add it correctly later - theManager.loadingBay.removeChild(img); - theManager.openRequestCount--; - delete theManager.requestsById[img.id]; - - /* console.log(theManager.openRequestCount + ' open requests'); */ - - // NB:- complete is also true onerror if we got a 404 - if (e.type === 'load' && (img.complete || - (img.readyState && img.readyState == 'complete'))) { - theManager.dispatchCallback('requestcomplete', img); - } else { - // if it didn't finish clear its src to make sure it - // really stops loading - // FIXME: we'll never retry because this id is still - // in requestsById - is that right? - theManager.dispatchCallback('requesterror', img.src); - img.src = null; - } - - // keep going in the same order - // use `setTimeout()` to avoid the IE recursion limit, see - // http://cappuccino.org/discuss/2010/03/01/internet-explorer-global-variables-and-stack-overflows/ - // and https://github.com/stamen/modestmaps-js/issues/12 - setTimeout(theManager.getProcessQueue(), 0); - - }; - } - return this._loadComplete; - } - - }; - - // Layer - - MM.Layer = function(provider, parent) { - this.parent = parent || document.createElement('div'); - this.parent.style.cssText = 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; margin: 0; padding: 0; z-index: 0'; - - this.levels = {}; - - this.requestManager = new MM.RequestManager(); - this.requestManager.addCallback('requestcomplete', this.getTileComplete()); - - if (provider) { - this.setProvider(provider); - } - }; - - MM.Layer.prototype = { - - map: null, // TODO: remove - parent: null, - tiles: null, - levels: null, - - requestManager: null, - tileCacheSize: null, - maxTileCacheSize: null, - - provider: null, - recentTiles: null, - recentTilesById: {}, - - enablePyramidLoading: false, - - _tileComplete: null, - - getTileComplete: function() { - if (!this._tileComplete) { - var theLayer = this; - this._tileComplete = function(manager, tile) { - - // cache the tile itself: - theLayer.tiles[tile.id] = tile; - theLayer.tileCacheSize++; - - // also keep a record of when we last touched this tile: - var record = { - id: tile.id, - lastTouchedTime: new Date().getTime() - }; - theLayer.recentTilesById[tile.id] = record; - theLayer.recentTiles.push(record); - - // position this tile (avoids a full draw() call): - theLayer.positionTile(tile); - }; - } - - return this._tileComplete; - }, - - draw: function() { - // if we're in between zoom levels, we need to choose the nearest: - var baseZoom = Math.round(this.map.coordinate.zoom); - - // these are the top left and bottom right tile coordinates - // we'll be loading everything in between: - var startCoord = this.map.pointCoordinate(new MM.Point(0,0)) - .zoomTo(baseZoom).container(); - var endCoord = this.map.pointCoordinate(this.map.dimensions) - .zoomTo(baseZoom).container().right().down(); - - // tiles with invalid keys will be removed from visible levels - // requests for tiles with invalid keys will be canceled - // (this object maps from a tile key to a boolean) - var validTileKeys = { }; - - // make sure we have a container for tiles in the current level - var levelElement = this.createOrGetLevel(startCoord.zoom); - - // use this coordinate for generating keys, parents and children: - var tileCoord = startCoord.copy(); - - for (tileCoord.column = startCoord.column; - tileCoord.column <= endCoord.column; tileCoord.column++) { - for (tileCoord.row = startCoord.row; - tileCoord.row <= endCoord.row; tileCoord.row++) { - var validKeys = this.inventoryVisibleTile(levelElement, tileCoord); - - while (validKeys.length) { - validTileKeys[validKeys.pop()] = true; - } - } - } - - // i from i to zoom-5 are levels that would be scaled too big, - // i from zoom + 2 to levels. length are levels that would be - // scaled too small (and tiles would be too numerous) - for (var name in this.levels) { - if (this.levels.hasOwnProperty(name)) { - var zoom = parseInt(name,10); - - if (zoom >= startCoord.zoom - 5 && zoom < startCoord.zoom + 2) { - continue; - } - - var level = this.levels[name]; - level.style.display = 'none'; - var visibleTiles = this.tileElementsInLevel(level); - - while (visibleTiles.length) { - this.provider.releaseTile(visibleTiles[0].coord); - this.requestManager.clearRequest(visibleTiles[0].coord.toKey()); - level.removeChild(visibleTiles[0]); - visibleTiles.shift(); - } - } - } - - // levels we want to see, if they have tiles in validTileKeys - var minLevel = startCoord.zoom - 5; - var maxLevel = startCoord.zoom + 2; - - for (var z = minLevel; z < maxLevel; z++) { - this.adjustVisibleLevel(this.levels[z], z, validTileKeys); - } - - // cancel requests that aren't visible: - this.requestManager.clearExcept(validTileKeys); - - // get newly requested tiles, sort according to current view: - this.requestManager.processQueue(this.getCenterDistanceCompare()); - - // make sure we don't have too much stuff: - this.checkCache(); - }, - - // For a given tile coordinate in a given level element, ensure that it's - // correctly represented in the DOM including potentially-overlapping - // parent and child tiles for pyramid loading. - // - // Return a list of valid (i.e. loadable?) tile keys. - inventoryVisibleTile: function(layer_element, tile_coord) { - var tile_key = tile_coord.toKey(), - valid_tile_keys = [tile_key]; - - // Check that the needed tile already exists someplace - add it to the DOM if it does. - if (tile_key in this.tiles) { - var tile = this.tiles[tile_key]; - - // ensure it's in the DOM: - if (tile.parentNode != layer_element) { - layer_element.appendChild(tile); - // if the provider implements reAddTile(), call it - if ("reAddTile" in this.provider) { - this.provider.reAddTile(tile_key, tile_coord, tile); - } - } - - return valid_tile_keys; - } - - // Check that the needed tile has even been requested at all. - if (!this.requestManager.hasRequest(tile_key)) { - var tileToRequest = this.provider.getTile(tile_coord); - if (typeof tileToRequest == 'string') { - this.addTileImage(tile_key, tile_coord, tileToRequest); - // tile must be truish - } else if (tileToRequest) { - this.addTileElement(tile_key, tile_coord, tileToRequest); - } - } - - // look for a parent tile in our image cache - var tileCovered = false; - var maxStepsOut = tile_coord.zoom; - - for (var pz = 1; pz <= maxStepsOut; pz++) { - var parent_coord = tile_coord.zoomBy(-pz).container(); - var parent_key = parent_coord.toKey(); - - if (this.enablePyramidLoading) { - // mark all parent tiles valid - valid_tile_keys.push(parent_key); - var parentLevel = this.createOrGetLevel(parent_coord.zoom); - - //parentLevel.coordinate = parent_coord.copy(); - if (parent_key in this.tiles) { - var parentTile = this.tiles[parent_key]; - if (parentTile.parentNode != parentLevel) { - parentLevel.appendChild(parentTile); - } - } else if (!this.requestManager.hasRequest(parent_key)) { - // force load of parent tiles we don't already have - var tileToAdd = this.provider.getTile(parent_coord); - - if (typeof tileToAdd == 'string') { - this.addTileImage(parent_key, parent_coord, tileToAdd); - } else { - this.addTileElement(parent_key, parent_coord, tileToAdd); - } - } - } else { - // only mark it valid if we have it already - if (parent_key in this.tiles) { - valid_tile_keys.push(parent_key); - tileCovered = true; - break; - } - } - } - - // if we didn't find a parent, look at the children: - if (!tileCovered && !this.enablePyramidLoading) { - var child_coord = tile_coord.zoomBy(1); - - // mark everything valid whether or not we have it: - valid_tile_keys.push(child_coord.toKey()); - child_coord.column += 1; - valid_tile_keys.push(child_coord.toKey()); - child_coord.row += 1; - valid_tile_keys.push(child_coord.toKey()); - child_coord.column -= 1; - valid_tile_keys.push(child_coord.toKey()); - } - - return valid_tile_keys; - }, - - tileElementsInLevel: function(level) { - // this is somewhat future proof, we're looking for DOM elements - // not necessarily elements - var tiles = []; - for (var tile = level.firstChild; tile; tile = tile.nextSibling) { - if (tile.nodeType == 1) { - tiles.push(tile); - } - } - return tiles; - }, - - /** - * For a given level, adjust visibility as a whole and discard individual - * tiles based on values in valid_tile_keys from inventoryVisibleTile(). - */ - adjustVisibleLevel: function(level, zoom, valid_tile_keys) { - // for tracking time of tile usage: - var now = new Date().getTime(); - - if (!level) { - // no tiles for this level yet - return; - } - - var scale = 1; - var theCoord = this.map.coordinate.copy(); - - if (level.childNodes.length > 0) { - level.style.display = 'block'; - scale = Math.pow(2, this.map.coordinate.zoom - zoom); - theCoord = theCoord.zoomTo(zoom); - } else { - level.style.display = 'none'; - } - - var tileWidth = this.map.tileSize.x * scale; - var tileHeight = this.map.tileSize.y * scale; - var center = new MM.Point(this.map.dimensions.x/2, this.map.dimensions.y/2); - var tiles = this.tileElementsInLevel(level); - - while (tiles.length) { - var tile = tiles.pop(); - - if (!valid_tile_keys[tile.id]) { - this.provider.releaseTile(tile.coord); - this.requestManager.clearRequest(tile.coord.toKey()); - level.removeChild(tile); - } else { - // log last-touched-time of currently cached tiles - this.recentTilesById[tile.id].lastTouchedTime = now; - } - } - - // position tiles - MM.moveElement(level, { - x: -(theCoord.column * 256) + center.x, - y: -(theCoord.row * 256) + center.y, - scale: scale - }); - }, - - createOrGetLevel: function(zoom) { - if (zoom in this.levels) { - return this.levels[zoom]; - } - - //console.log('creating level ' + zoom); - var level = document.createElement('div'); - level.id = this.parent.id+'-zoom-'+zoom; - level.style.cssText = this.parent.style.cssText; - level.style.zIndex = zoom; - this.parent.appendChild(level); - this.levels[zoom] = level; - return level; - }, - - addTileImage: function(key, coord, url) { - this.requestManager.requestTile(key, coord, url); - }, - - addTileElement: function(key, coordinate, element) { - // Expected in draw() - element.id = key; - element.coord = coordinate.copy(); - - // cache the tile itself: - this.tiles[key] = element; - this.tileCacheSize++; - - // also keep a record of when we last touched this tile: - var record = { - id: key, - lastTouchedTime: new Date().getTime() - }; - this.recentTilesById[key] = record; - this.recentTiles.push(record); - - this.positionTile(element); - }, - - positionTile: function(tile) { - // position this tile (avoids a full draw() call): - var theCoord = this.map.coordinate.zoomTo(tile.coord.zoom); - - // Start tile positioning and prevent drag for modern browsers - tile.style.cssText = 'position:absolute;-webkit-user-select: none;-webkit-user-drag: none;-moz-user-drag: none;'; - - // Prevent drag for IE - tile.ondragstart = function() { return false; }; - - var tx = tile.coord.column * - this.map.tileSize.x; - var ty = tile.coord.row * - this.map.tileSize.y; - - // TODO: pass only scale or only w/h - MM.moveElement(tile, { - x: Math.round(tx), - y: Math.round(ty), - width: this.map.tileSize.x, - height: this.map.tileSize.y - }); - - // add tile to its level - var theLevel = this.levels[tile.coord.zoom]; - theLevel.appendChild(tile); - - // Support style transition if available. - tile.className = 'map-tile-loaded'; - - // ensure the level is visible if it's still the current level - if (Math.round(this.map.coordinate.zoom) == tile.coord.zoom) { - theLevel.style.display = 'block'; - } - - // request a lazy redraw of all levels - // this will remove tiles that were only visible - // to cover this tile while it loaded: - this.requestRedraw(); - }, - - _redrawTimer: undefined, - - requestRedraw: function() { - // we'll always draw within 1 second of this request, - // sometimes faster if there's already a pending redraw - // this is used when a new tile arrives so that we clear - // any parent/child tiles that were only being displayed - // until the tile loads at the right zoom level - if (!this._redrawTimer) { - this._redrawTimer = setTimeout(this.getRedraw(), 1000); - } - }, - - _redraw: null, - - getRedraw: function() { - // let's only create this closure once... - if (!this._redraw) { - var theLayer = this; - this._redraw = function() { - theLayer.draw(); - theLayer._redrawTimer = 0; - }; - } - return this._redraw; - }, - - numTilesOnScreen: function() { - var tileCount = 0; - for (var name in this.levels) { - if (this.levels.hasOwnProperty(name)) { - var level = this.levels[name]; - tileCount += this.tileElementsInLevel(level).length; - } - } - return tileCount; - }, - - // keeps cache below max size - // (called every time we receive a new tile and add it to the cache) - checkCache: function() { - var maxTiles = Math.max(this.numTilesOnScreen(), this.maxTileCacheSize); - - if (this.tileCacheSize > maxTiles) { - // sort from newest (highest) to oldest (lowest) - this.recentTiles.sort(function(t1, t2) { - return t2.lastTouchedTime < t1.lastTouchedTime ? -1 : - t2.lastTouchedTime > t1.lastTouchedTime ? 1 : 0; - }); - } - - while (this.recentTiles.length && this.tileCacheSize > maxTiles) { - // delete the oldest record - var tileRecord = this.recentTiles.pop(); - var now = new Date().getTime(); - delete this.recentTilesById[tileRecord.id]; - //window.console.log('removing ' + tileRecord.id + - // ' last seen ' + (now-tileRecord.lastTouchedTime) + 'ms ago'); - // now actually remove it from the cache... - var tile = this.tiles[tileRecord.id]; - if (tile.parentNode) { - // I'm leaving this uncommented for now but you should never see it: - alert("Gah: trying to removing cached tile even though it's still in the DOM"); - } else { - delete this.tiles[tileRecord.id]; - this.tileCacheSize--; - } - } - }, - - setProvider: function(newProvider) { - var firstProvider = (this.provider === null); - - // if we already have a provider the we'll need to - // clear the DOM, cancel requests and redraw - if (!firstProvider) { - this.requestManager.clear(); - - for (var name in this.levels) { - if (this.levels.hasOwnProperty(name)) { - var level = this.levels[name]; - - while (level.firstChild) { - this.provider.releaseTile(level.firstChild.coord); - level.removeChild(level.firstChild); - } - } - } - } - - // first provider or not we'll init/reset some values... - - this.tiles = {}; - this.tileCacheSize = 0; - this.maxTileCacheSize = 64; - this.recentTilesById = {}; - this.recentTiles = []; - - // for later: check geometry of old provider and set a new coordinate center - // if needed (now? or when?) - - this.provider = newProvider; - - if (!firstProvider) { - this.draw(); - } - }, - - // compares manhattan distance from center of - // requested tiles to current map center - // NB:- requested tiles are *popped* from queue, so we do a descending sort - getCenterDistanceCompare: function() { - var theCoord = this.map.coordinate.zoomTo(Math.round(this.map.coordinate.zoom)); - - return function(r1, r2) { - if (r1 && r2) { - var c1 = r1.coord; - var c2 = r2.coord; - if (c1.zoom == c2.zoom) { - var ds1 = Math.abs(theCoord.row - c1.row - 0.5) + - Math.abs(theCoord.column - c1.column - 0.5); - var ds2 = Math.abs(theCoord.row - c2.row - 0.5) + - Math.abs(theCoord.column - c2.column - 0.5); - return ds1 < ds2 ? 1 : ds1 > ds2 ? -1 : 0; - } else { - return c1.zoom < c2.zoom ? 1 : c1.zoom > c2.zoom ? -1 : 0; - } - } - return r1 ? 1 : r2 ? -1 : 0; - }; - }, - - // Remove this layer from the DOM, cancel all of its requests - // and unbind any callbacks that are bound to it. - destroy: function() { - this.requestManager.clear(); - this.requestManager.removeCallback('requestcomplete', this.getTileComplete()); - // TODO: does requestManager need a destroy function too? - this.provider = null; - // If this layer was ever attached to the DOM, detach it. - if (this.parent.parentNode) { - this.parent.parentNode.removeChild(this.parent); - } - this.map = null; - } - - }; - - // Map - - // Instance of a map intended for drawing to a div. - // - // * `parent` (required DOM element) - // Can also be an ID of a DOM element - // * `layerOrLayers` (required MM.Layer or Array of MM.Layers) - // each one must implement draw(), destroy(), have a .parent DOM element and a .map property - // (an array of URL templates or MM.MapProviders is also acceptable) - // * `dimensions` (optional Point) - // Size of map to create - // * `eventHandlers` (optional Array) - // If empty or null MouseHandler will be used - // Otherwise, each handler will be called with init(map) - MM.Map = function(parent, layerOrLayers, dimensions, eventHandlers) { - - if (typeof parent == 'string') { - parent = document.getElementById(parent); - if (!parent) { - throw 'The ID provided to modest maps could not be found.'; - } - } - this.parent = parent; - - // we're no longer adding width and height to parent.style but we still - // need to enforce padding, overflow and position otherwise everything screws up - // TODO: maybe console.warn if the current values are bad? - this.parent.style.padding = '0'; - this.parent.style.overflow = 'hidden'; - - var position = MM.getStyle(this.parent, 'position'); - if (position != 'relative' && position != 'absolute') { - this.parent.style.position = 'relative'; - } - - this.layers = []; - if(!(layerOrLayers instanceof Array)) { - layerOrLayers = [ layerOrLayers ]; - } - - for (var i = 0; i < layerOrLayers.length; i++) { - this.addLayer(layerOrLayers[i]); - } - - // default to Google-y Mercator style maps - this.projection = new MM.MercatorProjection(0, - MM.deriveTransformation(-Math.PI, Math.PI, 0, 0, - Math.PI, Math.PI, 1, 0, - -Math.PI, -Math.PI, 0, 1)); - this.tileSize = new MM.Point(256, 256); - - // default 0-18 zoom level - // with infinite horizontal pan and clamped vertical pan - this.coordLimits = [ - new MM.Coordinate(0,-Infinity,0), // top left outer - new MM.Coordinate(1,Infinity,0).zoomTo(18) // bottom right inner - ]; - - // eyes towards null island - this.coordinate = new MM.Coordinate(0.5, 0.5, 0); - - // if you don't specify dimensions we assume you want to fill the parent - // unless the parent has no w/h, in which case we'll still use a default - if (!dimensions) { - dimensions = new MM.Point(this.parent.offsetWidth, - this.parent.offsetHeight); - this.autoSize = true; - // use destroy to get rid of this handler from the DOM - MM.addEvent(window, 'resize', this.windowResize()); - } else { - this.autoSize = false; - // don't call setSize here because it calls draw() - this.parent.style.width = Math.round(dimensions.x) + 'px'; - this.parent.style.height = Math.round(dimensions.y) + 'px'; - } - this.dimensions = dimensions; - - this.callbackManager = new MM.CallbackManager(this, [ - 'zoomed', - 'panned', - 'centered', - 'extentset', - 'resized', - 'drawn' - ]); - - // set up handlers last so that all required attributes/functions are in place if needed - if (eventHandlers === undefined) { - this.eventHandlers = [ - new MM.MouseHandler(this), - new MM.TouchHandler(this) - ]; - } else { - this.eventHandlers = eventHandlers; - if (eventHandlers instanceof Array) { - for (var j = 0; j < eventHandlers.length; j++) { - eventHandlers[j].init(this); - } - } - } - - }; - - MM.Map.prototype = { - - parent: null, // DOM Element - dimensions: null, // MM.Point with x/y size of parent element - - projection: null, // MM.Projection of first known layer - coordinate: null, // Center of map MM.Coordinate with row/column/zoom - tileSize: null, // MM.Point with x/y size of tiles - - coordLimits: null, // Array of [ topLeftOuter, bottomLeftInner ] MM.Coordinates - - layers: null, // Array of MM.Layer (interface = .draw(), .destroy(), .parent and .map) - - callbackManager: null, // MM.CallbackManager, handles map events - - eventHandlers: null, // Array of interaction handlers, just a MM.MouseHandler by default - - autoSize: null, // Boolean, true if we have a window resize listener - - toString: function() { - return 'Map(#' + this.parent.id + ')'; - }, - - // callbacks... - - addCallback: function(event, callback) { - this.callbackManager.addCallback(event, callback); - return this; - }, - - removeCallback: function(event, callback) { - this.callbackManager.removeCallback(event, callback); - return this; - }, - - dispatchCallback: function(event, message) { - this.callbackManager.dispatchCallback(event, message); - return this; - }, - - windowResize: function() { - if (!this._windowResize) { - var theMap = this; - this._windowResize = function(event) { - // don't call setSize here because it sets parent.style.width/height - // and setting the height breaks percentages and default styles - theMap.dimensions = new MM.Point(theMap.parent.offsetWidth, theMap.parent.offsetHeight); - theMap.draw(); - theMap.dispatchCallback('resized', [theMap.dimensions]); - }; - } - return this._windowResize; - }, - - // A convenience function to restrict interactive zoom ranges. - // (you should also adjust map provider to restrict which tiles get loaded, - // or modify map.coordLimits and provider.tileLimits for finer control) - setZoomRange: function(minZoom, maxZoom) { - this.coordLimits[0] = this.coordLimits[0].zoomTo(minZoom); - this.coordLimits[1] = this.coordLimits[1].zoomTo(maxZoom); - }, - - // zooming - zoomBy: function(zoomOffset) { - this.coordinate = this.enforceLimits(this.coordinate.zoomBy(zoomOffset)); - MM.getFrame(this.getRedraw()); - this.dispatchCallback('zoomed', zoomOffset); - return this; - }, - - zoomIn: function() { return this.zoomBy(1); }, - zoomOut: function() { return this.zoomBy(-1); }, - setZoom: function(z) { return this.zoomBy(z - this.coordinate.zoom); }, - - zoomByAbout: function(zoomOffset, point) { - var location = this.pointLocation(point); - - this.coordinate = this.enforceLimits(this.coordinate.zoomBy(zoomOffset)); - var newPoint = this.locationPoint(location); - - this.dispatchCallback('zoomed', zoomOffset); - return this.panBy(point.x - newPoint.x, point.y - newPoint.y); - }, - - // panning - panBy: function(dx, dy) { - this.coordinate.column -= dx / this.tileSize.x; - this.coordinate.row -= dy / this.tileSize.y; - - this.coordinate = this.enforceLimits(this.coordinate); - - // Defer until the browser is ready to draw. - MM.getFrame(this.getRedraw()); - this.dispatchCallback('panned', [dx, dy]); - return this; - }, - - panLeft: function() { return this.panBy(100, 0); }, - panRight: function() { return this.panBy(-100, 0); }, - panDown: function() { return this.panBy(0, -100); }, - panUp: function() { return this.panBy(0, 100); }, - - // positioning - setCenter: function(location) { - return this.setCenterZoom(location, this.coordinate.zoom); - }, - - setCenterZoom: function(location, zoom) { - this.coordinate = this.projection.locationCoordinate(location).zoomTo(parseFloat(zoom) || 0); - MM.getFrame(this.getRedraw()); - this.dispatchCallback('centered', [location, zoom]); - return this; - }, - - extentCoordinate: function(locations, precise) { - // coerce locations to an array if it's a Extent instance - if (locations instanceof MM.Extent) { - locations = locations.toArray(); - } - - var TL, BR; - for (var i = 0; i < locations.length; i++) { - var coordinate = this.projection.locationCoordinate(locations[i]); - if (TL) { - TL.row = Math.min(TL.row, coordinate.row); - TL.column = Math.min(TL.column, coordinate.column); - TL.zoom = Math.min(TL.zoom, coordinate.zoom); - BR.row = Math.max(BR.row, coordinate.row); - BR.column = Math.max(BR.column, coordinate.column); - BR.zoom = Math.max(BR.zoom, coordinate.zoom); - } - else { - TL = coordinate.copy(); - BR = coordinate.copy(); - } - } - - var width = this.dimensions.x + 1; - var height = this.dimensions.y + 1; - - // multiplication factor between horizontal span and map width - var hFactor = (BR.column - TL.column) / (width / this.tileSize.x); - - // multiplication factor expressed as base-2 logarithm, for zoom difference - var hZoomDiff = Math.log(hFactor) / Math.log(2); - - // possible horizontal zoom to fit geographical extent in map width - var hPossibleZoom = TL.zoom - (precise ? hZoomDiff : Math.ceil(hZoomDiff)); - - // multiplication factor between vertical span and map height - var vFactor = (BR.row - TL.row) / (height / this.tileSize.y); - - // multiplication factor expressed as base-2 logarithm, for zoom difference - var vZoomDiff = Math.log(vFactor) / Math.log(2); - - // possible vertical zoom to fit geographical extent in map height - var vPossibleZoom = TL.zoom - (precise ? vZoomDiff : Math.ceil(vZoomDiff)); - - // initial zoom to fit extent vertically and horizontally - var initZoom = Math.min(hPossibleZoom, vPossibleZoom); - - // additionally, make sure it's not outside the boundaries set by map limits - initZoom = Math.min(initZoom, this.coordLimits[1].zoom); - initZoom = Math.max(initZoom, this.coordLimits[0].zoom); - - // coordinate of extent center - var centerRow = (TL.row + BR.row) / 2; - var centerColumn = (TL.column + BR.column) / 2; - var centerZoom = TL.zoom; - return new MM.Coordinate(centerRow, centerColumn, centerZoom).zoomTo(initZoom); - }, - - setExtent: function(locations, precise) { - this.coordinate = this.extentCoordinate(locations, precise); - this.draw(); // draw calls enforceLimits - // (if you switch to getFrame, call enforceLimits first) - - this.dispatchCallback('extentset', locations); - return this; - }, - - // Resize the map's container `
`, redrawing the map and triggering - // `resized` to make sure that the map's presentation is still correct. - setSize: function(dimensions) { - // Ensure that, whether a raw object or a Point object is passed, - // this.dimensions will be a Point. - this.dimensions = new MM.Point(dimensions.x, dimensions.y); - this.parent.style.width = Math.round(this.dimensions.x) + 'px'; - this.parent.style.height = Math.round(this.dimensions.y) + 'px'; - if (this.autoSize) { - MM.removeEvent(window, 'resize', this.windowResize()); - this.autoSize = false; - } - this.draw(); // draw calls enforceLimits - // (if you switch to getFrame, call enforceLimits first) - this.dispatchCallback('resized', this.dimensions); - return this; - }, - - // projecting points on and off screen - coordinatePoint: function(coord) { - // Return an x, y point on the map image for a given coordinate. - if (coord.zoom != this.coordinate.zoom) { - coord = coord.zoomTo(this.coordinate.zoom); - } - - // distance from the center of the map - var point = new MM.Point(this.dimensions.x / 2, this.dimensions.y / 2); - point.x += this.tileSize.x * (coord.column - this.coordinate.column); - point.y += this.tileSize.y * (coord.row - this.coordinate.row); - - return point; - }, - - // Get a `MM.Coordinate` from an `MM.Point` - returns a new tile-like object - // from a screen point. - pointCoordinate: function(point) { - // new point coordinate reflecting distance from map center, in tile widths - var coord = this.coordinate.copy(); - coord.column += (point.x - this.dimensions.x / 2) / this.tileSize.x; - coord.row += (point.y - this.dimensions.y / 2) / this.tileSize.y; - - return coord; - }, - - // Return an MM.Coordinate (row,col,zoom) for an MM.Location (lat,lon). - locationCoordinate: function(location) { - return this.projection.locationCoordinate(location); - }, - - // Return an MM.Location (lat,lon) for an MM.Coordinate (row,col,zoom). - coordinateLocation: function(coordinate) { - return this.projection.coordinateLocation(coordinate); - }, - - // Return an x, y point on the map image for a given geographical location. - locationPoint: function(location) { - return this.coordinatePoint(this.locationCoordinate(location)); - }, - - // Return a geographical location on the map image for a given x, y point. - pointLocation: function(point) { - return this.coordinateLocation(this.pointCoordinate(point)); - }, - - // inspecting - getExtent: function() { - return new MM.Extent( - this.pointLocation(new MM.Point(0, 0)), - this.pointLocation(this.dimensions) - ); - }, - - extent: function(locations, precise) { - if (locations) { - return this.setExtent(locations, precise); - } else { - return this.getExtent(); - } - }, - - // Get the current centerpoint of the map, returning a `Location` - getCenter: function() { - return this.projection.coordinateLocation(this.coordinate); - }, - - center: function(location) { - if (location) { - return this.setCenter(location); - } else { - return this.getCenter(); - } - }, - - // Get the current zoom level of the map, returning a number - getZoom: function() { - return this.coordinate.zoom; - }, - - zoom: function(zoom) { - if (zoom !== undefined) { - return this.setZoom(zoom); - } else { - return this.getZoom(); - } - }, - - // return a copy of the layers array - getLayers: function() { - return this.layers.slice(); - }, - - // return the layer at the given index - getLayerAt: function(index) { - return this.layers[index]; - }, - - // put the given layer on top of all the others - addLayer: function(layer) { - this.layers.push(layer); - this.parent.appendChild(layer.parent); - layer.map = this; // TODO: remove map property from MM.Layer? - return this; - }, - - // find the given layer and remove it - removeLayer: function(layer) { - for (var i = 0; i < this.layers.length; i++) { - if (layer == this.layers[i]) { - this.removeLayerAt(i); - break; - } - } - return this; - }, - - // replace the current layer at the given index with the given layer - setLayerAt: function(index, layer) { - - if (index < 0 || index >= this.layers.length) { - throw new Error('invalid index in setLayerAt(): ' + index); - } - - if (this.layers[index] != layer) { - - // clear existing layer at this index - if (index < this.layers.length) { - this.layers[index].destroy(); - } - - // pass it on. - this.layers[index] = layer; - this.parent.appendChild(layer.parent); - layer.map = this; // TODO: remove map property from MM.Layer - - MM.getFrame(this.getRedraw()); - } - - return this; - }, - - // put the given layer at the given index, moving others if necessary - insertLayerAt: function(index, layer) { - - if (index < 0 || index > this.layers.length) { - throw new Error('invalid index in insertLayerAt(): ' + index); - } - - if (index == this.layers.length) { - // it just gets tacked on to the end - this.layers.push(layer); - this.parent.appendChild(layer.parent); - } else { - // it needs to get slipped in amongst the others - var other = this.layers[index]; - this.parent.insertBefore(layer.parent, other.parent); - this.layers.splice(index, 0, layer); - } - - layer.map = this; // TODO: remove map property from MM.Layer - - MM.getFrame(this.getRedraw()); - - return this; - }, - - // remove the layer at the given index, call .destroy() on the layer - removeLayerAt: function(index) { - if (index < 0 || index >= this.layers.length) { - throw new Error('invalid index in removeLayer(): ' + index); - } - - // gone baby gone. - var old = this.layers[index]; - this.layers.splice(index, 1); - old.destroy(); - - return this; - }, - - // switch the stacking order of two layers, by index - swapLayersAt: function(i, j) { - - if (i < 0 || i >= this.layers.length || j < 0 || j >= this.layers.length) { - throw new Error('invalid index in swapLayersAt(): ' + index); - } - - var layer1 = this.layers[i], - layer2 = this.layers[j], - dummy = document.createElement('div'); - - // kick layer2 out, replace it with the dummy. - this.parent.replaceChild(dummy, layer2.parent); - - // put layer2 back in and kick layer1 out - this.parent.replaceChild(layer2.parent, layer1.parent); - - // put layer1 back in and ditch the dummy - this.parent.replaceChild(layer1.parent, dummy); - - // now do it to the layers array - this.layers[i] = layer2; - this.layers[j] = layer1; - - return this; - }, - - // limits - - enforceZoomLimits: function(coord) { - var limits = this.coordLimits; - if (limits) { - // clamp zoom level: - var minZoom = limits[0].zoom; - var maxZoom = limits[1].zoom; - if (coord.zoom < minZoom) { - coord = coord.zoomTo(minZoom); - } - else if (coord.zoom > maxZoom) { - coord = coord.zoomTo(maxZoom); - } - } - return coord; - }, - - enforcePanLimits: function(coord) { - - if (this.coordLimits) { - - coord = coord.copy(); - - // clamp pan: - var topLeftLimit = this.coordLimits[0].zoomTo(coord.zoom); - var bottomRightLimit = this.coordLimits[1].zoomTo(coord.zoom); - var currentTopLeft = this.pointCoordinate(new MM.Point(0, 0)) - .zoomTo(coord.zoom); - var currentBottomRight = this.pointCoordinate(this.dimensions) - .zoomTo(coord.zoom); - - // this handles infinite limits: - // (Infinity - Infinity) is Nan - // NaN is never less than anything - if (bottomRightLimit.row - topLeftLimit.row < - currentBottomRight.row - currentTopLeft.row) { - // if the limit is smaller than the current view center it - coord.row = (bottomRightLimit.row + topLeftLimit.row) / 2; - } else { - if (currentTopLeft.row < topLeftLimit.row) { - coord.row += topLeftLimit.row - currentTopLeft.row; - } else if (currentBottomRight.row > bottomRightLimit.row) { - coord.row -= currentBottomRight.row - bottomRightLimit.row; - } - } - if (bottomRightLimit.column - topLeftLimit.column < - currentBottomRight.column - currentTopLeft.column) { - // if the limit is smaller than the current view, center it - coord.column = (bottomRightLimit.column + topLeftLimit.column) / 2; - } else { - if (currentTopLeft.column < topLeftLimit.column) { - coord.column += topLeftLimit.column - currentTopLeft.column; - } else if (currentBottomRight.column > bottomRightLimit.column) { - coord.column -= currentBottomRight.column - bottomRightLimit.column; - } - } - } - - return coord; - }, - - // Prevent accidentally navigating outside the `coordLimits` of the map. - enforceLimits: function(coord) { - return this.enforcePanLimits(this.enforceZoomLimits(coord)); - }, - - // rendering - - // Redraw the tiles on the map, reusing existing tiles. - draw: function() { - // make sure we're not too far in or out: - this.coordinate = this.enforceLimits(this.coordinate); - - // if we don't have dimensions, check the parent size - if (this.dimensions.x <= 0 || this.dimensions.y <= 0) { - if (this.autoSize) { - // maybe the parent size has changed? - var w = this.parent.offsetWidth, - h = this.parent.offsetHeight; - this.dimensions = new MM.Point(w,h); - if (w <= 0 || h <= 0) { - return; - } - } else { - // the issue can only be corrected with setSize - return; - } - } - - // draw layers one by one - for(var i = 0; i < this.layers.length; i++) { - this.layers[i].draw(); - } - - this.dispatchCallback('drawn'); - }, - - _redrawTimer: undefined, - - requestRedraw: function() { - // we'll always draw within 1 second of this request, - // sometimes faster if there's already a pending redraw - // this is used when a new tile arrives so that we clear - // any parent/child tiles that were only being displayed - // until the tile loads at the right zoom level - if (!this._redrawTimer) { - this._redrawTimer = setTimeout(this.getRedraw(), 1000); - } - }, - - _redraw: null, - - getRedraw: function() { - // let's only create this closure once... - if (!this._redraw) { - var theMap = this; - this._redraw = function() { - theMap.draw(); - theMap._redrawTimer = 0; - }; - } - return this._redraw; - }, - - // Attempts to destroy all attachment a map has to a page - // and clear its memory usage. - destroy: function() { - for (var j = 0; j < this.layers.length; j++) { - this.layers[j].destroy(); - } - this.layers = []; - this.projection = null; - for (var i = 0; i < this.eventHandlers.length; i++) { - this.eventHandlers[i].remove(); - } - if (this.autoSize) { - MM.removeEvent(window, 'resize', this.windowResize()); - } - } - }; - // Instance of a map intended for drawing to a div. - // - // * `parent` (required DOM element) - // Can also be an ID of a DOM element - // * `provider` (required MM.MapProvider or URL template) - // * `location` (required MM.Location) - // Location for map to show - // * `zoom` (required number) - MM.mapByCenterZoom = function(parent, layerish, location, zoom) { - var layer = MM.coerceLayer(layerish), - map = new MM.Map(parent, layer, false); - map.setCenterZoom(location, zoom).draw(); - return map; - }; - - // Instance of a map intended for drawing to a div. - // - // * `parent` (required DOM element) - // Can also be an ID of a DOM element - // * `provider` (required MM.MapProvider or URL template) - // * `locationA` (required MM.Location) - // Location of one map corner - // * `locationB` (required MM.Location) - // Location of other map corner - MM.mapByExtent = function(parent, layerish, locationA, locationB) { - var layer = MM.coerceLayer(layerish), - map = new MM.Map(parent, layer, false); - map.setExtent([locationA, locationB]).draw(); - return map; - }; - if (typeof module !== 'undefined' && module.exports) { - module.exports = { - Point: MM.Point, - Projection: MM.Projection, - MercatorProjection: MM.MercatorProjection, - LinearProjection: MM.LinearProjection, - Transformation: MM.Transformation, - Location: MM.Location, - MapProvider: MM.MapProvider, - TemplatedMapProvider: MM.TemplatedMapProvider, - Coordinate: MM.Coordinate, - deriveTransformation: MM.deriveTransformation - }; - } -})(MM); diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_server.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_server.py deleted file mode 100644 index adaa33175..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mmap/mmap_server.py +++ /dev/null @@ -1,61 +0,0 @@ -import BaseHTTPServer -import json -import os.path -import thread -import urlparse - -DOC_DIR = os.path.join(os.path.dirname(__file__), 'mmap_app') - - -class Server(BaseHTTPServer.HTTPServer): - def __init__(self, handler, address='', port=9999, module_state=None): - BaseHTTPServer.HTTPServer.__init__(self, (address, port), handler) - self.allow_reuse_address = True - self.module_state = module_state - - -class Handler(BaseHTTPServer.BaseHTTPRequestHandler): - def do_GET(self): - scheme, host, path, params, query, frag = urlparse.urlparse(self.path) - if path == '/data': - state = self.server.module_state - data = {'lat': state.lat, - 'lon': state.lon, - 'heading': state.heading, - 'alt': state.alt, - 'airspeed': state.airspeed, - 'groundspeed': state.groundspeed} - self.send_response(200) - self.end_headers() - self.wfile.write(json.dumps(data)) - else: - # Remove leading '/'. - path = path[1:] - # Ignore all directories. E.g. for ../../bar/a.txt serve - # DOC_DIR/a.txt. - unused_head, path = os.path.split(path) - # for / serve index.html. - if path == '': - path = 'index.html' - content = None - error = None - try: - with open(os.path.join(DOC_DIR, path), 'rb') as f: - content = f.read() - except IOError, e: - error = str(e) - if content: - self.send_response(200) - self.end_headers() - self.wfile.write(content) - else: - self.send_response(404) - self.end_headers() - self.wfile.write('Error: %s' % (error,)) - - -def start_server(address, port, module_state): - server = Server( - Handler, address=address, port=port, module_state=module_state) - thread.start_new_thread(server.serve_forever, ()) - return server diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mode.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mode.py deleted file mode 100644 index c3d893c47..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_mode.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python -'''mode command handling''' - -import time, os -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module - -class ModeModule(mp_module.MPModule): - def __init__(self, mpstate): - super(ModeModule, self).__init__(mpstate, "mode") - self.add_command('mode', self.cmd_mode, "mode change") - self.add_command('guided', self.cmd_guided, "fly to a clicked location on map") - - def cmd_mode(self, args): - '''set arbitrary mode''' - mode_mapping = self.master.mode_mapping() - if mode_mapping is None: - print('No mode mapping available') - return - if len(args) != 1: - print('Available modes: ', mode_mapping.keys()) - return - if args[0].isdigit(): - modenum = int(args[0]) - else: - mode = args[0].upper() - if mode not in mode_mapping: - print('Unknown mode %s: ' % mode) - return - modenum = mode_mapping[mode] - self.master.set_mode(modenum) - - def unknown_command(self, args): - '''handle mode switch by mode name as command''' - mode_mapping = self.master.mode_mapping() - mode = args[0].upper() - if mode in mode_mapping: - self.master.set_mode(mode_mapping[mode]) - return True - return False - - def cmd_guided(self, args): - '''set GUIDED target''' - if len(args) != 1 and len(args) != 3: - print("Usage: guided ALTITUDE | guided LAT LON ALTITUDE") - return - - if len(args) == 3: - latitude = float(args[0]) - longitude = float(args[1]) - altitude = int(args[2]) - latlon = (latitude, longitude) - else: - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - altitude = int(args[0]) - - #print("Guided %s %d" % (str(latlon), altitude)) - self.master.mav.mission_item_send (self.settings.target_system, - self.settings.target_component, - 0, - self.module('wp').get_default_frame(), - mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, - 2, 0, 0, 0, 0, 0, - latlon[0], latlon[1], altitude) - -def init(mpstate): - '''initialise module''' - return ModeModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_nsh.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_nsh.py deleted file mode 100644 index c19253bad..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_nsh.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -'''remote nsh console handling''' - -import time, os, fnmatch, sys, time -from pymavlink import mavutil, mavwp -from MAVProxy.modules.lib import mp_settings -from MAVProxy.modules.lib import mp_module - -class NSHModule(mp_module.MPModule): - def __init__(self, mpstate): - super(NSHModule, self).__init__(mpstate, "nsh", "remote nsh shell") - self.add_command('nsh', self.cmd_nsh, - 'nsh shell control', - ['', - 'set (SERIALSETTING)']) - self.serial_settings = mp_settings.MPSettings( - [ ('port', int, mavutil.mavlink.SERIAL_CONTROL_DEV_SHELL), - ('baudrate', int, 57600) - ] - ) - self.add_completion_function('(SERIALSETTING)', self.serial_settings.completion) - self.last_packet = time.time() - self.last_check = time.time() - self.started = False - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'SERIAL_CONTROL': - data = m.data[:m.count] - if m.count > 0: - s = ''.join(str(chr(x)) for x in data) - if self.mpstate.system == 'Windows': - # strip nsh ansi codes - s = s.replace("\033[K","") - sys.stdout.write(s) - self.last_packet = time.time() - - def stop(self): - '''stop nsh input''' - self.mpstate.rl.set_prompt(self.status.flightmode + "> ") - self.mpstate.functions.input_handler = None - self.started = False - # unlock the port - mav = self.master.mav - mav.serial_control_send(self.serial_settings.port, - 0, - 0, self.serial_settings.baudrate, - 0, [0]*70) - - def send(self, line): - '''send some bytes''' - line = line.strip() - if line == ".": - self.stop() - return - mav = self.master.mav - if line != '+++': - line += "\r\n" - buf = [ord(x) for x in line] - buf.extend([0]*(70-len(buf))) - - flags = mavutil.mavlink.SERIAL_CONTROL_FLAG_RESPOND - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_MULTI - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE - mav.serial_control_send(self.serial_settings.port, - flags, - 0, self.serial_settings.baudrate, - len(line), buf) - - def idle_task(self): - '''handle mavlink packets''' - if not self.started: - return - now = time.time() - if now - self.last_packet < 1: - timeout = 0.05 - else: - timeout = 0.2 - if now - self.last_check > timeout: - self.last_check = now - mav = self.master.mav - flags = mavutil.mavlink.SERIAL_CONTROL_FLAG_RESPOND - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_MULTI - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE - mav.serial_control_send(self.serial_settings.port, - flags, - 0, self.serial_settings.baudrate, - 0, [0]*70) - - - def cmd_nsh(self, args): - '''nsh shell commands''' - usage = "Usage: nsh " - if len(args) < 1: - print(usage) - return - if args[0] == "start": - self.mpstate.functions.input_handler = self.send - self.started = True - self.mpstate.rl.set_prompt("") - elif args[0] == "stop": - self.stop() - elif args[0] == "set": - self.serial_settings.command(args[1:]) - else: - print(usage) - -def init(mpstate): - '''initialise module''' - return NSHModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_output.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_output.py deleted file mode 100644 index 5033bc78b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_output.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python -'''enable run-time addition and removal of UDP clients , just like --out on the cnd line''' -''' TO USE: - output add 10.11.12.13:14550 - output list - output remove 3 # to remove 3rd output -''' - -from pymavlink import mavutil - - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util - -class OutputModule(mp_module.MPModule): - def __init__(self, mpstate): - super(OutputModule, self).__init__(mpstate, "output", "output control", public=True) - self.add_command('output', self.cmd_output, "output control", - [""]) - - def cmd_output(self, args): - '''handle output commands''' - if len(args) < 1 or args[0] == "list": - self.cmd_output_list() - elif args[0] == "add": - if len(args) != 2: - print("Usage: output add OUTPUT") - return - self.cmd_output_add(args[1:]) - elif args[0] == "remove": - if len(args) != 2: - print("Usage: output remove OUTPUT") - return - self.cmd_output_remove(args[1:]) - elif args[0] == "sysid": - if len(args) != 3: - print("Usage: output sysid SYSID OUTPUT") - return - self.cmd_output_sysid(args[1:]) - else: - print("usage: output ") - - def cmd_output_list(self): - '''list outputs''' - print("%u outputs" % len(self.mpstate.mav_outputs)) - for i in range(len(self.mpstate.mav_outputs)): - conn = self.mpstate.mav_outputs[i] - print("%u: %s" % (i, conn.address)) - if len(self.mpstate.sysid_outputs) > 0: - print("%u sysid outputs" % len(self.mpstate.sysid_outputs)) - for sysid in self.mpstate.sysid_outputs: - conn = self.mpstate.sysid_outputs[sysid] - print("%u: %s" % (sysid, conn.address)) - - def cmd_output_add(self, args): - '''add new output''' - device = args[0] - print("Adding output %s" % device) - try: - conn = mavutil.mavlink_connection(device, input=False, source_system=self.settings.source_system) - conn.mav.srcComponent = self.settings.source_component - except Exception: - print("Failed to connect to %s" % device) - return - self.mpstate.mav_outputs.append(conn) - try: - mp_util.child_fd_list_add(conn.port.fileno()) - except Exception: - pass - - def cmd_output_sysid(self, args): - '''add new output for a specific MAVLink sysID''' - sysid = int(args[0]) - device = args[1] - print("Adding output %s for sysid %u" % (device, sysid)) - try: - conn = mavutil.mavlink_connection(device, input=False, source_system=self.settings.source_system) - conn.mav.srcComponent = self.settings.source_component - except Exception: - print("Failed to connect to %s" % device) - return - try: - mp_util.child_fd_list_add(conn.port.fileno()) - except Exception: - pass - if sysid in self.mpstate.sysid_outputs: - self.mpstate.sysid_outputs[sysid].close() - self.mpstate.sysid_outputs[sysid] = conn - - def cmd_output_remove(self, args): - '''remove an output''' - device = args[0] - for i in range(len(self.mpstate.mav_outputs)): - conn = self.mpstate.mav_outputs[i] - if str(i) == device or conn.address == device: - print("Removing output %s" % conn.address) - try: - mp_util.child_fd_list_add(conn.port.fileno()) - except Exception: - pass - conn.close() - self.mpstate.mav_outputs.pop(i) - return - - def idle_task(self): - '''called on idle''' - for m in self.mpstate.mav_outputs: - m.source_system = self.settings.source_system - m.mav.srcSystem = m.source_system - m.mav.srcComponent = self.settings.source_component - -def init(mpstate): - '''initialise module''' - return OutputModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_param.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_param.py deleted file mode 100644 index 5de2bf372..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_param.py +++ /dev/null @@ -1,251 +0,0 @@ -#!/usr/bin/env python -'''param command handling''' - -import time, os, fnmatch -from pymavlink import mavutil, mavparm -from MAVProxy.modules.lib import mp_util - -from MAVProxy.modules.lib import mp_module - -class ParamState: - '''this class is separated to make it possible to use the parameter - functions on a secondary connection''' - def __init__(self, mav_param, logdir, vehicle_name, parm_file): - self.mav_param_set = set() - self.mav_param_count = 0 - self.param_period = mavutil.periodic_event(1) - self.fetch_one = 0 - self.mav_param = mav_param - self.logdir = logdir - self.vehicle_name = vehicle_name - self.parm_file = parm_file - - def handle_mavlink_packet(self, master, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'PARAM_VALUE': - param_id = "%.16s" % m.param_id - # Note: the xml specifies param_index is a uint16, so -1 in that field will show as 65535 - # We accept both -1 and 65535 as 'unknown index' to future proof us against someday having that - # xml fixed. - if m.param_index != -1 and m.param_index != 65535 and m.param_index not in self.mav_param_set: - added_new_parameter = True - self.mav_param_set.add(m.param_index) - else: - added_new_parameter = False - if m.param_count != -1: - self.mav_param_count = m.param_count - self.mav_param[str(param_id)] = m.param_value - if self.fetch_one > 0: - self.fetch_one -= 1 - print("%s = %f" % (param_id, m.param_value)) - if added_new_parameter and len(self.mav_param_set) == m.param_count: - print("Received %u parameters" % m.param_count) - if self.logdir != None: - self.mav_param.save(os.path.join(self.logdir, self.parm_file), '*', verbose=True) - - def fetch_check(self, master): - '''check for missing parameters periodically''' - if self.param_period.trigger(): - if master is None: - return - if len(self.mav_param_set) == 0: - master.param_fetch_all() - elif self.mav_param_count != 0 and len(self.mav_param_set) != self.mav_param_count: - if master.time_since('PARAM_VALUE') >= 1: - diff = set(range(self.mav_param_count)).difference(self.mav_param_set) - count = 0 - while len(diff) > 0 and count < 10: - idx = diff.pop() - master.param_fetch_one(idx) - count += 1 - - def param_help_download(self): - '''download XML files for parameters''' - import multiprocessing - files = [] - for vehicle in ['APMrover2', 'ArduCopter', 'ArduPlane']: - url = 'http://autotest.diydrones.com/Parameters/%s/apm.pdef.xml' % vehicle - path = mp_util.dot_mavproxy("%s.xml" % vehicle) - files.append((url, path)) - url = 'http://autotest.diydrones.com/%s-defaults.parm' % vehicle - path = mp_util.dot_mavproxy("%s-defaults.parm" % vehicle) - files.append((url, path)) - try: - child = multiprocessing.Process(target=mp_util.download_files, args=(files,)) - child.start() - except Exception as e: - print(e) - - def param_help(self, args): - '''show help on a parameter''' - if len(args) == 0: - print("Usage: param help PARAMETER_NAME") - return - if self.vehicle_name is None: - print("Unknown vehicle type") - return - path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name) - if not os.path.exists(path): - print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name) - return - xml = open(path).read() - from lxml import objectify - objectify.enable_recursive_str() - tree = objectify.fromstring(xml) - htree = {} - for p in tree.vehicles.parameters.param: - n = p.get('name').split(':')[1] - htree[n] = p - for lib in tree.libraries.parameters: - for p in lib.param: - n = p.get('name') - htree[n] = p - for h in args: - if h in htree: - help = htree[h] - print("%s: %s\n" % (h, help.get('humanName'))) - print(help.get('documentation')) - try: - vchild = help.getchildren()[0] - print("\nValues: ") - for v in vchild.value: - print("\t%s : %s" % (v.get('code'), str(v))) - except Exception as e: - pass - else: - print("Parameter '%s' not found in documentation" % h) - - def handle_command(self, master, mpstate, args): - '''handle parameter commands''' - param_wildcard = "*" - usage="Usage: param " - if len(args) < 1: - print(usage) - return - if args[0] == "fetch": - if len(args) == 1: - master.param_fetch_all() - self.mav_param_set = set() - print("Requested parameter list") - else: - for p in self.mav_param.keys(): - if fnmatch.fnmatch(p, args[1].upper()): - master.param_fetch_one(p) - self.fetch_one += 1 - print("Requested parameter %s" % p) - elif args[0] == "save": - if len(args) < 2: - print("usage: param save [wildcard]") - return - if len(args) > 2: - param_wildcard = args[2] - else: - param_wildcard = "*" - self.mav_param.save(args[1], param_wildcard, verbose=True) - elif args[0] == "diff": - wildcard = '*' - if len(args) < 2 or args[1].find('*') != -1: - if self.vehicle_name is None: - print("Unknown vehicle type") - return - filename = mp_util.dot_mavproxy("%s-defaults.parm" % self.vehicle_name) - if not os.path.exists(filename): - print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name) - return - if len(args) >= 2: - wildcard = args[1] - else: - filename = args[1] - if len(args) == 3: - wildcard = args[2] - print("%-16.16s %12.12s %12.12s" % ('Parameter', 'Defaults', 'Current')) - self.mav_param.diff(filename, wildcard=wildcard) - elif args[0] == "set": - if len(args) < 2: - print("Usage: param set PARMNAME VALUE") - return - if len(args) == 2: - self.mav_param.show(args[1]) - return - param = args[1] - value = args[2] - if value.startswith('0x'): - value = int(value, base=16) - if not param.upper() in self.mav_param: - print("Unable to find parameter '%s'" % param) - return - self.mav_param.mavset(master, param.upper(), value, retries=3) - - if (param.upper() == "WP_LOITER_RAD" or param.upper() == "LAND_BREAK_PATH"): - #need to redraw rally points - mpstate.module('rally').rallyloader.last_change = time.time() - #need to redraw loiter points - mpstate.module('wp').wploader.last_change = time.time() - - elif args[0] == "load": - if len(args) < 2: - print("Usage: param load [wildcard]") - return - if len(args) > 2: - param_wildcard = args[2] - else: - param_wildcard = "*" - self.mav_param.load(args[1], param_wildcard, master) - elif args[0] == "preload": - if len(args) < 2: - print("Usage: param preload ") - return - self.mav_param.load(args[1]) - elif args[0] == "forceload": - if len(args) < 2: - print("Usage: param forceload [wildcard]") - return - if len(args) > 2: - param_wildcard = args[2] - else: - param_wildcard = "*" - self.mav_param.load(args[1], param_wildcard, master, check=False) - elif args[0] == "download": - self.param_help_download() - elif args[0] == "help": - self.param_help(args[1:]) - elif args[0] == "show": - if len(args) > 1: - pattern = args[1] - else: - pattern = "*" - self.mav_param.show(pattern) - else: - print(usage) - - -class ParamModule(mp_module.MPModule): - def __init__(self, mpstate): - super(ParamModule, self).__init__(mpstate, "param", "parameter handling", public = True) - self.pstate = ParamState(self.mav_param, self.logdir, self.vehicle_name, 'mav.parm') - self.add_command('param', self.cmd_param, "parameter handling", - ["", - " (PARAMETER)", - " (FILENAME)"]) - if self.continue_mode and self.logdir != None: - parmfile = os.path.join(self.logdir, 'mav.parm') - if os.path.exists(parmfile): - mpstate.mav_param.load(parmfile) - self.pstate.mav_param_set = set(self.mav_param.keys()) - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - self.pstate.handle_mavlink_packet(self.master, m) - - def idle_task(self): - '''handle missing parameters''' - self.pstate.vehicle_name = self.vehicle_name - self.pstate.fetch_check(self.master) - - def cmd_param(self, args): - '''control parameters''' - self.pstate.handle_command(self.master, self.mpstate, args) - -def init(mpstate): - '''initialise module''' - return ParamModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_ppp.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_ppp.py deleted file mode 100644 index cd1091ab7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_ppp.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python -''' -A PPP over MAVLink module -Andrew Tridgell -May 2012 -''' - -import time, os, fcntl, pty - -from MAVProxy.modules.lib import mp_module - -class PPPModule(mp_module.MPModule): - def __init__(self, mpstate): - super(PPPModule, self).__init__(mpstate, "ppp", "PPP link") - self.command = "noauth nodefaultroute nodetach nodeflate nobsdcomp mtu 128".split() - self.packet_count = 0 - self.byte_count = 0 - self.ppp_fd = -1 - self.pid = -1 - self.add_command('ppp', self.cmd_ppp, "ppp link control") - - - def ppp_read(self, ppp_fd): - '''called from main select loop in mavproxy when the pppd child - sends us some data''' - buf = os.read(ppp_fd, 100) - if len(buf) == 0: - # EOF on the child fd - self.stop_ppp_link() - return - print("ppp packet len=%u" % len(buf)) - master = self.master - master.mav.ppp_send(len(buf), buf) - - def start_ppp_link(self): - '''startup the link''' - cmd = ['pppd'] - cmd.extend(self.command) - (self.pid, self.ppp_fd) = pty.fork() - if self.pid == 0: - os.execvp("pppd", cmd) - raise RuntimeError("pppd exited") - if self.ppp_fd == -1: - print("Failed to create link fd") - return - - # ensure fd is non-blocking - fcntl.fcntl(self.ppp_fd, fcntl.F_SETFL, fcntl.fcntl(self.ppp_fd, fcntl.F_GETFL) | os.O_NONBLOCK) - self.byte_count = 0 - self.packet_count = 0 - - # ask mavproxy to add us to the select loop - self.mpself.select_extra[self.ppp_fd] = (self.ppp_read, self.ppp_fd) - - - def stop_ppp_link(self): - '''stop the link''' - if self.ppp_fd == -1: - return - try: - self.mpself.select_extra.pop(self.ppp_fd) - os.close(self.ppp_fd) - os.waitpid(self.pid, 0) - except Exception: - pass - self.pid = -1 - self.ppp_fd = -1 - print("stopped ppp link") - - - def cmd_ppp(self, args): - '''set ppp parameters and start link''' - usage = "ppp " - if len(args) == 0: - print(usage) - return - if args[0] == "command": - if len(args) == 1: - print("ppp.command=%s" % " ".join(self.command)) - else: - self.command = args[1:] - elif args[0] == "start": - self.start_ppp_link() - elif args[0] == "stop": - self.stop_ppp_link() - elif args[0] == "status": - self.console.writeln("%u packets %u bytes" % (self.packet_count, self.byte_count)) - - def unload(self): - '''unload module''' - self.stop_ppp_link() - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'PPP' and self.ppp_fd != -1: - print("got ppp mavlink pkt len=%u" % m.length) - os.write(self.ppp_fd, m.data[:m.length]) - -def init(mpstate): - '''initialise module''' - return PPPModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rally.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rally.py deleted file mode 100644 index c0c380b48..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rally.py +++ /dev/null @@ -1,325 +0,0 @@ -""" - MAVProxy rally module -""" - -from pymavlink import mavwp -from pymavlink import mavutil -import time, os, platform -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util - -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - -class RallyModule(mp_module.MPModule): - def __init__(self, mpstate): - super(RallyModule, self).__init__(mpstate, "rally", "rally point control", public = True) - self.rallyloader = mavwp.MAVRallyLoader(self.settings.target_system, self.settings.target_component) - self.add_command('rally', self.cmd_rally, "rally point control", ["", - " (FILENAME)"]) - self.have_list = False - self.abort_alt = 50 - self.abort_first_send_time = 0 - self.abort_previous_send_time = 0 - self.abort_ack_received = True - - self.menu_added_console = False - self.menu_added_map = False - if mp_util.has_wxpython: - self.menu = MPMenuSubMenu('Rally', - items=[MPMenuItem('Clear', 'Clear', '# rally clear'), - MPMenuItem('List', 'List', '# rally list'), - MPMenuItem('Load', 'Load', '# rally load ', - handler=MPMenuCallFileDialog(flags=('open',), - title='Rally Load', - wildcard='*.rally')), - MPMenuItem('Save', 'Save', '# rally save ', - handler=MPMenuCallFileDialog(flags=('save', 'overwrite_prompt'), - title='Rally Save', - wildcard='*.rally')), - MPMenuItem('Add', 'Add', '# rally add ', - handler=MPMenuCallTextDialog(title='Rally Altitude (m)', - default=100))]) - - - def idle_task(self): - '''called on idle''' - if self.module('console') is not None and not self.menu_added_console: - self.menu_added_console = True - self.module('console').add_menu(self.menu) - if self.module('map') is not None and not self.menu_added_map: - self.menu_added_map = True - self.module('map').add_menu(self.menu) - - '''handle abort command; it is critical that the AP to receive it''' - if self.abort_ack_received is False: - #only send abort every second (be insistent, but don't spam) - if (time.time() - self.abort_previous_send_time > 1): - self.master.mav.command_long_send(self.settings.target_system, - self.settings.target_component, - mavutil.mavlink.MAV_CMD_DO_GO_AROUND, - 0, int(self.abort_alt), 0, 0, 0, 0, 0, 0,) - self.abort_previous_send_time = time.time() - - #try to get an ACK from the plane: - if self.abort_first_send_time == 0: - self.abort_first_send_time = time.time() - elif time.time() - self.abort_first_send_time > 10: #give up after 10 seconds - print ("Unable to send abort command!\n") - self.abort_ack_received = True - - - def cmd_rally_add(self, args): - '''handle rally add''' - if len(args) < 1: - alt = self.settings.rallyalt - else: - alt = float(args[0]) - - if len(args) < 2: - break_alt = self.settings.rally_breakalt - else: - break_alt = float(args[1]) - - if len(args) < 3: - flag = self.settings.rally_flags - else: - flag = int(args[2]) - #currently only supporting autoland values: - #True (nonzero) and False (zero) - if (flag != 0): - flag = 2 - - if not self.have_list: - print("Please list rally points first") - return - - if (self.rallyloader.rally_count() > 4): - print ("Only 5 rally points possible per flight plan.") - return - - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - - land_hdg = 0.0 - - self.rallyloader.create_and_append_rally_point(latlon[0] * 1e7, latlon[1] * 1e7, alt, break_alt, land_hdg, flag) - self.send_rally_points() - print("Added Rally point at %s %f %f, autoland: %s" % (str(latlon), alt, break_alt, bool(flag & 2))) - - def cmd_rally_alt(self, args): - '''handle rally alt change''' - if (len(args) < 2): - print("Usage: rally alt RALLYNUM newAlt ") - return - if not self.have_list: - print("Please list rally points first") - return - - idx = int(args[0]) - if idx <= 0 or idx > self.rallyloader.rally_count(): - print("Invalid rally point number %u" % idx) - return - - new_alt = int(args[1]) - new_break_alt = None - if (len(args) > 2): - new_break_alt = int(args[2]) - - self.rallyloader.set_alt(idx, new_alt, new_break_alt) - self.send_rally_point(idx-1) - self.fetch_rally_point(idx-1) - self.rallyloader.reindex() - - def cmd_rally_move(self, args): - '''handle rally move''' - if len(args) < 1: - print("Usage: rally move RALLYNUM") - return - if not self.have_list: - print("Please list rally points first") - return - - idx = int(args[0]) - if idx <= 0 or idx > self.rallyloader.rally_count(): - print("Invalid rally point number %u" % idx) - return - - rpoint = self.rallyloader.rally_point(idx-1) - - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - - oldpos = (rpoint.lat*1e-7, rpoint.lng*1e-7) - self.rallyloader.move(idx, latlon[0], latlon[1]) - self.send_rally_point(idx-1) - p = self.fetch_rally_point(idx-1) - if p.lat != int(latlon[0]*1e7) or p.lng != int(latlon[1]*1e7): - print("Rally move failed") - return - self.rallyloader.reindex() - print("Moved rally point from %s to %s at %fm" % (str(oldpos), str(latlon), rpoint.alt)) - - - def cmd_rally(self, args): - '''rally point commands''' - #TODO: add_land arg - if len(args) < 1: - self.print_usage() - return - - elif args[0] == "add": - self.cmd_rally_add(args[1:]) - - elif args[0] == "move": - self.cmd_rally_move(args[1:]) - - elif args[0] == "clear": - self.rallyloader.clear() - self.mav_param.mavset(self.master,'RALLY_TOTAL',0,3) - - elif args[0] == "remove": - if not self.have_list: - print("Please list rally points first") - return - if (len(args) < 2): - print("Usage: rally remove RALLYNUM") - return - self.rallyloader.remove(int(args[1])) - self.send_rally_points() - - elif args[0] == "list": - self.list_rally_points() - self.have_list = True - - elif args[0] == "load": - if (len(args) < 2): - print("Usage: rally load filename") - return - - try: - self.rallyloader.load(args[1]) - except Exception as msg: - print("Unable to load %s - %s" % (args[1], msg)) - return - - self.send_rally_points() - self.have_list = True - - print("Loaded %u rally points from %s" % (self.rallyloader.rally_count(), args[1])) - - elif args[0] == "save": - if (len(args) < 2): - print("Usage: rally save filename") - return - - self.rallyloader.save(args[1]) - - print("Saved rally file %s" % args[1]) - - elif args[0] == "alt": - self.cmd_rally_alt(args[1:]) - - elif args[0] == "land": - if (len(args) >= 2 and args[1] == "abort"): - self.abort_ack_received = False - self.abort_first_send_time = 0 - - self.abort_alt = self.settings.rally_breakalt - if (len(args) >= 3): - self.abort_alt = int(args[2]) - - else: - self.master.mav.command_long_send(self.settings.target_system, - self.settings.target_component, - mavutil.mavlink.MAV_CMD_DO_RALLY_LAND, - 0, 0, 0, 0, 0, 0, 0, 0) - - else: - self.print_usage() - - def mavlink_packet(self, m): - '''handle incoming mavlink packet''' - type = m.get_type() - if type in ['COMMAND_ACK']: - if m.command == mavutil.mavlink.MAV_CMD_DO_GO_AROUND: - if (m.result == 0 and self.abort_ack_received == False): - self.say("Landing Abort Command Successfully Sent.") - self.abort_ack_received = True - elif (m.result != 0 and self.abort_ack_received == False): - self.say("Landing Abort Command Unsuccessful.") - - elif m.command == mavutil.mavlink.MAV_CMD_DO_RALLY_LAND: - if (m.result == 0): - self.say("Landing.") - - def send_rally_point(self, i): - '''send rally points from fenceloader''' - p = self.rallyloader.rally_point(i) - p.target_system = self.target_system - p.target_component = self.target_component - self.master.mav.send(p) - - def send_rally_points(self): - '''send rally points from rallyloader''' - self.mav_param.mavset(self.master,'RALLY_TOTAL',self.rallyloader.rally_count(),3) - - for i in range(self.rallyloader.rally_count()): - self.send_rally_point(i) - - def fetch_rally_point(self, i): - '''fetch one rally point''' - self.master.mav.rally_fetch_point_send(self.target_system, - self.target_component, i) - tstart = time.time() - p = None - while time.time() - tstart < 1: - p = self.master.recv_match(type='RALLY_POINT', blocking=False) - if p is not None: - break - time.sleep(0.1) - continue - if p is None: - self.console.error("Failed to fetch rally point %u" % i) - return None - return p - - def list_rally_points(self): - self.rallyloader.clear() - rally_count = self.mav_param.get('RALLY_TOTAL',0) - if rally_count == 0: - print("No rally points") - return - for i in range(int(rally_count)): - p = self.fetch_rally_point(i) - if p is None: - return - self.rallyloader.append_rally_point(p) - - for i in range(self.rallyloader.rally_count()): - p = self.rallyloader.rally_point(i) - self.console.writeln("lat=%f lng=%f alt=%f break_alt=%f land_dir=%f autoland=%f" % (p.lat * 1e-7, p.lng * 1e-7, p.alt, p.break_alt, p.land_dir, int(p.flags & 2!=0) )) - - if self.logdir != None: - ral_file_path = os.path.join(self.logdir, 'ral.txt') - self.rallyloader.save(ral_file_path) - print("Saved rally points to %s" % ral_file_path) - - def print_usage(self): - print("Usage: rally ") - -def init(mpstate): - '''initialise module''' - return RallyModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rc.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rc.py deleted file mode 100644 index 18e9dbb56..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rc.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -'''rc command handling''' - -import time, os, struct -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_module - -class RCModule(mp_module.MPModule): - def __init__(self, mpstate): - super(RCModule, self).__init__(mpstate, "rc", "rc command handling", public = True) - self.override = [ 0 ] * 8 - self.last_override = [ 0 ] * 8 - self.override_counter = 0 - self.add_command('rc', self.cmd_rc, "RC input control", ['<1|2|3|4|5|6|7|8|all>']) - self.add_command('switch', self.cmd_switch, "flight mode switch control", ['<0|1|2|3|4|5|6>']) - if self.sitl_output: - self.override_period = mavutil.periodic_event(20) - else: - self.override_period = mavutil.periodic_event(1) - - def idle_task(self): - if self.override_period.trigger(): - if (self.override != [ 0 ] * 8 or - self.override != self.last_override or - self.override_counter > 0): - self.last_override = self.override[:] - self.send_rc_override() - if self.override_counter > 0: - self.override_counter -= 1 - - def send_rc_override(self): - '''send RC override packet''' - if self.sitl_output: - buf = struct.pack('") - return - value = int(args[0]) - if value < 0 or value > 6: - print("Invalid switch value. Use 1-6 for flight modes, '0' to disable") - return - if self.vehicle_type == 'copter': - default_channel = 5 - else: - default_channel = 8 - if self.vehicle_type == 'rover': - flite_mode_ch_parm = int(self.get_mav_param("MODE_CH", default_channel)) - else: - flite_mode_ch_parm = int(self.get_mav_param("FLTMODE_CH", default_channel)) - self.override[flite_mode_ch_parm - 1] = mapping[value] - self.override_counter = 10 - self.send_rc_override() - if value == 0: - print("Disabled RC switch override") - else: - print("Set RC switch override to %u (PWM=%u channel=%u)" % ( - value, mapping[value], flite_mode_ch_parm)) - - def set_override(self, newchannels): - '''this is a public method for use by drone API or other scripting''' - self.override = newchannels - self.override_counter = 10 - self.send_rc_override() - - def set_override_chan(self, channel, value): - '''this is a public method for use by drone API or other scripting''' - self.override[channel] = value - self.override_counter = 10 - self.send_rc_override() - - def get_override_chan(self, channel): - '''this is a public method for use by drone API or other scripting''' - return self.override[channel] - - def cmd_rc(self, args): - '''handle RC value override''' - if len(args) != 2: - print("Usage: rc ") - return - value = int(args[1]) - if value > 65535 or value < -1: - raise ValueError("PWM value must be a positive integer between 0 and 65535") - if value == -1: - value = 65535 - channels = self.override - if args[0] == 'all': - for i in range(8): - channels[i] = value - else: - channel = int(args[0]) - channels[channel - 1] = value - if channel < 1 or channel > 8: - print("Channel must be between 1 and 8 or 'all'") - return - self.set_override(channels) - -def init(mpstate): - '''initialise module''' - return RCModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rcsetup.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rcsetup.py deleted file mode 100644 index c5f473617..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_rcsetup.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -'''RC min/max setup''' - -from MAVProxy.modules.lib import mp_module - -class RCSetupModule(mp_module.MPModule): - def __init__(self, mpstate): - super(RCSetupModule, self).__init__(mpstate, "rcsetup") - self.calibrating = False - self.num_channels = 4 - self.clear_rc_cal() - self.add_command('rccal', self.cmd_rccal, "RC calibration start/stop") - self.add_command('rctrim', self.cmd_rctrim, "RC min/max trim") - print("rcsetup initialised") - - def clear_rc_cal(self): - self.rc_cal = [] - self.rc_cal.append("") # 0 will be empty - for i in range(1,self.num_channels+1): - #min, max, modified - self.rc_cal.append([1500, 1500, False]) - - def apply_rc_cal(self): - for i in range(1, len(self.rc_cal)): - #only apply calibration changes to channels that - #were modified during calibration - if (self.rc_cal[i][2] == False): - continue - - self.param_set('RC%u_MIN' % i, self.rc_cal[i][0], 5) - self.console.writeln("Set: RC%u_MIN=%u" % (i, self.rc_cal[i][0])) - self.param_set('RC%u_MAX' % i, self.rc_cal[i][1], 5) - self.console.writeln("Set: RC%u_MAX=%u" % (i, self.rc_cal[i][1])) - - def get_cal_min(self, channel): - return self.rc_cal[channel][0] - - def get_cal_max(self, channel): - return self.rc_cal[channel][1] - - def set_cal_min(self, channel, val): - self.rc_cal[channel][0] = val - self.rc_cal[channel][2] = True - - def set_cal_max(self, channel, val): - self.rc_cal[channel][1] = val - self.rc_cal[channel][2] = True - - def cmd_rccal(self, args): - '''start/stop RC calibration''' - if len(args) < 1: - self.print_cal_usage() - return - - if (args[0] == "start"): - if len(args) > 1: - self.num_channels = int(args[1]) - print("Calibrating %u channels" % self.num_channels) - print("WARNING: remove propellers from electric planes!!") - print("Push return when ready to calibrate.") - raw_input() - - self.clear_rc_cal() - self.calibrating = True - elif (args[0] == "done"): - self.calibrating = False - self.apply_rc_cal() - else: - self.print_cal_usage() - - def cmd_rctrim(self, args): - '''set RCx_TRIM''' - if not 'RC_CHANNELS_RAW' in self.status.msgs: - print("No RC_CHANNELS_RAW to trim with") - return - m = self.status.msgs['RC_CHANNELS_RAW'] - for ch in range(1,5): - self.param_set('RC%u_TRIM' % ch, getattr(m, 'chan%u_raw' % ch)) - - - def unload(self): - if 'rcreset' in self.mpstate.command_map: - self.mpstate.command_map.pop('rcreset') - if 'rctrim' in self.mpstate.command_map: - self.mpstate.command_map.pop('rctrim') - - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - #do nothing if not caibrating - if (self.calibrating == False): - return - - if m.get_type() == 'RC_CHANNELS_RAW': - for i in range(1,self.num_channels+1): - v = getattr(m, 'chan%u_raw' % i) - - if self.get_cal_min(i) > v: - self.set_cal_min(i,v) - self.console.writeln("Calibrating: RC%u_MIN=%u" % (i, v)) - if self.get_cal_max(i) < v: - self.set_cal_max(i,v) - self.console.writeln("Calibrating: RC%u_MAX=%u" % (i, v)) - - def print_cal_usage(self): - print("Usage rccal ") - -def init(mpstate): - '''initialise module''' - return RCSetupModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_relay.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_relay.py deleted file mode 100644 index fda43bba1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_relay.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python -'''relay handling module''' - -import time -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_module - -class RelayModule(mp_module.MPModule): - def __init__(self, mpstate): - super(RelayModule, self).__init__(mpstate, "relay") - self.add_command('relay', self.cmd_relay, "relay commands") - self.add_command('servo', self.cmd_servo, "servo commands") - self.add_command('motortest', self.cmd_motortest, "motortest commands") - - def cmd_relay(self, args): - '''set relays''' - if len(args) == 0 or args[0] not in ['set', 'repeat']: - print("Usage: relay ") - return - if args[0] == "set": - if len(args) < 3: - print("Usage: relay set <0|1>") - return - self.master.mav.command_long_send(self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_SET_RELAY, 0, - int(args[1]), int(args[2]), - 0, 0, 0, 0, 0) - if args[0] == "repeat": - if len(args) < 4: - print("Usage: relay repeat ") - return - self.master.mav.command_long_send(self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_REPEAT_RELAY, 0, - int(args[1]), int(args[2]), float(args[3]), - 0, 0, 0, 0) - - def cmd_servo(self, args): - '''set servos''' - if len(args) == 0 or args[0] not in ['set', 'repeat']: - print("Usage: servo ") - return - if args[0] == "set": - if len(args) < 3: - print("Usage: servo set ") - return - self.master.mav.command_long_send(self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_SET_SERVO, 0, - int(args[1]), int(args[2]), - 0, 0, 0, 0, 0) - if args[0] == "repeat": - if len(args) < 5: - print("Usage: servo repeat ") - return - self.master.mav.command_long_send(self.target_system, - self.target_component, - mavutil.mavlink.MAV_CMD_DO_REPEAT_SERVO, 0, - int(args[1]), int(args[2]), int(args[3]), float(args[4]), - 0, 0, 0) - - - def cmd_motortest(self, args): - '''run motortests on copter''' - if len(args) != 4: - print("Usage: motortest motornum type value timeout") - return - self.master.mav.command_long_send(self.target_system, - 0, - mavutil.mavlink.MAV_CMD_DO_MOTOR_TEST, 0, - int(args[0]), int(args[1]), int(args[2]), int(args[3]), - 0, 0, 0) - - -def init(mpstate): - '''initialise module''' - return RelayModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_sensors.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_sensors.py deleted file mode 100644 index d5ff025d5..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_sensors.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python -'''monitor sensor consistancy''' - -import time, math -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module - - -def angle_diff(angle1, angle2): - ret = angle1 - angle2 - if ret > 180: - ret -= 360; - if ret < -180: - ret += 360 - return ret - -class sensors_report(object): - def __init__(self): - self.last_report = 0 - self.ok = True - self.value = 0 - -class SensorsModule(mp_module.MPModule): - def __init__(self, mpstate): - super(SensorsModule, self).__init__(mpstate, "sensors", "monitor sensor consistancy") - self.add_command('sensors', self.cmd_sensors, "show key sensors") - self.add_command('speed', self.cmd_speed, "enable/disable speed report") - - self.last_report = 0 - self.ok = True - self.value = 0 - self.ground_alt = 0 - self.gps_alt = 0 - self.max_speed = 0 - self.last_watch = 0 - self.reports = {} - self.reports['heading'] = sensors_report() - self.reports['altitude'] = sensors_report() - self.reports['speed'] = sensors_report() - - from MAVProxy.modules.lib.mp_settings import MPSetting - self.settings.append(MPSetting('speedreporting', bool, False, 'Speed Reporting', tab='Sensors')) - - if 'GPS_RAW' in self.status.msgs: - # cope with reload - gps = mpstate.status.msgs['GPS_RAW'] - self.ground_alt = gps.alt - self.status.altitude - - if 'GPS_RAW_INT' in self.status.msgs: - # cope with reload - gps = mpstate.status.msgs['GPS_RAW_INT'] - self.ground_alt = (gps.alt / 1.0e3) - self.status.altitude - - def cmd_sensors(self, args): - '''show key sensors''' - if self.master.WIRE_PROTOCOL_VERSION == '1.0': - gps_heading = self.status.msgs['GPS_RAW_INT'].cog * 0.01 - else: - gps_heading = self.status.msgs['GPS_RAW'].hdg - - self.console.writeln("heading: %u/%u alt: %u/%u r/p: %u/%u speed: %u/%u thr: %u" % ( - self.status.msgs['VFR_HUD'].heading, - gps_heading, - self.status.altitude, - self.gps_alt, - math.degrees(self.status.msgs['ATTITUDE'].roll), - math.degrees(self.status.msgs['ATTITUDE'].pitch), - self.status.msgs['VFR_HUD'].airspeed, - self.status.msgs['VFR_HUD'].groundspeed, - self.status.msgs['VFR_HUD'].throttle)) - - - def cmd_speed(self, args): - '''enable/disable speed report''' - self.settings.set('speedreporting', not self.settings.speedreporting) - if self.settings.speedreporting: - self.console.writeln("Speed reporting enabled", bg='yellow') - else: - self.console.writeln("Speed reporting disabled", bg='yellow') - - def report(self, name, ok, msg=None, deltat=20): - '''report a sensor error''' - r = self.reports[name] - if time.time() < r.last_report + deltat: - r.ok = ok - return - r.last_report = time.time() - if ok and not r.ok: - self.say("%s OK" % name) - r.ok = ok - if not r.ok: - self.say(msg) - - def report_change(self, name, value, maxdiff=1, deltat=10): - '''report a sensor change''' - r = self.reports[name] - if time.time() < r.last_report + deltat: - return - r.last_report = time.time() - if math.fabs(r.value - value) < maxdiff: - return - r.value = value - self.say("%s %u" % (name, value)) - - def check_heading(self, m): - '''check heading discrepancy''' - if 'GPS_RAW' in self.status.msgs: - gps = self.status.msgs['GPS_RAW'] - if gps.v < 3: - return - diff = math.fabs(angle_diff(m.heading, gps.hdg)) - elif 'GPS_RAW_INT' in self.status.msgs: - gps = self.status.msgs['GPS_RAW_INT'] - if gps.vel < 300: - return - diff = math.fabs(angle_diff(m.heading, gps.cog / 100.0)) - else: - return - self.report('heading', diff < 20, 'heading error %u' % diff) - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'VFR_HUD' and ('GPS_RAW' in self.status.msgs or 'GPS_RAW_INT' in self.status.msgs): - self.check_heading(m) - if self.settings.speedreporting: - if m.airspeed != 0: - speed = m.airspeed - else: - speed = m.groundspeed - self.report_change('speed', speed, maxdiff=2, deltat=2) - if self.status.watch == "sensors" and time.time() > self.sensors_state.last_watch + 1: - self.sensors_state.last_watch = time.time() - self.cmd_sensors([]) - -def init(mpstate): - '''initialise module''' - return SensorsModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_serial.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_serial.py deleted file mode 100644 index 8c421ff34..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_serial.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python -'''serial_control MAVLink handling''' - -import time, os, fnmatch, sys -from pymavlink import mavutil, mavwp -from MAVProxy.modules.lib import mp_settings -from MAVProxy.modules.lib import mp_module - -class SerialModule(mp_module.MPModule): - def __init__(self, mpstate): - super(SerialModule, self).__init__(mpstate, "serial", "serial control handling") - self.add_command('serial', self.cmd_serial, - 'remote serial control', - ['', - 'set (SERIALSETTING)']) - self.serial_settings = mp_settings.MPSettings( - [ ('port', int, 0), - ('baudrate', int, 57600), - ('timeout', int, 500) - ] - ) - self.add_completion_function('(SERIALSETTING)', self.serial_settings.completion) - self.locked = False - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - if m.get_type() == 'SERIAL_CONTROL': - data = m.data[:m.count] - s = ''.join(str(chr(x)) for x in data) - sys.stdout.write(s) - - def serial_lock(self, lock): - '''lock or unlock the port''' - mav = self.master.mav - if lock: - flags = mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE - self.locked = True - else: - flags = 0 - self.locked = False - mav.serial_control_send(self.serial_settings.port, - flags, - 0, 0, 0, [0]*70) - - def serial_send(self, args): - '''send some bytes''' - mav = self.master.mav - flags = 0 - if self.locked: - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE - if self.serial_settings.timeout != 0: - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_RESPOND - if self.serial_settings.timeout >= 500: - flags |= mavutil.mavlink.SERIAL_CONTROL_FLAG_MULTI - - s = ' '.join(args) - s = s.replace('\\r', '\r') - s = s.replace('\\n', '\n') - buf = [ord(x) for x in s] - buf.extend([0]*(70-len(buf))) - mav.serial_control_send(self.serial_settings.port, - flags, - self.serial_settings.timeout, - self.serial_settings.baudrate, - len(s), buf) - - def cmd_serial(self, args): - '''serial control commands''' - usage = "Usage: serial " - if len(args) < 1: - print(usage) - return - if args[0] == "lock": - self.serial_lock(True) - elif args[0] == "unlock": - self.serial_lock(False) - elif args[0] == "set": - self.serial_settings.command(args[1:]) - elif args[0] == "send": - self.serial_send(args[1:]) - else: - print(usage) - -def init(mpstate): - '''initialise module''' - return SerialModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/__init__.py deleted file mode 100644 index bcdc0f2fc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/__init__.py +++ /dev/null @@ -1,464 +0,0 @@ -#!/usr/bin/env python -#*************************************************************************** -# Copyright Jaime Machuca -#*************************************************************************** -# Title : mavproxy_smartcamera.py -# -# Description : This file is intended to be added as a module to MAVProxy, -# it is intended to be used to control smart cameras that are -# connected to a companion computer. It reads MAVlink commands -# and uses them to control the cameras attached. The module -# reads a configuration file called smart_camera.cnf that tells -# it what cameras are connected, it then tries to connect to the -# cameras and populates a list of available cameras. -# -# Environment : Python 2.7 Code. Intended to be included in MAVproxy as a Module -# -# Responsible : Jaime Machuca -# -# License : CC BY-NC-SA -# -# Editor Used : Xcode 6.1.1 (6A2008a) -# -#**************************************************************************** - -#**************************************************************************** -# HEADER-FILES (Only those that are needed in this file) -#**************************************************************************** - -# System Header files and Module Headers -import time, math, sched - -# Module Dependent Headers -from pymavlink import mavutil -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib.mp_settings import MPSetting - - -# Own Headers -from sc_webcam import SmartCameraWebCam -from sc_SonyQX1 import SmartCamera_SonyQX -import sc_config - -#**************************************************************************** -# LOCAL DEFINES -#**************************************************************************** - - -#**************************************************************************** -# Class name : SmartCameraModule -# -# Public Methods : init -# mavlink_packet -# -# Private Methods : __vRegisterCameras -# __vCmdCamTrigger -# -#**************************************************************************** -class SmartCameraModule(mp_module.MPModule): - -#**************************************************************************** -# Method Name : __init__ Class Initializer -# -# Description : Initializes the class -# -# Parameters : mpstate -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __init__(self, mpstate): - super(SmartCameraModule, self).__init__(mpstate, "SmartCamera", "SmartCamera commands") - self.add_command('camtrigger', self.__vCmdCamTrigger, "Trigger camera") - self.add_command('connectcams', self.__vCmdConnectCameras, "Connect to Cameras") - self.add_command('setCamISO', self.__vCmdSetCamISO, "Set Camera ISO") - self.add_command('setCamAperture', self.__vCmdSetCamAperture, "Set Camera Aperture") - self.add_command('setCamShutterSpeed', self.__vCmdSetCamShutterSpeed, "Set Camera Shutter Speed") - self.add_command('setCamExposureMode', self.__vCmdSetCamExposureMode, "Set Camera Exposure Mode") - self.CamRetryScheduler = sched.scheduler(time.time, time.sleep) - self.ProgramAuto = 1 - self.Aperture = 2 - self.Shutter = 3 - self.Manual = 4 - self.IntelligentAuto = 5 - self.SuperiorAuto = 6 - self.WirelessPort = "wlan0" - self.u8RetryTimeout = 0 - self.u8MaxRetries = 5 - self.__vRegisterCameras() - - #**************************************************************************** - # Method Name : __vRegisterQXCamera - # - # Description : Tries to connect to a QX camera on the specified Wireless - # port. If no camera is found it will retry every 5 seconds - # until u8MaxRetries is reached. - # - # Parameters : None - # - # Return Value : None - # - # Autor : Jaime Machuca - # - #**************************************************************************** - - def __vRegisterQXCamera(self,u8CamNumber): - if (self.u8RetryTimeout < self.u8MaxRetries): - new_camera = SmartCamera_SonyQX(u8CamNumber, self.WirelessPort) - if new_camera.boValidCameraFound() is True: - self.camera_list = self.camera_list + [new_camera] - print("Found QX Camera") - else: - print("No Valid Camera Found, retry in 5 sec") - self.u8RetryTimeout = self.u8RetryTimeout + 1 - self.CamRetryScheduler.enter(5, 1, self.__vRegisterQXCamera, [u8CamNumber]) - self.CamRetryScheduler.run() - else: - print("Max retries reached, No QX Camera Found") - self.u8RetryTimeout = 0 - -#**************************************************************************** -# Method Name : __vRegisterCameras -# -# Description : Creates camera objects based on camera-type configuration -# -# Parameters : None -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vRegisterCameras(self): - - # initialise list - self.camera_list = [] - - #look for up to 2 cameras - for i in range(0,2): - config_group = "camera%d" % i - camera_type = sc_config.config.get_integer(config_group, 'type', 0) - # webcam - if camera_type == 1: - new_camera = SmartCameraWebCam(i) - self.camera_list = self.camera_list + [new_camera] - - # Sony QX1 - if camera_type == 2: - self.__vRegisterQXCamera(i) - - # display number of cameras found - print ("cameras found: %d" % len(self.camera_list)) - -#**************************************************************************** -# Method Name : __vCmdCamTrigger -# -# Description : Triggers all the cameras and stores Geotag information -# -# Parameters : None -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdCamTrigger(self, args): - '''Trigger Camera''' - #print(self.camera_list) - for cam in self.camera_list: - cam.take_picture() - print("Trigger Cam %s" % cam) - -#**************************************************************************** -# Method Name : __vCmdConnectCameras -# -# Description : Initiates connection to cameras -# -# Parameters : None -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdConnectCameras(self, args): - '''ToDo: Validate the argument as a valid port''' - if len(args) >= 1: - self.WirelessPort = args[0] - print ("Connecting to Cameras on %s" % self.WirelessPort) - self.__vRegisterCameras() - -#**************************************************************************** -# Method Name : __vCmdSetCamExposureMode -# -# Description : Sets the camera exposure mode -# -# Parameters : Exposure Mode, Cam number -# Valid values are Program Auto, Aperture, Shutter, Manual -# Intelligent Auto, Superior Auto -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdSetCamExposureMode(self, args): - '''ToDo: Validate CAM number and Valid Mode Values''' - if len(args) == 1: - for cam in self.camera_list: - cam.boSetExposureMode(args[0]) - elif len(args) == 2: - cam = self.camera_list[int(args[1])] - cam.boSetExposureMode(args[0]) - else: - print ("Usage: setCamExposureMode MODE [CAMNUMBER], Valid values for MODE: Program Auto, Aperture, Shutter, Manual, Intelligent Auto, Superior Auto") - -#**************************************************************************** -# Method Name : __vCmdSetCamAperture -# -# Description : Sets the camera aperture -# -# Parameters : Aperture Value, Cam number -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdSetCamAperture(self, args): - '''ToDo: Validate CAM number and Valid Aperture Value''' - if len(args) == 1: - for cam in self.camera_list: - cam.boSetAperture(int(args[0])) - elif len(args) == 2: - cam = self.camera_list[int(args[1])] - cam.boSetAperture(int(args[0])) - else: - print ("Usage: setCamAperture APERTURE [CAMNUMBER], APERTURE is value x10") - -#**************************************************************************** -# Method Name : __vCmdSetCamShutterSpeed -# -# Description : Sets the shutter speed for the camera -# -# Parameters : Shutter speed, Cam Number -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdSetCamShutterSpeed(self, args): - '''ToDo: Validate CAM number and Valid Shutter Speed''' - if len(args) == 1: - for cam in self.camera_list: - cam.boSetShutterSpeed(int(args[0])) - elif len(args) == 2: - cam = self.camera_list[int(args[1])] - cam.boSetShutterSpeed(int(args[0])) - else: - print ("Usage: setCamShutterSpeed SHUTTERVALUE [CAMNUMBER], Shutter value is the devisor in 1/x (only works for values smaller than 1)") - -#**************************************************************************** -# Method Name : __vCmdSetCamISO -# -# Description : Sets the ISO value for the camera -# -# Parameters : ISO Value, Cam Number -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdSetCamISO(self, args): - '''ToDo: Validate CAM number and Valid ISO Value''' - if len(args) == 1: - for cam in self.camera_list: - cam.boSetISO(int(args[0])) - elif len(args) == 2: - cam = self.camera_list[int(args[1])] - cam.boSetISO(int(args[0])) - else: - print ("Usage: setCamISO ISOVALUE [CAMNUMBER]") - -#**************************************************************************** -# Method Name : __vCmdCamZoomIn -# -# Description : Commands the Camera to Zoom In -# -# Parameters : None -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdCamZoomIn(self): - for cam in self.camera_list: - cam.boZoomIn() - -#**************************************************************************** -# Method Name : __vCmdCamZoomOut -# -# Description : Commands the Camera to Zoom In -# -# Parameters : None -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vCmdCamZoomOut(self): - for cam in self.camera_list: - cam.boZoomOut() - -#**************************************************************************** -# Method Name : __vDecodeDIGICAMConfigure -# -# Description : Decode and process the camera configuration Messages -# -# Parameters : CommandLong Message -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vDecodeDIGICAMConfigure(self, mCommand_Long): - if mCommand_Long.param1 != 0: - print ("Exposure Mode = %d" % mCommand_Long.param1) - - if mCommand_Long.param1 == self.ProgramAuto: - self.__vCmdSetCamExposureMode(["Program Auto"]) - - elif mCommand_Long.param1 == self.Aperture: - self.__vCmdSetCamExposureMode(["Aperture"]) - - elif mCommand_Long.param1 == self.Shutter: - self.__vCmdSetCamExposureMode(["Shutter"]) - - '''Shutter Speed''' - if mCommand_Long.param2 != 0: - print ("Shutter Speed= %d" % mCommand_Long.param2) - self.__vCmdSetCamShutterSpeed([mCommand_Long.param2]) - - '''Aperture''' - if mCommand_Long.param3 != 0: - print ("Aperture = %d" % mCommand_Long.param3) - self.__vCmdSetCamAperture([mCommand_Long.param3]) - - '''ISO''' - if mCommand_Long.param4 != 0: - print ("ISO = %d" % mCommand_Long.param4) - self.__vCmdSetCamISO([mCommand_Long.param4]) - - '''Exposure Type''' - if mCommand_Long.param5 != 0: - print ("Exposure type= %d" % mCommand_Long.param5) - - -#**************************************************************************** -# Method Name : __vDecodeDIGICAMControl -# -# Description : Decode and process the camera control Messages -# -# Parameters : CommandLong Message -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __vDecodeDIGICAMControl(self, mCommand_Long): - '''Session''' - if mCommand_Long.param1 != 0: - print ("Session = %d" % mCommand_Long.param1) - - '''Zooming Step Value''' - if mCommand_Long.param2 != 0: - print ("Zooming Step = %d" % mCommand_Long.param2) - - '''Zooming Step Value''' - if mCommand_Long.param3 != 0: - print ("Zooming Value = %d" % mCommand_Long.param3) - - if (mCommand_Long.param3 == 1): - self.__vCmdCamZoomIn() - elif (mCommand_Long.param3 == -1): - self.__vCmdCamZoomOut() - else: - print ("Invalid Zoom Value") - - '''Focus 0=Unlock/1=Lock/2=relock''' - if mCommand_Long.param4 != 0: - print ("Focus = %d" % mCommand_Long.param4) - - '''Trigger''' - if mCommand_Long.param5 != 0: - print ("Trigger = %d" % mCommand_Long.param5) - self.__vCmdCamTrigger(mCommand_Long) - - - -#**************************************************************************** -# Method Name : mavlink_packet -# -# Description : MAVProxy requiered callback function used to recieve MAVlink -# packets -# -# Parameters : MAVLink Message -# -# Return Value : None -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def mavlink_packet(self, m): - '''handle a mavlink packet''' - mtype = m.get_type() - if mtype == "CAMERA_STATUS": - print ("Got Message camera_status") - if mtype == "CAMERA_FEEDBACK": - print ("Got Message camera_feedback") - '''self.__vCmdCamTrigger(m)''' - if mtype == "COMMAND_LONG": - if m.command == mavutil.mavlink.MAV_CMD_DO_DIGICAM_CONFIGURE: - print ("Got Message Digicam_configure") - self.__vDecodeDIGICAMConfigure(m) - elif m.command == mavutil.mavlink.MAV_CMD_DO_DIGICAM_CONTROL: - print ("Got Message Digicam_control") - self.__vDecodeDIGICAMControl(m) - -#**************************************************************************** -# Method Name : init -# -# Description : -# -# Parameters : mpstate -# -# Return Value : SmartCameraModule Instance -# -# Autor : Jaime Machuca -# -#**************************************************************************** - -def init(mpstate): - '''initialise module''' - return SmartCameraModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_SonyQX1.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_SonyQX1.py deleted file mode 100644 index aba529b50..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_SonyQX1.py +++ /dev/null @@ -1,582 +0,0 @@ -#*************************************************************************** -# Copyright Jaime Machuca -#*************************************************************************** -# Title : sc_SonyQX1.py -# -# Description : This file contains a class to use the Sony QX range of cams -# It finds a camera using SSDP discovery and returns it as an -# object. If a camera is not found it returns an error value -# that should be catched by the application. Initially it will -# have support for triggering the camera, and downloading the -# latest image file. Other functions will be added gradually. -# -# Environment : Python 2.7 Code. Intended to be included in a Mavproxy Module -# -# Responsible : Jaime Machuca -# -# License : CC BY-NC-SA -# -# Editor Used : Xcode 6.1.1 (6A2008a) -# -#**************************************************************************** - -#**************************************************************************** -# HEADER-FILES (Only those that are needed in this file) -#**************************************************************************** - -# System Header files and Module Headers -import sys, time, math, cv2, struct, fcntl - -# Module Dependent Headers -import requests, json, socket, StringIO -import xml.etree.ElementTree as ET - -# Own Headers -import ssdp - -#**************************************************************************** -# Class name : SmartCamera_SonyQX -# -# Public Methods : boGetLatestImage -# u32GetImageCounter -# boTakePicture -# boSetExposureMode -# boSetShutterSpeed -# boSetAperture -# boSetISO -# boZoomIn -# boZoomOut -# -# Private Methods : __sFindInterfaceIPAddress -# __sFindCameraURL -# __sMakeCall -# __sSimpleCall -#**************************************************************************** -class SmartCamera_SonyQX(): - -#**************************************************************************** -# Method Name : __init__ Class Initializer -# -# Description : Initializes the class -# -# Parameters : u8instance Camera Instance Number -# snetInterface String containing the Network Interface -# Name where we should look for the cam -# -# Return Value : None -# -# Autor : Jaime Machuca, Randy Mackay -# -#**************************************************************************** - - def __init__(self, u8Instance, sNetInterface): - - # record instance - self.u8Instance = u8Instance - self.sConfigGroup = "Camera%d" % self.u8Instance - - # background image processing variables - self.u32ImgCounter = 0 # num images requested so far - - # latest image captured - self.sLatestImageURL = None # String with the URL to the latest image - - # latest image downloaded - self.sLatestImageFilename = None #String with the file name for the last downloaded image - - # Look Camera and Get URL - self.sCameraURL = self.__sFindCameraURL(sNetInterface) - if self.sCameraURL is None: - print("No QX camera found, failed to open QX camera %d" % self.u8Instance) - -#**************************************************************************** -# Method Name : __str__ -# -# Description : Returns a human readable string name for the instance -# -# Parameters : none -# -# Return Value : String with object instance name -# -# Autor : Randy Mackay -# -#**************************************************************************** - - # __str__ - print position vector as string - def __str__(self): - return "SmartCameraSonyQX Object for %s" % self.sConfigGroup - -#**************************************************************************** -# Method Name : __sFindInterfaceIPAddress -# -# Description : Gets the IP Address of the interface name requested -# -# Parameters : sInterfaceName -# -# Return Value : String with the IP Address for the requested interface -# -# Autor : Jaime Machuca, -# -#**************************************************************************** - - def __sFindInterfaceIPAddress(self,sInterfaceName): - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - return socket.inet_ntoa(fcntl.ioctl( - s.fileno(), - 0x8915, # SIOCGIFADDR - struct.pack('256s', sInterfaceName[:15]) - )[20:24]) - -#**************************************************************************** -# Method Name : __sMakeCall -# -# Description : Sends a json encoded command to the QX camera URL -# -# Parameters : sService -# adictPayload -# -# Return Value : JSON encoded string with camera response -# -# Autor : Andrew Tridgell, Jaime Machuca -# -#**************************************************************************** - - def __sMakeCall(self, sService, adictPayload): - sURL = "%s/%s" % (self.sCameraURL, sService) - adictHeaders = {"content-type": "application/json"} - sData = json.dumps(adictPayload) - sResponse = requests.post(sURL, - data=sData, - headers=adictHeaders).json() - return sResponse - -#**************************************************************************** -# Method Name : __sSimpleCall -# -# Description : Articulates a camera service command to send to the QX -# camera -# -# Parameters : sMethod, command name as stated in Sony's API documentation -# sTarget, API Service type -# adictParams, command specific parameters (see Sony's API Documentation) -# u8Id, ?? -# sVersion, API version for the command (see Sony's API Documentation) -# -# Return Value : JSON encoded string with camera response -# -# Autor : Andrew Tridgell, Jaime Machuca -# -#**************************************************************************** - - def __sSimpleCall(self, sMethod, sTarget="camera", adictParams=[], u8Id=1, sVersion="1.0"): - print("Calling %s" % sMethod) - return self.__sMakeCall(sTarget, - { "method" : sMethod, - "params" : adictParams, - "id" : u8Id, - "version" : sVersion }) - -#**************************************************************************** -# Method Name : __sFindCameraURL -# -# Description : Sends an SSDP request to look for a QX camera on the -# specified network interface -# -# Parameters : sInterface, String with the network interface name -# -# Return Value : String containing the URL for sending commands to the -# Camera -# -# Autor : Andrew Tridgell, Jaime Machuca -# -#**************************************************************************** - - def __sFindCameraURL(self, sInterface): - sSSDPString = "urn:schemas-sony-com:service:ScalarWebAPI:1"; - sInterfaceIP = self.__sFindInterfaceIPAddress(sInterface) - print ("Interface IP Address: %s" % sInterfaceIP) - sRet = ssdp.discover(sSSDPString, if_ip=sInterfaceIP) - if len(sRet) == 0: - return None - sDMS_URL = sRet[0].location - - print("Fetching DMS from %s" % sDMS_URL) - xmlReq = requests.request('GET', sDMS_URL) - - xmlTree = ET.ElementTree(file=StringIO.StringIO(xmlReq.content)) - for xmlElem in xmlTree.iter(): - if xmlElem.tag == '{urn:schemas-sony-com:av}X_ScalarWebAPI_ActionList_URL': - print("Found camera at %s" % xmlElem.text) - return xmlElem.text - return None - -#**************************************************************************** -# Method Name : boValidCameraFound -# -# Description : Returns weather or not a camera has been found. This -# should be used to try to find the camera again, or -# destroy the object. -# -# Parameters : none -# -# Return Value : True if camera has been found -# False if no camera has been found -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boValidCameraFound(self): - print ("Checking URL at %s" % self.sCameraURL) - if self.sCameraURL is None: - return False - return True - -#**************************************************************************** -# Method Name : boGetLatestImage -# -# Description : Dowloads the latest image taken by the camera and then -# saves it to a file name composed by the camera instance -# and image number. -# -# Parameters : none -# -# Return Value : True if it was succesful -# False if no image was downloaded -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boGetLatestImage(self): - self.sLatestImageFilename = '%s_image_%s.jpg' % (self.sConfigGroup,self.u32ImgCounter) - print ("Downloading, ",self.sLatestImageFilename) - imgReq = requests.request('GET', self.sLatestImageURL) - if imgReq is not None: - open(self.sLatestImageFilename, 'w').write(imgReq.content) - return True - return False - -#**************************************************************************** -# Method Name : sGetLatestImageFilename -# -# Description : Returns the filename of the last image downloaded from -# the camera -# -# Parameters : none -# -# Return Value : String containing the image file name -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def sGetLatestImageFilename(self): - return self.sLatestImageFilename - -#**************************************************************************** -# Method Name : u32GetImageCounter -# -# Description : Returns the number of images taken -# -# Parameters : none -# -# Return Value : Integer with the number of images -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def u32GetImageCounter(self): - return self.u32ImgCounter - -#**************************************************************************** -# Method Name : boZoomIn -# -# Description : Commands the camera to do a Zoom In step -# -# Parameters : None -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boZoomIn(self): - - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("actZoom", adictParams=["in","1shot"]) - - # Check response for a succesful result - if 'result' in sResponse: - print ("Zoomed in") - return True - - # In case of an error, return false - print ("Failed to Zoom") - return False - -#**************************************************************************** -# Method Name : boZoomOut -# -# Description : Commands the camera to do a Zoom In step -# -# Parameters : None -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boZoomOut(self): - - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("actZoom", adictParams=["out","1shot"]) - - # Check response for a succesful result - if 'result' in sResponse: - print ("Zoomed out") - return True - - # In case of an error, return false - print ("Failed to Zoom") - return False - -#**************************************************************************** -# Method Name : boSetExposureMode -# -# Description : Commands the camera to set a specific ShootingMode -# -# Parameters : Exposure Mode String -# Program Auto, Aperture, Shutter, Manual, Intelligent Auto, Superior Auto -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boSetExposureMode(self,sExposureMode): - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("setExposureMode", adictParams=[sExposureMode]) - - # Check response for a succesful result - if 'result' in sResponse: - time.sleep(0.25) - sResponse = self.__sSimpleCall("getExposureMode") - - if sExposureMode not in sResponse["result"]: - print ("Failed to set Exposure Mode, current value: %s" %sResponse["result"]) - return False - - print ("Exposure Mode set to %s" % sExposureMode) - return True - - # In case of an error, return false - print ("Failed to set Exposure Mode") - return False - -#**************************************************************************** -# Method Name : boSetShutterSpeed -# -# Description : Commands the camera to set the Shutter Speed -# -# Parameters : Integer with the shutter speed divisor -# i.e. 1/1000 = 1000 -# NOTE: This will only work for shutter speeds smaller than 1 sec -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boSetShutterSpeed(self,u16ShutterSpeed): - # Create Shutter Speed String - sShutterSpeed = "1/%s" % str(u16ShutterSpeed) - - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("setShutterSpeed", adictParams=[sShutterSpeed]) - - # Check response for a succesful result - if 'result' in sResponse: - time.sleep(0.25) - sResponse = self.__sSimpleCall("getShutterSpeed") - - if sShutterSpeed not in sResponse["result"]: - print ("Failed to set Shutter Speed, current value: %s" %sResponse["result"]) - return False - - print ("Shutter Speed set to %s" % sShutterSpeed) - return True - - # In case of an error, return false - print ("Failed to set Shutter Speed") - return False - -#**************************************************************************** -# Method Name : boSetAperture -# -# Description : Commands the camera to set a lens Apperture -# -# Parameters : F number * 10 -# i.e. F 2.8 = 28 -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boSetAperture(self,u8Aperture): - # Create Aperture String (cast one of the numbers to float to get a float) - fFvalue = u8Aperture / float(10) - sFValue = str(fFvalue) - - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("setFNumber", adictParams=[sFValue]) - - # Check response for a succesful result - if 'result' in sResponse: - time.sleep(0.25) - sResponse = self.__sSimpleCall("getFNumber") - - if sFValue not in sResponse["result"]: - print ("Failed to set aperture, current value: %s" %sResponse["result"]) - return False - - print ("Aperture set to %s" % sFValue) - return True - - # In case of an error, return false - print ("Failed to set aperture") - return False - -#**************************************************************************** -# Method Name : boSetISO -# -# Description : Commands the camera to set an ISO number -# -# Parameters : ISO Value -# 80, 100, 1000, 3200, etc... -# -# Return Value : True if succesful -# False if Error Recieved -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boSetISO(self,u16ISO): - # Create ISO String - sISO = str(u16ISO) - - # Send command to set Exposure Mode - sResponse = self.__sSimpleCall("setIsoSpeedRate", adictParams=[sISO]) - - # Check response for a succesful result - if 'result' in sResponse: - sResponse = self.__sSimpleCall("getIsoSpeedRate") - - if sISO not in sResponse["result"]: - print ("Failed to Set ISO, current value: %s" %sResponse["result"]) - return False - - print ("ISO set to %s" % sISO) - return True - - # In case of an error, return false - print ("Failed to Set ISO") - return False - -#**************************************************************************** -# Method Name : __vAddGeotagToLog -# -# Description : Adds an entry to the log file with the name of the image -# and geoposition and orientation of the shot. -# -# Parameters : Image file name, position, orientation -# -# Return Value : True if succesful -# False if no URL was recieved for the image -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def __boAddGeotagToLog(self, sImageFileName): - return True - -#**************************************************************************** -# Method Name : boTakePicture -# -# Description : Commands the camera to take a picture -# -# Parameters : none -# -# Return Value : True if succesful -# False if no URL was recieved for the image -# -# Autor : Jaime Machuca -# -#**************************************************************************** - - def boTakePicture(self): - # Send command to take picture to camera - sResponse = self.__sSimpleCall("actTakePicture") - - # Check response for a succesful result and save latest image URL - if 'result' in sResponse: - self.sLatestImageURL = sResponse['result'][0][0] - self.__boAddGeotagToLog(self.sLatestImageURL) - self.u32ImgCounter = self.u32ImgCounter+1 - return True - - # In case of an error, return false - return False - -#**************************************************************************** -# -# Stuff Needed for testing and compatibility with current code. -# -#**************************************************************************** - def take_picture(self): - return self.boTakePicture() - - def get_latest_image(self): - self.boGetLatestImage() - - # this reads the image from the filename, parameter is 1 color, 0 BW, -1 unchanged - return cv2.imread(self.sLatestImageFilename,1) - - - # main - tests SmartCameraWebCam class - def main(self): - - while True: - # send request to image capture for image - if self.take_picture(): - # display image - cv2.imshow ('image_display', self.get_latest_image()) - else: - print ("no image") - - # check for ESC key being pressed - k = cv2.waitKey(5) & 0xFF - if k == 27: - break - - # take a rest for a bit - time.sleep(0.01) - -# run test run from the command line -if __name__ == "__main__": - sc_SonyQX1_0 = SmartCameraSonyQX1(0) - sc_SonyQX1_0.main() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_config.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_config.py deleted file mode 100644 index 1452c8f56..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_config.py +++ /dev/null @@ -1,146 +0,0 @@ -""" -SmartCameraConfig class : handles config for the smart_camera project - -smart_camera.cnf file is created in the local directory - -other classes or files wishing to use this class should add - import sc_config - -""" - -from os.path import expanduser -import ConfigParser - -class SmartCameraConfig(object): - - def __init__(self): - # default config file - self.config_file = expanduser("~/smart_camera.cnf") - - # print config file location - print ("config file: %s" % self.config_file) - - # create the global parser object - self.parser = ConfigParser.SafeConfigParser() - - # read the config file into memory - self.read() - - # read - reads the contents of the file into the dictionary in RAM - def read(self): - try: - self.parser.read(self.config_file) - except IOError as e: - print ('Error {0} reading config file: {1}: '.format(e.errno, e.strerror)) - return - - # save - saves the config to disk - def save(self): - try: - with open(self.config_file, 'wb') as configfile: - self.parser.write(configfile) - except IOError as e: - print ('Error {0} writing config file: {1}: '.format(e.errno, e.strerror)) - return - - # check_section - ensures the section exists, creates it if not - def check_section(self, section): - if not self.parser.has_section(section): - self.parser.add_section(section) - return - - # get_boolean - returns the boolean found in the specified section/option or the default if not found - def get_boolean(self, section, option, default): - try: - return self.parser.getboolean(section, option) - except ConfigParser.Error: - return default - - # set_boolean - sets the boolean to the specified section/option - def set_boolean(self, section, option, new_value): - self.check_section(section) - self.parser.set(section, option, str(bool(new_value))) - return - - # get_integer - returns the integer found in the specified section/option or the default if not found - def get_integer(self, section, option, default): - try: - return self.parser.getint(section, option) - except ConfigParser.Error: - return default - - # set_integer - sets the integer to the specified section/option - def set_integer(self, section, option, new_value): - self.check_section(section) - self.parser.set(section, option, str(int(new_value))) - return - - # get_float - returns the float found in the specified section/option or the default if not found - def get_float(self, section, option, default): - try: - return self.parser.getfloat(section, option) - except ConfigParser.Error: - return default - - # set_float - sets the float to the specified section/option - def set_float(self, section, option, new_value): - self.check_section(section) - self.parser.set(section, option, str(float(new_value))) - return - - # get_string - returns the string found in the specified section/option or the default if not found - def get_string(self, section, option, default): - try: - return self.parser.get(section, option) - except ConfigParser.Error: - return default - - # set_string - sets the string to the specified section/option - def set_string(self, section, option, new_value): - self.check_section(section) - self.parser.set(section, option, str(new_value)) - return - - # main - tests SmartCameraConfig class - def main(self): - # print welcome message - print ("SmartCameraConfig v1.0 test") - print ("config file: %s" % self.config_file) - - # write and read a boolean - section = 'Test_Section1' - option = 'Test_boolean' - print ("Writing %s/%s = True" % (section,option)) - self.set_boolean(section,option,True) - print ("Read %s/%s : %s" % (section, option, self.get_boolean(section, option, False))) - - # write and read an integer - section = 'Test_Section1' - option = 'Test_integer' - print ("Writing %s/%s = 11" % (section,option)) - self.set_integer(section,option,11) - print ("Read %s/%s : %s" % (section, option, self.get_integer(section, option, 99))) - - # write and read a float - section = 'Test_Section1' - option = 'Test_float' - print ("Writing %s/%s = 12.345" % (section,option)) - self.set_float(section,option,12.345) - print ("Read %s/%s : %s" % (section, option, self.get_float(section, option, 0.01))) - - # read an undefined number to get back the default - section = 'Test_Section2' - option = 'test_default' - print ("Read %s/%s : %s" % (section, option, self.get_float(section, option, 21.21))) - - # save the config file - self.save() - - return - -# declare global config object -config = SmartCameraConfig() - -# run the main routine if this is file is called from the command line -if __name__ == "__main__": - config.main() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_main.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_main.py deleted file mode 100644 index 80f2ae0e7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_main.py +++ /dev/null @@ -1,240 +0,0 @@ -import time -import math -import cv2 -from pymavlink import mavutil -from droneapi.lib import VehicleMode, Location -import sc_config -from sc_video import sc_video -from sc_webcam import SmartCameraWebCam -from sc_SonyQX1 import SmartCamera_SonyQX - -""" -sc_main.py - runs top level smart camera function - -To run this module: -* Run mavproxy.py with the correct options to connect to your vehicle -* module load api -* api start sc_main.py - -(Once tested we can put these directives into a mavinit.scr file and mavproxy will load/run - this code automatically) - -""" - -class SmartCamera(object): - def __init__(self, use_api): - - # if using droneapi connect to vehicle - if (use_api): - # First get an instance of the API endpoint (the connect via web case will be similar) - self.api = local_connect() - - # Our vehicle (we assume the user is trying to control the virst vehicle attached to the GCS) - self.vehicle = self.api.get_vehicles()[0] - else: - self.api = None - self.vehicle = None - - # initialised flag - self.home_initialised = False - # timer to intermittently check for home position - self.last_home_check = time.time() - self.home_location = None - - # vehicle mission - self.mission_cmds = None - - # check if we should display debug messages - self.debug = sc_config.config.get_boolean('general','debug',True) - - # register cameras - self.register_cameras(); - - # initialise video writer - self.writer = None - - # register cameras - creates camera objects based on camera-type configuration - def register_cameras(self): - - # initialise list - self.camera_list = [] - - #look for up to 2 cameras - for i in range(0,2): - config_group = "camera%d" % i - camera_type = sc_config.config.get_integer(config_group, 'type', 0) - # webcam - if camera_type == 1: - new_camera = SmartCameraWebCam(i) - self.camera_list = self.camera_list + [new_camera] - - # Sony QX1 - if camera_type == 2: - new_camera = SmartCamera_SonyQX(i,"wlan0") - if new_camera.boValidCameraFound() is True: - self.camera_list = self.camera_list + [new_camera] - print("Found QX Camera") - - # display number of cameras found - print ("cameras found: %d" % len(self.camera_list)) - - # fetch_mission - fetch mission from flight controller - def fetch_mission(self): - # download the vehicle waypoints - self.mission_cmds = self.vehicle.commands - self.mission_cmds.download() - self.mission_cmds.wait_valid() - - # check home - intermittently checks for changes to the home location - def check_home(self): - - # return immediately if home has already been initialised - if self.home_initialised: - return True - - # check for home no more than once every two seconds - if (time.time() - self.last_home_check > 2): - - # update that we have performed a status check - self.last_home_check = time.time() - - # check if we have a vehicle - if self.vehicle is None: - self.vehicle = self.api.get_vehicles()[0] - return - - # ensure the vehicle's position is known - if self.vehicle.location is None: - return False - if self.vehicle.location.lat is None or self.vehicle.location.lon is None or self.vehicle.location.alt is None: - return False - - # download the vehicle waypoints if we don't have them already - if self.mission_cmds is None: - self.fetch_mission() - return False - - # get the home lat and lon - home_lat = self.mission_cmds[0].x - home_lon = self.mission_cmds[0].y - home_alt = self.mission_cmds[0].z - - # sanity check the home position - if home_lat is None or home_lon is None or home_alt is None: - return False - - # sanity check again and set home position - if (home_lat != 0 and home_lon != 0): - self.home_location = Location(home_lat,home_lon,home_alt) - self.home_initialised = True - else: - self.mission_cmds = None - - # To-Do: if we wish to have the same home position as the flight controller - # we must download the home waypoint again whenever the vehicle is armed - - # return whether home has been initialised or not - return self.home_initialised - - # checks if video output should be started - def check_video_out(self): - - # return immediately if video has already been started - if not self.writer is None: - return - - # start video once vehicle is armed - if self.vehicle.armed: - self.writer = sc_video.open_video_writer() - - # check_status - poles vehicle' status to determine if we should record video or not - def check_status(self): - - # download the vehicle waypoints if we don't have them already - # To-Do: do not load waypoints if vehicle is armed - if self.mission_cmds is None: - self.fetch_mission() - return - - # take_picture_all - ask all cameras to take a picture - def take_picture_all(self): - for cam in self.camera_list: - cam.take_picture() - - # saves_picture_all - ask all cameras for their latest image and saves to files - def save_picture_all(self): - cam_num = 0 - for cam in self.camera_list: - img = cam.get_latest_image() - # display image - window_name = "cam%d" % cam_num - cv2.namedWindow(window_name, 0) - cv2.resizeWindow(window_name, 640, 480) - cv2.imshow (window_name, img) - # write to file - #imgfilename = "C:\Users\rmackay9\Documents\GitHub\ardupilot-balloon-finder\smart_camera\img%d-%d.jpg" % (cam_num,cam.get_image_counter()) - #imgfilename = "img%d-%d.jpg" % (cam_num,cam.get_image_counter()) - #print (imgfilename) - #cv2.imwrite(imgfilename, img) - - # check for ESC key being pressed - k = cv2.waitKey(5) & 0xFF - if k == 27: - break - cam_num = cam_num + 1 - - # get image from sc_video class and write to file - def analyze_image(self): - - # record time - now = time.time() - - # get new image from camera - f = self.get_frame() - - # save image for debugging later - if not self.writer is None: - self.writer.write(f) - - def run(self): - while True: - # ask all cameras to take a picture - self.take_picture_all() - - # store images to disk - self.save_picture_all() - - # Don't suck up too much CPU, only process a new image occasionally - time.sleep(1) - - ''' - while not self.api.exit: - - # only process images once home has been initialised - if self.check_home(): - - # start video if required - self.check_video_out() - - # check if we are controlling the vehicle - self.check_status() - - # ask all cameras to take a picture - self.take_picture_all() - - # Don't suck up too much CPU, only process a new image occasionally - time.sleep(2.0) - - if not self.use_simulator: - sc_video.stop_background_capture() - ''' - -# initialise depending upon whether running from command line or as part of mavproxy -if __name__ == "__main__": - sc_main = SmartCamera(False) -else: - sc_main = SmartCamera(True) - -# run the smart camera -sc_main.run() - diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_video.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_video.py deleted file mode 100644 index 4ffeb8379..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_video.py +++ /dev/null @@ -1,196 +0,0 @@ -""" -sc_video.py - -This file includes functions to: - Initialise the camera - Initialise the output video - -Image size is held in the smart_camera.cnf -""" - -import sys -from os.path import expanduser -import time -import math -from multiprocessing import Process, Pipe -import cv2 -import sc_config - -class SmartCameraVideo: - - def __init__(self): - # get image resolution - self.img_width = sc_config.config.get_integer('camera','width',640) - self.img_height = sc_config.config.get_integer('camera','height',480) - - # get image center - self.img_center_x = self.img_width / 2 - self.img_center_y = self.img_height / 2 - - # define field of view - self.cam_hfov = sc_config.config.get_float('camera','horizontal-fov',70.42) - self.cam_vfov = sc_config.config.get_float('camera','vertical-fov',43.3) - - # define video output filename - self.video_filename = sc_config.config.get_string('camera','video_output_file','~/smartcamera-%Y-%m-%d-%H-%M.avi') - self.video_filename = expanduser(self.video_filename) - self.video_filename = time.strftime(self.video_filename) - - # background image processing variables - self.proc = None # background process object - self.parent_conn = None # parent end of communicatoin pipe - self.img_counter = 0 # num images requested so far - - # __str__ - print position vector as string - def __str__(self): - return "SmartCameraVideo Object W:%d H:%d" % (self.img_width, self.img_height) - - # get_camera - initialises camera and returns VideoCapture object - def get_camera(self): - # setup video capture - self.camera = cv2.VideoCapture(0) - self.camera.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH,self.img_width) - self.camera.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,self.img_height) - - # check we can connect to camera - if not self.camera.isOpened(): - print ("failed to open camera, exiting!") - sys.exit(0) - - return self.camera - - # open_video_writer - begin writing to video file - def open_video_writer(self): - # Define the codec and create VideoWriter object - # Note: setting ex to -1 will display pop-up requesting user choose the encoder - ex = int(cv2.cv.CV_FOURCC('M','J','P','G')) - self.video_writer = cv2.VideoWriter(self.video_filename, ex, 25, (self.img_width,self.img_height)) - - return self.video_writer - - # pixels_to_angle_x - converts a number of pixels into an angle in radians - def pixels_to_angle_x(self, num_pixels): - return num_pixels * math.radians(self.cam_hfov) / self.img_width - - # pixels_to_angle_y - converts a number of pixels into an angle in radians - def pixels_to_angle_y(self, num_pixels): - return num_pixels * math.radians(self.cam_vfov) / self.img_height - - # angle_to_pixels_x - converts a horizontal angle (i.e. yaw) to a number of pixels - # angle : angle in radians - def angle_to_pixels_x(self, angle): - return int(angle * self.img_width / math.radians(self.cam_hfov)) - - # angle_to_pixels_y - converts a vertical angle (i.e. pitch) to a number of pixels - # angle : angle in radians - def angle_to_pixels_y(self, angle): - return int(angle * self.img_height / math.radians(self.cam_vfov)) - - # - # background image processing routines - # - - # image_capture_background - captures all images from the camera in the background and returning the latest image via the pipe when the parent requests it - def image_capture_background(self, imgcap_connection): - # exit immediately if imgcap_connection is invalid - if imgcap_connection is None: - print ("image_capture failed because pipe is uninitialised") - return - - # open the camera - camera = self.get_camera() - - # clear latest image - latest_image = None - - while True: - # constantly get the image from the webcam - success_flag, image=camera.read() - - # if successful overwrite our latest image - if success_flag: - latest_image = image - - # check if the parent wants the image - if imgcap_connection.poll(): - recv_obj = imgcap_connection.recv() - # if -1 is received we exit - if recv_obj == -1: - break - - # otherwise we return the latest image - imgcap_connection.send(latest_image) - - # release camera when exiting - camera.release() - - # start_background_capture - starts background image capture - def start_background_capture(self): - # create pipe - self.parent_conn, imgcap_conn = Pipe() - - # create and start the sub process and pass it it's end of the pipe - self.proc = Process(target=self.image_capture_background, args=(imgcap_conn,)) - self.proc.start() - - def stop_background_capture(self): - # send exit command to image capture process - self.parent_conn.send(-1) - - # join process - self.proc.join() - - # get_image - returns latest image from the camera captured from the background process - def get_image(self): - # return immediately if pipe is not initialised - if self.parent_conn == None: - return None - - # send request to image capture for image - self.parent_conn.send(self.img_counter) - - # increment counter for next interation - self.img_counter = self.img_counter + 1 - - # wait endlessly until image is returned - recv_img = self.parent_conn.recv() - - # return image to caller - return recv_img - - # main - tests SmartCameraVideo class - def main(self): - - # start background process - self.start_background_capture() - - while True: - # send request to image capture for image - img = self.get_image() - - # check image is valid - if not img is None: - # display image - cv2.imshow ('image_display', img) - else: - print ("no image") - - # check for ESC key being pressed - k = cv2.waitKey(5) & 0xFF - if k == 27: - break - - # take a rest for a bit - time.sleep(0.1) - - # send exit command to image capture process - self.stop_background_capture() - - print ("a2p 10 = %f" % self.angle_to_pixels_x(10)) - print ("p2a 10 = %f" % self.pixels_to_angle_x(10)) - -# create a single global object -sc_video = SmartCameraVideo() - -if __name__ == "__main__": - sc_video.main() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_webcam.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_webcam.py deleted file mode 100644 index 274505757..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/sc_webcam.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -sc_webcam.py - -This file includes functions to: - initialise a web cam - capture image from web cam - -Image size is held in the smart_camera.cnf -""" - -import sys -import time -import math -import cv2 -import sc_config - -class SmartCameraWebCam: - - def __init__(self, instance): - - # health - self.healthy = False; - - # record instance - self.instance = instance - self.config_group = "camera%d" % self.instance - - # get image resolution - self.img_width = sc_config.config.get_integer(self.config_group,'width',640) - self.img_height = sc_config.config.get_integer(self.config_group,'height',480) - - # background image processing variables - self.img_counter = 0 # num images requested so far - - # latest image captured - self.latest_image = None - - # setup video capture - self.camera = cv2.VideoCapture(self.instance) - - # check we can connect to camera - if not self.camera.isOpened(): - print ("failed to open webcam %d" % self.instance) - - # __str__ - print position vector as string - def __str__(self): - return "SmartCameraWebCam Object W:%d H:%d" % (self.img_width, self.img_height) - - # latest_image - returns latest image captured - def get_latest_image(self): - # write to file - #imgfilename = "C:\Users\rmackay9\Documents\GitHub\ardupilot-balloon-finder\smart_camera\img%d-%d.jpg" % (cam_num,cam.get_image_counter()) - imgfilename = "img%d-%d.jpg" % (self.instance,self.get_image_counter()) - print (imgfilename) - cv2.imwrite(imgfilename, self.latest_image) - return self.latest_image - - # get_image_counter - returns number of images captured since startup - def get_image_counter(self): - return self.img_counter - - # take_picture - take a picture - # returns True on success - def take_picture(self): - # setup video capture - print("Taking Picture") - self.camera = cv2.VideoCapture(self.instance) - self.camera.set(cv2.cv.CV_CAP_PROP_FRAME_WIDTH,self.img_width) - self.camera.set(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,self.img_height) - - # check we can connect to camera - if not self.camera.isOpened(): - self.healty = False - return False - - # get an image from the webcam - success_flag, self.latest_image=self.camera.read() - - # release camera - self.camera.release() - - # if successful overwrite our latest image - if success_flag: - self.img_counter = self.img_counter+1 - return True - - # return failure - return False - - # main - tests SmartCameraWebCam class - def main(self): - - while True: - # send request to image capture for image - if self.take_picture(): - # display image - cv2.imshow ('image_display', self.get_latest_image()) - else: - print ("no image") - - # check for ESC key being pressed - k = cv2.waitKey(5) & 0xFF - if k == 27: - break - - # take a rest for a bit - time.sleep(0.01) - -# run test run from the command line -if __name__ == "__main__": - sc_webcam0 = SmartCameraWebCam(0) - sc_webcam0.main() diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/smart_camera.cnf b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/smart_camera.cnf deleted file mode 100644 index 013ffff60..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/smart_camera.cnf +++ /dev/null @@ -1,11 +0,0 @@ -[camera0] -# for no camera set type = 0, for webcam set type = 1 -type = 2 -#width = 640 -#height = 480 -#horizontal-fov = 70.42 -#vertical-fov = 43.3 -#video_output_file = ~/smartcamera-%%Y-%%m-%%d-%%H-%%M.avi - -[general] -#debug = True diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/ssdp.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/ssdp.py deleted file mode 100644 index c912a22bc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_smartcamera/ssdp.py +++ /dev/null @@ -1,63 +0,0 @@ -# thanks to -# https://gist.github.com/dankrause/6000248 -# -# Copyright 2014 Dan Krause -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import socket -import httplib -import StringIO - -class SSDPResponse(object): - class _FakeSocket(StringIO.StringIO): - def makefile(self, *args, **kw): - return self - def __init__(self, response): - r = httplib.HTTPResponse(self._FakeSocket(response)) - r.begin() - self.location = r.getheader("location") - self.usn = r.getheader("usn") - self.st = r.getheader("st") - self.cache = r.getheader("cache-control").split("=")[1] - def __repr__(self): - return "".format(**self.__dict__) - -def discover(service, if_ip=None, timeout=2, retries=1): - group = ("239.255.255.250", 1900) - message = "\r\n".join([ - 'M-SEARCH * HTTP/1.1', - 'HOST: {0}:{1}', - 'MAN: "ssdp:discover"', - 'ST: {st}','MX: 3','','']) - socket.setdefaulttimeout(timeout) - responses = [] - for _ in range(retries): - sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) - if if_ip is not None: - sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(if_ip)) - sock.sendto(message.format(*group, st=service), group) - while True: - try: - response = SSDPResponse(sock.recv(1024)) - responses.append(response) - except socket.timeout: - break - return responses - -# Example: -# import ssdp -# ssdp.discover("roku:ecp") - diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_speech.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_speech.py deleted file mode 100644 index 979790750..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_speech.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python -'''tune command handling''' - -import time, os -from MAVProxy.modules.lib import mp_module - -class SpeechModule(mp_module.MPModule): - def __init__(self, mpstate): - super(SpeechModule, self).__init__(mpstate, "speech", "speech output") - self.old_mpstate_say_function = self.mpstate.functions.say - self.mpstate.functions.say = self.say - try: - self.settings.set('speech', 1) - except AttributeError: - self.settings.append(('speech', int, 1)) - self.kill_speech_dispatcher() - for backend in [self.say_speechd, self.say_espeak, self.say_speech]: - try: - backend("") - self.say_backend = backend - return - except Exception: - pass - self.say_backend = None - print("No speech available") - - def kill_speech_dispatcher(self): - '''kill speech dispatcher processs''' - if not 'HOME' in os.environ: - return - pidpath = os.path.join(os.environ['HOME'], '.speech-dispatcher', - 'pid', 'speech-dispatcher.pid') - if os.path.exists(pidpath): - try: - import signal - pid = int(open(pidpath).read()) - if pid > 1 and os.kill(pid, 0) is None: - print("Killing speech dispatcher pid %u" % pid) - os.kill(pid, signal.SIGINT) - time.sleep(1) - except Exception as e: - pass - - - def unload(self): - '''unload module''' - self.settings.set('speech', 0) - if self.mpstate.functions.say == self.mpstate.functions.say: - self.mpstate.functions.say = self.old_mpstate_say_function - self.kill_speech_dispatcher() - - def say_speechd(self, text, priority='important'): - '''speak some text''' - ''' http://cvs.freebsoft.org/doc/speechd/ssip.html see 4.3.1 for priorities''' - import speechd - self.speech = speechd.SSIPClient('MAVProxy%u' % os.getpid()) - self.speech.set_output_module('festival') - self.speech.set_language('en') - self.speech.set_priority(priority) - self.speech.set_punctuation(speechd.PunctuationMode.SOME) - self.speech.speak(text) - self.speech.close() - - def say_espeak(self, text, priority='important'): - '''speak some text using espeak''' - from espeak import espeak - espeak.synth(text) - - def say_speech(self, text, priority='important'): - '''speak some text using speech module''' - import speech - speech.say(text) - - def say(self, text, priority='important'): - '''speak some text''' - ''' http://cvs.freebsoft.org/doc/speechd/ssip.html see 4.3.1 for priorities''' - self.console.writeln(text) - if self.settings.speech and self.say_backend is not None: - self.say_backend(text, priority=priority) - -def init(mpstate): - '''initialise module''' - return SpeechModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_terrain.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_terrain.py deleted file mode 100644 index 330e9e068..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_terrain.py +++ /dev/null @@ -1,145 +0,0 @@ -""" - MAVProxy terrain handling module -""" - -import time - -from MAVProxy.modules.mavproxy_map import mp_elevation -from MAVProxy.modules.lib import mp_util -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_settings - -class TerrainModule(mp_module.MPModule): - def __init__(self, mpstate): - super(TerrainModule, self).__init__(mpstate, "terrain", "terrain handling", public=False) - - self.ElevationModel = mp_elevation.ElevationModel() - self.current_request = None - self.sent_mask = 0 - self.last_send_time = time.time() - self.requests_received = 0 - self.blocks_sent = 0 - self.check_lat = 0 - self.check_lon = 0 - self.add_command('terrain', self.cmd_terrain, "terrain control", - ["", - 'set (TERRAINSETTING)']) - self.terrain_settings = mp_settings.MPSettings( - [ ('debug', int, 0) ] - ) - self.add_completion_function('(TERRAINSETTING)', self.terrain_settings.completion) - - def cmd_terrain(self, args): - '''terrain command parser''' - usage = "usage: tracker " - if len(args) == 0: - print(usage) - return - if args[0] == "status": - print("blocks_sent: %u requests_received: %u" % ( - self.blocks_sent, - self.requests_received)) - elif args[0] == "set": - self.terrain_settings.command(args[1:]) - elif args[0] == "check": - self.cmd_terrain_check(args[1:]) - else: - print(usage) - - def cmd_terrain_check(self, args): - '''check a piece of terrain data''' - if len(args) >= 2: - latlon = (float(args[0]), float(args[1])) - else: - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - self.check_lat = int(latlon[0]*1e7) - self.check_lon = int(latlon[1]*1e7) - self.master.mav.terrain_check_send(self.check_lat, self.check_lon) - - def mavlink_packet(self, msg): - '''handle an incoming mavlink packet''' - type = msg.get_type() - master = self.master - # add some status fields - if type == 'TERRAIN_REQUEST': - self.current_request = msg - self.sent_mask = 0 - self.requests_received += 1 - elif type == 'TERRAIN_REPORT': - if (msg.lat == self.check_lat and - msg.lon == self.check_lon and - (self.check_lat != 0 or self.check_lon != 0)): - print(msg) - self.check_lat = 0 - self.check_lon = 0 - - def send_terrain_data_bit(self, bit): - '''send some terrain data''' - lat = self.current_request.lat * 1.0e-7 - lon = self.current_request.lon * 1.0e-7 - bit_spacing = self.current_request.grid_spacing * 4 - (lat, lon) = mp_util.gps_offset(lat, lon, - east=bit_spacing * (bit % 8), - north=bit_spacing * (bit // 8)) - data = [] - for i in range(4*4): - y = i % 4 - x = i // 4 - (lat2,lon2) = mp_util.gps_offset(lat, lon, - east=self.current_request.grid_spacing * y, - north=self.current_request.grid_spacing * x) - alt = self.ElevationModel.GetElevation(lat2, lon2) - if alt is None: - if self.terrain_settings.debug: - print("no alt ", lat2, lon2) - return - data.append(int(alt)) - self.master.mav.terrain_data_send(self.current_request.lat, - self.current_request.lon, - self.current_request.grid_spacing, - bit, - data) - self.blocks_sent += 1 - self.last_send_time = time.time() - self.sent_mask |= 1< 60: - self.mpstate.functions.process_stdin("rc 2 1500") - self.mpstate.functions.process_stdin("auto") - self.state = TestState.AUTO - -def init(mpstate): - '''initialise module''' - return TestModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tracker.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tracker.py deleted file mode 100644 index e252971bd..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tracker.py +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/env python -''' -Antenna tracker control module -This module catches MAVLINK_MSG_ID_GLOBAL_POSITION_INT -and sends them to a MAVlink connected antenna tracker running -ardupilot AntennaTracker -Mike McCauley, based on earlier work by Andrew Tridgell -June 2012 -''' - -import sys, os, time -from MAVProxy.modules.lib import mp_settings -from MAVProxy.modules import mavproxy_map -from pymavlink import mavutil - -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.mavproxy_param import ParamState - -# this should be in mavutil.py -mode_mapping_antenna = { - 'MANUAL' : 0, - 'AUTO' : 10, - 'INITIALISING' : 16 - } - -class TrackerModule(mp_module.MPModule): - def __init__(self, mpstate): - from pymavlink import mavparm - super(TrackerModule, self).__init__(mpstate, "tracker", "antenna tracker control module") - self.connection = None - self.tracker_param = mavparm.MAVParmDict() - self.pstate = ParamState(self.tracker_param, self.logdir, self.vehicle_name, 'tracker.parm') - self.tracker_settings = mp_settings.MPSettings( - [ ('port', str, "/dev/ttyUSB0"), - ('baudrate', int, 57600), - ('debug', int, 0) - ] - ) - self.add_command('tracker', self.cmd_tracker, - "antenna tracker control module", - ['', - 'set (TRACKERSETTING)', - 'param (TRACKERPARAMETER)', - 'param (TRACKERSETTING)']) - self.add_completion_function('(TRACKERSETTING)', self.tracker_settings.completion) - self.add_completion_function('(TRACKERPARAMETER)', self.complete_parameter) - - def complete_parameter(self, text): - '''complete a tracker parameter''' - return self.tracker_param.keys() - - def find_connection(self): - '''find an antenna tracker connection if possible''' - if self.connection is not None: - return self.connection - for m in self.mpstate.mav_master: - if 'HEARTBEAT' in m.messages: - if m.messages['HEARTBEAT'].type == mavutil.mavlink.MAV_TYPE_ANTENNA_TRACKER: - return m - return None - - def cmd_tracker(self, args): - '''tracker command parser''' - usage = "usage: tracker [options]" - if len(args) == 0: - print(usage) - return - if args[0] == "start": - self.cmd_tracker_start() - elif args[0] == "set": - self.tracker_settings.command(args[1:]) - elif args[0] == 'arm': - self.cmd_tracker_arm() - elif args[0] == 'disarm': - self.cmd_tracker_disarm() - elif args[0] == 'level': - self.cmd_tracker_level() - elif args[0] == 'param': - self.cmd_tracker_param(args[1:]) - elif args[0] == 'mode': - self.cmd_tracker_mode(args[1:]) - elif args[0] == 'position': - self.cmd_tracker_position(args[1:]) - elif args[0] == 'calpress': - self.cmd_tracker_calpress(args[1:]) - else: - print(usage) - - def cmd_tracker_position(self, args): - '''tracker manual positioning commands''' - connection = self.find_connection() - if not connection: - print("No antenna tracker found") - return - positions = [0, 0, 0, 0, 0] # x, y, z, r, buttons. only position[0] (yaw) and position[1] (pitch) are currently used - for i in range(0, 4): - if len(args) > i: - positions[i] = int(args[i]) # default values are 0 - connection.mav.manual_control_send(connection.target_system, - positions[0], positions[1], - positions[2], positions[3], - positions[4]) - - def cmd_tracker_calpress(self, args): - '''calibrate barometer on tracker''' - connection = self.find_connection() - if not connection: - print("No antenna tracker found") - return - connection.calibrate_pressure() - - def cmd_tracker_mode(self, args): - '''set arbitrary mode''' - connection = self.find_connection() - if not connection: - print("No antenna tracker found") - return - mode_mapping = connection.mode_mapping() - if mode_mapping is None: - print('No mode mapping available') - return - if len(args) != 1: - print('Available modes: ', mode_mapping.keys()) - return - mode = args[0].upper() - if mode not in mode_mapping: - print('Unknown mode %s: ' % mode) - return - connection.set_mode(mode_mapping[mode]) - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet from the master vehicle. Relay it to the tracker - if it is a GLOBAL_POSITION_INT''' - if m.get_type() in ['GLOBAL_POSITION_INT', 'SCALED_PRESSURE']: - connection = self.find_connection() - if not connection: - return - if m.get_srcSystem() != connection.target_system: - connection.mav.send(m) - - def idle_task(self): - '''called in idle time''' - if not self.connection: - return - - # check for a mavlink message from the tracker - m = self.connection.recv_msg() - if m is None: - return - - if self.tracker_settings.debug: - print(m) - - self.pstate.handle_mavlink_packet(self.connection, m) - self.pstate.fetch_check(self.connection) - - if self.module('map') is None: - return - - if m.get_type() == 'GLOBAL_POSITION_INT': - (self.lat, self.lon, self.heading) = (m.lat*1.0e-7, m.lon*1.0e-7, m.hdg*0.01) - if self.lat != 0 or self.lon != 0: - self.module('map').create_vehicle_icon('AntennaTracker', 'red', follow=False, vehicle_type='antenna') - self.mpstate.map.set_position('AntennaTracker', (self.lat, self.lon), rotation=self.heading) - - - def cmd_tracker_start(self): - if self.tracker_settings.port == None: - print("tracker port not set") - return - if self.connection is not None: - self.connection.close() - self.connection = None - print("Closed old connection") - print("connecting to tracker %s at %d" % (self.tracker_settings.port, - self.tracker_settings.baudrate)) - m = mavutil.mavlink_connection(self.tracker_settings.port, - autoreconnect=True, - source_system=self.settings.source_system, - baud=self.tracker_settings.baudrate) - m.mav.srcComponent = self.settings.source_component - if self.logdir: - m.setup_logfile(os.path.join(self.logdir, 'tracker.tlog')) - self.connection = m - - def cmd_tracker_arm(self): - '''Enable the servos in the tracker so the antenna will move''' - if not self.connection: - print("tracker not connected") - return - self.connection.arducopter_arm() - - def cmd_tracker_disarm(self): - '''Disable the servos in the tracker so the antenna will not move''' - if not self.connection: - print("tracker not connected") - return - self.connection.arducopter_disarm() - - def cmd_tracker_level(self): - '''Calibrate the accelerometers. Disarm and move the antenna level first''' - if not self.connection: - print("tracker not connected") - return - self.connection.calibrate_level() - - def cmd_tracker_param(self, args): - '''Parameter commands''' - if not self.connection: - print("tracker not connected") - return - self.pstate.handle_command(self.connection, self.mpstate, args) - -def init(mpstate): - '''initialise module''' - return TrackerModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tuneopt.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tuneopt.py deleted file mode 100644 index 6b786fd8b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_tuneopt.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python -'''tune command handling''' - -import time, os - -from MAVProxy.modules.lib import mp_module - -tune_options = { - 'None': '0', - 'StabRollPitchkP': '1', - 'RateRollPitchkP': '4', - 'RateRollPitchkI': '6', - 'RateRollPitchkD': '21', - 'StabYawkP': '3', - 'RateYawkP': '6', - 'RateYawkD': '26', - 'AltitudeHoldkP': '14', - 'ThrottleRatekP': '7', - 'ThrottleRatekD': '37', - 'ThrottleAccelkP': '34', - 'ThrottleAccelkI': '35', - 'ThrottleAccelkD': '36', - 'LoiterPoskP': '12', - 'LoiterRatekP': '22', - 'LoiterRatekI': '28', - 'LoiterRatekD': '29', - 'WPSpeed': '10', - 'AcroRollPitch kP': '25', - 'AcroYawkP': '40', - 'RelayOnOff': '9', - 'HeliExtGyro': '13', - 'OFLoiterkP': '17', - 'OFLoiterkI': '18', - 'OFLoiterkD': '19', - 'AHRSYawkP': '30', - 'AHRSkP': '31', - 'INAV_TC': '32', - 'Declination': '38', - 'CircleRate': '39', - 'SonarGain': '41', -} - -class TuneoptModule(mp_module.MPModule): - def __init__(self, mpstate): - super(TuneoptModule, self).__init__(mpstate, "tuneopt", "tuneopt command handling") - self.add_command('tuneopt', self.cmd_tuneopt, 'Select option for Tune Pot on Channel 6 (quadcopter only)') - - def tune_show(self): - opt_num = str(int(self.get_mav_param('TUNE'))) - option = None - for k in tune_options.keys(): - if opt_num == tune_options[k]: - option = k - break - else: - print("TUNE is currently set to unknown value " + opt_num) - return - low = self.get_mav_param('TUNE_LOW') - high = self.get_mav_param('TUNE_HIGH') - print("TUNE is currently set to %s LOW=%f HIGH=%f" % (option, low/1000, high/1000)) - - def tune_option_validate(self, option): - for k in tune_options: - if option.upper() == k.upper(): - return k - return None - - # TODO: Check/show the limits of LOW and HIGH - def cmd_tuneopt(self, args): - '''Select option for Tune Pot on Channel 6 (quadcopter only)''' - usage = "usage: tuneopt " - if self.mpstate.vehicle_type != 'copter': - print("This command is only available for copter") - return - if len(args) < 1: - print(usage) - return - if args[0].lower() == 'reset': - self.param_set('TUNE', '0') - elif args[0].lower() == 'set': - if len(args) < 4: - print('Usage: tuneopt set OPTION LOW HIGH') - return - option = self.tune_option_validate(args[1]) - if not option: - print('Invalid Tune option: ' + args[1]) - return - low = args[2] - high = args[3] - self.param_set('TUNE', tune_options[option]) - self.param_set('TUNE_LOW', float(low) * 1000) - self.param_set('TUNE_HIGH', float(high) * 1000) - elif args[0].lower() == 'show': - self.tune_show() - elif args[0].lower() == 'list': - print("Options available:") - for s in sorted(tune_options.keys()): - print(' ' + s) - else: - print(usage) - -def init(mpstate): - '''initialise module''' - return TuneoptModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_wp.py b/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_wp.py deleted file mode 100644 index ed31201fe..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/modules/mavproxy_wp.py +++ /dev/null @@ -1,553 +0,0 @@ -#!/usr/bin/env python -'''waypoint command handling''' - -import time, os, fnmatch, copy, platform -from pymavlink import mavutil, mavwp -from MAVProxy.modules.lib import mp_module -from MAVProxy.modules.lib import mp_util -if mp_util.has_wxpython: - from MAVProxy.modules.lib.mp_menu import * - -class WPModule(mp_module.MPModule): - def __init__(self, mpstate): - super(WPModule, self).__init__(mpstate, "wp", "waypoint handling", public = True) - self.wp_op = None - self.wp_save_filename = None - self.wploader = mavwp.MAVWPLoader() - self.loading_waypoints = False - self.loading_waypoint_lasttime = time.time() - self.last_waypoint = 0 - self.wp_period = mavutil.periodic_event(0.5) - self.undo_wp = None - self.undo_type = None - self.undo_wp_idx = -1 - self.add_command('wp', self.cmd_wp, 'waypoint management', - ["", - " (FILENAME)"]) - - if self.continue_mode and self.logdir != None: - waytxt = os.path.join(mpstate.status.logdir, 'way.txt') - if os.path.exists(waytxt): - self.wploader.load(waytxt) - print("Loaded waypoints from %s" % waytxt) - - self.menu_added_console = False - self.menu_added_map = False - if mp_util.has_wxpython: - self.menu = MPMenuSubMenu('Mission', - items=[MPMenuItem('Clear', 'Clear', '# wp clear'), - MPMenuItem('List', 'List', '# wp list'), - MPMenuItem('Load', 'Load', '# wp load ', - handler=MPMenuCallFileDialog(flags=('open',), - title='Mission Load', - wildcard='*.txt')), - MPMenuItem('Save', 'Save', '# wp save ', - handler=MPMenuCallFileDialog(flags=('save', 'overwrite_prompt'), - title='Mission Save', - wildcard='*.txt')), - MPMenuItem('Draw', 'Draw', '# wp draw ', - handler=MPMenuCallTextDialog(title='Mission Altitude (m)', - default=100)), - MPMenuItem('Undo', 'Undo', '# wp undo'), - MPMenuItem('Loop', 'Loop', '# wp loop')]) - - - def mavlink_packet(self, m): - '''handle an incoming mavlink packet''' - mtype = m.get_type() - if mtype in ['WAYPOINT_COUNT','MISSION_COUNT']: - if self.wp_op is None: - self.console.error("No waypoint load started") - else: - self.wploader.clear() - self.wploader.expected_count = m.count - self.console.writeln("Requesting %u waypoints t=%s now=%s" % (m.count, - time.asctime(time.localtime(m._timestamp)), - time.asctime())) - self.master.waypoint_request_send(0) - - elif mtype in ['WAYPOINT', 'MISSION_ITEM'] and self.wp_op != None: - if m.seq > self.wploader.count(): - self.console.writeln("Unexpected waypoint number %u - expected %u" % (m.seq, self.wploader.count())) - elif m.seq < self.wploader.count(): - # a duplicate - pass - else: - self.wploader.add(m) - if m.seq+1 < self.wploader.expected_count: - self.master.waypoint_request_send(m.seq+1) - else: - if self.wp_op == 'list': - for i in range(self.wploader.count()): - w = self.wploader.wp(i) - print("%u %u %.10f %.10f %f p1=%.1f p2=%.1f p3=%.1f p4=%.1f cur=%u auto=%u" % ( - w.command, w.frame, w.x, w.y, w.z, - w.param1, w.param2, w.param3, w.param4, - w.current, w.autocontinue)) - if self.logdir != None: - waytxt = os.path.join(self.logdir, 'way.txt') - self.save_waypoints(waytxt) - print("Saved waypoints to %s" % waytxt) - elif self.wp_op == "save": - self.save_waypoints(self.wp_save_filename) - self.wp_op = None - - elif mtype in ["WAYPOINT_REQUEST", "MISSION_REQUEST"]: - self.process_waypoint_request(m, self.master) - - elif mtype in ["WAYPOINT_CURRENT", "MISSION_CURRENT"]: - if m.seq != self.last_waypoint: - self.last_waypoint = m.seq - if self.settings.wpupdates: - self.say("waypoint %u" % m.seq,priority='message') - - - def idle_task(self): - '''handle missing waypoints''' - if self.wp_period.trigger(): - # cope with packet loss fetching mission - if self.master is not None and self.master.time_since('MISSION_ITEM') >= 2 and self.wploader.count() < getattr(self.wploader,'expected_count',0): - seq = self.wploader.count() - print("re-requesting WP %u" % seq) - self.master.waypoint_request_send(seq) - if self.module('console') is not None and not self.menu_added_console: - self.menu_added_console = True - self.module('console').add_menu(self.menu) - if self.module('map') is not None and not self.menu_added_map: - self.menu_added_map = True - self.module('map').add_menu(self.menu) - - def process_waypoint_request(self, m, master): - '''process a waypoint request from the master''' - if (not self.loading_waypoints or - time.time() > self.loading_waypoint_lasttime + 10.0): - self.loading_waypoints = False - self.console.error("not loading waypoints") - return - if m.seq >= self.wploader.count(): - self.console.error("Request for bad waypoint %u (max %u)" % (m.seq, self.wploader.count())) - return - wp = self.wploader.wp(m.seq) - wp.target_system = self.target_system - wp.target_component = self.target_component - self.master.mav.send(self.wploader.wp(m.seq)) - self.loading_waypoint_lasttime = time.time() - self.console.writeln("Sent waypoint %u : %s" % (m.seq, self.wploader.wp(m.seq))) - if m.seq == self.wploader.count() - 1: - self.loading_waypoints = False - self.console.writeln("Sent all %u waypoints" % self.wploader.count()) - - def send_all_waypoints(self): - '''send all waypoints to vehicle''' - self.master.waypoint_clear_all_send() - if self.wploader.count() == 0: - return - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.waypoint_count_send(self.wploader.count()) - - def load_waypoints(self, filename): - '''load waypoints from a file''' - self.wploader.target_system = self.target_system - self.wploader.target_component = self.target_component - try: - self.wploader.load(filename) - except Exception as msg: - print("Unable to load %s - %s" % (filename, msg)) - return - print("Loaded %u waypoints from %s" % (self.wploader.count(), filename)) - self.send_all_waypoints() - - def update_waypoints(self, filename, wpnum): - '''update waypoints from a file''' - self.wploader.target_system = self.target_system - self.wploader.target_component = self.target_component - try: - self.wploader.load(filename) - except Exception as msg: - print("Unable to load %s - %s" % (filename, msg)) - return - if self.wploader.count() == 0: - print("No waypoints found in %s" % filename) - return - if wpnum == -1: - print("Loaded %u updated waypoints from %s" % (self.wploader.count(), filename)) - elif wpnum >= self.wploader.count(): - print("Invalid waypoint number %u" % wpnum) - return - else: - print("Loaded updated waypoint %u from %s" % (wpnum, filename)) - - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - if wpnum == -1: - start = 0 - end = self.wploader.count()-1 - else: - start = wpnum - end = wpnum - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - start, end) - - def save_waypoints(self, filename): - '''save waypoints to a file''' - try: - self.wploader.save(filename) - except Exception as msg: - print("Failed to save %s - %s" % (filename, msg)) - return - print("Saved %u waypoints to %s" % (self.wploader.count(), filename)) - - def get_default_frame(self): - '''default frame for waypoints''' - if self.settings.terrainalt == 'Auto': - if self.get_mav_param('TERRAIN_FOLLOW',0) == 1: - return mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT - return mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT - if self.settings.terrainalt == 'True': - return mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT - return mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT - - def wp_draw_callback(self, points): - '''callback from drawing waypoints''' - if len(points) < 3: - return - from MAVProxy.modules.lib import mp_util - home = self.wploader.wp(0) - self.wploader.clear() - self.wploader.target_system = self.target_system - self.wploader.target_component = self.target_component - self.wploader.add(home) - if self.get_default_frame() == mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT: - use_terrain = True - else: - use_terrain = False - for p in points: - self.wploader.add_latlonalt(p[0], p[1], self.settings.wpalt, terrain_alt=use_terrain) - self.send_all_waypoints() - - def wp_loop(self): - '''close the loop on a mission''' - loader = self.wploader - if loader.count() < 2: - print("Not enough waypoints (%u)" % loader.count()) - return - wp = loader.wp(loader.count()-2) - if wp.command == mavutil.mavlink.MAV_CMD_DO_JUMP: - print("Mission is already looped") - return - wp = mavutil.mavlink.MAVLink_mission_item_message(0, 0, 0, 0, mavutil.mavlink.MAV_CMD_DO_JUMP, - 0, 1, 1, -1, 0, 0, 0, 0, 0) - loader.add(wp) - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.waypoint_count_send(self.wploader.count()) - print("Closed loop on mission") - - def set_home_location(self): - '''set home location from last map click''' - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - lat = float(latlon[0]) - lon = float(latlon[1]) - if self.wploader.count() == 0: - self.wploader.add_latlonalt(lat, lon, 0) - w = self.wploader.wp(0) - w.x = lat - w.y = lon - self.wploader.set(w, 0) - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - 0, 0) - - - def cmd_wp_move(self, args): - '''handle wp move''' - if len(args) != 1: - print("usage: wp move WPNUM") - return - idx = int(args[0]) - if idx < 1 or idx > self.wploader.count(): - print("Invalid wp number %u" % idx) - return - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - wp = self.wploader.wp(idx) - - # setup for undo - self.undo_wp = copy.copy(wp) - self.undo_wp_idx = idx - self.undo_type = "move" - - (lat, lon) = latlon - if getattr(self.console, 'ElevationMap', None) is not None and wp.frame != mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT: - alt1 = self.console.ElevationMap.GetElevation(lat, lon) - alt2 = self.console.ElevationMap.GetElevation(wp.x, wp.y) - if alt1 is not None and alt2 is not None: - wp.z += alt1 - alt2 - wp.x = lat - wp.y = lon - - wp.target_system = self.target_system - wp.target_component = self.target_component - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - idx, idx) - self.wploader.set(wp, idx) - print("Moved WP %u to %f, %f at %.1fm" % (idx, lat, lon, wp.z)) - - - def cmd_wp_movemulti(self, args): - '''handle wp move of multiple waypoints''' - if len(args) < 3: - print("usage: wp movemulti WPNUM WPSTART WPEND ") - return - idx = int(args[0]) - if idx < 1 or idx > self.wploader.count(): - print("Invalid wp number %u" % idx) - return - wpstart = int(args[1]) - if wpstart < 1 or wpstart > self.wploader.count(): - print("Invalid wp number %u" % wpstart) - return - wpend = int(args[2]) - if wpend < 1 or wpend > self.wploader.count(): - print("Invalid wp number %u" % wpend) - return - if idx < wpstart or idx > wpend: - print("WPNUM must be between WPSTART and WPEND") - return - - # optional rotation about center point - if len(args) > 3: - rotation = float(args[3]) - else: - rotation = 0 - - try: - latlon = self.module('map').click_position - except Exception: - print("No map available") - return - if latlon is None: - print("No map click position available") - return - wp = self.wploader.wp(idx) - if not self.wploader.is_location_command(wp.command): - print("WP must be a location command") - return - - (lat, lon) = latlon - distance = mp_util.gps_distance(wp.x, wp.y, lat, lon) - bearing = mp_util.gps_bearing(wp.x, wp.y, lat, lon) - - for wpnum in range(wpstart, wpend+1): - wp = self.wploader.wp(wpnum) - if not self.wploader.is_location_command(wp.command): - continue - (newlat, newlon) = mp_util.gps_newpos(wp.x, wp.y, bearing, distance) - if wpnum != idx and rotation != 0: - # add in rotation - d2 = mp_util.gps_distance(lat, lon, newlat, newlon) - b2 = mp_util.gps_bearing(lat, lon, newlat, newlon) - (newlat, newlon) = mp_util.gps_newpos(lat, lon, b2+rotation, d2) - - if getattr(self.console, 'ElevationMap', None) is not None and wp.frame != mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT: - alt1 = self.console.ElevationMap.GetElevation(newlat, newlon) - alt2 = self.console.ElevationMap.GetElevation(wp.x, wp.y) - if alt1 is not None and alt2 is not None: - wp.z += alt1 - alt2 - wp.x = newlat - wp.y = newlon - wp.target_system = self.target_system - wp.target_component = self.target_component - self.wploader.set(wp, wpnum) - - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - wpstart, wpend+1) - print("Moved WPs %u:%u to %f, %f rotation=%.1f" % (wpstart, wpend, lat, lon, rotation)) - - def cmd_wp_remove(self, args): - '''handle wp remove''' - if len(args) != 1: - print("usage: wp remove WPNUM") - return - idx = int(args[0]) - if idx < 0 or idx >= self.wploader.count(): - print("Invalid wp number %u" % idx) - return - wp = self.wploader.wp(idx) - - # setup for undo - self.undo_wp = copy.copy(wp) - self.undo_wp_idx = idx - self.undo_type = "remove" - - self.wploader.remove(wp) - self.send_all_waypoints() - print("Removed WP %u" % idx) - - def cmd_wp_undo(self): - '''handle wp undo''' - if self.undo_wp_idx == -1 or self.undo_wp is None: - print("No undo information") - return - wp = self.undo_wp - if self.undo_type == 'move': - wp.target_system = self.target_system - wp.target_component = self.target_component - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - self.undo_wp_idx, self.undo_wp_idx) - self.wploader.set(wp, self.undo_wp_idx) - print("Undid WP move") - elif self.undo_type == 'remove': - self.wploader.insert(self.undo_wp_idx, wp) - self.send_all_waypoints() - print("Undid WP remove") - else: - print("bad undo type") - self.undo_wp = None - self.undo_wp_idx = -1 - - def cmd_wp_param(self, args): - '''handle wp parameter change''' - if len(args) < 2: - print("usage: wp param WPNUM PNUM ") - return - idx = int(args[0]) - if idx < 1 or idx > self.wploader.count(): - print("Invalid wp number %u" % idx) - return - wp = self.wploader.wp(idx) - param = [wp.param1, wp.param2, wp.param3, wp.param4] - pnum = int(args[1]) - if pnum < 1 or pnum > 4: - print("Invalid param number %u" % pnum) - return - - if len(args) == 2: - print("Param %u: %f" % (pnum, param[pnum-1])) - return - - param[pnum-1] = float(args[2]) - wp.param1 = param[0] - wp.param2 = param[1] - wp.param3 = param[2] - wp.param4 = param[3] - - wp.target_system = self.target_system - wp.target_component = self.target_component - self.loading_waypoints = True - self.loading_waypoint_lasttime = time.time() - self.master.mav.mission_write_partial_list_send(self.target_system, - self.target_component, - idx, idx) - self.wploader.set(wp, idx) - print("Set param %u for %u to %f" % (pnum, idx, param[pnum-1])) - - def cmd_wp(self, args): - '''waypoint commands''' - usage = "usage: wp " - if len(args) < 1: - print(usage) - return - - if args[0] == "load": - if len(args) != 2: - print("usage: wp load ") - return - self.load_waypoints(args[1]) - elif args[0] == "update": - if len(args) < 2: - print("usage: wp update ") - return - if len(args) == 3: - wpnum = int(args[2]) - else: - wpnum = -1 - self.update_waypoints(args[1], wpnum) - elif args[0] == "list": - self.wp_op = "list" - self.master.waypoint_request_list_send() - elif args[0] == "save": - if len(args) != 2: - print("usage: wp save ") - return - self.wp_save_filename = args[1] - self.wp_op = "save" - self.master.waypoint_request_list_send() - elif args[0] == "savelocal": - if len(args) != 2: - print("usage: wp savelocal ") - return - self.wploader.save(args[1]) - elif args[0] == "show": - if len(args) != 2: - print("usage: wp show ") - return - self.wploader.load(args[1]) - elif args[0] == "move": - self.cmd_wp_move(args[1:]) - elif args[0] == "movemulti": - self.cmd_wp_movemulti(args[1:]) - elif args[0] == "param": - self.cmd_wp_param(args[1:]) - elif args[0] == "remove": - self.cmd_wp_remove(args[1:]) - elif args[0] == "undo": - self.cmd_wp_undo() - elif args[0] == "set": - if len(args) != 2: - print("usage: wp set ") - return - self.master.waypoint_set_current_send(int(args[1])) - elif args[0] == "clear": - self.master.waypoint_clear_all_send() - self.wploader.clear() - elif args[0] == "draw": - if not 'draw_lines' in self.mpstate.map_functions: - print("No map drawing available") - return - if self.wploader.count() == 0: - print("Need home location - refresh waypoints") - return - if len(args) > 1: - self.settings.wpalt = int(args[1]) - self.mpstate.map_functions['draw_lines'](self.wp_draw_callback) - print("Drawing waypoints on map at altitude %d" % self.settings.wpalt) - elif args[0] == "sethome": - self.set_home_location() - elif args[0] == "loop": - self.wp_loop() - else: - print(usage) - - def fetch(self): - """Download wpts from vehicle (this operation is public to support other modules)""" - if self.wp_op is None: # If we were already doing a list or save, just restart the fetch without changing the operation - self.wp_op = "fetch" - self.master.waypoint_request_list_send() - -def init(mpstate): - '''initialise module''' - return WPModule(mpstate) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/DFReader.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/DFReader.py deleted file mode 100644 index 2ff3369d6..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/DFReader.py +++ /dev/null @@ -1,703 +0,0 @@ -#!/usr/bin/env python -''' -APM DataFlash log file reader - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later - -Partly based on SDLog2Parser by Anton Babushkin -''' - -import struct, time, os -from . import mavutil - -FORMAT_TO_STRUCT = { - "b": ("b", None, int), - "B": ("B", None, int), - "h": ("h", None, int), - "H": ("H", None, int), - "i": ("i", None, int), - "I": ("I", None, int), - "f": ("f", None, float), - "n": ("4s", None, str), - "N": ("16s", None, str), - "Z": ("64s", None, str), - "c": ("h", 0.01, float), - "C": ("H", 0.01, float), - "e": ("i", 0.01, float), - "E": ("I", 0.01, float), - "L": ("i", 1.0e-7, float), - "d": ("d", None, float), - "M": ("b", None, int), - "q": ("q", None, long), - "Q": ("Q", None, long), - } - -class DFFormat(object): - def __init__(self, type, name, flen, format, columns): - self.type = type - self.name = name - self.len = flen - self.format = format - self.columns = columns.split(',') - - if self.columns == ['']: - self.columns = [] - - msg_struct = "<" - msg_mults = [] - msg_types = [] - for c in format: - if ord(c) == 0: - break - try: - (s, mul, type) = FORMAT_TO_STRUCT[c] - msg_struct += s - msg_mults.append(mul) - msg_types.append(type) - except KeyError as e: - raise Exception("Unsupported format char: '%s' in message %s" % (c, name)) - - self.msg_struct = msg_struct - self.msg_types = msg_types - self.msg_mults = msg_mults - self.colhash = {} - for i in range(len(self.columns)): - self.colhash[self.columns[i]] = i - - def __str__(self): - return "DFFormat(%s,%s,%s,%s)" % (self.type, self.name, self.format, self.columns) - -def null_term(str): - '''null terminate a string''' - idx = str.find("\0") - if idx != -1: - str = str[:idx] - return str - -class DFMessage(object): - def __init__(self, fmt, elements, apply_multiplier): - self.fmt = fmt - self._elements = elements - self._apply_multiplier = apply_multiplier - self._fieldnames = fmt.columns - - def to_dict(self): - d = {'mavpackettype': self.fmt.name} - - for field in self._fieldnames: - d[field] = self.__getattr__(field) - - return d - - def __getattr__(self, field): - '''override field getter''' - try: - i = self.fmt.colhash[field] - except Exception: - raise AttributeError(field) - v = self._elements[i] - if self.fmt.format[i] != 'M' or self._apply_multiplier: - v = self.fmt.msg_types[i](v) - if self.fmt.msg_types[i] == str: - v = null_term(v) - if self.fmt.msg_mults[i] is not None and self._apply_multiplier: - v *= self.fmt.msg_mults[i] - return v - - def get_type(self): - return self.fmt.name - - def __str__(self): - ret = "%s {" % self.fmt.name - col_count = 0 - for c in self.fmt.columns: - ret += "%s : %s, " % (c, self.__getattr__(c)) - col_count += 1 - if col_count != 0: - ret = ret[:-2] - return ret + '}' - - def get_msgbuf(self): - '''create a binary message buffer for a message''' - values = [] - for i in range(len(self.fmt.columns)): - if i >= len(self.fmt.msg_mults): - continue - mul = self.fmt.msg_mults[i] - name = self.fmt.columns[i] - if name == 'Mode' and 'ModeNum' in self.fmt.columns: - name = 'ModeNum' - v = self.__getattr__(name) - if mul is not None: - v /= mul - values.append(v) - return struct.pack("BBB", 0xA3, 0x95, self.fmt.type) + struct.pack(self.fmt.msg_struct, *values) - - def get_fieldnames(self): - return self._fieldnames - -class DFReaderClock(): - '''base class for all the different ways we count time in logs''' - - def __init__(self): - self.set_timebase(0) - self.timestamp = 0 - - def _gpsTimeToTime(self, week, msec): - '''convert GPS week and TOW to a time in seconds since 1970''' - epoch = 86400*(10*365 + (1980-1969)/4 + 1 + 6 - 2) - return epoch + 86400*7*week + msec*0.001 - 15 - - def set_timebase(self, base): - self.timebase = base - - def message_arrived(self, m): - pass - - def rewind_event(self): - pass - -class DFReaderClock_usec(DFReaderClock): - '''DFReaderClock_usec - use microsecond timestamps from messages''' - def __init__(self): - DFReaderClock.__init__(self) - - def find_time_base(self, gps, first_us_stamp): - '''work out time basis for the log - even newer style''' - t = self._gpsTimeToTime(gps.GWk, gps.GMS) - self.set_timebase(t - gps.TimeUS*0.000001) - # this ensures FMT messages get appropriate timestamp: - self.timestamp = self.timebase + first_us_stamp*0.000001 - - def type_has_good_TimeMS(self, type): - '''The TimeMS in some messages is not from *our* clock!''' - if type.startswith('ACC'): - return False; - if type.startswith('GYR'): - return False; - return True - - def should_use_msec_field0(self, m): - if not self.type_has_good_TimeMS(m.get_type()): - return False - if 'TimeMS' != m._fieldnames[0]: - return False - if self.timebase + m.TimeMS*0.001 < self.timestamp: - return False - return True; - - def set_message_timestamp(self, m): - if 'TimeUS' == m._fieldnames[0]: - # only format messages don't have a TimeUS in them... - m._timestamp = self.timebase + m.TimeUS*0.000001 - elif self.should_use_msec_field0(m): - # ... in theory. I expect there to be some logs which are not - # "pure": - m._timestamp = self.timebase + m.TimeMS*0.001 - else: - m._timestamp = self.timestamp - self.timestamp = m._timestamp - -class DFReaderClock_msec(DFReaderClock): - '''DFReaderClock_msec - a format where many messages have TimeMS in their formats, and GPS messages have a "T" field giving msecs ''' - def find_time_base(self, gps, first_ms_stamp): - '''work out time basis for the log - new style''' - t = self._gpsTimeToTime(gps.Week, gps.TimeMS) - self.set_timebase(t - gps.T*0.001) - self.timestamp = self.timebase + first_ms_stamp*0.001 - - def set_message_timestamp(self, m): - if 'TimeMS' == m._fieldnames[0]: - m._timestamp = self.timebase + m.TimeMS*0.001 - elif m.get_type() in ['GPS','GPS2']: - m._timestamp = self.timebase + m.T*0.001 - else: - m._timestamp = self.timestamp - self.timestamp = m._timestamp - -class DFReaderClock_px4(DFReaderClock): - '''DFReaderClock_px4 - a format where a starting time is explicitly given in a message''' - def __init__(self): - DFReaderClock.__init__(self) - self.px4_timebase = 0 - - def find_time_base(self, gps): - '''work out time basis for the log - PX4 native''' - t = gps.GPSTime * 1.0e-6 - self.timebase = t - self.px4_timebase - - def set_px4_timebase(self, time_msg): - self.px4_timebase = time_msg.StartTime * 1.0e-6 - - def set_message_timestamp(self, m): - m._timestamp = self.timebase + self.px4_timebase - - def message_arrived(self, m): - type = m.get_type() - if type == 'TIME' and 'StartTime' in m._fieldnames: - self.set_px4_timebase(m) - -class DFReaderClock_gps_interpolated(DFReaderClock): - '''DFReaderClock_gps_interpolated - for when the only real references in a message are GPS timestamps ''' - def __init__(self): - DFReaderClock.__init__(self) - self.msg_rate = {} - self.counts = {} - self.counts_since_gps = {} - - def rewind_event(self): - '''reset counters on rewind''' - self.counts = {} - self.counts_since_gps = {} - - def message_arrived(self, m): - type = m.get_type() - if not type in self.counts: - self.counts[type] = 1 - else: - self.counts[type] += 1 - # this preserves existing behaviour - but should we be doing this - # if type == 'GPS'? - if not type in self.counts_since_gps: - self.counts_since_gps[type] = 1 - else: - self.counts_since_gps[type] += 1 - - if type == 'GPS' or type == 'GPS2': - self.gps_message_arrived(m) - - def gps_message_arrived(self, m): - '''adjust time base from GPS message''' - # msec-style GPS message? - gps_week = getattr(m, 'Week', None) - gps_timems = getattr(m, 'TimeMS', None) - if gps_week is None: - # usec-style GPS message? - gps_week = getattr(m, 'GWk', None) - gps_timems = getattr(m, 'GMS', None) - if gps_week is None: - if getattr(m, 'GPSTime', None) is not None: - # PX4-style timestamp; we've only been called - # because we were speculatively created in case no - # better clock was found. - return; - - t = self._gpsTimeToTime(gps_week, gps_timems) - - deltat = t - self.timebase - if deltat <= 0: - return - - for type in self.counts_since_gps: - rate = self.counts_since_gps[type] / deltat - if rate > self.msg_rate.get(type, 0): - self.msg_rate[type] = rate - self.msg_rate['IMU'] = 50.0 - self.timebase = t - self.counts_since_gps = {} - - def set_message_timestamp(self, m): - rate = self.msg_rate.get(m.fmt.name, 50.0) - if int(rate) == 0: - rate = 50 - count = self.counts_since_gps.get(m.fmt.name, 0) - m._timestamp = self.timebase + count/rate - - -class DFReader(object): - '''parse a generic dataflash file''' - def __init__(self): - # read the whole file into memory for simplicity - self.clock = None - self.timestamp = 0 - self.mav_type = mavutil.mavlink.MAV_TYPE_FIXED_WING - self.verbose = False - self.params = {} - - def _rewind(self): - '''reset state on rewind''' - self.messages = { 'MAV' : self } - self.flightmode = "UNKNOWN" - self.percent = 0 - if self.clock: - self.clock.rewind_event() - - def init_clock_px4(self, px4_msg_time, px4_msg_gps): - self.clock = DFReaderClock_px4() - if not self._zero_time_base: - self.clock.set_px4_timebase(px4_msg_time) - self.clock.find_time_base(px4_msg_gps) - return True - - def init_clock_msec(self): - # it is a new style flash log with full timestamps - self.clock = DFReaderClock_msec() - - def init_clock_usec(self): - self.clock = DFReaderClock_usec() - - def init_clock_gps_interpolated(self, clock): - self.clock = clock - - def init_clock(self): - '''work out time basis for the log''' - - self._rewind() - - # speculatively create a gps clock in case we don't find anything - # better - gps_clock = DFReaderClock_gps_interpolated() - self.clock = gps_clock - - px4_msg_time = None - px4_msg_gps = None - gps_interp_msg_gps1 = None - gps_interp_msg_gps2 = None - first_us_stamp = None - first_ms_stamp = None - - have_good_clock = False - while True: - m = self.recv_msg() - if m is None: - break; - - type = m.get_type() - - if first_us_stamp is None: - first_us_stamp = getattr(m, "TimeUS", None); - - if first_ms_stamp is None and (type != 'GPS' and type != 'GPS2'): - # Older GPS messages use TimeMS for msecs past start - # of gps week - first_ms_stamp = getattr(m, "TimeMS", None); - - if type == 'GPS' or type == 'GPS2': - if getattr(m, "TimeUS", 0) != 0 and \ - getattr(m, "GWk", 0) != 0: # everything-usec-timestamped - self.init_clock_usec() - if not self._zero_time_base: - self.clock.find_time_base(m, first_us_stamp) - have_good_clock = True - break - if getattr(m, "T", 0) != 0 and \ - getattr(m, "Week", 0) != 0: # GPS is msec-timestamped - if first_ms_stamp is None: - first_ms_stamp = m.T - self.init_clock_msec() - if not self._zero_time_base: - self.clock.find_time_base(m, first_ms_stamp) - have_good_clock = True - break - if getattr(m, "GPSTime", 0) != 0: # px4-style-only - px4_msg_gps = m - if getattr(m, "Week", 0) != 0: - if gps_interp_msg_gps1 is not None and \ - (gps_interp_msg_gps1.TimeMS != m.TimeMS or \ - gps_interp_msg_gps1.Week != m.Week): - # we've received two distinct, non-zero GPS - # packets without finding a decent clock to - # use; fall back to interpolation. Q: should - # we wait a few more messages befoe doing - # this? - self.init_clock_gps_interpolated(gps_clock) - have_good_clock = True - break - gps_interp_msg_gps1 = m - - elif type == 'TIME': - '''only px4-style logs use TIME''' - if getattr(m, "StartTime", None) != None: - px4_msg_time = m; - - if px4_msg_time is not None and px4_msg_gps is not None: - self.init_clock_px4(px4_msg_time, px4_msg_gps) - have_good_clock = True - break - -# print("clock is " + str(self.clock)) - if not have_good_clock: - # we failed to find any GPS messages to set a time - # base for usec and msec clocks. Also, not a - # PX4-style log - if first_us_stamp is not None: - self.init_clock_usec() - elif first_ms_stamp is not None: - self.init_clock_msec() - - self._rewind() - - return - - def _set_time(self, m): - '''set time for a message''' - # really just left here for profiling - m._timestamp = self.timestamp - if len(m._fieldnames) > 0 and self.clock is not None: - self.clock.set_message_timestamp(m) - - def recv_msg(self): - return self._parse_next() - - def _add_msg(self, m): - '''add a new message''' - type = m.get_type() - self.messages[type] = m - - if self.clock: - self.clock.message_arrived(m) - - if type == 'MSG': - if m.Message.find("Rover") != -1: - self.mav_type = mavutil.mavlink.MAV_TYPE_GROUND_ROVER - elif m.Message.find("Plane") != -1: - self.mav_type = mavutil.mavlink.MAV_TYPE_FIXED_WING - elif m.Message.find("Copter") != -1: - self.mav_type = mavutil.mavlink.MAV_TYPE_QUADROTOR - elif m.Message.startswith("Antenna"): - self.mav_type = mavutil.mavlink.MAV_TYPE_ANTENNA_TRACKER - if type == 'MODE': - if isinstance(m.Mode, str): - self.flightmode = m.Mode.upper() - elif 'ModeNum' in m._fieldnames: - mapping = mavutil.mode_mapping_bynumber(self.mav_type) - if mapping is not None and m.ModeNum in mapping: - self.flightmode = mapping[m.ModeNum] - else: - self.flightmode = mavutil.mode_string_acm(m.Mode) - if type == 'STAT' and 'MainState' in m._fieldnames: - self.flightmode = mavutil.mode_string_px4(m.MainState) - if type == 'PARM' and getattr(m, 'Name', None) is not None: - self.params[m.Name] = m.Value - self._set_time(m) - - def recv_match(self, condition=None, type=None, blocking=False): - '''recv the next message that matches the given condition - type can be a string or a list of strings''' - if type is not None and not isinstance(type, list): - type = [type] - while True: - m = self.recv_msg() - if m is None: - return None - if type is not None and not m.get_type() in type: - continue - if not mavutil.evaluate_condition(condition, self.messages): - continue - return m - - def check_condition(self, condition): - '''check if a condition is true''' - return mavutil.evaluate_condition(condition, self.messages) - - def param(self, name, default=None): - '''convenient function for returning an arbitrary MAVLink - parameter with a default''' - if not name in self.params: - return default - return self.params[name] - -class DFReader_binary(DFReader): - '''parse a binary dataflash file''' - def __init__(self, filename, zero_time_base=False): - DFReader.__init__(self) - # read the whole file into memory for simplicity - f = open(filename, mode='rb') - self.data = f.read() - self.data_len = len(self.data) - f.close() - self.HEAD1 = 0xA3 - self.HEAD2 = 0x95 - self.formats = { - 0x80 : DFFormat(0x80, 'FMT', 89, 'BBnNZ', "Type,Length,Name,Format,Columns") - } - self._zero_time_base = zero_time_base - self.init_clock() - self._rewind() - - def _rewind(self): - '''rewind to start of log''' - DFReader._rewind(self) - self.offset = 0 - self.remaining = self.data_len - - def _parse_next(self): - '''read one message, returning it as an object''' - if self.data_len - self.offset < 3: - return None - - hdr = self.data[self.offset:self.offset+3] - skip_bytes = 0 - skip_type = None - # skip over bad messages - while (ord(hdr[0]) != self.HEAD1 or ord(hdr[1]) != self.HEAD2 or ord(hdr[2]) not in self.formats): - if skip_type is None: - skip_type = (ord(hdr[0]), ord(hdr[1]), ord(hdr[2])) - skip_start = self.offset - skip_bytes += 1 - self.offset += 1 - if self.data_len - self.offset < 3: - return None - hdr = self.data[self.offset:self.offset+3] - msg_type = ord(hdr[2]) - if skip_bytes != 0: - if self.remaining < 528: - return None - print("Skipped %u bad bytes in log at offset %u, type=%s" % (skip_bytes, skip_start, skip_type)) - self.remaining -= skip_bytes - - self.offset += 3 - self.remaining -= 3 - - if not msg_type in self.formats: - if self.verbose: - print("unknown message type %02x" % msg_type) - raise Exception("Unknown message type %02x" % msg_type) - fmt = self.formats[msg_type] - if self.remaining < fmt.len-3: - # out of data - can often happen half way through a message - if self.verbose: - print("out of data") - return None - body = self.data[self.offset:self.offset+(fmt.len-3)] - elements = None - try: - elements = list(struct.unpack(fmt.msg_struct, body)) - except Exception: - if self.remaining < 528: - # we can have garbage at the end of an APM2 log - return None - # we should also cope with other corruption; logs - # transfered via DataFlash_MAVLink may have blocks of 0s - # in them, for example - print("Failed to parse %s/%s with len %u (remaining %u)" % (fmt.name, fmt.msg_struct, len(body), self.remaining)) - if elements is None: - return self._parse_next() - name = null_term(fmt.name) - if name == 'FMT': - # add to formats - # name, len, format, headings - self.formats[elements[0]] = DFFormat(elements[0], - null_term(elements[2]), elements[1], - null_term(elements[3]), null_term(elements[4])) - - self.offset += fmt.len-3 - self.remaining -= fmt.len-3 - m = DFMessage(fmt, elements, True) - self._add_msg(m) - - self.percent = 100.0 * (self.offset / float(self.data_len)) - - return m - -def DFReader_is_text_log(filename): - '''return True if a file appears to be a valid text log''' - f = open(filename) - ret = (f.read(8000).find('FMT, ') != -1) - f.close() - return ret - -class DFReader_text(DFReader): - '''parse a text dataflash file''' - def __init__(self, filename, zero_time_base=False): - DFReader.__init__(self) - # read the whole file into memory for simplicity - f = open(filename, mode='r') - self.lines = f.readlines() - f.close() - self.formats = { - 'FMT' : DFFormat(0x80, 'FMT', 89, 'BBnNZ', "Type,Length,Name,Format,Columns") - } - self._rewind() - self._zero_time_base = zero_time_base - self.init_clock() - self._rewind() - - def _rewind(self): - '''rewind to start of log''' - DFReader._rewind(self) - self.line = 0 - # find the first valid line - while self.line < len(self.lines): - if self.lines[self.line].startswith("FMT, "): - break - self.line += 1 - - def _parse_next(self): - '''read one message, returning it as an object''' - - this_line = self.line - while self.line < len(self.lines): - s = self.lines[self.line].rstrip() - elements = s.split(", ") - this_line = self.line - # move to next line - self.line += 1 - if len(elements) >= 2: - # this_line is good - break - - if this_line >= len(self.lines): - return None - - # cope with empty structures - if len(elements) == 5 and elements[-1] == ',': - elements[-1] = '' - elements.append('') - - self.percent = 100.0 * (this_line / float(len(self.lines))) - - msg_type = elements[0] - - if not msg_type in self.formats: - return self._parse_next() - - fmt = self.formats[msg_type] - - if len(elements) < len(fmt.format)+1: - # not enough columns - return self._parse_next() - - elements = elements[1:] - - name = fmt.name.rstrip('\0') - if name == 'FMT': - # add to formats - # name, len, format, headings - self.formats[elements[2]] = DFFormat(int(elements[0]), elements[2], int(elements[1]), elements[3], elements[4]) - - try: - m = DFMessage(fmt, elements, False) - except ValueError: - return self._parse_next() - - self._add_msg(m) - - return m - - -if __name__ == "__main__": - import sys - use_profiler = False - if use_profiler: - from line_profiler import LineProfiler - profiler = LineProfiler() - profiler.add_function(DFReader_binary._parse_next) - profiler.add_function(DFReader_binary._add_msg) - profiler.add_function(DFReader._set_time) - profiler.enable_by_count() - - filename = sys.argv[1] - if filename.endswith('.log'): - log = DFReader_text(filename) - else: - log = DFReader_binary(filename) - while True: - m = log.recv_msg() - if m is None: - break - #print(m) - if use_profiler: - profiler.print_stats() - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/PKG-INFO b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/PKG-INFO deleted file mode 100644 index 47473b851..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/PKG-INFO +++ /dev/null @@ -1,17 +0,0 @@ -Metadata-Version: 1.1 -Name: pymavlink -Version: 2.0.8 -Summary: Python MAVLink code -Home-page: http://github.com/mavlink/mavlink -Author: UNKNOWN -Author-email: UNKNOWN -License: LGPLv3 -Description: A Python library for handling MAVLink protocol streams and log files. This allows for the creation of simple scripts to analyse telemetry logs from autopilots such as ArduPilot which use the MAVLink protocol. See the scripts that come with the package for examples of small, useful scripts that use pymavlink. For more information about the MAVLink protocol see http://qgroundcontrol.org/mavlink/ -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Console -Classifier: Intended Audience :: Science/Research -Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2.7 -Classifier: Topic :: Scientific/Engineering diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/README.txt b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/README.txt deleted file mode 100644 index 00d1a7479..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/README.txt +++ /dev/null @@ -1,11 +0,0 @@ -This is a python implementation of the MAVLink protocol. - -Please see http://www.qgroundcontrol.org/mavlink/pymavlink for -documentation - -License -------- - -pymavlink is released under the GNU Lesser General Public License v3 or later - -Join the chat at https://gitter.im/ArduPilot/pymavlink diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/__init__.py deleted file mode 100644 index 27bfa2bee..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/__init__.py +++ /dev/null @@ -1 +0,0 @@ -'''Python MAVLink library - see http://www.qgroundcontrol.org/mavlink/mavproxy_startpage''' diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.py deleted file mode 100644 index f594613ca..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.py +++ /dev/null @@ -1,12730 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ASLUAV.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'ASLUAV' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_RESET_MPPT = 40001 # Mission command to reset Maximum Power Point Tracker (MPPT) -enums['MAV_CMD'][40001] = EnumEntry('MAV_CMD_RESET_MPPT', '''Mission command to reset Maximum Power Point Tracker (MPPT)''') -enums['MAV_CMD'][40001].param[1] = '''MPPT number''' -enums['MAV_CMD'][40001].param[2] = '''Empty''' -enums['MAV_CMD'][40001].param[3] = '''Empty''' -enums['MAV_CMD'][40001].param[4] = '''Empty''' -enums['MAV_CMD'][40001].param[5] = '''Empty''' -enums['MAV_CMD'][40001].param[6] = '''Empty''' -enums['MAV_CMD'][40001].param[7] = '''Empty''' -MAV_CMD_PAYLOAD_CONTROL = 40002 # Mission command to perform a power cycle on payload -enums['MAV_CMD'][40002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL', '''Mission command to perform a power cycle on payload''') -enums['MAV_CMD'][40002].param[1] = '''Complete power cycle''' -enums['MAV_CMD'][40002].param[2] = '''VISensor power cycle''' -enums['MAV_CMD'][40002].param[3] = '''Empty''' -enums['MAV_CMD'][40002].param[4] = '''Empty''' -enums['MAV_CMD'][40002].param[5] = '''Empty''' -enums['MAV_CMD'][40002].param[6] = '''Empty''' -enums['MAV_CMD'][40002].param[7] = '''Empty''' -MAV_CMD_ENUM_END = 40003 # -enums['MAV_CMD'][40003] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SENS_POWER = 201 -MAVLINK_MSG_ID_SENS_MPPT = 202 -MAVLINK_MSG_ID_ASLCTRL_DATA = 203 -MAVLINK_MSG_ID_ASLCTRL_DEBUG = 204 -MAVLINK_MSG_ID_ASLUAV_STATUS = 205 -MAVLINK_MSG_ID_EKF_EXT = 206 -MAVLINK_MSG_ID_ASL_OBCTRL = 207 -MAVLINK_MSG_ID_SENS_ATMOS = 208 -MAVLINK_MSG_ID_SENS_BATMON = 209 -MAVLINK_MSG_ID_FW_SOARING_DATA = 210 -MAVLINK_MSG_ID_SENSORPOD_STATUS = 211 -MAVLINK_MSG_ID_SENS_POWER_BOARD = 212 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_sens_power_message(MAVLink_message): - ''' - Voltage and current sensor data - ''' - id = MAVLINK_MSG_ID_SENS_POWER - name = 'SENS_POWER' - fieldnames = ['adc121_vspb_volt', 'adc121_cspb_amp', 'adc121_cs1_amp', 'adc121_cs2_amp'] - ordered_fieldnames = [ 'adc121_vspb_volt', 'adc121_cspb_amp', 'adc121_cs1_amp', 'adc121_cs2_amp' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.xml deleted file mode 100644 index 5eba2d187..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ASLUAV.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - common.xml - - - - - Mission command to reset Maximum Power Point Tracker (MPPT) - MPPT number - Empty - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a power cycle on payload - Complete power cycle - VISensor power cycle - Empty - Empty - Empty - Empty - Empty - - - - - - Voltage and current sensor data - Power board voltage sensor reading in volts - Power board current sensor reading in amps - Board current sensor 1 reading in amps - Board current sensor 2 reading in amps - - - Maximum Power Point Tracker (MPPT) sensor data for solar module power performance tracking - MPPT last timestamp - MPPT1 voltage - MPPT1 current - MPPT1 pwm - MPPT1 status - MPPT2 voltage - MPPT2 current - MPPT2 pwm - MPPT2 status - MPPT3 voltage - MPPT3 current - MPPT3 pwm - MPPT3 status - - - ASL-fixed-wing controller data - Timestamp - ASLCTRL control-mode (manual, stabilized, auto, etc...) - See sourcecode for a description of these values... - - - Pitch angle [deg] - Pitch angle reference[deg] - - - - - - - Airspeed reference [m/s] - - Yaw angle [deg] - Yaw angle reference[deg] - Roll angle [deg] - Roll angle reference[deg] - - - - - - - - - ASL-fixed-wing controller debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - - - Extended state information for ASLUAVs - Status of the position-indicator LEDs - Status of the IRIDIUM satellite communication system - Status vector for up to 8 servos - Motor RPM - - - - Extended EKF state estimates for ASLUAVs - Time since system start [us] - Magnitude of wind velocity (in lateral inertial plane) [m/s] - Wind heading angle from North [rad] - Z (Down) component of inertial wind velocity [m/s] - Magnitude of air velocity [m/s] - Sideslip angle [rad] - Angle of attack [rad] - - - Off-board controls/commands for ASLUAVs - Time since system start [us] - Elevator command [~] - Throttle command [~] - Throttle 2 command [~] - Left aileron command [~] - Right aileron command [~] - Rudder command [~] - Off-board computer status - - - Atmospheric sensors (temperature, humidity, ...) - Ambient temperature [degrees Celsius] - Relative humidity [%] - - - Battery pack monitoring data for Li-Ion batteries - Battery pack temperature in [deg C] - Battery pack voltage in [mV] - Battery pack current in [mA] - Battery pack state-of-charge - Battery monitor status report bits in Hex - Battery monitor serial number in Hex - Battery monitor sensor host FET control in Hex - Battery pack cell 1 voltage in [mV] - Battery pack cell 2 voltage in [mV] - Battery pack cell 3 voltage in [mV] - Battery pack cell 4 voltage in [mV] - Battery pack cell 5 voltage in [mV] - Battery pack cell 6 voltage in [mV] - - - Fixed-wing soaring (i.e. thermal seeking) data - Timestamp [ms] - Timestamp since last mode change[ms] - Thermal core updraft strength [m/s] - Thermal radius [m] - Thermal center latitude [deg] - Thermal center longitude [deg] - Variance W - Variance R - Variance Lat - Variance Lon - Suggested loiter radius [m] - Suggested loiter direction - Distance to soar point [m] - Expected sink rate at current airspeed, roll and throttle [m/s] - Measurement / updraft speed at current/local airplane position [m/s] - Measurement / roll angle tracking error [deg] - Expected measurement 1 - Expected measurement 2 - Thermal drift (from estimator prediction step only) [m/s] - Thermal drift (from estimator prediction step only) [m/s] - Total specific energy change (filtered) [m/s] - Debug variable 1 - Debug variable 2 - Control Mode [-] - Data valid [-] - - - Monitoring of sensorpod status - Timestamp in linuxtime [ms] (since 1.1.1970) - Rate of ROS topic 1 - Rate of ROS topic 2 - Rate of ROS topic 3 - Rate of ROS topic 4 - Number of recording nodes - Temperature of sensorpod CPU in [deg C] - Free space available in recordings directory in [Gb] * 1e2 - - - Monitoring of power board status - Timestamp - Power board status register - Power board leds status - Power board system voltage - Power board servo voltage - Power board left motor current sensor - Power board right motor current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board aux current sensor - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.py deleted file mode 100644 index b14912994..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.py +++ /dev/null @@ -1,15570 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ardupilotmega.xml,common.xml,uAvionix.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'ardupilotmega' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_ALTITUDE_WAIT = 83 # Mission command to wait for an altitude or downwards vertical speed. - # This is meant for high altitude balloon - # launches, allowing the aircraft to be idle - # until either an altitude is reached or a - # negative vertical speed is reached - # (indicating early balloon burst). The wiggle - # time is how often to wiggle the control - # surfaces to prevent them seizing up. -enums['MAV_CMD'][83] = EnumEntry('MAV_CMD_NAV_ALTITUDE_WAIT', '''Mission command to wait for an altitude or downwards vertical speed. This is meant for high altitude balloon launches, allowing the aircraft to be idle until either an altitude is reached or a negative vertical speed is reached (indicating early balloon burst). The wiggle time is how often to wiggle the control surfaces to prevent them seizing up.''') -enums['MAV_CMD'][83].param[1] = '''altitude (m)''' -enums['MAV_CMD'][83].param[2] = '''descent speed (m/s)''' -enums['MAV_CMD'][83].param[3] = '''Wiggle Time (s)''' -enums['MAV_CMD'][83].param[4] = '''Empty''' -enums['MAV_CMD'][83].param[5] = '''Empty''' -enums['MAV_CMD'][83].param[6] = '''Empty''' -enums['MAV_CMD'][83].param[7] = '''Empty''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_GRIPPER = 211 # Mission command to operate EPM gripper -enums['MAV_CMD'][211] = EnumEntry('MAV_CMD_DO_GRIPPER', '''Mission command to operate EPM gripper''') -enums['MAV_CMD'][211].param[1] = '''gripper number (a number from 1 to max number of grippers on the vehicle)''' -enums['MAV_CMD'][211].param[2] = '''gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum)''' -enums['MAV_CMD'][211].param[3] = '''Empty''' -enums['MAV_CMD'][211].param[4] = '''Empty''' -enums['MAV_CMD'][211].param[5] = '''Empty''' -enums['MAV_CMD'][211].param[6] = '''Empty''' -enums['MAV_CMD'][211].param[7] = '''Empty''' -MAV_CMD_DO_AUTOTUNE_ENABLE = 212 # Enable/disable autotune -enums['MAV_CMD'][212] = EnumEntry('MAV_CMD_DO_AUTOTUNE_ENABLE', '''Enable/disable autotune''') -enums['MAV_CMD'][212].param[1] = '''enable (1: enable, 0:disable)''' -enums['MAV_CMD'][212].param[2] = '''Empty''' -enums['MAV_CMD'][212].param[3] = '''Empty''' -enums['MAV_CMD'][212].param[4] = '''Empty''' -enums['MAV_CMD'][212].param[5] = '''Empty''' -enums['MAV_CMD'][212].param[6] = '''Empty''' -enums['MAV_CMD'][212].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_POWER_OFF_INITIATED = 42000 # A system wide power-off event has been initiated. -enums['MAV_CMD'][42000] = EnumEntry('MAV_CMD_POWER_OFF_INITIATED', '''A system wide power-off event has been initiated.''') -enums['MAV_CMD'][42000].param[1] = '''Empty''' -enums['MAV_CMD'][42000].param[2] = '''Empty''' -enums['MAV_CMD'][42000].param[3] = '''Empty''' -enums['MAV_CMD'][42000].param[4] = '''Empty''' -enums['MAV_CMD'][42000].param[5] = '''Empty''' -enums['MAV_CMD'][42000].param[6] = '''Empty''' -enums['MAV_CMD'][42000].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_FLY_CLICK = 42001 # FLY button has been clicked. -enums['MAV_CMD'][42001] = EnumEntry('MAV_CMD_SOLO_BTN_FLY_CLICK', '''FLY button has been clicked.''') -enums['MAV_CMD'][42001].param[1] = '''Empty''' -enums['MAV_CMD'][42001].param[2] = '''Empty''' -enums['MAV_CMD'][42001].param[3] = '''Empty''' -enums['MAV_CMD'][42001].param[4] = '''Empty''' -enums['MAV_CMD'][42001].param[5] = '''Empty''' -enums['MAV_CMD'][42001].param[6] = '''Empty''' -enums['MAV_CMD'][42001].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_FLY_HOLD = 42002 # FLY button has been held for 1.5 seconds. -enums['MAV_CMD'][42002] = EnumEntry('MAV_CMD_SOLO_BTN_FLY_HOLD', '''FLY button has been held for 1.5 seconds.''') -enums['MAV_CMD'][42002].param[1] = '''Takeoff altitude''' -enums['MAV_CMD'][42002].param[2] = '''Empty''' -enums['MAV_CMD'][42002].param[3] = '''Empty''' -enums['MAV_CMD'][42002].param[4] = '''Empty''' -enums['MAV_CMD'][42002].param[5] = '''Empty''' -enums['MAV_CMD'][42002].param[6] = '''Empty''' -enums['MAV_CMD'][42002].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_PAUSE_CLICK = 42003 # PAUSE button has been clicked. -enums['MAV_CMD'][42003] = EnumEntry('MAV_CMD_SOLO_BTN_PAUSE_CLICK', '''PAUSE button has been clicked.''') -enums['MAV_CMD'][42003].param[1] = '''1 if Solo is in a shot mode, 0 otherwise''' -enums['MAV_CMD'][42003].param[2] = '''Empty''' -enums['MAV_CMD'][42003].param[3] = '''Empty''' -enums['MAV_CMD'][42003].param[4] = '''Empty''' -enums['MAV_CMD'][42003].param[5] = '''Empty''' -enums['MAV_CMD'][42003].param[6] = '''Empty''' -enums['MAV_CMD'][42003].param[7] = '''Empty''' -MAV_CMD_DO_START_MAG_CAL = 42424 # Initiate a magnetometer calibration -enums['MAV_CMD'][42424] = EnumEntry('MAV_CMD_DO_START_MAG_CAL', '''Initiate a magnetometer calibration''') -enums['MAV_CMD'][42424].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42424].param[2] = '''Automatically retry on failure (0=no retry, 1=retry).''' -enums['MAV_CMD'][42424].param[3] = '''Save without user input (0=require input, 1=autosave).''' -enums['MAV_CMD'][42424].param[4] = '''Delay (seconds)''' -enums['MAV_CMD'][42424].param[5] = '''Autoreboot (0=user reboot, 1=autoreboot)''' -enums['MAV_CMD'][42424].param[6] = '''Empty''' -enums['MAV_CMD'][42424].param[7] = '''Empty''' -MAV_CMD_DO_ACCEPT_MAG_CAL = 42425 # Initiate a magnetometer calibration -enums['MAV_CMD'][42425] = EnumEntry('MAV_CMD_DO_ACCEPT_MAG_CAL', '''Initiate a magnetometer calibration''') -enums['MAV_CMD'][42425].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42425].param[2] = '''Empty''' -enums['MAV_CMD'][42425].param[3] = '''Empty''' -enums['MAV_CMD'][42425].param[4] = '''Empty''' -enums['MAV_CMD'][42425].param[5] = '''Empty''' -enums['MAV_CMD'][42425].param[6] = '''Empty''' -enums['MAV_CMD'][42425].param[7] = '''Empty''' -MAV_CMD_DO_CANCEL_MAG_CAL = 42426 # Cancel a running magnetometer calibration -enums['MAV_CMD'][42426] = EnumEntry('MAV_CMD_DO_CANCEL_MAG_CAL', '''Cancel a running magnetometer calibration''') -enums['MAV_CMD'][42426].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42426].param[2] = '''Empty''' -enums['MAV_CMD'][42426].param[3] = '''Empty''' -enums['MAV_CMD'][42426].param[4] = '''Empty''' -enums['MAV_CMD'][42426].param[5] = '''Empty''' -enums['MAV_CMD'][42426].param[6] = '''Empty''' -enums['MAV_CMD'][42426].param[7] = '''Empty''' -MAV_CMD_SET_FACTORY_TEST_MODE = 42427 # Command autopilot to get into factory test/diagnostic mode -enums['MAV_CMD'][42427] = EnumEntry('MAV_CMD_SET_FACTORY_TEST_MODE', '''Command autopilot to get into factory test/diagnostic mode''') -enums['MAV_CMD'][42427].param[1] = '''0 means get out of test mode, 1 means get into test mode''' -enums['MAV_CMD'][42427].param[2] = '''Empty''' -enums['MAV_CMD'][42427].param[3] = '''Empty''' -enums['MAV_CMD'][42427].param[4] = '''Empty''' -enums['MAV_CMD'][42427].param[5] = '''Empty''' -enums['MAV_CMD'][42427].param[6] = '''Empty''' -enums['MAV_CMD'][42427].param[7] = '''Empty''' -MAV_CMD_DO_SEND_BANNER = 42428 # Reply with the version banner -enums['MAV_CMD'][42428] = EnumEntry('MAV_CMD_DO_SEND_BANNER', '''Reply with the version banner''') -enums['MAV_CMD'][42428].param[1] = '''Empty''' -enums['MAV_CMD'][42428].param[2] = '''Empty''' -enums['MAV_CMD'][42428].param[3] = '''Empty''' -enums['MAV_CMD'][42428].param[4] = '''Empty''' -enums['MAV_CMD'][42428].param[5] = '''Empty''' -enums['MAV_CMD'][42428].param[6] = '''Empty''' -enums['MAV_CMD'][42428].param[7] = '''Empty''' -MAV_CMD_GIMBAL_RESET = 42501 # Causes the gimbal to reset and boot as if it was just powered on -enums['MAV_CMD'][42501] = EnumEntry('MAV_CMD_GIMBAL_RESET', '''Causes the gimbal to reset and boot as if it was just powered on''') -enums['MAV_CMD'][42501].param[1] = '''Empty''' -enums['MAV_CMD'][42501].param[2] = '''Empty''' -enums['MAV_CMD'][42501].param[3] = '''Empty''' -enums['MAV_CMD'][42501].param[4] = '''Empty''' -enums['MAV_CMD'][42501].param[5] = '''Empty''' -enums['MAV_CMD'][42501].param[6] = '''Empty''' -enums['MAV_CMD'][42501].param[7] = '''Empty''' -MAV_CMD_GIMBAL_AXIS_CALIBRATION_STATUS = 42502 # Reports progress and success or failure of gimbal axis calibration - # procedure -enums['MAV_CMD'][42502] = EnumEntry('MAV_CMD_GIMBAL_AXIS_CALIBRATION_STATUS', '''Reports progress and success or failure of gimbal axis calibration procedure''') -enums['MAV_CMD'][42502].param[1] = '''Gimbal axis we're reporting calibration progress for''' -enums['MAV_CMD'][42502].param[2] = '''Current calibration progress for this axis, 0x64=100%''' -enums['MAV_CMD'][42502].param[3] = '''Status of the calibration''' -enums['MAV_CMD'][42502].param[4] = '''Empty''' -enums['MAV_CMD'][42502].param[5] = '''Empty''' -enums['MAV_CMD'][42502].param[6] = '''Empty''' -enums['MAV_CMD'][42502].param[7] = '''Empty''' -MAV_CMD_GIMBAL_REQUEST_AXIS_CALIBRATION = 42503 # Starts commutation calibration on the gimbal -enums['MAV_CMD'][42503] = EnumEntry('MAV_CMD_GIMBAL_REQUEST_AXIS_CALIBRATION', '''Starts commutation calibration on the gimbal''') -enums['MAV_CMD'][42503].param[1] = '''Empty''' -enums['MAV_CMD'][42503].param[2] = '''Empty''' -enums['MAV_CMD'][42503].param[3] = '''Empty''' -enums['MAV_CMD'][42503].param[4] = '''Empty''' -enums['MAV_CMD'][42503].param[5] = '''Empty''' -enums['MAV_CMD'][42503].param[6] = '''Empty''' -enums['MAV_CMD'][42503].param[7] = '''Empty''' -MAV_CMD_GIMBAL_FULL_RESET = 42505 # Erases gimbal application and parameters -enums['MAV_CMD'][42505] = EnumEntry('MAV_CMD_GIMBAL_FULL_RESET', '''Erases gimbal application and parameters''') -enums['MAV_CMD'][42505].param[1] = '''Magic number''' -enums['MAV_CMD'][42505].param[2] = '''Magic number''' -enums['MAV_CMD'][42505].param[3] = '''Magic number''' -enums['MAV_CMD'][42505].param[4] = '''Magic number''' -enums['MAV_CMD'][42505].param[5] = '''Magic number''' -enums['MAV_CMD'][42505].param[6] = '''Magic number''' -enums['MAV_CMD'][42505].param[7] = '''Magic number''' -MAV_CMD_ENUM_END = 42506 # -enums['MAV_CMD'][42506] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# LIMITS_STATE -enums['LIMITS_STATE'] = {} -LIMITS_INIT = 0 # pre-initialization -enums['LIMITS_STATE'][0] = EnumEntry('LIMITS_INIT', '''pre-initialization''') -LIMITS_DISABLED = 1 # disabled -enums['LIMITS_STATE'][1] = EnumEntry('LIMITS_DISABLED', '''disabled''') -LIMITS_ENABLED = 2 # checking limits -enums['LIMITS_STATE'][2] = EnumEntry('LIMITS_ENABLED', '''checking limits''') -LIMITS_TRIGGERED = 3 # a limit has been breached -enums['LIMITS_STATE'][3] = EnumEntry('LIMITS_TRIGGERED', '''a limit has been breached''') -LIMITS_RECOVERING = 4 # taking action eg. RTL -enums['LIMITS_STATE'][4] = EnumEntry('LIMITS_RECOVERING', '''taking action eg. RTL''') -LIMITS_RECOVERED = 5 # we're no longer in breach of a limit -enums['LIMITS_STATE'][5] = EnumEntry('LIMITS_RECOVERED', '''we're no longer in breach of a limit''') -LIMITS_STATE_ENUM_END = 6 # -enums['LIMITS_STATE'][6] = EnumEntry('LIMITS_STATE_ENUM_END', '''''') - -# LIMIT_MODULE -enums['LIMIT_MODULE'] = {} -LIMIT_GPSLOCK = 1 # pre-initialization -enums['LIMIT_MODULE'][1] = EnumEntry('LIMIT_GPSLOCK', '''pre-initialization''') -LIMIT_GEOFENCE = 2 # disabled -enums['LIMIT_MODULE'][2] = EnumEntry('LIMIT_GEOFENCE', '''disabled''') -LIMIT_ALTITUDE = 4 # checking limits -enums['LIMIT_MODULE'][4] = EnumEntry('LIMIT_ALTITUDE', '''checking limits''') -LIMIT_MODULE_ENUM_END = 5 # -enums['LIMIT_MODULE'][5] = EnumEntry('LIMIT_MODULE_ENUM_END', '''''') - -# RALLY_FLAGS -enums['RALLY_FLAGS'] = {} -FAVORABLE_WIND = 1 # Flag set when requiring favorable winds for landing. -enums['RALLY_FLAGS'][1] = EnumEntry('FAVORABLE_WIND', '''Flag set when requiring favorable winds for landing.''') -LAND_IMMEDIATELY = 2 # Flag set when plane is to immediately descend to break altitude and - # land without GCS intervention. Flag not set - # when plane is to loiter at Rally point until - # commanded to land. -enums['RALLY_FLAGS'][2] = EnumEntry('LAND_IMMEDIATELY', '''Flag set when plane is to immediately descend to break altitude and land without GCS intervention. Flag not set when plane is to loiter at Rally point until commanded to land.''') -RALLY_FLAGS_ENUM_END = 3 # -enums['RALLY_FLAGS'][3] = EnumEntry('RALLY_FLAGS_ENUM_END', '''''') - -# PARACHUTE_ACTION -enums['PARACHUTE_ACTION'] = {} -PARACHUTE_DISABLE = 0 # Disable parachute release -enums['PARACHUTE_ACTION'][0] = EnumEntry('PARACHUTE_DISABLE', '''Disable parachute release''') -PARACHUTE_ENABLE = 1 # Enable parachute release -enums['PARACHUTE_ACTION'][1] = EnumEntry('PARACHUTE_ENABLE', '''Enable parachute release''') -PARACHUTE_RELEASE = 2 # Release parachute -enums['PARACHUTE_ACTION'][2] = EnumEntry('PARACHUTE_RELEASE', '''Release parachute''') -PARACHUTE_ACTION_ENUM_END = 3 # -enums['PARACHUTE_ACTION'][3] = EnumEntry('PARACHUTE_ACTION_ENUM_END', '''''') - -# GRIPPER_ACTIONS -enums['GRIPPER_ACTIONS'] = {} -GRIPPER_ACTION_RELEASE = 0 # gripper release of cargo -enums['GRIPPER_ACTIONS'][0] = EnumEntry('GRIPPER_ACTION_RELEASE', '''gripper release of cargo''') -GRIPPER_ACTION_GRAB = 1 # gripper grabs onto cargo -enums['GRIPPER_ACTIONS'][1] = EnumEntry('GRIPPER_ACTION_GRAB', '''gripper grabs onto cargo''') -GRIPPER_ACTIONS_ENUM_END = 2 # -enums['GRIPPER_ACTIONS'][2] = EnumEntry('GRIPPER_ACTIONS_ENUM_END', '''''') - -# CAMERA_STATUS_TYPES -enums['CAMERA_STATUS_TYPES'] = {} -CAMERA_STATUS_TYPE_HEARTBEAT = 0 # Camera heartbeat, announce camera component ID at 1hz -enums['CAMERA_STATUS_TYPES'][0] = EnumEntry('CAMERA_STATUS_TYPE_HEARTBEAT', '''Camera heartbeat, announce camera component ID at 1hz''') -CAMERA_STATUS_TYPE_TRIGGER = 1 # Camera image triggered -enums['CAMERA_STATUS_TYPES'][1] = EnumEntry('CAMERA_STATUS_TYPE_TRIGGER', '''Camera image triggered''') -CAMERA_STATUS_TYPE_DISCONNECT = 2 # Camera connection lost -enums['CAMERA_STATUS_TYPES'][2] = EnumEntry('CAMERA_STATUS_TYPE_DISCONNECT', '''Camera connection lost''') -CAMERA_STATUS_TYPE_ERROR = 3 # Camera unknown error -enums['CAMERA_STATUS_TYPES'][3] = EnumEntry('CAMERA_STATUS_TYPE_ERROR', '''Camera unknown error''') -CAMERA_STATUS_TYPE_LOWBATT = 4 # Camera battery low. Parameter p1 shows reported voltage -enums['CAMERA_STATUS_TYPES'][4] = EnumEntry('CAMERA_STATUS_TYPE_LOWBATT', '''Camera battery low. Parameter p1 shows reported voltage''') -CAMERA_STATUS_TYPE_LOWSTORE = 5 # Camera storage low. Parameter p1 shows reported shots remaining -enums['CAMERA_STATUS_TYPES'][5] = EnumEntry('CAMERA_STATUS_TYPE_LOWSTORE', '''Camera storage low. Parameter p1 shows reported shots remaining''') -CAMERA_STATUS_TYPE_LOWSTOREV = 6 # Camera storage low. Parameter p1 shows reported video minutes - # remaining -enums['CAMERA_STATUS_TYPES'][6] = EnumEntry('CAMERA_STATUS_TYPE_LOWSTOREV', '''Camera storage low. Parameter p1 shows reported video minutes remaining''') -CAMERA_STATUS_TYPES_ENUM_END = 7 # -enums['CAMERA_STATUS_TYPES'][7] = EnumEntry('CAMERA_STATUS_TYPES_ENUM_END', '''''') - -# CAMERA_FEEDBACK_FLAGS -enums['CAMERA_FEEDBACK_FLAGS'] = {} -CAMERA_FEEDBACK_PHOTO = 0 # Shooting photos, not video -enums['CAMERA_FEEDBACK_FLAGS'][0] = EnumEntry('CAMERA_FEEDBACK_PHOTO', '''Shooting photos, not video''') -CAMERA_FEEDBACK_VIDEO = 1 # Shooting video, not stills -enums['CAMERA_FEEDBACK_FLAGS'][1] = EnumEntry('CAMERA_FEEDBACK_VIDEO', '''Shooting video, not stills''') -CAMERA_FEEDBACK_BADEXPOSURE = 2 # Unable to achieve requested exposure (e.g. shutter speed too low) -enums['CAMERA_FEEDBACK_FLAGS'][2] = EnumEntry('CAMERA_FEEDBACK_BADEXPOSURE', '''Unable to achieve requested exposure (e.g. shutter speed too low)''') -CAMERA_FEEDBACK_CLOSEDLOOP = 3 # Closed loop feedback from camera, we know for sure it has successfully - # taken a picture -enums['CAMERA_FEEDBACK_FLAGS'][3] = EnumEntry('CAMERA_FEEDBACK_CLOSEDLOOP', '''Closed loop feedback from camera, we know for sure it has successfully taken a picture''') -CAMERA_FEEDBACK_OPENLOOP = 4 # Open loop camera, an image trigger has been requested but we can't - # know for sure it has successfully taken a - # picture -enums['CAMERA_FEEDBACK_FLAGS'][4] = EnumEntry('CAMERA_FEEDBACK_OPENLOOP', '''Open loop camera, an image trigger has been requested but we can't know for sure it has successfully taken a picture''') -CAMERA_FEEDBACK_FLAGS_ENUM_END = 5 # -enums['CAMERA_FEEDBACK_FLAGS'][5] = EnumEntry('CAMERA_FEEDBACK_FLAGS_ENUM_END', '''''') - -# MAV_MODE_GIMBAL -enums['MAV_MODE_GIMBAL'] = {} -MAV_MODE_GIMBAL_UNINITIALIZED = 0 # Gimbal is powered on but has not started initializing yet -enums['MAV_MODE_GIMBAL'][0] = EnumEntry('MAV_MODE_GIMBAL_UNINITIALIZED', '''Gimbal is powered on but has not started initializing yet''') -MAV_MODE_GIMBAL_CALIBRATING_PITCH = 1 # Gimbal is currently running calibration on the pitch axis -enums['MAV_MODE_GIMBAL'][1] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_PITCH', '''Gimbal is currently running calibration on the pitch axis''') -MAV_MODE_GIMBAL_CALIBRATING_ROLL = 2 # Gimbal is currently running calibration on the roll axis -enums['MAV_MODE_GIMBAL'][2] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_ROLL', '''Gimbal is currently running calibration on the roll axis''') -MAV_MODE_GIMBAL_CALIBRATING_YAW = 3 # Gimbal is currently running calibration on the yaw axis -enums['MAV_MODE_GIMBAL'][3] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_YAW', '''Gimbal is currently running calibration on the yaw axis''') -MAV_MODE_GIMBAL_INITIALIZED = 4 # Gimbal has finished calibrating and initializing, but is relaxed - # pending reception of first rate command from - # copter -enums['MAV_MODE_GIMBAL'][4] = EnumEntry('MAV_MODE_GIMBAL_INITIALIZED', '''Gimbal has finished calibrating and initializing, but is relaxed pending reception of first rate command from copter''') -MAV_MODE_GIMBAL_ACTIVE = 5 # Gimbal is actively stabilizing -enums['MAV_MODE_GIMBAL'][5] = EnumEntry('MAV_MODE_GIMBAL_ACTIVE', '''Gimbal is actively stabilizing''') -MAV_MODE_GIMBAL_RATE_CMD_TIMEOUT = 6 # Gimbal is relaxed because it missed more than 10 expected rate command - # messages in a row. Gimbal will move back to - # active mode when it receives a new rate - # command -enums['MAV_MODE_GIMBAL'][6] = EnumEntry('MAV_MODE_GIMBAL_RATE_CMD_TIMEOUT', '''Gimbal is relaxed because it missed more than 10 expected rate command messages in a row. Gimbal will move back to active mode when it receives a new rate command''') -MAV_MODE_GIMBAL_ENUM_END = 7 # -enums['MAV_MODE_GIMBAL'][7] = EnumEntry('MAV_MODE_GIMBAL_ENUM_END', '''''') - -# GIMBAL_AXIS -enums['GIMBAL_AXIS'] = {} -GIMBAL_AXIS_YAW = 0 # Gimbal yaw axis -enums['GIMBAL_AXIS'][0] = EnumEntry('GIMBAL_AXIS_YAW', '''Gimbal yaw axis''') -GIMBAL_AXIS_PITCH = 1 # Gimbal pitch axis -enums['GIMBAL_AXIS'][1] = EnumEntry('GIMBAL_AXIS_PITCH', '''Gimbal pitch axis''') -GIMBAL_AXIS_ROLL = 2 # Gimbal roll axis -enums['GIMBAL_AXIS'][2] = EnumEntry('GIMBAL_AXIS_ROLL', '''Gimbal roll axis''') -GIMBAL_AXIS_ENUM_END = 3 # -enums['GIMBAL_AXIS'][3] = EnumEntry('GIMBAL_AXIS_ENUM_END', '''''') - -# GIMBAL_AXIS_CALIBRATION_STATUS -enums['GIMBAL_AXIS_CALIBRATION_STATUS'] = {} -GIMBAL_AXIS_CALIBRATION_STATUS_IN_PROGRESS = 0 # Axis calibration is in progress -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][0] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_IN_PROGRESS', '''Axis calibration is in progress''') -GIMBAL_AXIS_CALIBRATION_STATUS_SUCCEEDED = 1 # Axis calibration succeeded -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][1] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_SUCCEEDED', '''Axis calibration succeeded''') -GIMBAL_AXIS_CALIBRATION_STATUS_FAILED = 2 # Axis calibration failed -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][2] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_FAILED', '''Axis calibration failed''') -GIMBAL_AXIS_CALIBRATION_STATUS_ENUM_END = 3 # -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][3] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_ENUM_END', '''''') - -# GIMBAL_AXIS_CALIBRATION_REQUIRED -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'] = {} -GIMBAL_AXIS_CALIBRATION_REQUIRED_UNKNOWN = 0 # Whether or not this axis requires calibration is unknown at this time -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][0] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_UNKNOWN', '''Whether or not this axis requires calibration is unknown at this time''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_TRUE = 1 # This axis requires calibration -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][1] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_TRUE', '''This axis requires calibration''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_FALSE = 2 # This axis does not require calibration -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][2] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_FALSE', '''This axis does not require calibration''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_ENUM_END = 3 # -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][3] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_ENUM_END', '''''') - -# GOPRO_HEARTBEAT_STATUS -enums['GOPRO_HEARTBEAT_STATUS'] = {} -GOPRO_HEARTBEAT_STATUS_DISCONNECTED = 0 # No GoPro connected -enums['GOPRO_HEARTBEAT_STATUS'][0] = EnumEntry('GOPRO_HEARTBEAT_STATUS_DISCONNECTED', '''No GoPro connected''') -GOPRO_HEARTBEAT_STATUS_INCOMPATIBLE = 1 # The detected GoPro is not HeroBus compatible -enums['GOPRO_HEARTBEAT_STATUS'][1] = EnumEntry('GOPRO_HEARTBEAT_STATUS_INCOMPATIBLE', '''The detected GoPro is not HeroBus compatible''') -GOPRO_HEARTBEAT_STATUS_CONNECTED = 2 # A HeroBus compatible GoPro is connected -enums['GOPRO_HEARTBEAT_STATUS'][2] = EnumEntry('GOPRO_HEARTBEAT_STATUS_CONNECTED', '''A HeroBus compatible GoPro is connected''') -GOPRO_HEARTBEAT_STATUS_ERROR = 3 # An unrecoverable error was encountered with the connected GoPro, it - # may require a power cycle -enums['GOPRO_HEARTBEAT_STATUS'][3] = EnumEntry('GOPRO_HEARTBEAT_STATUS_ERROR', '''An unrecoverable error was encountered with the connected GoPro, it may require a power cycle''') -GOPRO_HEARTBEAT_STATUS_ENUM_END = 4 # -enums['GOPRO_HEARTBEAT_STATUS'][4] = EnumEntry('GOPRO_HEARTBEAT_STATUS_ENUM_END', '''''') - -# GOPRO_HEARTBEAT_FLAGS -enums['GOPRO_HEARTBEAT_FLAGS'] = {} -GOPRO_FLAG_RECORDING = 1 # GoPro is currently recording -enums['GOPRO_HEARTBEAT_FLAGS'][1] = EnumEntry('GOPRO_FLAG_RECORDING', '''GoPro is currently recording''') -GOPRO_HEARTBEAT_FLAGS_ENUM_END = 2 # -enums['GOPRO_HEARTBEAT_FLAGS'][2] = EnumEntry('GOPRO_HEARTBEAT_FLAGS_ENUM_END', '''''') - -# GOPRO_REQUEST_STATUS -enums['GOPRO_REQUEST_STATUS'] = {} -GOPRO_REQUEST_SUCCESS = 0 # The write message with ID indicated succeeded -enums['GOPRO_REQUEST_STATUS'][0] = EnumEntry('GOPRO_REQUEST_SUCCESS', '''The write message with ID indicated succeeded''') -GOPRO_REQUEST_FAILED = 1 # The write message with ID indicated failed -enums['GOPRO_REQUEST_STATUS'][1] = EnumEntry('GOPRO_REQUEST_FAILED', '''The write message with ID indicated failed''') -GOPRO_REQUEST_STATUS_ENUM_END = 2 # -enums['GOPRO_REQUEST_STATUS'][2] = EnumEntry('GOPRO_REQUEST_STATUS_ENUM_END', '''''') - -# GOPRO_COMMAND -enums['GOPRO_COMMAND'] = {} -GOPRO_COMMAND_POWER = 0 # (Get/Set) -enums['GOPRO_COMMAND'][0] = EnumEntry('GOPRO_COMMAND_POWER', '''(Get/Set)''') -GOPRO_COMMAND_CAPTURE_MODE = 1 # (Get/Set) -enums['GOPRO_COMMAND'][1] = EnumEntry('GOPRO_COMMAND_CAPTURE_MODE', '''(Get/Set)''') -GOPRO_COMMAND_SHUTTER = 2 # (___/Set) -enums['GOPRO_COMMAND'][2] = EnumEntry('GOPRO_COMMAND_SHUTTER', '''(___/Set)''') -GOPRO_COMMAND_BATTERY = 3 # (Get/___) -enums['GOPRO_COMMAND'][3] = EnumEntry('GOPRO_COMMAND_BATTERY', '''(Get/___)''') -GOPRO_COMMAND_MODEL = 4 # (Get/___) -enums['GOPRO_COMMAND'][4] = EnumEntry('GOPRO_COMMAND_MODEL', '''(Get/___)''') -GOPRO_COMMAND_VIDEO_SETTINGS = 5 # (Get/Set) -enums['GOPRO_COMMAND'][5] = EnumEntry('GOPRO_COMMAND_VIDEO_SETTINGS', '''(Get/Set)''') -GOPRO_COMMAND_LOW_LIGHT = 6 # (Get/Set) -enums['GOPRO_COMMAND'][6] = EnumEntry('GOPRO_COMMAND_LOW_LIGHT', '''(Get/Set)''') -GOPRO_COMMAND_PHOTO_RESOLUTION = 7 # (Get/Set) -enums['GOPRO_COMMAND'][7] = EnumEntry('GOPRO_COMMAND_PHOTO_RESOLUTION', '''(Get/Set)''') -GOPRO_COMMAND_PHOTO_BURST_RATE = 8 # (Get/Set) -enums['GOPRO_COMMAND'][8] = EnumEntry('GOPRO_COMMAND_PHOTO_BURST_RATE', '''(Get/Set)''') -GOPRO_COMMAND_PROTUNE = 9 # (Get/Set) -enums['GOPRO_COMMAND'][9] = EnumEntry('GOPRO_COMMAND_PROTUNE', '''(Get/Set)''') -GOPRO_COMMAND_PROTUNE_WHITE_BALANCE = 10 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][10] = EnumEntry('GOPRO_COMMAND_PROTUNE_WHITE_BALANCE', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_COLOUR = 11 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][11] = EnumEntry('GOPRO_COMMAND_PROTUNE_COLOUR', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_GAIN = 12 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][12] = EnumEntry('GOPRO_COMMAND_PROTUNE_GAIN', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_SHARPNESS = 13 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][13] = EnumEntry('GOPRO_COMMAND_PROTUNE_SHARPNESS', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_EXPOSURE = 14 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][14] = EnumEntry('GOPRO_COMMAND_PROTUNE_EXPOSURE', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_TIME = 15 # (Get/Set) -enums['GOPRO_COMMAND'][15] = EnumEntry('GOPRO_COMMAND_TIME', '''(Get/Set)''') -GOPRO_COMMAND_CHARGING = 16 # (Get/Set) -enums['GOPRO_COMMAND'][16] = EnumEntry('GOPRO_COMMAND_CHARGING', '''(Get/Set)''') -GOPRO_COMMAND_ENUM_END = 17 # -enums['GOPRO_COMMAND'][17] = EnumEntry('GOPRO_COMMAND_ENUM_END', '''''') - -# GOPRO_CAPTURE_MODE -enums['GOPRO_CAPTURE_MODE'] = {} -GOPRO_CAPTURE_MODE_VIDEO = 0 # Video mode -enums['GOPRO_CAPTURE_MODE'][0] = EnumEntry('GOPRO_CAPTURE_MODE_VIDEO', '''Video mode''') -GOPRO_CAPTURE_MODE_PHOTO = 1 # Photo mode -enums['GOPRO_CAPTURE_MODE'][1] = EnumEntry('GOPRO_CAPTURE_MODE_PHOTO', '''Photo mode''') -GOPRO_CAPTURE_MODE_BURST = 2 # Burst mode, hero 3+ only -enums['GOPRO_CAPTURE_MODE'][2] = EnumEntry('GOPRO_CAPTURE_MODE_BURST', '''Burst mode, hero 3+ only''') -GOPRO_CAPTURE_MODE_TIME_LAPSE = 3 # Time lapse mode, hero 3+ only -enums['GOPRO_CAPTURE_MODE'][3] = EnumEntry('GOPRO_CAPTURE_MODE_TIME_LAPSE', '''Time lapse mode, hero 3+ only''') -GOPRO_CAPTURE_MODE_MULTI_SHOT = 4 # Multi shot mode, hero 4 only -enums['GOPRO_CAPTURE_MODE'][4] = EnumEntry('GOPRO_CAPTURE_MODE_MULTI_SHOT', '''Multi shot mode, hero 4 only''') -GOPRO_CAPTURE_MODE_PLAYBACK = 5 # Playback mode, hero 4 only, silver only except when LCD or HDMI is - # connected to black -enums['GOPRO_CAPTURE_MODE'][5] = EnumEntry('GOPRO_CAPTURE_MODE_PLAYBACK', '''Playback mode, hero 4 only, silver only except when LCD or HDMI is connected to black''') -GOPRO_CAPTURE_MODE_SETUP = 6 # Playback mode, hero 4 only -enums['GOPRO_CAPTURE_MODE'][6] = EnumEntry('GOPRO_CAPTURE_MODE_SETUP', '''Playback mode, hero 4 only''') -GOPRO_CAPTURE_MODE_UNKNOWN = 255 # Mode not yet known -enums['GOPRO_CAPTURE_MODE'][255] = EnumEntry('GOPRO_CAPTURE_MODE_UNKNOWN', '''Mode not yet known''') -GOPRO_CAPTURE_MODE_ENUM_END = 256 # -enums['GOPRO_CAPTURE_MODE'][256] = EnumEntry('GOPRO_CAPTURE_MODE_ENUM_END', '''''') - -# GOPRO_RESOLUTION -enums['GOPRO_RESOLUTION'] = {} -GOPRO_RESOLUTION_480p = 0 # 848 x 480 (480p) -enums['GOPRO_RESOLUTION'][0] = EnumEntry('GOPRO_RESOLUTION_480p', '''848 x 480 (480p)''') -GOPRO_RESOLUTION_720p = 1 # 1280 x 720 (720p) -enums['GOPRO_RESOLUTION'][1] = EnumEntry('GOPRO_RESOLUTION_720p', '''1280 x 720 (720p)''') -GOPRO_RESOLUTION_960p = 2 # 1280 x 960 (960p) -enums['GOPRO_RESOLUTION'][2] = EnumEntry('GOPRO_RESOLUTION_960p', '''1280 x 960 (960p)''') -GOPRO_RESOLUTION_1080p = 3 # 1920 x 1080 (1080p) -enums['GOPRO_RESOLUTION'][3] = EnumEntry('GOPRO_RESOLUTION_1080p', '''1920 x 1080 (1080p)''') -GOPRO_RESOLUTION_1440p = 4 # 1920 x 1440 (1440p) -enums['GOPRO_RESOLUTION'][4] = EnumEntry('GOPRO_RESOLUTION_1440p', '''1920 x 1440 (1440p)''') -GOPRO_RESOLUTION_2_7k_17_9 = 5 # 2704 x 1440 (2.7k-17:9) -enums['GOPRO_RESOLUTION'][5] = EnumEntry('GOPRO_RESOLUTION_2_7k_17_9', '''2704 x 1440 (2.7k-17:9)''') -GOPRO_RESOLUTION_2_7k_16_9 = 6 # 2704 x 1524 (2.7k-16:9) -enums['GOPRO_RESOLUTION'][6] = EnumEntry('GOPRO_RESOLUTION_2_7k_16_9', '''2704 x 1524 (2.7k-16:9)''') -GOPRO_RESOLUTION_2_7k_4_3 = 7 # 2704 x 2028 (2.7k-4:3) -enums['GOPRO_RESOLUTION'][7] = EnumEntry('GOPRO_RESOLUTION_2_7k_4_3', '''2704 x 2028 (2.7k-4:3)''') -GOPRO_RESOLUTION_4k_16_9 = 8 # 3840 x 2160 (4k-16:9) -enums['GOPRO_RESOLUTION'][8] = EnumEntry('GOPRO_RESOLUTION_4k_16_9', '''3840 x 2160 (4k-16:9)''') -GOPRO_RESOLUTION_4k_17_9 = 9 # 4096 x 2160 (4k-17:9) -enums['GOPRO_RESOLUTION'][9] = EnumEntry('GOPRO_RESOLUTION_4k_17_9', '''4096 x 2160 (4k-17:9)''') -GOPRO_RESOLUTION_720p_SUPERVIEW = 10 # 1280 x 720 (720p-SuperView) -enums['GOPRO_RESOLUTION'][10] = EnumEntry('GOPRO_RESOLUTION_720p_SUPERVIEW', '''1280 x 720 (720p-SuperView)''') -GOPRO_RESOLUTION_1080p_SUPERVIEW = 11 # 1920 x 1080 (1080p-SuperView) -enums['GOPRO_RESOLUTION'][11] = EnumEntry('GOPRO_RESOLUTION_1080p_SUPERVIEW', '''1920 x 1080 (1080p-SuperView)''') -GOPRO_RESOLUTION_2_7k_SUPERVIEW = 12 # 2704 x 1520 (2.7k-SuperView) -enums['GOPRO_RESOLUTION'][12] = EnumEntry('GOPRO_RESOLUTION_2_7k_SUPERVIEW', '''2704 x 1520 (2.7k-SuperView)''') -GOPRO_RESOLUTION_4k_SUPERVIEW = 13 # 3840 x 2160 (4k-SuperView) -enums['GOPRO_RESOLUTION'][13] = EnumEntry('GOPRO_RESOLUTION_4k_SUPERVIEW', '''3840 x 2160 (4k-SuperView)''') -GOPRO_RESOLUTION_ENUM_END = 14 # -enums['GOPRO_RESOLUTION'][14] = EnumEntry('GOPRO_RESOLUTION_ENUM_END', '''''') - -# GOPRO_FRAME_RATE -enums['GOPRO_FRAME_RATE'] = {} -GOPRO_FRAME_RATE_12 = 0 # 12 FPS -enums['GOPRO_FRAME_RATE'][0] = EnumEntry('GOPRO_FRAME_RATE_12', '''12 FPS''') -GOPRO_FRAME_RATE_15 = 1 # 15 FPS -enums['GOPRO_FRAME_RATE'][1] = EnumEntry('GOPRO_FRAME_RATE_15', '''15 FPS''') -GOPRO_FRAME_RATE_24 = 2 # 24 FPS -enums['GOPRO_FRAME_RATE'][2] = EnumEntry('GOPRO_FRAME_RATE_24', '''24 FPS''') -GOPRO_FRAME_RATE_25 = 3 # 25 FPS -enums['GOPRO_FRAME_RATE'][3] = EnumEntry('GOPRO_FRAME_RATE_25', '''25 FPS''') -GOPRO_FRAME_RATE_30 = 4 # 30 FPS -enums['GOPRO_FRAME_RATE'][4] = EnumEntry('GOPRO_FRAME_RATE_30', '''30 FPS''') -GOPRO_FRAME_RATE_48 = 5 # 48 FPS -enums['GOPRO_FRAME_RATE'][5] = EnumEntry('GOPRO_FRAME_RATE_48', '''48 FPS''') -GOPRO_FRAME_RATE_50 = 6 # 50 FPS -enums['GOPRO_FRAME_RATE'][6] = EnumEntry('GOPRO_FRAME_RATE_50', '''50 FPS''') -GOPRO_FRAME_RATE_60 = 7 # 60 FPS -enums['GOPRO_FRAME_RATE'][7] = EnumEntry('GOPRO_FRAME_RATE_60', '''60 FPS''') -GOPRO_FRAME_RATE_80 = 8 # 80 FPS -enums['GOPRO_FRAME_RATE'][8] = EnumEntry('GOPRO_FRAME_RATE_80', '''80 FPS''') -GOPRO_FRAME_RATE_90 = 9 # 90 FPS -enums['GOPRO_FRAME_RATE'][9] = EnumEntry('GOPRO_FRAME_RATE_90', '''90 FPS''') -GOPRO_FRAME_RATE_100 = 10 # 100 FPS -enums['GOPRO_FRAME_RATE'][10] = EnumEntry('GOPRO_FRAME_RATE_100', '''100 FPS''') -GOPRO_FRAME_RATE_120 = 11 # 120 FPS -enums['GOPRO_FRAME_RATE'][11] = EnumEntry('GOPRO_FRAME_RATE_120', '''120 FPS''') -GOPRO_FRAME_RATE_240 = 12 # 240 FPS -enums['GOPRO_FRAME_RATE'][12] = EnumEntry('GOPRO_FRAME_RATE_240', '''240 FPS''') -GOPRO_FRAME_RATE_12_5 = 13 # 12.5 FPS -enums['GOPRO_FRAME_RATE'][13] = EnumEntry('GOPRO_FRAME_RATE_12_5', '''12.5 FPS''') -GOPRO_FRAME_RATE_ENUM_END = 14 # -enums['GOPRO_FRAME_RATE'][14] = EnumEntry('GOPRO_FRAME_RATE_ENUM_END', '''''') - -# GOPRO_FIELD_OF_VIEW -enums['GOPRO_FIELD_OF_VIEW'] = {} -GOPRO_FIELD_OF_VIEW_WIDE = 0 # 0x00: Wide -enums['GOPRO_FIELD_OF_VIEW'][0] = EnumEntry('GOPRO_FIELD_OF_VIEW_WIDE', '''0x00: Wide''') -GOPRO_FIELD_OF_VIEW_MEDIUM = 1 # 0x01: Medium -enums['GOPRO_FIELD_OF_VIEW'][1] = EnumEntry('GOPRO_FIELD_OF_VIEW_MEDIUM', '''0x01: Medium''') -GOPRO_FIELD_OF_VIEW_NARROW = 2 # 0x02: Narrow -enums['GOPRO_FIELD_OF_VIEW'][2] = EnumEntry('GOPRO_FIELD_OF_VIEW_NARROW', '''0x02: Narrow''') -GOPRO_FIELD_OF_VIEW_ENUM_END = 3 # -enums['GOPRO_FIELD_OF_VIEW'][3] = EnumEntry('GOPRO_FIELD_OF_VIEW_ENUM_END', '''''') - -# GOPRO_VIDEO_SETTINGS_FLAGS -enums['GOPRO_VIDEO_SETTINGS_FLAGS'] = {} -GOPRO_VIDEO_SETTINGS_TV_MODE = 1 # 0=NTSC, 1=PAL -enums['GOPRO_VIDEO_SETTINGS_FLAGS'][1] = EnumEntry('GOPRO_VIDEO_SETTINGS_TV_MODE', '''0=NTSC, 1=PAL''') -GOPRO_VIDEO_SETTINGS_FLAGS_ENUM_END = 2 # -enums['GOPRO_VIDEO_SETTINGS_FLAGS'][2] = EnumEntry('GOPRO_VIDEO_SETTINGS_FLAGS_ENUM_END', '''''') - -# GOPRO_PHOTO_RESOLUTION -enums['GOPRO_PHOTO_RESOLUTION'] = {} -GOPRO_PHOTO_RESOLUTION_5MP_MEDIUM = 0 # 5MP Medium -enums['GOPRO_PHOTO_RESOLUTION'][0] = EnumEntry('GOPRO_PHOTO_RESOLUTION_5MP_MEDIUM', '''5MP Medium''') -GOPRO_PHOTO_RESOLUTION_7MP_MEDIUM = 1 # 7MP Medium -enums['GOPRO_PHOTO_RESOLUTION'][1] = EnumEntry('GOPRO_PHOTO_RESOLUTION_7MP_MEDIUM', '''7MP Medium''') -GOPRO_PHOTO_RESOLUTION_7MP_WIDE = 2 # 7MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][2] = EnumEntry('GOPRO_PHOTO_RESOLUTION_7MP_WIDE', '''7MP Wide''') -GOPRO_PHOTO_RESOLUTION_10MP_WIDE = 3 # 10MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][3] = EnumEntry('GOPRO_PHOTO_RESOLUTION_10MP_WIDE', '''10MP Wide''') -GOPRO_PHOTO_RESOLUTION_12MP_WIDE = 4 # 12MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][4] = EnumEntry('GOPRO_PHOTO_RESOLUTION_12MP_WIDE', '''12MP Wide''') -GOPRO_PHOTO_RESOLUTION_ENUM_END = 5 # -enums['GOPRO_PHOTO_RESOLUTION'][5] = EnumEntry('GOPRO_PHOTO_RESOLUTION_ENUM_END', '''''') - -# GOPRO_PROTUNE_WHITE_BALANCE -enums['GOPRO_PROTUNE_WHITE_BALANCE'] = {} -GOPRO_PROTUNE_WHITE_BALANCE_AUTO = 0 # Auto -enums['GOPRO_PROTUNE_WHITE_BALANCE'][0] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_AUTO', '''Auto''') -GOPRO_PROTUNE_WHITE_BALANCE_3000K = 1 # 3000K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][1] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_3000K', '''3000K''') -GOPRO_PROTUNE_WHITE_BALANCE_5500K = 2 # 5500K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][2] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_5500K', '''5500K''') -GOPRO_PROTUNE_WHITE_BALANCE_6500K = 3 # 6500K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][3] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_6500K', '''6500K''') -GOPRO_PROTUNE_WHITE_BALANCE_RAW = 4 # Camera Raw -enums['GOPRO_PROTUNE_WHITE_BALANCE'][4] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_RAW', '''Camera Raw''') -GOPRO_PROTUNE_WHITE_BALANCE_ENUM_END = 5 # -enums['GOPRO_PROTUNE_WHITE_BALANCE'][5] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_ENUM_END', '''''') - -# GOPRO_PROTUNE_COLOUR -enums['GOPRO_PROTUNE_COLOUR'] = {} -GOPRO_PROTUNE_COLOUR_STANDARD = 0 # Auto -enums['GOPRO_PROTUNE_COLOUR'][0] = EnumEntry('GOPRO_PROTUNE_COLOUR_STANDARD', '''Auto''') -GOPRO_PROTUNE_COLOUR_NEUTRAL = 1 # Neutral -enums['GOPRO_PROTUNE_COLOUR'][1] = EnumEntry('GOPRO_PROTUNE_COLOUR_NEUTRAL', '''Neutral''') -GOPRO_PROTUNE_COLOUR_ENUM_END = 2 # -enums['GOPRO_PROTUNE_COLOUR'][2] = EnumEntry('GOPRO_PROTUNE_COLOUR_ENUM_END', '''''') - -# GOPRO_PROTUNE_GAIN -enums['GOPRO_PROTUNE_GAIN'] = {} -GOPRO_PROTUNE_GAIN_400 = 0 # ISO 400 -enums['GOPRO_PROTUNE_GAIN'][0] = EnumEntry('GOPRO_PROTUNE_GAIN_400', '''ISO 400''') -GOPRO_PROTUNE_GAIN_800 = 1 # ISO 800 (Only Hero 4) -enums['GOPRO_PROTUNE_GAIN'][1] = EnumEntry('GOPRO_PROTUNE_GAIN_800', '''ISO 800 (Only Hero 4)''') -GOPRO_PROTUNE_GAIN_1600 = 2 # ISO 1600 -enums['GOPRO_PROTUNE_GAIN'][2] = EnumEntry('GOPRO_PROTUNE_GAIN_1600', '''ISO 1600''') -GOPRO_PROTUNE_GAIN_3200 = 3 # ISO 3200 (Only Hero 4) -enums['GOPRO_PROTUNE_GAIN'][3] = EnumEntry('GOPRO_PROTUNE_GAIN_3200', '''ISO 3200 (Only Hero 4)''') -GOPRO_PROTUNE_GAIN_6400 = 4 # ISO 6400 -enums['GOPRO_PROTUNE_GAIN'][4] = EnumEntry('GOPRO_PROTUNE_GAIN_6400', '''ISO 6400''') -GOPRO_PROTUNE_GAIN_ENUM_END = 5 # -enums['GOPRO_PROTUNE_GAIN'][5] = EnumEntry('GOPRO_PROTUNE_GAIN_ENUM_END', '''''') - -# GOPRO_PROTUNE_SHARPNESS -enums['GOPRO_PROTUNE_SHARPNESS'] = {} -GOPRO_PROTUNE_SHARPNESS_LOW = 0 # Low Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][0] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_LOW', '''Low Sharpness''') -GOPRO_PROTUNE_SHARPNESS_MEDIUM = 1 # Medium Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][1] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_MEDIUM', '''Medium Sharpness''') -GOPRO_PROTUNE_SHARPNESS_HIGH = 2 # High Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][2] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_HIGH', '''High Sharpness''') -GOPRO_PROTUNE_SHARPNESS_ENUM_END = 3 # -enums['GOPRO_PROTUNE_SHARPNESS'][3] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_ENUM_END', '''''') - -# GOPRO_PROTUNE_EXPOSURE -enums['GOPRO_PROTUNE_EXPOSURE'] = {} -GOPRO_PROTUNE_EXPOSURE_NEG_5_0 = 0 # -5.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][0] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_5_0', '''-5.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_4_5 = 1 # -4.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][1] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_4_5', '''-4.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_4_0 = 2 # -4.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][2] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_4_0', '''-4.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_3_5 = 3 # -3.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][3] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_3_5', '''-3.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_3_0 = 4 # -3.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][4] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_3_0', '''-3.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_2_5 = 5 # -2.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][5] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_2_5', '''-2.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_2_0 = 6 # -2.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][6] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_2_0', '''-2.0 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_1_5 = 7 # -1.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][7] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_1_5', '''-1.5 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_1_0 = 8 # -1.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][8] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_1_0', '''-1.0 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_0_5 = 9 # -0.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][9] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_0_5', '''-0.5 EV''') -GOPRO_PROTUNE_EXPOSURE_ZERO = 10 # 0.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][10] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_ZERO', '''0.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_0_5 = 11 # +0.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][11] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_0_5', '''+0.5 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_1_0 = 12 # +1.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][12] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_1_0', '''+1.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_1_5 = 13 # +1.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][13] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_1_5', '''+1.5 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_2_0 = 14 # +2.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][14] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_2_0', '''+2.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_2_5 = 15 # +2.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][15] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_2_5', '''+2.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_3_0 = 16 # +3.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][16] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_3_0', '''+3.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_3_5 = 17 # +3.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][17] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_3_5', '''+3.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_4_0 = 18 # +4.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][18] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_4_0', '''+4.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_4_5 = 19 # +4.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][19] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_4_5', '''+4.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_5_0 = 20 # +5.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][20] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_5_0', '''+5.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_ENUM_END = 21 # -enums['GOPRO_PROTUNE_EXPOSURE'][21] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_ENUM_END', '''''') - -# GOPRO_CHARGING -enums['GOPRO_CHARGING'] = {} -GOPRO_CHARGING_DISABLED = 0 # Charging disabled -enums['GOPRO_CHARGING'][0] = EnumEntry('GOPRO_CHARGING_DISABLED', '''Charging disabled''') -GOPRO_CHARGING_ENABLED = 1 # Charging enabled -enums['GOPRO_CHARGING'][1] = EnumEntry('GOPRO_CHARGING_ENABLED', '''Charging enabled''') -GOPRO_CHARGING_ENUM_END = 2 # -enums['GOPRO_CHARGING'][2] = EnumEntry('GOPRO_CHARGING_ENUM_END', '''''') - -# GOPRO_MODEL -enums['GOPRO_MODEL'] = {} -GOPRO_MODEL_UNKNOWN = 0 # Unknown gopro model -enums['GOPRO_MODEL'][0] = EnumEntry('GOPRO_MODEL_UNKNOWN', '''Unknown gopro model''') -GOPRO_MODEL_HERO_3_PLUS_SILVER = 1 # Hero 3+ Silver (HeroBus not supported by GoPro) -enums['GOPRO_MODEL'][1] = EnumEntry('GOPRO_MODEL_HERO_3_PLUS_SILVER', '''Hero 3+ Silver (HeroBus not supported by GoPro)''') -GOPRO_MODEL_HERO_3_PLUS_BLACK = 2 # Hero 3+ Black -enums['GOPRO_MODEL'][2] = EnumEntry('GOPRO_MODEL_HERO_3_PLUS_BLACK', '''Hero 3+ Black''') -GOPRO_MODEL_HERO_4_SILVER = 3 # Hero 4 Silver -enums['GOPRO_MODEL'][3] = EnumEntry('GOPRO_MODEL_HERO_4_SILVER', '''Hero 4 Silver''') -GOPRO_MODEL_HERO_4_BLACK = 4 # Hero 4 Black -enums['GOPRO_MODEL'][4] = EnumEntry('GOPRO_MODEL_HERO_4_BLACK', '''Hero 4 Black''') -GOPRO_MODEL_ENUM_END = 5 # -enums['GOPRO_MODEL'][5] = EnumEntry('GOPRO_MODEL_ENUM_END', '''''') - -# GOPRO_BURST_RATE -enums['GOPRO_BURST_RATE'] = {} -GOPRO_BURST_RATE_3_IN_1_SECOND = 0 # 3 Shots / 1 Second -enums['GOPRO_BURST_RATE'][0] = EnumEntry('GOPRO_BURST_RATE_3_IN_1_SECOND', '''3 Shots / 1 Second''') -GOPRO_BURST_RATE_5_IN_1_SECOND = 1 # 5 Shots / 1 Second -enums['GOPRO_BURST_RATE'][1] = EnumEntry('GOPRO_BURST_RATE_5_IN_1_SECOND', '''5 Shots / 1 Second''') -GOPRO_BURST_RATE_10_IN_1_SECOND = 2 # 10 Shots / 1 Second -enums['GOPRO_BURST_RATE'][2] = EnumEntry('GOPRO_BURST_RATE_10_IN_1_SECOND', '''10 Shots / 1 Second''') -GOPRO_BURST_RATE_10_IN_2_SECOND = 3 # 10 Shots / 2 Second -enums['GOPRO_BURST_RATE'][3] = EnumEntry('GOPRO_BURST_RATE_10_IN_2_SECOND', '''10 Shots / 2 Second''') -GOPRO_BURST_RATE_10_IN_3_SECOND = 4 # 10 Shots / 3 Second (Hero 4 Only) -enums['GOPRO_BURST_RATE'][4] = EnumEntry('GOPRO_BURST_RATE_10_IN_3_SECOND', '''10 Shots / 3 Second (Hero 4 Only)''') -GOPRO_BURST_RATE_30_IN_1_SECOND = 5 # 30 Shots / 1 Second -enums['GOPRO_BURST_RATE'][5] = EnumEntry('GOPRO_BURST_RATE_30_IN_1_SECOND', '''30 Shots / 1 Second''') -GOPRO_BURST_RATE_30_IN_2_SECOND = 6 # 30 Shots / 2 Second -enums['GOPRO_BURST_RATE'][6] = EnumEntry('GOPRO_BURST_RATE_30_IN_2_SECOND', '''30 Shots / 2 Second''') -GOPRO_BURST_RATE_30_IN_3_SECOND = 7 # 30 Shots / 3 Second -enums['GOPRO_BURST_RATE'][7] = EnumEntry('GOPRO_BURST_RATE_30_IN_3_SECOND', '''30 Shots / 3 Second''') -GOPRO_BURST_RATE_30_IN_6_SECOND = 8 # 30 Shots / 6 Second -enums['GOPRO_BURST_RATE'][8] = EnumEntry('GOPRO_BURST_RATE_30_IN_6_SECOND', '''30 Shots / 6 Second''') -GOPRO_BURST_RATE_ENUM_END = 9 # -enums['GOPRO_BURST_RATE'][9] = EnumEntry('GOPRO_BURST_RATE_ENUM_END', '''''') - -# LED_CONTROL_PATTERN -enums['LED_CONTROL_PATTERN'] = {} -LED_CONTROL_PATTERN_OFF = 0 # LED patterns off (return control to regular vehicle control) -enums['LED_CONTROL_PATTERN'][0] = EnumEntry('LED_CONTROL_PATTERN_OFF', '''LED patterns off (return control to regular vehicle control)''') -LED_CONTROL_PATTERN_FIRMWAREUPDATE = 1 # LEDs show pattern during firmware update -enums['LED_CONTROL_PATTERN'][1] = EnumEntry('LED_CONTROL_PATTERN_FIRMWAREUPDATE', '''LEDs show pattern during firmware update''') -LED_CONTROL_PATTERN_CUSTOM = 255 # Custom Pattern using custom bytes fields -enums['LED_CONTROL_PATTERN'][255] = EnumEntry('LED_CONTROL_PATTERN_CUSTOM', '''Custom Pattern using custom bytes fields''') -LED_CONTROL_PATTERN_ENUM_END = 256 # -enums['LED_CONTROL_PATTERN'][256] = EnumEntry('LED_CONTROL_PATTERN_ENUM_END', '''''') - -# EKF_STATUS_FLAGS -enums['EKF_STATUS_FLAGS'] = {} -EKF_ATTITUDE = 1 # set if EKF's attitude estimate is good -enums['EKF_STATUS_FLAGS'][1] = EnumEntry('EKF_ATTITUDE', '''set if EKF's attitude estimate is good''') -EKF_VELOCITY_HORIZ = 2 # set if EKF's horizontal velocity estimate is good -enums['EKF_STATUS_FLAGS'][2] = EnumEntry('EKF_VELOCITY_HORIZ', '''set if EKF's horizontal velocity estimate is good''') -EKF_VELOCITY_VERT = 4 # set if EKF's vertical velocity estimate is good -enums['EKF_STATUS_FLAGS'][4] = EnumEntry('EKF_VELOCITY_VERT', '''set if EKF's vertical velocity estimate is good''') -EKF_POS_HORIZ_REL = 8 # set if EKF's horizontal position (relative) estimate is good -enums['EKF_STATUS_FLAGS'][8] = EnumEntry('EKF_POS_HORIZ_REL', '''set if EKF's horizontal position (relative) estimate is good''') -EKF_POS_HORIZ_ABS = 16 # set if EKF's horizontal position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][16] = EnumEntry('EKF_POS_HORIZ_ABS', '''set if EKF's horizontal position (absolute) estimate is good''') -EKF_POS_VERT_ABS = 32 # set if EKF's vertical position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][32] = EnumEntry('EKF_POS_VERT_ABS', '''set if EKF's vertical position (absolute) estimate is good''') -EKF_POS_VERT_AGL = 64 # set if EKF's vertical position (above ground) estimate is good -enums['EKF_STATUS_FLAGS'][64] = EnumEntry('EKF_POS_VERT_AGL', '''set if EKF's vertical position (above ground) estimate is good''') -EKF_CONST_POS_MODE = 128 # EKF is in constant position mode and does not know it's absolute or - # relative position -enums['EKF_STATUS_FLAGS'][128] = EnumEntry('EKF_CONST_POS_MODE', '''EKF is in constant position mode and does not know it's absolute or relative position''') -EKF_PRED_POS_HORIZ_REL = 256 # set if EKF's predicted horizontal position (relative) estimate is good -enums['EKF_STATUS_FLAGS'][256] = EnumEntry('EKF_PRED_POS_HORIZ_REL', '''set if EKF's predicted horizontal position (relative) estimate is good''') -EKF_PRED_POS_HORIZ_ABS = 512 # set if EKF's predicted horizontal position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][512] = EnumEntry('EKF_PRED_POS_HORIZ_ABS', '''set if EKF's predicted horizontal position (absolute) estimate is good''') -EKF_STATUS_FLAGS_ENUM_END = 513 # -enums['EKF_STATUS_FLAGS'][513] = EnumEntry('EKF_STATUS_FLAGS_ENUM_END', '''''') - -# PID_TUNING_AXIS -enums['PID_TUNING_AXIS'] = {} -PID_TUNING_ROLL = 1 # -enums['PID_TUNING_AXIS'][1] = EnumEntry('PID_TUNING_ROLL', '''''') -PID_TUNING_PITCH = 2 # -enums['PID_TUNING_AXIS'][2] = EnumEntry('PID_TUNING_PITCH', '''''') -PID_TUNING_YAW = 3 # -enums['PID_TUNING_AXIS'][3] = EnumEntry('PID_TUNING_YAW', '''''') -PID_TUNING_ACCZ = 4 # -enums['PID_TUNING_AXIS'][4] = EnumEntry('PID_TUNING_ACCZ', '''''') -PID_TUNING_STEER = 5 # -enums['PID_TUNING_AXIS'][5] = EnumEntry('PID_TUNING_STEER', '''''') -PID_TUNING_AXIS_ENUM_END = 6 # -enums['PID_TUNING_AXIS'][6] = EnumEntry('PID_TUNING_AXIS_ENUM_END', '''''') - -# MAG_CAL_STATUS -enums['MAG_CAL_STATUS'] = {} -MAG_CAL_NOT_STARTED = 0 # -enums['MAG_CAL_STATUS'][0] = EnumEntry('MAG_CAL_NOT_STARTED', '''''') -MAG_CAL_WAITING_TO_START = 1 # -enums['MAG_CAL_STATUS'][1] = EnumEntry('MAG_CAL_WAITING_TO_START', '''''') -MAG_CAL_RUNNING_STEP_ONE = 2 # -enums['MAG_CAL_STATUS'][2] = EnumEntry('MAG_CAL_RUNNING_STEP_ONE', '''''') -MAG_CAL_RUNNING_STEP_TWO = 3 # -enums['MAG_CAL_STATUS'][3] = EnumEntry('MAG_CAL_RUNNING_STEP_TWO', '''''') -MAG_CAL_SUCCESS = 4 # -enums['MAG_CAL_STATUS'][4] = EnumEntry('MAG_CAL_SUCCESS', '''''') -MAG_CAL_FAILED = 5 # -enums['MAG_CAL_STATUS'][5] = EnumEntry('MAG_CAL_FAILED', '''''') -MAG_CAL_STATUS_ENUM_END = 6 # -enums['MAG_CAL_STATUS'][6] = EnumEntry('MAG_CAL_STATUS_ENUM_END', '''''') - -# MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'] = {} -MAV_REMOTE_LOG_DATA_BLOCK_STOP = 2147483645 # UAV to stop sending DataFlash blocks -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483645] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_STOP', '''UAV to stop sending DataFlash blocks''') -MAV_REMOTE_LOG_DATA_BLOCK_START = 2147483646 # UAV to start sending DataFlash blocks -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483646] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_START', '''UAV to start sending DataFlash blocks''') -MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS_ENUM_END = 2147483647 # -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483647] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS_ENUM_END', '''''') - -# MAV_REMOTE_LOG_DATA_BLOCK_STATUSES -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'] = {} -MAV_REMOTE_LOG_DATA_BLOCK_NACK = 0 # This block has NOT been received -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][0] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_NACK', '''This block has NOT been received''') -MAV_REMOTE_LOG_DATA_BLOCK_ACK = 1 # This block has been received -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][1] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_ACK', '''This block has been received''') -MAV_REMOTE_LOG_DATA_BLOCK_STATUSES_ENUM_END = 2 # -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][2] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_STATUSES_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_DYNAMIC_STATE -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'] = {} -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_INTENT_CHANGE = 1 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][1] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_INTENT_CHANGE', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_AUTOPILOT_ENABLED = 2 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][2] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_AUTOPILOT_ENABLED', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_NICBARO_CROSSCHECKED = 4 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][4] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_NICBARO_CROSSCHECKED', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ON_GROUND = 8 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][8] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ON_GROUND', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_IDENT = 16 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][16] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_IDENT', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ENUM_END = 17 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][17] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_RF_SELECT -enums['UAVIONIX_ADSB_OUT_RF_SELECT'] = {} -UAVIONIX_ADSB_OUT_RF_SELECT_STANDBY = 0 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][0] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_STANDBY', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_RX_ENABLED = 1 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][1] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_RX_ENABLED', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_TX_ENABLED = 2 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][2] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_TX_ENABLED', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_ENUM_END = 3 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][3] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'] = {} -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_0 = 0 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][0] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_0', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_1 = 1 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][1] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_1', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_2D = 2 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][2] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_2D', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_3D = 3 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][3] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_3D', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_DGPS = 4 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][4] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_DGPS', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_RTK = 5 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][5] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_RTK', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_ENUM_END = 6 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][6] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_ENUM_END', '''''') - -# UAVIONIX_ADSB_RF_HEALTH -enums['UAVIONIX_ADSB_RF_HEALTH'] = {} -UAVIONIX_ADSB_RF_HEALTH_INITIALIZING = 0 # -enums['UAVIONIX_ADSB_RF_HEALTH'][0] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_INITIALIZING', '''''') -UAVIONIX_ADSB_RF_HEALTH_OK = 1 # -enums['UAVIONIX_ADSB_RF_HEALTH'][1] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_OK', '''''') -UAVIONIX_ADSB_RF_HEALTH_FAIL_TX = 2 # -enums['UAVIONIX_ADSB_RF_HEALTH'][2] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_FAIL_TX', '''''') -UAVIONIX_ADSB_RF_HEALTH_FAIL_RX = 16 # -enums['UAVIONIX_ADSB_RF_HEALTH'][16] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_FAIL_RX', '''''') -UAVIONIX_ADSB_RF_HEALTH_ENUM_END = 17 # -enums['UAVIONIX_ADSB_RF_HEALTH'][17] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'] = {} -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L15M_W23M = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L15M_W23M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25M_W28P5M = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25M_W28P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25_34M = 3 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][3] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25_34M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_33M = 4 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][4] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_33M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_38M = 5 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][5] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_38M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_39P5M = 6 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][6] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_39P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_45M = 7 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][7] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_45M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_45M = 8 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][8] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_45M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_52M = 9 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][9] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_52M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_59P5M = 10 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][10] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_59P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_67M = 11 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][11] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_67M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W72P5M = 12 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][12] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W72P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W80M = 13 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][13] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W80M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W80M = 14 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][14] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W80M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W90M = 15 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][15] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W90M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_ENUM_END = 16 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][16] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'] = {} -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_2M = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_2M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_4M = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_4M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_6M = 3 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][3] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_6M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_0M = 4 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][4] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_0M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_2M = 5 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][5] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_2M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_4M = 6 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][6] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_4M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_6M = 7 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][7] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_6M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_ENUM_END = 8 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][8] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'] = {} -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_APPLIED_BY_SENSOR = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_APPLIED_BY_SENSOR', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_ENUM_END = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_ENUM_END', '''''') - -# UAVIONIX_ADSB_EMERGENCY_STATUS -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'] = {} -UAVIONIX_ADSB_OUT_NO_EMERGENCY = 0 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][0] = EnumEntry('UAVIONIX_ADSB_OUT_NO_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_GENERAL_EMERGENCY = 1 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][1] = EnumEntry('UAVIONIX_ADSB_OUT_GENERAL_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_LIFEGUARD_EMERGENCY = 2 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][2] = EnumEntry('UAVIONIX_ADSB_OUT_LIFEGUARD_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_MINIMUM_FUEL_EMERGENCY = 3 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][3] = EnumEntry('UAVIONIX_ADSB_OUT_MINIMUM_FUEL_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_NO_COMM_EMERGENCY = 4 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][4] = EnumEntry('UAVIONIX_ADSB_OUT_NO_COMM_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_UNLAWFUL_INTERFERANCE_EMERGENCY = 5 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][5] = EnumEntry('UAVIONIX_ADSB_OUT_UNLAWFUL_INTERFERANCE_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_DOWNED_AIRCRAFT_EMERGENCY = 6 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][6] = EnumEntry('UAVIONIX_ADSB_OUT_DOWNED_AIRCRAFT_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_RESERVED = 7 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][7] = EnumEntry('UAVIONIX_ADSB_OUT_RESERVED', '''''') -UAVIONIX_ADSB_EMERGENCY_STATUS_ENUM_END = 8 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][8] = EnumEntry('UAVIONIX_ADSB_EMERGENCY_STATUS_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SENSOR_OFFSETS = 150 -MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151 -MAVLINK_MSG_ID_MEMINFO = 152 -MAVLINK_MSG_ID_AP_ADC = 153 -MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154 -MAVLINK_MSG_ID_DIGICAM_CONTROL = 155 -MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156 -MAVLINK_MSG_ID_MOUNT_CONTROL = 157 -MAVLINK_MSG_ID_MOUNT_STATUS = 158 -MAVLINK_MSG_ID_FENCE_POINT = 160 -MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161 -MAVLINK_MSG_ID_FENCE_STATUS = 162 -MAVLINK_MSG_ID_AHRS = 163 -MAVLINK_MSG_ID_SIMSTATE = 164 -MAVLINK_MSG_ID_HWSTATUS = 165 -MAVLINK_MSG_ID_RADIO = 166 -MAVLINK_MSG_ID_LIMITS_STATUS = 167 -MAVLINK_MSG_ID_WIND = 168 -MAVLINK_MSG_ID_DATA16 = 169 -MAVLINK_MSG_ID_DATA32 = 170 -MAVLINK_MSG_ID_DATA64 = 171 -MAVLINK_MSG_ID_DATA96 = 172 -MAVLINK_MSG_ID_RANGEFINDER = 173 -MAVLINK_MSG_ID_AIRSPEED_AUTOCAL = 174 -MAVLINK_MSG_ID_RALLY_POINT = 175 -MAVLINK_MSG_ID_RALLY_FETCH_POINT = 176 -MAVLINK_MSG_ID_COMPASSMOT_STATUS = 177 -MAVLINK_MSG_ID_AHRS2 = 178 -MAVLINK_MSG_ID_CAMERA_STATUS = 179 -MAVLINK_MSG_ID_CAMERA_FEEDBACK = 180 -MAVLINK_MSG_ID_BATTERY2 = 181 -MAVLINK_MSG_ID_AHRS3 = 182 -MAVLINK_MSG_ID_AUTOPILOT_VERSION_REQUEST = 183 -MAVLINK_MSG_ID_REMOTE_LOG_DATA_BLOCK = 184 -MAVLINK_MSG_ID_REMOTE_LOG_BLOCK_STATUS = 185 -MAVLINK_MSG_ID_LED_CONTROL = 186 -MAVLINK_MSG_ID_MAG_CAL_PROGRESS = 191 -MAVLINK_MSG_ID_MAG_CAL_REPORT = 192 -MAVLINK_MSG_ID_EKF_STATUS_REPORT = 193 -MAVLINK_MSG_ID_PID_TUNING = 194 -MAVLINK_MSG_ID_GIMBAL_REPORT = 200 -MAVLINK_MSG_ID_GIMBAL_CONTROL = 201 -MAVLINK_MSG_ID_GIMBAL_TORQUE_CMD_REPORT = 214 -MAVLINK_MSG_ID_GOPRO_HEARTBEAT = 215 -MAVLINK_MSG_ID_GOPRO_GET_REQUEST = 216 -MAVLINK_MSG_ID_GOPRO_GET_RESPONSE = 217 -MAVLINK_MSG_ID_GOPRO_SET_REQUEST = 218 -MAVLINK_MSG_ID_GOPRO_SET_RESPONSE = 219 -MAVLINK_MSG_ID_RPM = 226 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_sensor_offsets_message(MAVLink_message): - ''' - Offsets and calibrations values for hardware sensors. This - makes it easier to debug the calibration process. - ''' - id = MAVLINK_MSG_ID_SENSOR_OFFSETS - name = 'SENSOR_OFFSETS' - fieldnames = ['mag_ofs_x', 'mag_ofs_y', 'mag_ofs_z', 'mag_declination', 'raw_press', 'raw_temp', 'gyro_cal_x', 'gyro_cal_y', 'gyro_cal_z', 'accel_cal_x', 'accel_cal_y', 'accel_cal_z'] - ordered_fieldnames = [ 'mag_declination', 'raw_press', 'raw_temp', 'gyro_cal_x', 'gyro_cal_y', 'gyro_cal_z', 'accel_cal_x', 'accel_cal_y', 'accel_cal_z', 'mag_ofs_x', 'mag_ofs_y', 'mag_ofs_z' ] - format = ' MAV. Also - used to return a point from MAV -> GCS - ''' - id = MAVLINK_MSG_ID_FENCE_POINT - name = 'FENCE_POINT' - fieldnames = ['target_system', 'target_component', 'idx', 'count', 'lat', 'lng'] - ordered_fieldnames = [ 'lat', 'lng', 'target_system', 'target_component', 'idx', 'count' ] - format = ' MAV. Also - used to return a point from MAV -> GCS - ''' - id = MAVLINK_MSG_ID_RALLY_POINT - name = 'RALLY_POINT' - fieldnames = ['target_system', 'target_component', 'idx', 'count', 'lat', 'lng', 'alt', 'break_alt', 'land_dir', 'flags'] - ordered_fieldnames = [ 'lat', 'lng', 'alt', 'break_alt', 'land_dir', 'target_system', 'target_component', 'idx', 'count', 'flags' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point (float) - lng : Longitude of point (float) - - ''' - return MAVLink_fence_point_message(target_system, target_component, idx, count, lat, lng) - - def fence_point_send(self, target_system, target_component, idx, count, lat, lng, force_mavlink1=False): - ''' - A fence point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point (float) - lng : Longitude of point (float) - - ''' - return self.send(self.fence_point_encode(target_system, target_component, idx, count, lat, lng), force_mavlink1=force_mavlink1) - - def fence_fetch_point_encode(self, target_system, target_component, idx): - ''' - Request a current fence point from MAV - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - - ''' - return MAVLink_fence_fetch_point_message(target_system, target_component, idx) - - def fence_fetch_point_send(self, target_system, target_component, idx, force_mavlink1=False): - ''' - Request a current fence point from MAV - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - - ''' - return self.send(self.fence_fetch_point_encode(target_system, target_component, idx), force_mavlink1=force_mavlink1) - - def fence_status_encode(self, breach_status, breach_count, breach_type, breach_time): - ''' - Status of geo-fencing. Sent in extended status stream when fencing - enabled - - breach_status : 0 if currently inside fence, 1 if outside (uint8_t) - breach_count : number of fence breaches (uint16_t) - breach_type : last breach type (see FENCE_BREACH_* enum) (uint8_t) - breach_time : time of last breach in milliseconds since boot (uint32_t) - - ''' - return MAVLink_fence_status_message(breach_status, breach_count, breach_type, breach_time) - - def fence_status_send(self, breach_status, breach_count, breach_type, breach_time, force_mavlink1=False): - ''' - Status of geo-fencing. Sent in extended status stream when fencing - enabled - - breach_status : 0 if currently inside fence, 1 if outside (uint8_t) - breach_count : number of fence breaches (uint16_t) - breach_type : last breach type (see FENCE_BREACH_* enum) (uint8_t) - breach_time : time of last breach in milliseconds since boot (uint32_t) - - ''' - return self.send(self.fence_status_encode(breach_status, breach_count, breach_type, breach_time), force_mavlink1=force_mavlink1) - - def ahrs_encode(self, omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw): - ''' - Status of DCM attitude estimator - - omegaIx : X gyro drift estimate rad/s (float) - omegaIy : Y gyro drift estimate rad/s (float) - omegaIz : Z gyro drift estimate rad/s (float) - accel_weight : average accel_weight (float) - renorm_val : average renormalisation value (float) - error_rp : average error_roll_pitch value (float) - error_yaw : average error_yaw value (float) - - ''' - return MAVLink_ahrs_message(omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw) - - def ahrs_send(self, omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw, force_mavlink1=False): - ''' - Status of DCM attitude estimator - - omegaIx : X gyro drift estimate rad/s (float) - omegaIy : Y gyro drift estimate rad/s (float) - omegaIz : Z gyro drift estimate rad/s (float) - accel_weight : average accel_weight (float) - renorm_val : average renormalisation value (float) - error_rp : average error_roll_pitch value (float) - error_yaw : average error_yaw value (float) - - ''' - return self.send(self.ahrs_encode(omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw), force_mavlink1=force_mavlink1) - - def simstate_encode(self, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng): - ''' - Status of simulation environment, if used - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return MAVLink_simstate_message(roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng) - - def simstate_send(self, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng, force_mavlink1=False): - ''' - Status of simulation environment, if used - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return self.send(self.simstate_encode(roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng), force_mavlink1=force_mavlink1) - - def hwstatus_encode(self, Vcc, I2Cerr): - ''' - Status of key hardware - - Vcc : board voltage (mV) (uint16_t) - I2Cerr : I2C error count (uint8_t) - - ''' - return MAVLink_hwstatus_message(Vcc, I2Cerr) - - def hwstatus_send(self, Vcc, I2Cerr, force_mavlink1=False): - ''' - Status of key hardware - - Vcc : board voltage (mV) (uint16_t) - I2Cerr : I2C error count (uint8_t) - - ''' - return self.send(self.hwstatus_encode(Vcc, I2Cerr), force_mavlink1=force_mavlink1) - - def radio_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio - - rssi : local signal strength (uint8_t) - remrssi : remote signal strength (uint8_t) - txbuf : how full the tx buffer is as a percentage (uint8_t) - noise : background noise level (uint8_t) - remnoise : remote background noise level (uint8_t) - rxerrors : receive errors (uint16_t) - fixed : count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio - - rssi : local signal strength (uint8_t) - remrssi : remote signal strength (uint8_t) - txbuf : how full the tx buffer is as a percentage (uint8_t) - noise : background noise level (uint8_t) - remnoise : remote background noise level (uint8_t) - rxerrors : receive errors (uint16_t) - fixed : count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def limits_status_encode(self, limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered): - ''' - Status of AP_Limits. Sent in extended status stream when AP_Limits is - enabled - - limits_state : state of AP_Limits, (see enum LimitState, LIMITS_STATE) (uint8_t) - last_trigger : time of last breach in milliseconds since boot (uint32_t) - last_action : time of last recovery action in milliseconds since boot (uint32_t) - last_recovery : time of last successful recovery in milliseconds since boot (uint32_t) - last_clear : time of last all-clear in milliseconds since boot (uint32_t) - breach_count : number of fence breaches (uint16_t) - mods_enabled : AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_required : AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_triggered : AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - - ''' - return MAVLink_limits_status_message(limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered) - - def limits_status_send(self, limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered, force_mavlink1=False): - ''' - Status of AP_Limits. Sent in extended status stream when AP_Limits is - enabled - - limits_state : state of AP_Limits, (see enum LimitState, LIMITS_STATE) (uint8_t) - last_trigger : time of last breach in milliseconds since boot (uint32_t) - last_action : time of last recovery action in milliseconds since boot (uint32_t) - last_recovery : time of last successful recovery in milliseconds since boot (uint32_t) - last_clear : time of last all-clear in milliseconds since boot (uint32_t) - breach_count : number of fence breaches (uint16_t) - mods_enabled : AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_required : AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_triggered : AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - - ''' - return self.send(self.limits_status_encode(limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered), force_mavlink1=force_mavlink1) - - def wind_encode(self, direction, speed, speed_z): - ''' - Wind estimation - - direction : wind direction that wind is coming from (degrees) (float) - speed : wind speed in ground plane (m/s) (float) - speed_z : vertical wind speed (m/s) (float) - - ''' - return MAVLink_wind_message(direction, speed, speed_z) - - def wind_send(self, direction, speed, speed_z, force_mavlink1=False): - ''' - Wind estimation - - direction : wind direction that wind is coming from (degrees) (float) - speed : wind speed in ground plane (m/s) (float) - speed_z : vertical wind speed (m/s) (float) - - ''' - return self.send(self.wind_encode(direction, speed, speed_z), force_mavlink1=force_mavlink1) - - def data16_encode(self, type, len, data): - ''' - Data packet, size 16 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data16_message(type, len, data) - - def data16_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 16 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data16_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data32_encode(self, type, len, data): - ''' - Data packet, size 32 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data32_message(type, len, data) - - def data32_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 32 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data32_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data64_encode(self, type, len, data): - ''' - Data packet, size 64 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data64_message(type, len, data) - - def data64_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 64 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data64_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data96_encode(self, type, len, data): - ''' - Data packet, size 96 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data96_message(type, len, data) - - def data96_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 96 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data96_encode(type, len, data), force_mavlink1=force_mavlink1) - - def rangefinder_encode(self, distance, voltage): - ''' - Rangefinder reporting - - distance : distance in meters (float) - voltage : raw voltage if available, zero otherwise (float) - - ''' - return MAVLink_rangefinder_message(distance, voltage) - - def rangefinder_send(self, distance, voltage, force_mavlink1=False): - ''' - Rangefinder reporting - - distance : distance in meters (float) - voltage : raw voltage if available, zero otherwise (float) - - ''' - return self.send(self.rangefinder_encode(distance, voltage), force_mavlink1=force_mavlink1) - - def airspeed_autocal_encode(self, vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz): - ''' - Airspeed auto-calibration - - vx : GPS velocity north m/s (float) - vy : GPS velocity east m/s (float) - vz : GPS velocity down m/s (float) - diff_pressure : Differential pressure pascals (float) - EAS2TAS : Estimated to true airspeed ratio (float) - ratio : Airspeed ratio (float) - state_x : EKF state x (float) - state_y : EKF state y (float) - state_z : EKF state z (float) - Pax : EKF Pax (float) - Pby : EKF Pby (float) - Pcz : EKF Pcz (float) - - ''' - return MAVLink_airspeed_autocal_message(vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz) - - def airspeed_autocal_send(self, vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz, force_mavlink1=False): - ''' - Airspeed auto-calibration - - vx : GPS velocity north m/s (float) - vy : GPS velocity east m/s (float) - vz : GPS velocity down m/s (float) - diff_pressure : Differential pressure pascals (float) - EAS2TAS : Estimated to true airspeed ratio (float) - ratio : Airspeed ratio (float) - state_x : EKF state x (float) - state_y : EKF state y (float) - state_z : EKF state z (float) - Pax : EKF Pax (float) - Pby : EKF Pby (float) - Pcz : EKF Pcz (float) - - ''' - return self.send(self.airspeed_autocal_encode(vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz), force_mavlink1=force_mavlink1) - - def rally_point_encode(self, target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags): - ''' - A rally point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point in degrees * 1E7 (int32_t) - lng : Longitude of point in degrees * 1E7 (int32_t) - alt : Transit / loiter altitude in meters relative to home (int16_t) - break_alt : Break altitude in meters relative to home (int16_t) - land_dir : Heading to aim for when landing. In centi-degrees. (uint16_t) - flags : See RALLY_FLAGS enum for definition of the bitmask. (uint8_t) - - ''' - return MAVLink_rally_point_message(target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags) - - def rally_point_send(self, target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags, force_mavlink1=False): - ''' - A rally point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point in degrees * 1E7 (int32_t) - lng : Longitude of point in degrees * 1E7 (int32_t) - alt : Transit / loiter altitude in meters relative to home (int16_t) - break_alt : Break altitude in meters relative to home (int16_t) - land_dir : Heading to aim for when landing. In centi-degrees. (uint16_t) - flags : See RALLY_FLAGS enum for definition of the bitmask. (uint8_t) - - ''' - return self.send(self.rally_point_encode(target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags), force_mavlink1=force_mavlink1) - - def rally_fetch_point_encode(self, target_system, target_component, idx): - ''' - Request a current rally point from MAV. MAV should respond with a - RALLY_POINT message. MAV should not respond if the - request is invalid. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - - ''' - return MAVLink_rally_fetch_point_message(target_system, target_component, idx) - - def rally_fetch_point_send(self, target_system, target_component, idx, force_mavlink1=False): - ''' - Request a current rally point from MAV. MAV should respond with a - RALLY_POINT message. MAV should not respond if the - request is invalid. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - - ''' - return self.send(self.rally_fetch_point_encode(target_system, target_component, idx), force_mavlink1=force_mavlink1) - - def compassmot_status_encode(self, throttle, current, interference, CompensationX, CompensationY, CompensationZ): - ''' - Status of compassmot calibration - - throttle : throttle (percent*10) (uint16_t) - current : current (amps) (float) - interference : interference (percent) (uint16_t) - CompensationX : Motor Compensation X (float) - CompensationY : Motor Compensation Y (float) - CompensationZ : Motor Compensation Z (float) - - ''' - return MAVLink_compassmot_status_message(throttle, current, interference, CompensationX, CompensationY, CompensationZ) - - def compassmot_status_send(self, throttle, current, interference, CompensationX, CompensationY, CompensationZ, force_mavlink1=False): - ''' - Status of compassmot calibration - - throttle : throttle (percent*10) (uint16_t) - current : current (amps) (float) - interference : interference (percent) (uint16_t) - CompensationX : Motor Compensation X (float) - CompensationY : Motor Compensation Y (float) - CompensationZ : Motor Compensation Z (float) - - ''' - return self.send(self.compassmot_status_encode(throttle, current, interference, CompensationX, CompensationY, CompensationZ), force_mavlink1=force_mavlink1) - - def ahrs2_encode(self, roll, pitch, yaw, altitude, lat, lng): - ''' - Status of secondary AHRS filter if available - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return MAVLink_ahrs2_message(roll, pitch, yaw, altitude, lat, lng) - - def ahrs2_send(self, roll, pitch, yaw, altitude, lat, lng, force_mavlink1=False): - ''' - Status of secondary AHRS filter if available - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return self.send(self.ahrs2_encode(roll, pitch, yaw, altitude, lat, lng), force_mavlink1=force_mavlink1) - - def camera_status_encode(self, time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4): - ''' - Camera Event - - time_usec : Image timestamp (microseconds since UNIX epoch, according to camera clock) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - event_id : See CAMERA_STATUS_TYPES enum for definition of the bitmask (uint8_t) - p1 : Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p2 : Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p3 : Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p4 : Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - - ''' - return MAVLink_camera_status_message(time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4) - - def camera_status_send(self, time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4, force_mavlink1=False): - ''' - Camera Event - - time_usec : Image timestamp (microseconds since UNIX epoch, according to camera clock) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - event_id : See CAMERA_STATUS_TYPES enum for definition of the bitmask (uint8_t) - p1 : Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p2 : Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p3 : Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p4 : Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - - ''' - return self.send(self.camera_status_encode(time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4), force_mavlink1=force_mavlink1) - - def camera_feedback_encode(self, time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags): - ''' - Camera Capture Feedback - - time_usec : Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - lat : Latitude in (deg * 1E7) (int32_t) - lng : Longitude in (deg * 1E7) (int32_t) - alt_msl : Altitude Absolute (meters AMSL) (float) - alt_rel : Altitude Relative (meters above HOME location) (float) - roll : Camera Roll angle (earth frame, degrees, +-180) (float) - pitch : Camera Pitch angle (earth frame, degrees, +-180) (float) - yaw : Camera Yaw (earth frame, degrees, 0-360, true) (float) - foc_len : Focal Length (mm) (float) - flags : See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask (uint8_t) - - ''' - return MAVLink_camera_feedback_message(time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags) - - def camera_feedback_send(self, time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags, force_mavlink1=False): - ''' - Camera Capture Feedback - - time_usec : Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - lat : Latitude in (deg * 1E7) (int32_t) - lng : Longitude in (deg * 1E7) (int32_t) - alt_msl : Altitude Absolute (meters AMSL) (float) - alt_rel : Altitude Relative (meters above HOME location) (float) - roll : Camera Roll angle (earth frame, degrees, +-180) (float) - pitch : Camera Pitch angle (earth frame, degrees, +-180) (float) - yaw : Camera Yaw (earth frame, degrees, 0-360, true) (float) - foc_len : Focal Length (mm) (float) - flags : See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask (uint8_t) - - ''' - return self.send(self.camera_feedback_encode(time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags), force_mavlink1=force_mavlink1) - - def battery2_encode(self, voltage, current_battery): - ''' - 2nd Battery status - - voltage : voltage in millivolts (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - - ''' - return MAVLink_battery2_message(voltage, current_battery) - - def battery2_send(self, voltage, current_battery, force_mavlink1=False): - ''' - 2nd Battery status - - voltage : voltage in millivolts (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - - ''' - return self.send(self.battery2_encode(voltage, current_battery), force_mavlink1=force_mavlink1) - - def ahrs3_encode(self, roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4): - ''' - Status of third AHRS filter if available. This is for ANU research - group (Ali and Sean) - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - v1 : test variable1 (float) - v2 : test variable2 (float) - v3 : test variable3 (float) - v4 : test variable4 (float) - - ''' - return MAVLink_ahrs3_message(roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4) - - def ahrs3_send(self, roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4, force_mavlink1=False): - ''' - Status of third AHRS filter if available. This is for ANU research - group (Ali and Sean) - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - v1 : test variable1 (float) - v2 : test variable2 (float) - v3 : test variable3 (float) - v4 : test variable4 (float) - - ''' - return self.send(self.ahrs3_encode(roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4), force_mavlink1=force_mavlink1) - - def autopilot_version_request_encode(self, target_system, target_component): - ''' - Request the autopilot version from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_autopilot_version_request_message(target_system, target_component) - - def autopilot_version_request_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the autopilot version from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.autopilot_version_request_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def remote_log_data_block_encode(self, target_system, target_component, seqno, data): - ''' - Send a block of log data to remote location - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - data : log data block (uint8_t) - - ''' - return MAVLink_remote_log_data_block_message(target_system, target_component, seqno, data) - - def remote_log_data_block_send(self, target_system, target_component, seqno, data, force_mavlink1=False): - ''' - Send a block of log data to remote location - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - data : log data block (uint8_t) - - ''' - return self.send(self.remote_log_data_block_encode(target_system, target_component, seqno, data), force_mavlink1=force_mavlink1) - - def remote_log_block_status_encode(self, target_system, target_component, seqno, status): - ''' - Send Status of each log block that autopilot board might have sent - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - status : log data block status (uint8_t) - - ''' - return MAVLink_remote_log_block_status_message(target_system, target_component, seqno, status) - - def remote_log_block_status_send(self, target_system, target_component, seqno, status, force_mavlink1=False): - ''' - Send Status of each log block that autopilot board might have sent - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - status : log data block status (uint8_t) - - ''' - return self.send(self.remote_log_block_status_encode(target_system, target_component, seqno, status), force_mavlink1=force_mavlink1) - - def led_control_encode(self, target_system, target_component, instance, pattern, custom_len, custom_bytes): - ''' - Control vehicle LEDs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - instance : Instance (LED instance to control or 255 for all LEDs) (uint8_t) - pattern : Pattern (see LED_PATTERN_ENUM) (uint8_t) - custom_len : Custom Byte Length (uint8_t) - custom_bytes : Custom Bytes (uint8_t) - - ''' - return MAVLink_led_control_message(target_system, target_component, instance, pattern, custom_len, custom_bytes) - - def led_control_send(self, target_system, target_component, instance, pattern, custom_len, custom_bytes, force_mavlink1=False): - ''' - Control vehicle LEDs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - instance : Instance (LED instance to control or 255 for all LEDs) (uint8_t) - pattern : Pattern (see LED_PATTERN_ENUM) (uint8_t) - custom_len : Custom Byte Length (uint8_t) - custom_bytes : Custom Bytes (uint8_t) - - ''' - return self.send(self.led_control_encode(target_system, target_component, instance, pattern, custom_len, custom_bytes), force_mavlink1=force_mavlink1) - - def mag_cal_progress_encode(self, compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z): - ''' - Reports progress of compass calibration. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - attempt : Attempt number (uint8_t) - completion_pct : Completion percentage (uint8_t) - completion_mask : Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) (uint8_t) - direction_x : Body frame direction vector for display (float) - direction_y : Body frame direction vector for display (float) - direction_z : Body frame direction vector for display (float) - - ''' - return MAVLink_mag_cal_progress_message(compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z) - - def mag_cal_progress_send(self, compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z, force_mavlink1=False): - ''' - Reports progress of compass calibration. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - attempt : Attempt number (uint8_t) - completion_pct : Completion percentage (uint8_t) - completion_mask : Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) (uint8_t) - direction_x : Body frame direction vector for display (float) - direction_y : Body frame direction vector for display (float) - direction_z : Body frame direction vector for display (float) - - ''' - return self.send(self.mag_cal_progress_encode(compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z), force_mavlink1=force_mavlink1) - - def mag_cal_report_encode(self, compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z): - ''' - Reports results of completed compass calibration. Sent until - MAG_CAL_ACK received. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - autosaved : 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters (uint8_t) - fitness : RMS milligauss residuals (float) - ofs_x : X offset (float) - ofs_y : Y offset (float) - ofs_z : Z offset (float) - diag_x : X diagonal (matrix 11) (float) - diag_y : Y diagonal (matrix 22) (float) - diag_z : Z diagonal (matrix 33) (float) - offdiag_x : X off-diagonal (matrix 12 and 21) (float) - offdiag_y : Y off-diagonal (matrix 13 and 31) (float) - offdiag_z : Z off-diagonal (matrix 32 and 23) (float) - - ''' - return MAVLink_mag_cal_report_message(compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z) - - def mag_cal_report_send(self, compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z, force_mavlink1=False): - ''' - Reports results of completed compass calibration. Sent until - MAG_CAL_ACK received. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - autosaved : 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters (uint8_t) - fitness : RMS milligauss residuals (float) - ofs_x : X offset (float) - ofs_y : Y offset (float) - ofs_z : Z offset (float) - diag_x : X diagonal (matrix 11) (float) - diag_y : Y diagonal (matrix 22) (float) - diag_z : Z diagonal (matrix 33) (float) - offdiag_x : X off-diagonal (matrix 12 and 21) (float) - offdiag_y : Y off-diagonal (matrix 13 and 31) (float) - offdiag_z : Z off-diagonal (matrix 32 and 23) (float) - - ''' - return self.send(self.mag_cal_report_encode(compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z), force_mavlink1=force_mavlink1) - - def ekf_status_report_encode(self, flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance): - ''' - EKF Status message including flags and variances - - flags : Flags (uint16_t) - velocity_variance : Velocity variance (float) - pos_horiz_variance : Horizontal Position variance (float) - pos_vert_variance : Vertical Position variance (float) - compass_variance : Compass variance (float) - terrain_alt_variance : Terrain Altitude variance (float) - - ''' - return MAVLink_ekf_status_report_message(flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance) - - def ekf_status_report_send(self, flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance, force_mavlink1=False): - ''' - EKF Status message including flags and variances - - flags : Flags (uint16_t) - velocity_variance : Velocity variance (float) - pos_horiz_variance : Horizontal Position variance (float) - pos_vert_variance : Vertical Position variance (float) - compass_variance : Compass variance (float) - terrain_alt_variance : Terrain Altitude variance (float) - - ''' - return self.send(self.ekf_status_report_encode(flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance), force_mavlink1=force_mavlink1) - - def pid_tuning_encode(self, axis, desired, achieved, FF, P, I, D): - ''' - PID tuning information - - axis : axis (uint8_t) - desired : desired rate (degrees/s) (float) - achieved : achieved rate (degrees/s) (float) - FF : FF component (float) - P : P component (float) - I : I component (float) - D : D component (float) - - ''' - return MAVLink_pid_tuning_message(axis, desired, achieved, FF, P, I, D) - - def pid_tuning_send(self, axis, desired, achieved, FF, P, I, D, force_mavlink1=False): - ''' - PID tuning information - - axis : axis (uint8_t) - desired : desired rate (degrees/s) (float) - achieved : achieved rate (degrees/s) (float) - FF : FF component (float) - P : P component (float) - I : I component (float) - D : D component (float) - - ''' - return self.send(self.pid_tuning_encode(axis, desired, achieved, FF, P, I, D), force_mavlink1=force_mavlink1) - - def gimbal_report_encode(self, target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az): - ''' - 3 axis gimbal mesuraments - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - delta_time : Time since last update (seconds) (float) - delta_angle_x : Delta angle X (radians) (float) - delta_angle_y : Delta angle Y (radians) (float) - delta_angle_z : Delta angle X (radians) (float) - delta_velocity_x : Delta velocity X (m/s) (float) - delta_velocity_y : Delta velocity Y (m/s) (float) - delta_velocity_z : Delta velocity Z (m/s) (float) - joint_roll : Joint ROLL (radians) (float) - joint_el : Joint EL (radians) (float) - joint_az : Joint AZ (radians) (float) - - ''' - return MAVLink_gimbal_report_message(target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az) - - def gimbal_report_send(self, target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az, force_mavlink1=False): - ''' - 3 axis gimbal mesuraments - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - delta_time : Time since last update (seconds) (float) - delta_angle_x : Delta angle X (radians) (float) - delta_angle_y : Delta angle Y (radians) (float) - delta_angle_z : Delta angle X (radians) (float) - delta_velocity_x : Delta velocity X (m/s) (float) - delta_velocity_y : Delta velocity Y (m/s) (float) - delta_velocity_z : Delta velocity Z (m/s) (float) - joint_roll : Joint ROLL (radians) (float) - joint_el : Joint EL (radians) (float) - joint_az : Joint AZ (radians) (float) - - ''' - return self.send(self.gimbal_report_encode(target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az), force_mavlink1=force_mavlink1) - - def gimbal_control_encode(self, target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z): - ''' - Control message for rate gimbal - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - demanded_rate_x : Demanded angular rate X (rad/s) (float) - demanded_rate_y : Demanded angular rate Y (rad/s) (float) - demanded_rate_z : Demanded angular rate Z (rad/s) (float) - - ''' - return MAVLink_gimbal_control_message(target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z) - - def gimbal_control_send(self, target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z, force_mavlink1=False): - ''' - Control message for rate gimbal - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - demanded_rate_x : Demanded angular rate X (rad/s) (float) - demanded_rate_y : Demanded angular rate Y (rad/s) (float) - demanded_rate_z : Demanded angular rate Z (rad/s) (float) - - ''' - return self.send(self.gimbal_control_encode(target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z), force_mavlink1=force_mavlink1) - - def gimbal_torque_cmd_report_encode(self, target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd): - ''' - 100 Hz gimbal torque command telemetry - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - rl_torque_cmd : Roll Torque Command (int16_t) - el_torque_cmd : Elevation Torque Command (int16_t) - az_torque_cmd : Azimuth Torque Command (int16_t) - - ''' - return MAVLink_gimbal_torque_cmd_report_message(target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd) - - def gimbal_torque_cmd_report_send(self, target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd, force_mavlink1=False): - ''' - 100 Hz gimbal torque command telemetry - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - rl_torque_cmd : Roll Torque Command (int16_t) - el_torque_cmd : Elevation Torque Command (int16_t) - az_torque_cmd : Azimuth Torque Command (int16_t) - - ''' - return self.send(self.gimbal_torque_cmd_report_encode(target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd), force_mavlink1=force_mavlink1) - - def gopro_heartbeat_encode(self, status, capture_mode, flags): - ''' - Heartbeat from a HeroBus attached GoPro - - status : Status (uint8_t) - capture_mode : Current capture mode (uint8_t) - flags : additional status bits (uint8_t) - - ''' - return MAVLink_gopro_heartbeat_message(status, capture_mode, flags) - - def gopro_heartbeat_send(self, status, capture_mode, flags, force_mavlink1=False): - ''' - Heartbeat from a HeroBus attached GoPro - - status : Status (uint8_t) - capture_mode : Current capture mode (uint8_t) - flags : additional status bits (uint8_t) - - ''' - return self.send(self.gopro_heartbeat_encode(status, capture_mode, flags), force_mavlink1=force_mavlink1) - - def gopro_get_request_encode(self, target_system, target_component, cmd_id): - ''' - Request a GOPRO_COMMAND response from the GoPro - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - - ''' - return MAVLink_gopro_get_request_message(target_system, target_component, cmd_id) - - def gopro_get_request_send(self, target_system, target_component, cmd_id, force_mavlink1=False): - ''' - Request a GOPRO_COMMAND response from the GoPro - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - - ''' - return self.send(self.gopro_get_request_encode(target_system, target_component, cmd_id), force_mavlink1=force_mavlink1) - - def gopro_get_response_encode(self, cmd_id, status, value): - ''' - Response from a GOPRO_COMMAND get request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - value : Value (uint8_t) - - ''' - return MAVLink_gopro_get_response_message(cmd_id, status, value) - - def gopro_get_response_send(self, cmd_id, status, value, force_mavlink1=False): - ''' - Response from a GOPRO_COMMAND get request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - value : Value (uint8_t) - - ''' - return self.send(self.gopro_get_response_encode(cmd_id, status, value), force_mavlink1=force_mavlink1) - - def gopro_set_request_encode(self, target_system, target_component, cmd_id, value): - ''' - Request to set a GOPRO_COMMAND with a desired - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - value : Value (uint8_t) - - ''' - return MAVLink_gopro_set_request_message(target_system, target_component, cmd_id, value) - - def gopro_set_request_send(self, target_system, target_component, cmd_id, value, force_mavlink1=False): - ''' - Request to set a GOPRO_COMMAND with a desired - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - value : Value (uint8_t) - - ''' - return self.send(self.gopro_set_request_encode(target_system, target_component, cmd_id, value), force_mavlink1=force_mavlink1) - - def gopro_set_response_encode(self, cmd_id, status): - ''' - Response from a GOPRO_COMMAND set request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - - ''' - return MAVLink_gopro_set_response_message(cmd_id, status) - - def gopro_set_response_send(self, cmd_id, status, force_mavlink1=False): - ''' - Response from a GOPRO_COMMAND set request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - - ''' - return self.send(self.gopro_set_response_encode(cmd_id, status), force_mavlink1=force_mavlink1) - - def rpm_encode(self, rpm1, rpm2): - ''' - RPM sensor output - - rpm1 : RPM Sensor1 (float) - rpm2 : RPM Sensor2 (float) - - ''' - return MAVLink_rpm_message(rpm1, rpm2) - - def rpm_send(self, rpm1, rpm2, force_mavlink1=False): - ''' - RPM sensor output - - rpm1 : RPM Sensor1 (float) - rpm2 : RPM Sensor2 (float) - - ''' - return self.send(self.rpm_encode(rpm1, rpm2), force_mavlink1=force_mavlink1) - - def heartbeat_encode(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return MAVLink_heartbeat_message(type, autopilot, base_mode, custom_mode, system_status, mavlink_version) - - def heartbeat_send(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3, force_mavlink1=False): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return self.send(self.heartbeat_encode(type, autopilot, base_mode, custom_mode, system_status, mavlink_version), force_mavlink1=force_mavlink1) - - def sys_status_encode(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return MAVLink_sys_status_message(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4) - - def sys_status_send(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4, force_mavlink1=False): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return self.send(self.sys_status_encode(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4), force_mavlink1=force_mavlink1) - - def system_time_encode(self, time_unix_usec, time_boot_ms): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return MAVLink_system_time_message(time_unix_usec, time_boot_ms) - - def system_time_send(self, time_unix_usec, time_boot_ms, force_mavlink1=False): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return self.send(self.system_time_encode(time_unix_usec, time_boot_ms), force_mavlink1=force_mavlink1) - - def ping_encode(self, time_usec, seq, target_system, target_component): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return MAVLink_ping_message(time_usec, seq, target_system, target_component) - - def ping_send(self, time_usec, seq, target_system, target_component, force_mavlink1=False): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return self.send(self.ping_encode(time_usec, seq, target_system, target_component), force_mavlink1=force_mavlink1) - - def change_operator_control_encode(self, target_system, control_request, version, passkey): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return MAVLink_change_operator_control_message(target_system, control_request, version, passkey) - - def change_operator_control_send(self, target_system, control_request, version, passkey, force_mavlink1=False): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return self.send(self.change_operator_control_encode(target_system, control_request, version, passkey), force_mavlink1=force_mavlink1) - - def change_operator_control_ack_encode(self, gcs_system_id, control_request, ack): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return MAVLink_change_operator_control_ack_message(gcs_system_id, control_request, ack) - - def change_operator_control_ack_send(self, gcs_system_id, control_request, ack, force_mavlink1=False): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return self.send(self.change_operator_control_ack_encode(gcs_system_id, control_request, ack), force_mavlink1=force_mavlink1) - - def auth_key_encode(self, key): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return MAVLink_auth_key_message(key) - - def auth_key_send(self, key, force_mavlink1=False): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return self.send(self.auth_key_encode(key), force_mavlink1=force_mavlink1) - - def set_mode_encode(self, target_system, base_mode, custom_mode): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return MAVLink_set_mode_message(target_system, base_mode, custom_mode) - - def set_mode_send(self, target_system, base_mode, custom_mode, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return self.send(self.set_mode_encode(target_system, base_mode, custom_mode), force_mavlink1=force_mavlink1) - - def param_request_read_encode(self, target_system, target_component, param_id, param_index): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.xml deleted file mode 100644 index 21f66ae50..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ardupilotmega.xml +++ /dev/null @@ -1,1545 +0,0 @@ - - - common.xml - - - uAvionix.xml - - 2 - - - - - - Mission command to operate EPM gripper - gripper number (a number from 1 to max number of grippers on the vehicle) - gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum) - Empty - Empty - Empty - Empty - Empty - - - - Enable/disable autotune - enable (1: enable, 0:disable) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to wait for an altitude or downwards vertical speed. This is meant for high altitude balloon launches, allowing the aircraft to be idle until either an altitude is reached or a negative vertical speed is reached (indicating early balloon burst). The wiggle time is how often to wiggle the control surfaces to prevent them seizing up. - altitude (m) - descent speed (m/s) - Wiggle Time (s) - Empty - Empty - Empty - Empty - - - - A system wide power-off event has been initiated. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - FLY button has been clicked. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - FLY button has been held for 1.5 seconds. - Takeoff altitude - Empty - Empty - Empty - Empty - Empty - Empty - - - - PAUSE button has been clicked. - 1 if Solo is in a shot mode, 0 otherwise - Empty - Empty - Empty - Empty - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Automatically retry on failure (0=no retry, 1=retry). - Save without user input (0=require input, 1=autosave). - Delay (seconds) - Autoreboot (0=user reboot, 1=autoreboot) - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Cancel a running magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reply with the version banner - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Causes the gimbal to reset and boot as if it was just powered on - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Command autopilot to get into factory test/diagnostic mode - 0 means get out of test mode, 1 means get into test mode - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reports progress and success or failure of gimbal axis calibration procedure - Gimbal axis we're reporting calibration progress for - Current calibration progress for this axis, 0x64=100% - Status of the calibration - Empty - Empty - Empty - Empty - - - - Starts commutation calibration on the gimbal - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Erases gimbal application and parameters - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - a limit has been breached - - - - taking action eg. RTL - - - - we're no longer in breach of a limit - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - - - Flags in RALLY_POINT message - - Flag set when requiring favorable winds for landing. - - - - Flag set when plane is to immediately descend to break altitude and land without GCS intervention. Flag not set when plane is to loiter at Rally point until commanded to land. - - - - - - - Disable parachute release - - - - Enable parachute release - - - - Release parachute - - - - - - Gripper actions. - - gripper release of cargo - - - - gripper grabs onto cargo - - - - - - - Camera heartbeat, announce camera component ID at 1hz - - - - Camera image triggered - - - - Camera connection lost - - - - Camera unknown error - - - - Camera battery low. Parameter p1 shows reported voltage - - - - Camera storage low. Parameter p1 shows reported shots remaining - - - - Camera storage low. Parameter p1 shows reported video minutes remaining - - - - - - - Shooting photos, not video - - - - Shooting video, not stills - - - - Unable to achieve requested exposure (e.g. shutter speed too low) - - - - Closed loop feedback from camera, we know for sure it has successfully taken a picture - - - - Open loop camera, an image trigger has been requested but we can't know for sure it has successfully taken a picture - - - - - - - Gimbal is powered on but has not started initializing yet - - - - Gimbal is currently running calibration on the pitch axis - - - - Gimbal is currently running calibration on the roll axis - - - - Gimbal is currently running calibration on the yaw axis - - - - Gimbal has finished calibrating and initializing, but is relaxed pending reception of first rate command from copter - - - - Gimbal is actively stabilizing - - - - Gimbal is relaxed because it missed more than 10 expected rate command messages in a row. Gimbal will move back to active mode when it receives a new rate command - - - - - - Gimbal yaw axis - - - - Gimbal pitch axis - - - - Gimbal roll axis - - - - - - Axis calibration is in progress - - - - Axis calibration succeeded - - - - Axis calibration failed - - - - - - Whether or not this axis requires calibration is unknown at this time - - - - This axis requires calibration - - - - This axis does not require calibration - - - - - - - No GoPro connected - - - - The detected GoPro is not HeroBus compatible - - - - A HeroBus compatible GoPro is connected - - - - An unrecoverable error was encountered with the connected GoPro, it may require a power cycle - - - - - - - GoPro is currently recording - - - - - - The write message with ID indicated succeeded - - - - The write message with ID indicated failed - - - - - - (Get/Set) - - - - (Get/Set) - - - - (___/Set) - - - - (Get/___) - - - - (Get/___) - - - - (Get/Set) - - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) - - - - - (Get/Set) - - - - - - Video mode - - - - Photo mode - - - - Burst mode, hero 3+ only - - - - Time lapse mode, hero 3+ only - - - - Multi shot mode, hero 4 only - - - - Playback mode, hero 4 only, silver only except when LCD or HDMI is connected to black - - - - Playback mode, hero 4 only - - - - Mode not yet known - - - - - - 848 x 480 (480p) - - - - 1280 x 720 (720p) - - - - 1280 x 960 (960p) - - - - 1920 x 1080 (1080p) - - - - 1920 x 1440 (1440p) - - - - 2704 x 1440 (2.7k-17:9) - - - - 2704 x 1524 (2.7k-16:9) - - - - 2704 x 2028 (2.7k-4:3) - - - - 3840 x 2160 (4k-16:9) - - - - 4096 x 2160 (4k-17:9) - - - - 1280 x 720 (720p-SuperView) - - - - 1920 x 1080 (1080p-SuperView) - - - - 2704 x 1520 (2.7k-SuperView) - - - - 3840 x 2160 (4k-SuperView) - - - - - - 12 FPS - - - - 15 FPS - - - - 24 FPS - - - - 25 FPS - - - - 30 FPS - - - - 48 FPS - - - - 50 FPS - - - - 60 FPS - - - - 80 FPS - - - - 90 FPS - - - - 100 FPS - - - - 120 FPS - - - - 240 FPS - - - - 12.5 FPS - - - - - - 0x00: Wide - - - - 0x01: Medium - - - - 0x02: Narrow - - - - - - 0=NTSC, 1=PAL - - - - - - 5MP Medium - - - - 7MP Medium - - - - 7MP Wide - - - - 10MP Wide - - - - 12MP Wide - - - - - - Auto - - - - 3000K - - - - 5500K - - - - 6500K - - - - Camera Raw - - - - - - Auto - - - - Neutral - - - - - - ISO 400 - - - - ISO 800 (Only Hero 4) - - - - ISO 1600 - - - - ISO 3200 (Only Hero 4) - - - - ISO 6400 - - - - - - Low Sharpness - - - - Medium Sharpness - - - - High Sharpness - - - - - - -5.0 EV (Hero 3+ Only) - - - - -4.5 EV (Hero 3+ Only) - - - - -4.0 EV (Hero 3+ Only) - - - - -3.5 EV (Hero 3+ Only) - - - - -3.0 EV (Hero 3+ Only) - - - - -2.5 EV (Hero 3+ Only) - - - - -2.0 EV - - - - -1.5 EV - - - - -1.0 EV - - - - -0.5 EV - - - - 0.0 EV - - - - +0.5 EV - - - - +1.0 EV - - - - +1.5 EV - - - - +2.0 EV - - - - +2.5 EV (Hero 3+ Only) - - - - +3.0 EV (Hero 3+ Only) - - - - +3.5 EV (Hero 3+ Only) - - - - +4.0 EV (Hero 3+ Only) - - - - +4.5 EV (Hero 3+ Only) - - - - +5.0 EV (Hero 3+ Only) - - - - - - Charging disabled - - - - Charging enabled - - - - - - Unknown gopro model - - - - Hero 3+ Silver (HeroBus not supported by GoPro) - - - - Hero 3+ Black - - - - Hero 4 Silver - - - - Hero 4 Black - - - - - - 3 Shots / 1 Second - - - - 5 Shots / 1 Second - - - - 10 Shots / 1 Second - - - - 10 Shots / 2 Second - - - - 10 Shots / 3 Second (Hero 4 Only) - - - - 30 Shots / 1 Second - - - - 30 Shots / 2 Second - - - - 30 Shots / 3 Second - - - - 30 Shots / 6 Second - - - - - - - LED patterns off (return control to regular vehicle control) - - - - LEDs show pattern during firmware update - - - - Custom Pattern using custom bytes fields - - - - - - Flags in EKF_STATUS message - - set if EKF's attitude estimate is good - - - - set if EKF's horizontal velocity estimate is good - - - - set if EKF's vertical velocity estimate is good - - - - set if EKF's horizontal position (relative) estimate is good - - - - set if EKF's horizontal position (absolute) estimate is good - - - - set if EKF's vertical position (absolute) estimate is good - - - - set if EKF's vertical position (above ground) estimate is good - - - - EKF is in constant position mode and does not know it's absolute or relative position - - - - set if EKF's predicted horizontal position (relative) estimate is good - - - - set if EKF's predicted horizontal position (absolute) estimate is good - - - - - - - - - - - - - - - - - - - - - - Special ACK block numbers control activation of dataflash log streaming - - - - UAV to stop sending DataFlash blocks - - - - - UAV to start sending DataFlash blocks - - - - - - - Possible remote log data block statuses - - This block has NOT been received - - - - This block has been received - - - - - - - Offsets and calibrations values for hardware sensors. This makes it easier to debug the calibration process. - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - magnetic declination (radians) - raw pressure from barometer - raw temperature from barometer - gyro X calibration - gyro Y calibration - gyro Z calibration - accel X calibration - accel Y calibration - accel Z calibration - - - - Deprecated. Use MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS instead. Set the magnetometer offsets - System ID - Component ID - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - - - - state of APM memory - heap top - free memory - - free memory (32 bit) - - - - raw ADC output - ADC output 1 - ADC output 2 - ADC output 3 - ADC output 4 - ADC output 5 - ADC output 6 - - - - - Configure on-board Camera Control System. - System ID - Component ID - Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - Exposure type enumeration from 1 to N (0 means ignore) - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - Control on-board Camera Control System to take shots. - System ID - Component ID - 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - 1 to N //Zoom's absolute position (0 means ignore) - -100 to 100 //Zooming step value to offset zoom from the current position - 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - 0: ignore, 1: shot or start filming - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - - Message to configure a camera mount, directional antenna, etc. - System ID - Component ID - mount operating mode (see MAV_MOUNT_MODE enum) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - - - - Message to control a camera mount, directional antenna, etc. - System ID - Component ID - pitch(deg*100) or lat, depending on mount mode - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - - - - Message with some status from APM to GCS about camera or antenna mount - System ID - Component ID - pitch(deg*100) - roll(deg*100) - yaw(deg*100) - - - - - A fence point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 1, 0 is for return point) - total number of points (for sanity checking) - Latitude of point - Longitude of point - - - - Request a current fence point from MAV - System ID - Component ID - point index (first point is 1, 0 is for return point) - - - - Status of geo-fencing. Sent in extended status stream when fencing enabled - 0 if currently inside fence, 1 if outside - number of fence breaches - last breach type (see FENCE_BREACH_* enum) - time of last breach in milliseconds since boot - - - - Status of DCM attitude estimator - X gyro drift estimate rad/s - Y gyro drift estimate rad/s - Z gyro drift estimate rad/s - average accel_weight - average renormalisation value - average error_roll_pitch value - average error_yaw value - - - - Status of simulation environment, if used - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - Status of key hardware - board voltage (mV) - I2C error count - - - - Status generated by radio - local signal strength - remote signal strength - how full the tx buffer is as a percentage - background noise level - remote background noise level - receive errors - count of error corrected packets - - - - - Status of AP_Limits. Sent in extended status stream when AP_Limits is enabled - state of AP_Limits, (see enum LimitState, LIMITS_STATE) - time of last breach in milliseconds since boot - time of last recovery action in milliseconds since boot - time of last successful recovery in milliseconds since boot - time of last all-clear in milliseconds since boot - number of fence breaches - AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) - - - - Wind estimation - wind direction that wind is coming from (degrees) - wind speed in ground plane (m/s) - vertical wind speed (m/s) - - - - Data packet, size 16 - data type - data length - raw data - - - - Data packet, size 32 - data type - data length - raw data - - - - Data packet, size 64 - data type - data length - raw data - - - - Data packet, size 96 - data type - data length - raw data - - - - Rangefinder reporting - distance in meters - raw voltage if available, zero otherwise - - - - Airspeed auto-calibration - GPS velocity north m/s - GPS velocity east m/s - GPS velocity down m/s - Differential pressure pascals - Estimated to true airspeed ratio - Airspeed ratio - EKF state x - EKF state y - EKF state z - EKF Pax - EKF Pby - EKF Pcz - - - - - A rally point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 0) - total number of points (for sanity checking) - Latitude of point in degrees * 1E7 - Longitude of point in degrees * 1E7 - Transit / loiter altitude in meters relative to home - - Break altitude in meters relative to home - Heading to aim for when landing. In centi-degrees. - See RALLY_FLAGS enum for definition of the bitmask. - - - - Request a current rally point from MAV. MAV should respond with a RALLY_POINT message. MAV should not respond if the request is invalid. - System ID - Component ID - point index (first point is 0) - - - - Status of compassmot calibration - throttle (percent*10) - current (amps) - interference (percent) - Motor Compensation X - Motor Compensation Y - Motor Compensation Z - - - - - Status of secondary AHRS filter if available - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - - Camera Event - Image timestamp (microseconds since UNIX epoch, according to camera clock) - System ID - - Camera ID - - Image index - - See CAMERA_STATUS_TYPES enum for definition of the bitmask - Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - - - - - Camera Capture Feedback - Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) - System ID - - Camera ID - - Image index - - Latitude in (deg * 1E7) - Longitude in (deg * 1E7) - Altitude Absolute (meters AMSL) - Altitude Relative (meters above HOME location) - Camera Roll angle (earth frame, degrees, +-180) - - Camera Pitch angle (earth frame, degrees, +-180) - - Camera Yaw (earth frame, degrees, 0-360, true) - - Focal Length (mm) - - See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask - - - - - 2nd Battery status - voltage in millivolts - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - - - - Status of third AHRS filter if available. This is for ANU research group (Ali and Sean) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - test variable1 - test variable2 - test variable3 - test variable4 - - - - Request the autopilot version from the system/component. - System ID - Component ID - - - - - Send a block of log data to remote location - System ID - Component ID - log data block sequence number - log data block - - - - Send Status of each log block that autopilot board might have sent - System ID - Component ID - log data block sequence number - log data block status - - - - Control vehicle LEDs - System ID - Component ID - Instance (LED instance to control or 255 for all LEDs) - Pattern (see LED_PATTERN_ENUM) - Custom Byte Length - Custom Bytes - - - - Reports progress of compass calibration. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - Attempt number - Completion percentage - Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) - Body frame direction vector for display - Body frame direction vector for display - Body frame direction vector for display - - - - Reports results of completed compass calibration. Sent until MAG_CAL_ACK received. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters - RMS milligauss residuals - X offset - Y offset - Z offset - X diagonal (matrix 11) - Y diagonal (matrix 22) - Z diagonal (matrix 33) - X off-diagonal (matrix 12 and 21) - Y off-diagonal (matrix 13 and 31) - Z off-diagonal (matrix 32 and 23) - - - - - EKF Status message including flags and variances - Flags - - Velocity variance - - Horizontal Position variance - Vertical Position variance - Compass variance - Terrain Altitude variance - - - - - PID tuning information - axis - desired rate (degrees/s) - achieved rate (degrees/s) - FF component - P component - I component - D component - - - - 3 axis gimbal mesuraments - System ID - Component ID - Time since last update (seconds) - Delta angle X (radians) - Delta angle Y (radians) - Delta angle X (radians) - Delta velocity X (m/s) - Delta velocity Y (m/s) - Delta velocity Z (m/s) - Joint ROLL (radians) - Joint EL (radians) - Joint AZ (radians) - - - - Control message for rate gimbal - System ID - Component ID - Demanded angular rate X (rad/s) - Demanded angular rate Y (rad/s) - Demanded angular rate Z (rad/s) - - - - 100 Hz gimbal torque command telemetry - System ID - Component ID - Roll Torque Command - Elevation Torque Command - Azimuth Torque Command - - - - - Heartbeat from a HeroBus attached GoPro - Status - Current capture mode - additional status bits - - - - - Request a GOPRO_COMMAND response from the GoPro - System ID - Component ID - Command ID - - - - Response from a GOPRO_COMMAND get request - Command ID - Status - Value - - - - Request to set a GOPRO_COMMAND with a desired - System ID - Component ID - Command ID - Value - - - - Response from a GOPRO_COMMAND set request - Command ID - Status - - - - - RPM sensor output - RPM Sensor1 - RPM Sensor2 - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.py deleted file mode 100644 index 2226ac11a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.py +++ /dev/null @@ -1,12126 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: autoquad.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'autoquad' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_PROPULSION = 13 # Motor/ESC telemetry data. -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_PROPULSION', '''Motor/ESC telemetry data.''') -MAV_DATA_STREAM_ENUM_END = 14 # -enums['MAV_DATA_STREAM'][14] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_AQ_TELEMETRY_F = 150 -MAVLINK_MSG_ID_AQ_ESC_TELEMETRY = 152 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_aq_telemetry_f_message(MAVLink_message): - ''' - Sends up to 20 raw float values. - ''' - id = MAVLINK_MSG_ID_AQ_TELEMETRY_F - name = 'AQ_TELEMETRY_F' - fieldnames = ['Index', 'value1', 'value2', 'value3', 'value4', 'value5', 'value6', 'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15', 'value16', 'value17', 'value18', 'value19', 'value20'] - ordered_fieldnames = [ 'value1', 'value2', 'value3', 'value4', 'value5', 'value6', 'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15', 'value16', 'value17', 'value18', 'value19', 'value20', 'Index' ] - format = ' 4 motors. - Data is described as follows: - // unsigned int state : 3; // - unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error count - // - Data Version 3 - // - unsigned int temp : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - ''' - id = MAVLINK_MSG_ID_AQ_ESC_TELEMETRY - name = 'AQ_ESC_TELEMETRY' - fieldnames = ['time_boot_ms', 'seq', 'num_motors', 'num_in_seq', 'escid', 'status_age', 'data_version', 'data0', 'data1'] - ordered_fieldnames = [ 'time_boot_ms', 'data0', 'data1', 'status_age', 'seq', 'num_motors', 'num_in_seq', 'escid', 'data_version' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' 4 motors. Data - is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error - count // - Data Version 3 - - // unsigned int temp - : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - time_boot_ms : Timestamp of the component clock since boot time in ms. (uint32_t) - seq : Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). (uint8_t) - num_motors : Total number of active ESCs/motors on the system. (uint8_t) - num_in_seq : Number of active ESCs in this sequence (1 through this many array members will be populated with data) (uint8_t) - escid : ESC/Motor ID (uint8_t) - status_age : Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. (uint16_t) - data_version : Version of data structure (determines contents). (uint8_t) - data0 : Data bits 1-32 for each ESC. (uint32_t) - data1 : Data bits 33-64 for each ESC. (uint32_t) - - ''' - return MAVLink_aq_esc_telemetry_message(time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1) - - def aq_esc_telemetry_send(self, time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1, force_mavlink1=False): - ''' - Sends ESC32 telemetry data for up to 4 motors. Multiple messages may - be sent in sequence when system has > 4 motors. Data - is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error - count // - Data Version 3 - - // unsigned int temp - : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - time_boot_ms : Timestamp of the component clock since boot time in ms. (uint32_t) - seq : Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). (uint8_t) - num_motors : Total number of active ESCs/motors on the system. (uint8_t) - num_in_seq : Number of active ESCs in this sequence (1 through this many array members will be populated with data) (uint8_t) - escid : ESC/Motor ID (uint8_t) - status_age : Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. (uint16_t) - data_version : Version of data structure (determines contents). (uint8_t) - data0 : Data bits 1-32 for each ESC. (uint32_t) - data1 : Data bits 33-64 for each ESC. (uint32_t) - - ''' - return self.send(self.aq_esc_telemetry_encode(time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1), force_mavlink1=force_mavlink1) - - def heartbeat_encode(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return MAVLink_heartbeat_message(type, autopilot, base_mode, custom_mode, system_status, mavlink_version) - - def heartbeat_send(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3, force_mavlink1=False): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return self.send(self.heartbeat_encode(type, autopilot, base_mode, custom_mode, system_status, mavlink_version), force_mavlink1=force_mavlink1) - - def sys_status_encode(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return MAVLink_sys_status_message(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4) - - def sys_status_send(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4, force_mavlink1=False): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return self.send(self.sys_status_encode(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4), force_mavlink1=force_mavlink1) - - def system_time_encode(self, time_unix_usec, time_boot_ms): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return MAVLink_system_time_message(time_unix_usec, time_boot_ms) - - def system_time_send(self, time_unix_usec, time_boot_ms, force_mavlink1=False): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return self.send(self.system_time_encode(time_unix_usec, time_boot_ms), force_mavlink1=force_mavlink1) - - def ping_encode(self, time_usec, seq, target_system, target_component): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return MAVLink_ping_message(time_usec, seq, target_system, target_component) - - def ping_send(self, time_usec, seq, target_system, target_component, force_mavlink1=False): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return self.send(self.ping_encode(time_usec, seq, target_system, target_component), force_mavlink1=force_mavlink1) - - def change_operator_control_encode(self, target_system, control_request, version, passkey): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return MAVLink_change_operator_control_message(target_system, control_request, version, passkey) - - def change_operator_control_send(self, target_system, control_request, version, passkey, force_mavlink1=False): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return self.send(self.change_operator_control_encode(target_system, control_request, version, passkey), force_mavlink1=force_mavlink1) - - def change_operator_control_ack_encode(self, gcs_system_id, control_request, ack): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return MAVLink_change_operator_control_ack_message(gcs_system_id, control_request, ack) - - def change_operator_control_ack_send(self, gcs_system_id, control_request, ack, force_mavlink1=False): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return self.send(self.change_operator_control_ack_encode(gcs_system_id, control_request, ack), force_mavlink1=force_mavlink1) - - def auth_key_encode(self, key): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return MAVLink_auth_key_message(key) - - def auth_key_send(self, key, force_mavlink1=False): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return self.send(self.auth_key_encode(key), force_mavlink1=force_mavlink1) - - def set_mode_encode(self, target_system, base_mode, custom_mode): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return MAVLink_set_mode_message(target_system, base_mode, custom_mode) - - def set_mode_send(self, target_system, base_mode, custom_mode, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return self.send(self.set_mode_encode(target_system, base_mode, custom_mode), force_mavlink1=force_mavlink1) - - def param_request_read_encode(self, target_system, target_component, param_id, param_index): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.xml deleted file mode 100644 index 8c224783b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/autoquad.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - common.xml - 3 - - - Track current version of these definitions (can be used by checking value of AUTOQUAD_MAVLINK_DEFS_VERSION_ENUM_END). Append a new entry for each published change. - - - - Available operating modes/statuses for AutoQuad flight controller. - Bitmask up to 32 bits. Low side bits for base modes, high side for - additional active features/modifiers/constraints. - - System is initializing - - - - System is *armed* and standing by, with no throttle input and no autonomous mode - - - Flying (throttle input detected), assumed under manual control unless other mode bits are set - - - Altitude hold engaged - - - Position hold engaged - - - Externally-guided (eg. GCS) navigation mode - - - Autonomous mission execution mode - - - - Ready but *not armed* - - - Calibration mode active - - - - No valid control input (eg. no radio link) - - - Battery is low (stage 1 warning) - - - Battery is depleted (stage 2 warning) - - - - Dynamic Velocity Hold is active (PH with proportional manual direction override) - - - ynamic Altitude Override is active (AH with proportional manual adjustment) - - - - Craft is at ceiling altitude - - - Ceiling altitude is set - - - Heading-Free dynamic mode active - - - Heading-Free locked mode active - - - Automatic Return to Home is active - - - System is in failsafe recovery mode - - - - - Orbit a waypoint. - Orbit radius in meters - Loiter time in decimal seconds - Maximum horizontal speed in m/s - Desired yaw angle at waypoint - Latitude - Longitude - Altitude - - - Start/stop AutoQuad telemetry values stream. - Start or stop (1 or 0) - Stream frequency in us - Dataset ID (refer to aq_mavlink.h::mavlinkCustomDataSets enum in AQ flight controller code) - Empty - Empty - Empty - Empty - - - - Request AutoQuad firmware version number. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - - Motor/ESC telemetry data. - - - - - - Sends up to 20 raw float values. - Index of message - value1 - value2 - value3 - value4 - value5 - value6 - value7 - value8 - value9 - value10 - value11 - value12 - value13 - value14 - value15 - value16 - value17 - value18 - value19 - value20 - - - Sends ESC32 telemetry data for up to 4 motors. Multiple messages may be sent in sequence when system has > 4 motors. Data is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - - // unsigned int errors : 9; // Bad detects error count - // - Data Version 3 - - // unsigned int temp : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - Timestamp of the component clock since boot time in ms. - Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). - Total number of active ESCs/motors on the system. - Number of active ESCs in this sequence (1 through this many array members will be populated with data) - ESC/Motor ID - Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. - Version of data structure (determines contents). - Data bits 1-32 for each ESC. - Data bits 33-64 for each ESC. - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.py deleted file mode 100644 index 68d0b9119..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.py +++ /dev/null @@ -1,11833 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'common' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_heartbeat_message(MAVLink_message): - ''' - The heartbeat message shows that a system is present and - responding. The type of the MAV and Autopilot hardware allow - the receiving system to treat further messages from this - system appropriate (e.g. by laying out the user interface - based on the autopilot). - ''' - id = MAVLINK_MSG_ID_HEARTBEAT - name = 'HEARTBEAT' - fieldnames = ['type', 'autopilot', 'base_mode', 'custom_mode', 'system_status', 'mavlink_version'] - ordered_fieldnames = [ 'custom_mode', 'type', 'autopilot', 'base_mode', 'system_status', 'mavlink_version' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.xml deleted file mode 100644 index 8718cd7da..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/common.xml +++ /dev/null @@ -1,3716 +0,0 @@ - - - 3 - 0 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - Reserved for future use. - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - PX4 Autopilot - http://pixhawk.ethz.ch/px4/ - - - SMACCMPilot - http://smaccmpilot.org - - - AutoQuad -- http://autoquad.org - - - Armazila -- http://armazila.com - - - Aerob -- http://aerob.ru - - - ASLUAV autopilot -- http://www.asl.ethz.ch - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Tricopter - - - Flapping wing - - - Kite - - - Onboard companion controller - - - Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter. - - - Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter. - - - Tiltrotor VTOL - - - - VTOL reserved 2 - - - VTOL reserved 3 - - - VTOL reserved 4 - - - VTOL reserved 5 - - - Onboard gimbal - - - Onboard ADSB peripheral - - - - These values define the type of firmware release. These values indicate the first version or release of this type. For example the first alpha release would be 64, the second would be 65. - - development release - - - alpha release - - - beta release - - - release candidate - - - official stable release - - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - Override command, pauses current mission execution and moves immediately to a position - - Hold at the current position. - - - Continue with the next item in mission execution. - - - Hold at the current position of the system - - - Hold at the position specified in the parameters of the DO_HOLD action - - - - These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it - simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override. - - System is not ready to fly, booting, calibrating, etc. No flag is set. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - On Screen Display (OSD) devices for video links - - - Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol - - - - - - - These encode the sensors whose status is sent as part of the SYS_STATUS message. - - 0x01 3D gyro - - - 0x02 3D accelerometer - - - 0x04 3D magnetometer - - - 0x08 absolute pressure - - - 0x10 differential pressure - - - 0x20 GPS - - - 0x40 optical flow - - - 0x80 computer vision position - - - 0x100 laser based position - - - 0x200 external ground truth (Vicon or Leica) - - - 0x400 3D angular rate control - - - 0x800 attitude stabilization - - - 0x1000 yaw position - - - 0x2000 z/altitude control - - - 0x4000 x/y position control - - - 0x8000 motor outputs / control - - - 0x10000 rc receiver - - - 0x20000 2nd 3D gyro - - - 0x40000 2nd 3D accelerometer - - - 0x80000 2nd 3D magnetometer - - - 0x100000 geofence - - - 0x200000 AHRS subsystem health - - - 0x400000 Terrain subsystem health - - - 0x800000 Motors are reversed - - - 0x1000000 Logging - - - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL) - - - Local coordinate frame, Z-up (x: north, y: east, z: down). - - - NOT a coordinate frame, indicates a mission command. - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Local coordinate frame, Z-down (x: east, y: north, z: up) - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL) - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position. - - - Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right. - - - Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - - - - - - - - - - - - - - - - - - - - - - - - Disable fenced mode - - - Switched to guided mode to return point (fence point 0) - - - Report fence breach, but don't take action - - - Switched to guided mode to return point (fence point 0) with manual throttle control - - - Switch to RTL (return to launch) mode and head for the return point. - - - - - - No last fence breach - - - Breached minimum altitude - - - Breached maximum altitude - - - Breached fence boundary - - - - - Enumeration of possible mount operation modes - Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization - Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. - Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization - Load neutral position and start RC Roll,Pitch,Yaw control with stabilization - Load neutral position and start to point to Lat,Lon,Alt - - - Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. - - Navigate to MISSION. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached) - 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control. - Desired yaw angle at MISSION (rotary wing) - Latitude - Longitude - Altitude - - - Loiter around this MISSION an unlimited amount of time - Empty - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X turns - Turns - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X seconds - Seconds (decimal) - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Return to launch location - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Land at location - Abort Alt - Empty - Empty - Desired yaw angle - Latitude - Longitude - Altitude - - - Takeoff from ground / hand - Minimum pitch (if airspeed sensor present), desired pitch without sensor - Empty - Empty - Yaw angle (if magnetometer present), ignored without magnetometer - Latitude - Longitude - Altitude - - - Land at local position (local frame only) - Landing target number (if available) - Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land - Landing descend rate [ms^-1] - Desired yaw angle [rad] - Y-axis position [m] - X-axis position [m] - Z-axis / ground level position [m] - - - Takeoff from local position (local frame only) - Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad] - Empty - Takeoff ascend rate [ms^-1] - Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these - Y-axis position [m] - X-axis position [m] - Z-axis position [m] - - - Vehicle following, i.e. this waypoint represents the position of a moving vehicle - Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation - Ground speed of vehicle to be followed - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached. - Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. - Empty - Empty - Empty - Empty - Empty - Desired altitude in meters - - - Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. - Heading Required (0 = False) - Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter. - Empty - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location - Latitude - Longitude - Altitude - - - Being following a target - System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode - RESERVED - RESERVED - altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home - altitude - RESERVED - TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout - - - Reposition the MAV after a follow target command has been sent - Camera q1 (where 0 is on the ray from the camera to the tracking device) - Camera q2 - Camera q3 - Camera q4 - altitude offset from target (m) - X offset from target (m) - Y offset from target (m) - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - Control autonomous path planning on the MAV. - 0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning - 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid - Empty - Yaw angle at goal, in compass degrees, [0..360] - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Navigate to MISSION using a spline path. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Empty - Empty - Empty - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Takeoff from ground using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - Land using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - - - - hand control over to an external controller - On / Off (> 0.5f on) - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay the next navigation command a number of seconds or until a specified time - Delay in seconds (decimal, -1 to enable time-of-day fields) - hour (24h format, UTC, -1 to ignore) - minute (24h format, UTC, -1 to ignore) - second (24h format, UTC) - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay mission state machine. - Delay in seconds (decimal) - Empty - Empty - Empty - Empty - Empty - Empty - - - Ascend/descend at rate. Delay mission state machine until desired altitude reached. - Descent / Ascend rate (m/s) - Empty - Empty - Empty - Empty - Empty - Finish Altitude - - - Delay mission state machine until within desired distance of next NAV point. - Distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - Reach a certain target angle. - target angle: [0-360], 0 is north - speed during yaw change:[deg per second] - direction: negative: counter clockwise, positive: clockwise [-1,1] - relative offset or absolute angle: [ 1,0] - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Set system mode. - Mode, as defined by ENUM MAV_MODE - Custom mode - this is system specific, please refer to the individual autopilot specifications for details. - Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details. - Empty - Empty - Empty - Empty - - - Jump to the desired command in the mission list. Repeat this action only the specified number of times - Sequence number - Repeat count - Empty - Empty - Empty - Empty - Empty - - - Change speed and/or throttle set points. - Speed type (0=Airspeed, 1=Ground Speed) - Speed (m/s, -1 indicates no change) - Throttle ( Percent, -1 indicates no change) - absolute or relative [0,1] - Empty - Empty - Empty - - - Changes the home location either to the current location or a specified location. - Use current (1=use current location, 0=use specified location) - Empty - Empty - Empty - Latitude - Longitude - Altitude - - - Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. - Parameter number - Parameter value - Empty - Empty - Empty - Empty - Empty - - - Set a relay to a condition. - Relay number - Setting (1=on, 0=off, others possible depending on system hardware) - Empty - Empty - Empty - Empty - Empty - - - Cycle a relay on and off for a desired number of cyles with a desired period. - Relay number - Cycle count - Cycle time (seconds, decimal) - Empty - Empty - Empty - Empty - - - Set a servo to a desired PWM value. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Empty - Empty - Empty - Empty - Empty - - - Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Cycle count - Cycle time (seconds) - Empty - Empty - Empty - - - Terminate flight immediately - Flight termination activated if > 0.5 - Empty - Empty - Empty - Empty - Empty - Empty - - - Change altitude set point. - Altitude in meters - Mav frame of new altitude (see MAV_FRAME) - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. - Empty - Empty - Empty - Empty - Latitude - Longitude - Empty - - - Mission command to perform a landing from a rally point. - Break altitude (meters) - Landing speed (m/s) - Empty - Empty - Empty - Empty - Empty - - - Mission command to safely abort an autonmous landing. - Altitude (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reposition the vehicle to a specific WGS84 global position. - Ground speed, less than 0 (-1) for default - Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum. - Reserved - Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise) - Latitude (deg * 1E7) - Longitude (deg * 1E7) - Altitude (meters) - - - If in a GPS controlled position mode, hold the current position or continue. - 0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Set moving direction to forward or reverse. - Direction (0=Forward, 1=Reverse) - Empty - Empty - Empty - Empty - Empty - Empty - - - Control onboard camera system. - Camera ID (-1 for all) - Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw - Transmission mode: 0: video stream, >0: single images every n seconds (decimal) - Recording: 0: disabled, 1: enabled compressed, 2: enabled raw - Empty - Empty - Empty - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - - - Mission command to configure an on-board camera controller system. - Modes: P, TV, AV, M, Etc - Shutter speed: Divisor number for one second - Aperture: F stop number - ISO number e.g. 80, 100, 200, Etc - Exposure type enumerator - Command Identity - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - - - - Mission command to control an on-board camera controller system. - Session control e.g. show/hide lens - Zoom's absolute position - Zooming step value to offset zoom from the current position - Focus Locking, Unlocking or Re-locking - Shooting Command - Command Identity - Empty - - - - - Mission command to configure a camera or antenna mount - Mount operation mode (see MAV_MOUNT_MODE enum) - stabilize roll? (1 = yes, 0 = no) - stabilize pitch? (1 = yes, 0 = no) - stabilize yaw? (1 = yes, 0 = no) - Empty - Empty - Empty - - - - Mission command to control a camera or antenna mount - pitch or lat in degrees, depending on mount mode. - roll or lon in degrees depending on mount mode - yaw or alt (in meters) depending on mount mode - reserved - reserved - reserved - MAV_MOUNT_MODE enum value - - - - Mission command to set CAM_TRIGG_DIST for this flight - Camera trigger distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to enable the geofence - enable? (0=disable, 1=enable, 2=disable_floor_only) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to trigger a parachute - action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to perform motor test - motor sequence number (a number from 1 to max number of motors on the vehicle) - throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum) - throttle - timeout (in seconds) - Empty - Empty - Empty - - - - Change to/from inverted flight - inverted (0=normal, 1=inverted) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Sets a desired vehicle turn angle and thrust change - yaw angle to adjust steering by in centidegress - Thrust - normalized to -2 .. 2 - Empty - Empty - Empty - Empty - Empty - - - - - Mission command to control a camera or antenna mount, using a quaternion as reference. - q1 - quaternion param #1, w (1 in null-rotation) - q2 - quaternion param #2, x (0 in null-rotation) - q3 - quaternion param #3, y (0 in null-rotation) - q4 - quaternion param #4, z (0 in null-rotation) - Empty - Empty - Empty - - - - set id of master controller - System ID - Component ID - Empty - Empty - Empty - Empty - Empty - - - - set limits for external control - timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout - absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit - absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit - horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit - Empty - Empty - Empty - - - - Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines - 0: Stop engine, 1:Start Engine - 0: Warm start, 1:Cold start. Controls use of choke where applicable - Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay. - Empty - Empty - Empty - Empty - Empty - - - - NOP - This command is only used to mark the upper limit of the DO commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Trigger calibration. This command will be only accepted if in pre-flight mode. - Gyro calibration: 0: no, 1: yes - Magnetometer calibration: 0: no, 1: yes - Ground pressure: 0: no, 1: yes - Radio calibration: 0: no, 1: yes - Accelerometer calibration: 0: no, 1: yes - Compass/Motor interference calibration: 0: no, 1: yes - Empty - - - Set sensor offsets. This command will be only accepted if in pre-flight mode. - Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer - X axis offset (or generic dimension 1), in the sensor's raw units - Y axis offset (or generic dimension 2), in the sensor's raw units - Z axis offset (or generic dimension 3), in the sensor's raw units - Generic dimension 4, in the sensor's raw units - Generic dimension 5, in the sensor's raw units - Generic dimension 6, in the sensor's raw units - - - Trigger UAVCAN config. This command will be only accepted if in pre-flight mode. - 1: Trigger actuator ID assignment and direction mapping. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging) - Reserved - Empty - Empty - Empty - - - Request the reboot or shutdown of system components. - 0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded. - 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded. - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - - - Hold / continue the current action - MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan - MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position - MAV_FRAME coordinate frame of hold point - Desired yaw angle in degrees - Latitude / X position - Longitude / Y position - Altitude / Z position - - - start running a mission - first_item: the first mission item to run - last_item: the last mission item to run (after this item is run, the mission ends) - - - Arms / Disarms a component - 1 to arm, 0 to disarm - - - Request the home position from the vehicle. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Starts receiver pairing - 0:Spektrum - 0:Spektrum DSM2, 1:Spektrum DSMX - - - Request the interval between messages for a particular MAVLink message ID - The MAVLink message ID - - - Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM - The MAVLink message ID - The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate. - - - Request autopilot capabilities - 1: Request autopilot version - Reserved (all remaining params) - - - Start image capture sequence - Duration between two consecutive pictures (in seconds) - Number of images to capture total - 0 for unlimited capture - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop image capture sequence - Reserved - Reserved - - - - Enable or disable on-board camera triggering system. - Trigger enable/disable (0 for disable, 1 for start) - Shutter integration time (in ms) - Reserved - - - - Starts video capture - Camera ID (0 for all cameras), 1 for first, 2 for second, etc. - Frames per second - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop the current video capture - Reserved - Reserved - - - - Create a panorama at the current position - Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle) - Viewing angle vertical of panorama (in degrees) - Speed of the horizontal rotation (in degrees per second) - Speed of the vertical rotation (in degrees per second) - - - - Request VTOL transition - The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used. - - - - This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - - - - - This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - - Radius of desired circle in CIRCLE_MODE - User defined - User defined - User defined - Unscaled target latitude of center of circle in CIRCLE_MODE - Unscaled target longitude of center of circle in CIRCLE_MODE - - - - - - - Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity. - Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list. - Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will. - Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will. - Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will. - Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Altitude, in meters AMSL - - - Control the payload deployment. - Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - - - THIS INTERFACE IS DEPRECATED AS OF JULY 2015. Please use MESSAGE_INTERVAL instead. A data stream is not a fixed set of messages, but rather a - recommendation to the autopilot software. Individual autopilots may or may not obey - the recommended messages. - - Enable all data streams - - - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. - - - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS - - - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW - - - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. - - - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. - - - Dependent on the autopilot - - - Dependent on the autopilot - - - Dependent on the autopilot - - - - The ROI (region of interest) for the vehicle. This can be - be used by the vehicle for camera/vehicle attitude alignment (see - MAV_CMD_NAV_ROI). - - No region of interest. - - - Point toward next MISSION. - - - Point toward given MISSION. - - - Point toward fixed location. - - - Point toward of given id. - - - - ACK / NACK / ERROR values as a result of MAV_CMDs and for mission item transmission. - - Command / mission item is ok. - - - Generic error message if none of the other reasons fails or if no detailed error reporting is implemented. - - - The system is refusing to accept this command from this source / communication partner. - - - Command or mission item is not supported, other commands would be accepted. - - - The coordinate frame of this command / mission item is not supported. - - - The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible. - - - The X or latitude value is out of range. - - - The Y or longitude value is out of range. - - - The Z or altitude value is out of range. - - - - Specifies the datatype of a MAVLink parameter. - - 8-bit unsigned integer - - - 8-bit signed integer - - - 16-bit unsigned integer - - - 16-bit signed integer - - - 32-bit unsigned integer - - - 32-bit signed integer - - - 64-bit unsigned integer - - - 64-bit signed integer - - - 32-bit floating-point - - - 64-bit floating-point - - - - result from a mavlink command - - Command ACCEPTED and EXECUTED - - - Command TEMPORARY REJECTED/DENIED - - - Command PERMANENTLY DENIED - - - Command UNKNOWN/UNSUPPORTED - - - Command executed, but failed - - - - result in a mavlink mission ack - - mission accepted OK - - - generic error / not accepting mission commands at all right now - - - coordinate frame is not supported - - - command is not supported - - - mission item exceeds storage space - - - one of the parameters has an invalid value - - - param1 has an invalid value - - - param2 has an invalid value - - - param3 has an invalid value - - - param4 has an invalid value - - - x/param5 has an invalid value - - - y/param6 has an invalid value - - - param7 has an invalid value - - - received waypoint out of sequence - - - not accepting any mission commands from this communication partner - - - - Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/. - - System is unusable. This is a "panic" condition. - - - Action should be taken immediately. Indicates error in non-critical systems. - - - Action must be taken immediately. Indicates failure in a primary system. - - - Indicates an error in secondary/redundant systems. - - - Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning. - - - An unusual event has occured, though not an error condition. This should be investigated for the root cause. - - - Normal operational messages. Useful for logging. No action is required for these messages. - - - Useful non-operational messages that can assist in debugging. These should not occur during normal operation. - - - - Power supply status flags (bitmask) - - main brick power supply valid - - - main servo power supply valid for FMU - - - USB power is connected - - - peripheral supply is in over-current state - - - hi-power peripheral supply is in over-current state - - - Power status has changed since boot - - - - SERIAL_CONTROL device types - - First telemetry port - - - Second telemetry port - - - First GPS port - - - Second GPS port - - - system shell - - - - SERIAL_CONTROL flags (bitmask) - - Set if this is a reply - - - Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message - - - Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set - - - Block on writes to the serial port - - - Send multiple replies until port is drained - - - - Enumeration of distance sensor types - - Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units - - - Ultrasound rangefinder, e.g. MaxBotix units - - - Infrared rangefinder, e.g. Sharp units - - - - Enumeration of sensor orientation, according to its rotations - - Roll: 0, Pitch: 0, Yaw: 0 - - - Roll: 0, Pitch: 0, Yaw: 45 - - - Roll: 0, Pitch: 0, Yaw: 90 - - - Roll: 0, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 0, Yaw: 180 - - - Roll: 0, Pitch: 0, Yaw: 225 - - - Roll: 0, Pitch: 0, Yaw: 270 - - - Roll: 0, Pitch: 0, Yaw: 315 - - - Roll: 180, Pitch: 0, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 45 - - - Roll: 180, Pitch: 0, Yaw: 90 - - - Roll: 180, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 180, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 225 - - - Roll: 180, Pitch: 0, Yaw: 270 - - - Roll: 180, Pitch: 0, Yaw: 315 - - - Roll: 90, Pitch: 0, Yaw: 0 - - - Roll: 90, Pitch: 0, Yaw: 45 - - - Roll: 90, Pitch: 0, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 135 - - - Roll: 270, Pitch: 0, Yaw: 0 - - - Roll: 270, Pitch: 0, Yaw: 45 - - - Roll: 270, Pitch: 0, Yaw: 90 - - - Roll: 270, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 90, Yaw: 0 - - - Roll: 0, Pitch: 270, Yaw: 0 - - - Roll: 0, Pitch: 180, Yaw: 90 - - - Roll: 0, Pitch: 180, Yaw: 270 - - - Roll: 90, Pitch: 90, Yaw: 0 - - - Roll: 180, Pitch: 90, Yaw: 0 - - - Roll: 270, Pitch: 90, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 0 - - - Roll: 270, Pitch: 180, Yaw: 0 - - - Roll: 90, Pitch: 270, Yaw: 0 - - - Roll: 180, Pitch: 270, Yaw: 0 - - - Roll: 270, Pitch: 270, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 270 - - - Roll: 315, Pitch: 315, Yaw: 315 - - - - Bitmask of (optional) autopilot capabilities (64 bit). If a bit is set, the autopilot supports this capability. - - Autopilot supports MISSION float message type. - - - Autopilot supports the new param float message type. - - - Autopilot supports MISSION_INT scaled integer message type. - - - Autopilot supports COMMAND_INT scaled integer message type. - - - Autopilot supports the new param union message type. - - - Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. - - - Autopilot supports commanding attitude offboard. - - - Autopilot supports commanding position and velocity targets in local NED frame. - - - Autopilot supports commanding position and velocity targets in global scaled integers. - - - Autopilot supports terrain protocol / data handling. - - - Autopilot supports direct actuator control. - - - Autopilot supports the flight termination command. - - - Autopilot supports onboard compass calibration. - - - Autopilot supports mavlink version 2. - - - - Enumeration of estimator types - - This is a naive estimator without any real covariance feedback. - - - Computer vision based estimate. Might be up to scale. - - - Visual-inertial estimate. - - - Plain GPS estimate. - - - Estimator integrating GPS and inertial sensing. - - - - Enumeration of battery types - - Not specified. - - - Lithium polymer battery - - - Lithium-iron-phosphate battery - - - Lithium-ION battery - - - Nickel metal hydride battery - - - - Enumeration of battery functions - - Battery function is unknown - - - Battery supports all flight systems - - - Battery for the propulsion system - - - Avionics battery - - - Payload battery - - - - Enumeration of VTOL states - - MAV is not configured as VTOL - - - VTOL is in transition from multicopter to fixed-wing - - - VTOL is in transition from fixed-wing to multicopter - - - VTOL is in multicopter state - - - VTOL is in fixed-wing state - - - - Enumeration of landed detector states - - MAV landed state is unknown - - - MAV is landed (on ground) - - - MAV is in air - - - - Enumeration of the ADSB altimeter types - - Altitude reported from a Baro source using QNH reference - - - Altitude reported from a GNSS source - - - - ADSB classification for the type of vehicle emitting the transponder signal - - - - - - - - - - - - - - - - - - - - - - - These flags indicate status such as data validity of each data source. Set = data valid - - - - - - - - - - Bitmask of options for the MAV_CMD_DO_REPOSITION - - The aircraft should immediately transition into guided. This should not be set for follow me applications - - - - - Flags in EKF_STATUS message - - True if the attitude estimate is good - - - - True if the horizontal velocity estimate is good - - - - True if the vertical velocity estimate is good - - - - True if the horizontal position (relative) estimate is good - - - - True if the horizontal position (absolute) estimate is good - - - - True if the vertical position (absolute) estimate is good - - - - True if the vertical position (above ground) estimate is good - - - - True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow) - - - - True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate - - - - True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate - - - - True if the EKF has detected a GPS glitch - - - - - - - throttle as a percentage from 0 ~ 100 - - - - throttle as an absolute PWM value (normally in range of 1000~2000) - - - - throttle pass-through from pilot's transmitter - - - - - - - ignore altitude field - - - ignore hdop field - - - ignore vdop field - - - ignore horizontal velocity field (vn and ve) - - - ignore vertical velocity field (vd) - - - ignore speed accuracy field - - - ignore horizontal accuracy field - - - ignore vertical accuracy field - - - - Possible actions an aircraft can take to avoid a collision. - - Ignore any potential collisions - - - Report potential collision - - - Ascend or Descend to avoid thread - - - Ascend or Descend to avoid thread - - - Aircraft to move perpendicular to the collision's velocity vector - - - Aircraft to fly directly back to its launch point - - - Aircraft to stop in place - - - - Aircraft-rated danger from this threat. - - Not a threat - - - Craft is mildly concerned about this threat - - - Craft is panicing, and may take actions to avoid threat - - - - Source of information about this collision. - - ID field references ADSB_VEHICLE packets - - - ID field references MAVLink SRC ID - - - - Type of GPS fix - - No GPS connected - - - No position information, GPS is connected - - - 2D position - - - 3D position - - - DGPS/SBAS aided 3D position - - - RTK float, 3D position - - - RTK Fixed, 3D position - - - Static fixed, typically used for base stations - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version - - - The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout. - Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - Battery voltage, in millivolts (1 = 1 millivolt) - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery - Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - - - The system time is the time of the master clock, typically the computer clock of the main onboard computer. - Timestamp of the master clock in microseconds since UNIX epoch. - Timestamp of the component clock since boot time in milliseconds. - - - - A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. - Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) - PING sequence - 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - - - Request to control this MAV - System the GCS requests control for - 0: request control of this MAV, 1: Release control of this MAV - 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - - - Accept / deny control of this MAV - ID of the GCS this message - 0: request control of this MAV, 1: Release control of this MAV - 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - - - Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety. - key - - - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component. - The system setting the mode - The new base mode - The new autopilot-specific mode. This field can be ignored by an autopilot. - - - - Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) - - - Request all parameters of this component. After this request, all parameters are emitted. - System ID - Component ID - - - Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - Total number of onboard parameters - Index of this onboard parameter - - - Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. - GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - - - The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites. - Number of satellites visible - Global satellite ID - 0: Satellite not used, 1: used for localization - Elevation (0: right on top of receiver, 90: on the horizon) of satellite - Direction of satellite, 0: 0 deg, 255: 360 deg. - Signal to noise ratio of satellite - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X acceleration (raw) - Y acceleration (raw) - Z acceleration (raw) - Angular speed around X axis (raw) - Angular speed around Y axis (raw) - Angular speed around Z axis (raw) - X Magnetic field (raw) - Y Magnetic field (raw) - Z Magnetic field (raw) - - - The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Absolute pressure (raw) - Differential pressure 1 (raw, 0 if nonexistant) - Differential pressure 2 (raw, 0 if nonexistant) - Raw Temperature measurement (raw) - - - The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field. - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right). - Timestamp (milliseconds since system boot) - Roll angle (rad, -pi..+pi) - Pitch angle (rad, -pi..+pi) - Yaw angle (rad, -pi..+pi) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion component 1, w (1 in null-rotation) - Quaternion component 2, x (0 in null-rotation) - Quaternion component 3, y (0 in null-rotation) - Quaternion component 4, z (0 in null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - X Speed - Y Speed - Z Speed - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the resolution of float is not sufficient. - Timestamp (milliseconds since system boot) - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude, positive north), expressed as m/s * 100 - Ground Y Speed (Longitude, positive east), expressed as m/s * 100 - Ground Z Speed (Altitude, positive down), expressed as m/s * 100 - Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - - - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000. Channels that are inactive should be set to UINT16_MAX. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. - Timestamp (microseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - Servo output 1 value, in microseconds - Servo output 2 value, in microseconds - Servo output 3 value, in microseconds - Servo output 4 value, in microseconds - Servo output 5 value, in microseconds - Servo output 6 value, in microseconds - Servo output 7 value, in microseconds - Servo output 8 value, in microseconds - - Servo output 9 value, in microseconds - Servo output 10 value, in microseconds - Servo output 11 value, in microseconds - Servo output 12 value, in microseconds - Servo output 13 value, in microseconds - Servo output 14 value, in microseconds - Servo output 15 value, in microseconds - Servo output 16 value, in microseconds - - - Request a partial list of mission items from the system/component. http://qgroundcontrol.org/mavlink/waypoint_protocol. If start and end index are the same, just send one waypoint. - System ID - Component ID - Start index, 0 by default - End index, -1 by default (-1: send list to end). Else a valid index of the list - - - This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED! - System ID - Component ID - Start index, 0 by default and smaller / equal to the largest index of the current onboard list. - End index, equal or greater than start index. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See also http://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Sequence - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position, global: latitude - PARAM6 / y position: global: longitude - PARAM7 / z position: global: altitude (relative or absolute, depending on frame. - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set the mission item with sequence number seq as current item. This means that the MAV will continue to this mission item on the shortest path (not following the mission items in-between). - System ID - Component ID - Sequence - - - Message that announces the sequence number of the current active mission item. The MAV will fly towards this mission item. - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of MISSIONs. - System ID - Component ID - Number of mission items in the sequence - - - Delete all mission items at once. - System ID - Component ID - - - A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next MISSION. - Sequence - - - Ack message during MISSION handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero). - System ID - Component ID - See MAV_MISSION_RESULT enum - - - As local waypoints exist, the global MISSION reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor. - System ID - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Bind a RC channel to a parameter. The parameter should change accoding to the RC channel value. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. - Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. - Initial parameter value - Scale, maps the RC range [-1, 1] to a parameter value - Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) - Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM_INT message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/MISSIONs to accept and which to reject. Safety areas are often enforced by national or competition regulations. - System ID - Component ID - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - Read out the safety zone the MAV currently assumes. - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - Attitude covariance - - - The state of the fixed wing navigation and position controller. - Current desired roll in degrees - Current desired pitch in degrees - Current desired heading in degrees - Bearing to current MISSION/target in degrees - Distance to active MISSION in meters - Current altitude error in meters - Current airspeed error in meters/second - Current crosstrack error on x-y plane in meters - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It is designed as scaled integer message since the resolution of float is not sufficient. NOTE: This message is intended for onboard networks / companion computers and higher-bandwidth links and optimized for accuracy and completeness. Please use the GLOBAL_POSITION_INT message for a minimal subset. - Timestamp (milliseconds since system boot) - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), above MSL - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s - Ground Y Speed (Longitude), expressed as m/s - Ground Z Speed (Altitude), expressed as m/s - Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - X Position - Y Position - Z Position - X Speed (m/s) - Y Speed (m/s) - Z Speed (m/s) - X Acceleration (m/s^2) - Y Acceleration (m/s^2) - Z Acceleration (m/s^2) - Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) - - - The PPM values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - The target requested to send the message stream. - The target requested to send the message stream. - The ID of the requested data stream - The requested message rate - 1 to start sending, 0 to stop sending. - - - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - The ID of the requested data stream - The message rate - 1 stream is enabled, 0 stream is stopped. - - - This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled an buttons are also transmit as boolean values of their - The system to be controlled. - X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. - Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. - Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. - R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. - A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. - - - The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of UINT16_MAX means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - System ID - Component ID - RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See alsohttp://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Metrics typically displayed on a HUD for fixed wing aircraft - Current airspeed in m/s - Current ground speed in m/s - Current heading in degrees, in compass units (0..360, 0=north) - Current throttle setting in integer percent, 0 to 100 - Current altitude (MSL), in meters - Current climb rate in meters/second - - - Message encoding a command with parameters as scaled integers. Scaling depends on the actual command value. - System ID - Component ID - The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h - The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Send a command with up to seven parameters to the MAV - System which should execute the command - Component which should execute the command, 0 for all components - Command ID, as defined by MAV_CMD enum. - 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - Parameter 1, as defined by MAV_CMD enum. - Parameter 2, as defined by MAV_CMD enum. - Parameter 3, as defined by MAV_CMD enum. - Parameter 4, as defined by MAV_CMD enum. - Parameter 5, as defined by MAV_CMD enum. - Parameter 6, as defined by MAV_CMD enum. - Parameter 7, as defined by MAV_CMD enum. - - - Report status of a command. Includes feedback wether the command was executed. - Command ID, as defined by MAV_CMD enum. - See MAV_RESULT enum - - - Setpoint in roll, pitch, yaw and thrust from the operator - Timestamp in milliseconds since system boot - Desired roll rate in radians per second - Desired pitch rate in radians per second - Desired yaw rate in radians per second - Collective thrust, normalized to 0 .. 1 - Flight mode switch position, 0.. 255 - Override mode switch position, 0.. 255 - - - Sets a desired vehicle attitude. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Reports the current commanded attitude of the vehicle as specified by the autopilot. This should match the commands sent in a SET_ATTITUDE_TARGET message if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Sets a desired vehicle position in a local north-east-down coordinate frame. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Sets a desired vehicle position, velocity, and/or acceleration in a global coordinate system (WGS84). Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - System ID - Component ID - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - Roll - Pitch - Yaw - - - DEPRECATED PACKET! Suffers from missing airspeed fields and singularities due to Euler angles. Please use HIL_STATE_QUATERNION instead. Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - Sent from autopilot to simulation. Hardware in the loop control outputs - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control output -1 .. 1 - Control output -1 .. 1 - Control output -1 .. 1 - Throttle 0 .. 1 - Aux 1, -1 .. 1 - Aux 2, -1 .. 1 - Aux 3, -1 .. 1 - Aux 4, -1 .. 1 - System mode (MAV_MODE) - Navigation mode (MAV_NAV_MODE) - - - Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - RC channel 1 value, in microseconds - RC channel 2 value, in microseconds - RC channel 3 value, in microseconds - RC channel 4 value, in microseconds - RC channel 5 value, in microseconds - RC channel 6 value, in microseconds - RC channel 7 value, in microseconds - RC channel 8 value, in microseconds - RC channel 9 value, in microseconds - RC channel 10 value, in microseconds - RC channel 11 value, in microseconds - RC channel 12 value, in microseconds - Receive signal strength indicator, 0: 0%, 255: 100% - - - Sent from autopilot to simulation. Hardware in the loop control outputs (replacement for HIL_CONTROLS) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. - System mode (MAV_MODE), includes arming state. - Flags as bitfield, reserved for future use. - - - Optical flow from a flow sensor (e.g. optical mouse sensor) - Timestamp (UNIX) - Sensor ID - Flow in pixels * 10 in x-sensor direction (dezi-pixels) - Flow in pixels * 10 in y-sensor direction (dezi-pixels) - Flow in meters in x-sensor direction, angular-speed compensated - Flow in meters in y-sensor direction, angular-speed compensated - Optical flow quality / confidence. 0: bad, 255: maximum quality - Ground distance in meters. Positive value: distance known. Negative value: Unknown distance - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X speed - Global Y speed - Global Z speed - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis (rad / sec) - Angular speed around Y axis (rad / sec) - Angular speed around Z axis (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature - - - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis in body frame (rad / sec) - Angular speed around Y axis in body frame (rad / sec) - Angular speed around Z axis in body frame (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure (airspeed) in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. - - - - Status of simulation environment, if used - True attitude quaternion component 1, w (1 in null-rotation) - True attitude quaternion component 2, x (0 in null-rotation) - True attitude quaternion component 3, y (0 in null-rotation) - True attitude quaternion component 4, z (0 in null-rotation) - Attitude roll expressed as Euler angles, not recommended except for human-readable outputs - Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs - Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees - Longitude in degrees - Altitude in meters - Horizontal position standard deviation - Vertical position standard deviation - True velocity in m/s in NORTH direction in earth-fixed NED frame - True velocity in m/s in EAST direction in earth-fixed NED frame - True velocity in m/s in DOWN direction in earth-fixed NED frame - - - - Status generated by radio and injected into MAVLink stream. - Local signal strength - Remote signal strength - Remaining free buffer space in percent. - Background noise level - Remote background noise level - Receive errors - Count of error corrected packets - - - File transfer message - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Time synchronization message. - Time sync timestamp 1 - Time sync timestamp 2 - - - Camera-IMU triggering and synchronisation message. - Timestamp for the image frame in microseconds - Image frame sequence - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 - GPS ground speed (m/s * 100). If unknown, set to: 65535 - GPS velocity in cm/s in NORTH direction in earth-fixed NED frame - GPS velocity in cm/s in EAST direction in earth-fixed NED frame - GPS velocity in cm/s in DOWN direction in earth-fixed NED frame - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 - Number of satellites visible. If unknown, set to 255 - - - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - Sent from simulation to autopilot, avoids in contrast to HIL_STATE singularities. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - Indicated airspeed, expressed as m/s * 100 - True airspeed, expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - The RAW IMU readings for secondary 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - Request a list of available logs. On some systems calling this may stop on-board logging until LOG_REQUEST_END is called. - System ID - Component ID - First log id (0 for first available) - Last log id (0xffff for last available) - - - Reply to LOG_REQUEST_LIST - Log id - Total number of logs - High log number - UTC timestamp of log in seconds since 1970, or 0 if not available - Size of the log (may be approximate) in bytes - - - Request a chunk of a log - System ID - Component ID - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes - - - Reply to LOG_REQUEST_DATA - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes (zero for end of log) - log data - - - Erase all logs - System ID - Component ID - - - Stop log transfer and resume normal logging - System ID - Component ID - - - data for injecting into the onboard GPS (used for DGPS) - System ID - Component ID - data length - raw data (110 is enough for 12 satellites of RTCMv2) - - - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - Number of DGPS satellites - Age of DGPS info - - - Power supply status - 5V rail voltage in millivolts - servo rail voltage in millivolts - power supply status flags (see MAV_POWER_STATUS enum) - - - Control a serial port. This can be used for raw access to an onboard serial peripheral such as a GPS or telemetry radio. It is designed to make it possible to update the devices firmware via MAVLink messages or change the devices settings. A message with zero bytes can be used to change just the baudrate. - See SERIAL_CONTROL_DEV enum - See SERIAL_CONTROL_FLAG enum - Timeout for reply data in milliseconds - Baudrate of transfer. Zero means no change. - how many bytes in this transfer - serial data - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - The RAW IMU readings for 3rd 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) - total data size in bytes (set on ACK only) - Width of a matrix or image - Height of a matrix or image - number of packets beeing sent (set on ACK only) - payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) - JPEG quality out of [1,100] - - - sequence number (starting with 0 on every transmission) - image data bytes - - - Time since system boot - Minimum distance the sensor can measure in centimeters - Maximum distance the sensor can measure in centimeters - Current distance reading - Type from MAV_DISTANCE_SENSOR enum. - Onboard ID of the sensor - Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. - Measurement covariance in centimeters, 0 for unknown / invalid readings - - - Request for terrain data and terrain status - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) - - - Terrain data sent from GCS. The lat/lon and grid_spacing must be the same as a lat/lon from a TERRAIN_REQUEST - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - bit within the terrain request mask - Terrain data in meters AMSL - - - Request that the vehicle report terrain height at the given location. Used by GCS to check if vehicle has all terrain data needed for a mission. - Latitude (degrees *10^7) - Longitude (degrees *10^7) - - - Response from a TERRAIN_CHECK request - Latitude (degrees *10^7) - Longitude (degrees *10^7) - grid spacing (zero if terrain at this location unavailable) - Terrain height in meters AMSL - Current vehicle height above lat/lon terrain height (meters) - Number of 4x4 terrain blocks waiting to be received or read from disk - Number of 4x4 terrain blocks in memory - - - Barometer readings for 2nd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - Motion capture attitude and position - Timestamp (micros since boot or Unix epoch) - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - X position in meters (NED) - Y position in meters (NED) - Z position in meters (NED) - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - System ID - Component ID - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - The current system altitude. - Timestamp (micros since boot or Unix epoch) - This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. - This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. - This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. - This is the altitude above the home position. It resets on each change of the current home position. - This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. - This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. - - - The autopilot is requesting a resource (file, binary, other type of data) - Request ID. This ID should be re-used when sending back URI contents - The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary - The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) - The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. - The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). - - - Barometer readings for 3rd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - current motion information from a designated system - Timestamp in milliseconds since system boot - bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - AMSL, in meters - target velocity (0,0,0) for unknown - linear target acceleration (0,0,0) for unknown - (1 0 0 0 for unknown) - (0 0 0 for unknown) - eph epv - button states or switches of a tracker device - - - The smoothed, monotonic system state used to feed the control loops of the system. - Timestamp (micros since boot or Unix epoch) - X acceleration in body frame - Y acceleration in body frame - Z acceleration in body frame - X velocity in body frame - Y velocity in body frame - Z velocity in body frame - X position in local frame - Y position in local frame - Z position in local frame - Airspeed, set to -1 if unknown - Variance of body velocity estimate - Variance in local position - The attitude, represented as Quaternion - Angular rate in roll axis - Angular rate in pitch axis - Angular rate in yaw axis - - - Battery information - Battery ID - Function of the battery - Type (chemistry) of the battery - Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. - Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate - Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery - - - Version and capability of autopilot software - bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) - Firmware version number - Middleware version number - Operating system version number - HW / board version (last 8 bytes should be silicon ID, if any) - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - ID of the board vendor - ID of the product - UID if provided by hardware - - - The location of a landing area captured from a downward facing camera - Timestamp (micros since boot or Unix epoch) - The ID of the target if multiple targets are present - MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. - X-axis angular offset (in radians) of the target from the center of the image - Y-axis angular offset (in radians) of the target from the center of the image - Distance to the target from the vehicle in meters - Size in radians of target along x-axis - Size in radians of target along y-axis - - - - Estimator status message including flags, innovation test ratios and estimated accuracies. The flags message is an integer bitmask containing information on which EKF outputs are valid. See the ESTIMATOR_STATUS_FLAGS enum definition for further information. The innovaton test ratios show the magnitude of the sensor innovation divided by the innovation check threshold. Under normal operation the innovaton test ratios should be below 0.5 with occasional values up to 1.0. Values greater than 1.0 should be rare under normal operation and indicate that a measurement has been rejected by the filter. The user should be notified if an innovation test ratio greater than 1.0 is recorded. Notifications for values in the range between 0.5 and 1.0 should be optional and controllable by the user. - Timestamp (micros since boot or Unix epoch) - Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. - Velocity innovation test ratio - Horizontal position innovation test ratio - Vertical position innovation test ratio - Magnetometer innovation test ratio - Height above terrain innovation test ratio - True airspeed innovation test ratio - Horizontal position 1-STD accuracy relative to the EKF local origin (m) - Vertical position 1-STD accuracy relative to the EKF local origin (m) - - - Timestamp (micros since boot or Unix epoch) - Wind in X (NED) direction in m/s - Wind in Y (NED) direction in m/s - Wind in Z (NED) direction in m/s - Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. - Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. - AMSL altitude (m) this measurement was taken at - Horizontal speed 1-STD accuracy - Vertical speed 1-STD accuracy - - - GPS sensor input message. This is a raw sensor value sent by the GPS. This is NOT the global position estimate of the sytem. - Timestamp (micros since boot or Unix epoch) - ID of the GPS for multiple GPS inputs - Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. - GPS time (milliseconds from start of GPS week) - GPS week number - 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in m (positive for up) - GPS HDOP horizontal dilution of position in m - GPS VDOP vertical dilution of position in m - GPS velocity in m/s in NORTH direction in earth-fixed NED frame - GPS velocity in m/s in EAST direction in earth-fixed NED frame - GPS velocity in m/s in DOWN direction in earth-fixed NED frame - GPS speed accuracy in m/s - GPS horizontal accuracy in m - GPS vertical accuracy in m - Number of satellites visible. - - - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS (used for DGPS) - LSB: 1 means message is fragmented - data length - RTCM message (may be fragmented) - - - Vibration levels and accelerometer clipping - Timestamp (micros since boot or Unix epoch) - Vibration levels on X-axis - Vibration levels on Y-axis - Vibration levels on Z-axis - first accelerometer clipping count - second accelerometer clipping count - third accelerometer clipping count - - - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION command. The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The position the system will return to and land on. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - System ID. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - This interface replaces DATA_STREAM - The ID of the requested MAVLink message. v1.0 is limited to 254 messages. - The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. - - - Provides state for additional features - The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. - The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. - - - The location and information of an ADSB vehicle - ICAO address - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Type from ADSB_ALTITUDE_TYPE enum - Altitude(ASL) in millimeters - Course over ground in centidegrees - The horizontal velocity in centimeters/second - The vertical velocity in centimeters/second, positive is up - The callsign, 8+null - Type from ADSB_EMITTER_TYPE enum - Time since last communication in seconds - Flags to indicate various statuses including valid data fields - Squawk code - - - Information about a potential collision - Collision data source - Unique identifier, domain based on src field - Action that is being taken to avoid this collision - How concerned the aircraft is about this collision - Estimated time until collision occurs (seconds) - Closest vertical distance in meters between vehicle and object - Closest horizontal distance in meteres between vehicle and object - - - Message implementing parts of the V2 payload specs in V1 frames for transitional support. - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Starting address of the debug variables - Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below - Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 - Memory contents at specified address - - - Name - Timestamp - x - y - z - - - Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Floating point value - - - Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Signed integer value - - - Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz). - Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. - Status text message, without null termination character - - - Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N. - Timestamp (milliseconds since system boot) - index of debug variable - DEBUG value - - - - - Setup a MAVLink2 signing key. If called with secret_key of all zero and zero initial_timestamp will disable signing - system id of the target - component ID of the target - signing key - initial timestamp - - - - Report button state change - Timestamp (milliseconds since system boot) - Time of last change of button state - Bitmap state of buttons - - - - Control vehicle tone generation (buzzer) - System ID - Component ID - tune in board specific format - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.py deleted file mode 100644 index d46b04501..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.py +++ /dev/null @@ -1,13198 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: matrixpilot.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'matrixpilot' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_FLEXIFUNCTION_SET = 150 -MAVLINK_MSG_ID_FLEXIFUNCTION_READ_REQ = 151 -MAVLINK_MSG_ID_FLEXIFUNCTION_BUFFER_FUNCTION = 152 -MAVLINK_MSG_ID_FLEXIFUNCTION_BUFFER_FUNCTION_ACK = 153 -MAVLINK_MSG_ID_FLEXIFUNCTION_DIRECTORY = 155 -MAVLINK_MSG_ID_FLEXIFUNCTION_DIRECTORY_ACK = 156 -MAVLINK_MSG_ID_FLEXIFUNCTION_COMMAND = 157 -MAVLINK_MSG_ID_FLEXIFUNCTION_COMMAND_ACK = 158 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F2_A = 170 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F2_B = 171 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F4 = 172 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F5 = 173 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F6 = 174 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F7 = 175 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F8 = 176 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F13 = 177 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F14 = 178 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F15 = 179 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F16 = 180 -MAVLINK_MSG_ID_ALTITUDES = 181 -MAVLINK_MSG_ID_AIRSPEEDS = 182 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_flexifunction_set_message(MAVLink_message): - ''' - Depreciated but used as a compiler flag. Do not remove - ''' - id = MAVLINK_MSG_ID_FLEXIFUNCTION_SET - name = 'FLEXIFUNCTION_SET' - fieldnames = ['target_system', 'target_component'] - ordered_fieldnames = [ 'target_system', 'target_component' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.xml deleted file mode 100644 index 29d368d2a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/matrixpilot.xml +++ /dev/null @@ -1,284 +0,0 @@ - - - common.xml - - - - - - - - Action required when performing CMD_PREFLIGHT_STORAGE - - Read all parameters from storage - - - Write all parameters to storage - - - Clear all parameters in storage - - - Read specific parameters from storage - - - Write specific parameters to storage - - - Clear specific parameters in storage - - - do nothing - - - - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Storage action: Action defined by MAV_PREFLIGHT_STORAGE_ACTION_ADVANCED - Storage area as defined by parameter database - Storage flags as defined by parameter database - Empty - Empty - Empty - Empty - - - - - - - - - Depreciated but used as a compiler flag. Do not remove - System ID - Component ID - - - Reqest reading of flexifunction data - System ID - Component ID - Type of flexifunction data requested - index into data where needed - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - Total count of functions - Address in the flexifunction data, Set to 0xFFFF to use address in target memory - Size of the - Settings data - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - Settings data - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - Flexifunction command type - - - Acknowldge sucess or failure of a flexifunction command - Command acknowledged - result of acknowledge - - - Backwards compatible MAVLink version of SERIAL_UDB_EXTRA - F2: Format Part A - Serial UDB Extra Time - Serial UDB Extra Status - Serial UDB Extra Latitude - Serial UDB Extra Longitude - Serial UDB Extra Altitude - Serial UDB Extra Waypoint Index - Serial UDB Extra Rmat 0 - Serial UDB Extra Rmat 1 - Serial UDB Extra Rmat 2 - Serial UDB Extra Rmat 3 - Serial UDB Extra Rmat 4 - Serial UDB Extra Rmat 5 - Serial UDB Extra Rmat 6 - Serial UDB Extra Rmat 7 - Serial UDB Extra Rmat 8 - Serial UDB Extra GPS Course Over Ground - Serial UDB Extra Speed Over Ground - Serial UDB Extra CPU Load - Serial UDB Extra Voltage in MilliVolts - Serial UDB Extra 3D IMU Air Speed - Serial UDB Extra Estimated Wind 0 - Serial UDB Extra Estimated Wind 1 - Serial UDB Extra Estimated Wind 2 - Serial UDB Extra Magnetic Field Earth 0 - Serial UDB Extra Magnetic Field Earth 1 - Serial UDB Extra Magnetic Field Earth 2 - Serial UDB Extra Number of Sattelites in View - Serial UDB Extra GPS Horizontal Dilution of Precision - - - Backwards compatible version of SERIAL_UDB_EXTRA - F2: Part B - Serial UDB Extra Time - Serial UDB Extra PWM Input Channel 1 - Serial UDB Extra PWM Input Channel 2 - Serial UDB Extra PWM Input Channel 3 - Serial UDB Extra PWM Input Channel 4 - Serial UDB Extra PWM Input Channel 5 - Serial UDB Extra PWM Input Channel 6 - Serial UDB Extra PWM Input Channel 7 - Serial UDB Extra PWM Input Channel 8 - Serial UDB Extra PWM Input Channel 9 - Serial UDB Extra PWM Input Channel 10 - Serial UDB Extra PWM Output Channel 1 - Serial UDB Extra PWM Output Channel 2 - Serial UDB Extra PWM Output Channel 3 - Serial UDB Extra PWM Output Channel 4 - Serial UDB Extra PWM Output Channel 5 - Serial UDB Extra PWM Output Channel 6 - Serial UDB Extra PWM Output Channel 7 - Serial UDB Extra PWM Output Channel 8 - Serial UDB Extra PWM Output Channel 9 - Serial UDB Extra PWM Output Channel 10 - Serial UDB Extra IMU Location X - Serial UDB Extra IMU Location Y - Serial UDB Extra IMU Location Z - Serial UDB Extra Status Flags - Serial UDB Extra Oscillator Failure Count - Serial UDB Extra IMU Velocity X - Serial UDB Extra IMU Velocity Y - Serial UDB Extra IMU Velocity Z - Serial UDB Extra Current Waypoint Goal X - Serial UDB Extra Current Waypoint Goal Y - Serial UDB Extra Current Waypoint Goal Z - Serial UDB Extra Stack Memory Free - - - Backwards compatible version of SERIAL_UDB_EXTRA F4: format - Serial UDB Extra Roll Stabilization with Ailerons Enabled - Serial UDB Extra Roll Stabilization with Rudder Enabled - Serial UDB Extra Pitch Stabilization Enabled - Serial UDB Extra Yaw Stabilization using Rudder Enabled - Serial UDB Extra Yaw Stabilization using Ailerons Enabled - Serial UDB Extra Navigation with Ailerons Enabled - Serial UDB Extra Navigation with Rudder Enabled - Serial UDB Extra Type of Alitude Hold when in Stabilized Mode - Serial UDB Extra Type of Alitude Hold when in Waypoint Mode - Serial UDB Extra Firmware racing mode enabled - - - Backwards compatible version of SERIAL_UDB_EXTRA F5: format - Serial UDB YAWKP_AILERON Gain for Proporional control of navigation - Serial UDB YAWKD_AILERON Gain for Rate control of navigation - Serial UDB Extra ROLLKP Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD Gain for Rate control of roll stabilization - YAW_STABILIZATION_AILERON Proportional control - Gain For Boosting Manual Aileron control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F6: format - Serial UDB Extra PITCHGAIN Proportional Control - Serial UDB Extra Pitch Rate Control - Serial UDB Extra Rudder to Elevator Mix - Serial UDB Extra Roll to Elevator Mix - Gain For Boosting Manual Elevator control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F7: format - Serial UDB YAWKP_RUDDER Gain for Proporional control of navigation - Serial UDB YAWKD_RUDDER Gain for Rate control of navigation - Serial UDB Extra ROLLKP_RUDDER Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD_RUDDER Gain for Rate control of roll stabilization - SERIAL UDB EXTRA Rudder Boost Gain to Manual Control when stabilized - Serial UDB Extra Return To Landing - Angle to Pitch Plane Down - - - Backwards compatible version of SERIAL_UDB_EXTRA F8: format - Serial UDB Extra HEIGHT_TARGET_MAX - Serial UDB Extra HEIGHT_TARGET_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MAX - Serial UDB Extra ALT_HOLD_PITCH_MIN - Serial UDB Extra ALT_HOLD_PITCH_MAX - Serial UDB Extra ALT_HOLD_PITCH_HIGH - - - Backwards compatible version of SERIAL_UDB_EXTRA F13: format - Serial UDB Extra GPS Week Number - Serial UDB Extra MP Origin Latitude - Serial UDB Extra MP Origin Longitude - Serial UDB Extra MP Origin Altitude Above Sea Level - - - Backwards compatible version of SERIAL_UDB_EXTRA F14: format - Serial UDB Extra Wind Estimation Enabled - Serial UDB Extra Type of GPS Unit - Serial UDB Extra Dead Reckoning Enabled - Serial UDB Extra Type of UDB Hardware - Serial UDB Extra Type of Airframe - Serial UDB Extra Reboot Regitster of DSPIC - Serial UDB Extra Last dspic Trap Flags - Serial UDB Extra Type Program Address of Last Trap - Serial UDB Extra Number of Ocillator Failures - Serial UDB Extra UDB Internal Clock Configuration - Serial UDB Extra Type of Flight Plan - - - Backwards compatible version of SERIAL_UDB_EXTRA F15 and F16: format - Serial UDB Extra Model Name Of Vehicle - Serial UDB Extra Registraton Number of Vehicle - - - Serial UDB Extra Name of Expected Lead Pilot - Serial UDB Extra URL of Lead Pilot or Team - - - The altitude measured by sensors and IMU - Timestamp (milliseconds since system boot) - GPS altitude in meters, expressed as * 1000 (millimeters), above MSL - IMU altitude above ground in meters, expressed as * 1000 (millimeters) - barometeric altitude above ground in meters, expressed as * 1000 (millimeters) - Optical flow altitude above ground in meters, expressed as * 1000 (millimeters) - Rangefinder Altitude above ground in meters, expressed as * 1000 (millimeters) - Extra altitude above ground in meters, expressed as * 1000 (millimeters) - - - The airspeed measured by sensors and IMU - Timestamp (milliseconds since system boot) - Airspeed estimate from IMU, cm/s - Pitot measured forward airpseed, cm/s - Hot wire anenometer measured airspeed, cm/s - Ultrasonic measured airspeed, cm/s - Angle of attack sensor, degrees * 10 - Yaw angle sensor, degrees * 10 - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/minimal.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/minimal.py deleted file mode 100644 index 23cd2a5e0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/minimal.py +++ /dev/null @@ -1,822 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: minimal.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'minimal' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - 2 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - PIXHAWK autopilot, http://pixhawk.ethz.ch - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Octorotor - - - Flapping wing - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.py deleted file mode 100644 index 9883b2b15..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.py +++ /dev/null @@ -1,12084 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: paparazzi.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'paparazzi' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SCRIPT_ITEM = 180 -MAVLINK_MSG_ID_SCRIPT_REQUEST = 181 -MAVLINK_MSG_ID_SCRIPT_REQUEST_LIST = 182 -MAVLINK_MSG_ID_SCRIPT_COUNT = 183 -MAVLINK_MSG_ID_SCRIPT_CURRENT = 184 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_script_item_message(MAVLink_message): - ''' - Message encoding a mission script item. This message is - emitted upon a request for the next script item. - ''' - id = MAVLINK_MSG_ID_SCRIPT_ITEM - name = 'SCRIPT_ITEM' - fieldnames = ['target_system', 'target_component', 'seq', 'name'] - ordered_fieldnames = [ 'seq', 'target_system', 'target_component', 'name' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.xml deleted file mode 100755 index 220007558..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/paparazzi.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - common.xml - 3 - - - - - - Message encoding a mission script item. This message is emitted upon a request for the next script item. - System ID - Component ID - Sequence - The name of the mission script, NULL terminated. - - - Request script item with the sequence number seq. The response of the system to this message should be a SCRIPT_ITEM message. - System ID - Component ID - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to SCRIPT_REQUEST_LIST by the MAV to get the number of mission scripts. - System ID - Component ID - Number of script items in the sequence - - - This message informs about the currently active SCRIPT. - Active Sequence - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.py deleted file mode 100644 index 9c7afc8a8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.py +++ /dev/null @@ -1,12261 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: python_array_test.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'python_array_test' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_ARRAY_TEST_0 = 150 -MAVLINK_MSG_ID_ARRAY_TEST_1 = 151 -MAVLINK_MSG_ID_ARRAY_TEST_3 = 153 -MAVLINK_MSG_ID_ARRAY_TEST_4 = 154 -MAVLINK_MSG_ID_ARRAY_TEST_5 = 155 -MAVLINK_MSG_ID_ARRAY_TEST_6 = 156 -MAVLINK_MSG_ID_ARRAY_TEST_7 = 157 -MAVLINK_MSG_ID_ARRAY_TEST_8 = 158 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_array_test_0_message(MAVLink_message): - ''' - Array test #0. - ''' - id = MAVLINK_MSG_ID_ARRAY_TEST_0 - name = 'ARRAY_TEST_0' - fieldnames = ['v1', 'ar_i8', 'ar_u8', 'ar_u16', 'ar_u32'] - ordered_fieldnames = [ 'ar_u32', 'ar_u16', 'v1', 'ar_i8', 'ar_u8' ] - format = '<4I4HB4b4B' - native_format = bytearray(' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.xml deleted file mode 100644 index f230d0126..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/python_array_test.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - -common.xml - - - Array test #0. - Stub field - Value array - Value array - Value array - Value array - - - Array test #1. - Value array - - - Array test #3. - Stub field - Value array - - - Array test #4. - Value array - Stub field - - - Array test #5. - Value array - Value array - - - Array test #6. - Stub field - Stub field - Stub field - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #7. - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #8. - Stub field - Value array - Value array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.py deleted file mode 100644 index 9c0c0eefc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.py +++ /dev/null @@ -1,13030 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: slugs.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'slugs' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_DO_NOTHING = 10001 # Does nothing. -enums['MAV_CMD'][10001] = EnumEntry('MAV_CMD_DO_NOTHING', '''Does nothing.''') -enums['MAV_CMD'][10001].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_RETURN_TO_BASE = 10011 # Return vehicle to base. -enums['MAV_CMD'][10011] = EnumEntry('MAV_CMD_RETURN_TO_BASE', '''Return vehicle to base.''') -enums['MAV_CMD'][10011].param[1] = '''0: return to base, 1: track mobile base''' -MAV_CMD_STOP_RETURN_TO_BASE = 10012 # Stops the vehicle from returning to base and resumes flight. -enums['MAV_CMD'][10012] = EnumEntry('MAV_CMD_STOP_RETURN_TO_BASE', '''Stops the vehicle from returning to base and resumes flight. ''') -MAV_CMD_TURN_LIGHT = 10013 # Turns the vehicle's visible or infrared lights on or off. -enums['MAV_CMD'][10013] = EnumEntry('MAV_CMD_TURN_LIGHT', '''Turns the vehicle's visible or infrared lights on or off.''') -enums['MAV_CMD'][10013].param[1] = '''0: visible lights, 1: infrared lights''' -enums['MAV_CMD'][10013].param[2] = '''0: turn on, 1: turn off''' -MAV_CMD_GET_MID_LEVEL_COMMANDS = 10014 # Requests vehicle to send current mid-level commands to ground station. -enums['MAV_CMD'][10014] = EnumEntry('MAV_CMD_GET_MID_LEVEL_COMMANDS', '''Requests vehicle to send current mid-level commands to ground station.''') -MAV_CMD_MIDLEVEL_STORAGE = 10015 # Requests storage of mid-level commands. -enums['MAV_CMD'][10015] = EnumEntry('MAV_CMD_MIDLEVEL_STORAGE', '''Requests storage of mid-level commands.''') -enums['MAV_CMD'][10015].param[1] = '''Mid-level command storage: 0: read from flash/EEPROM, 1: write to flash/EEPROM''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# SLUGS_MODE -enums['SLUGS_MODE'] = {} -SLUGS_MODE_NONE = 0 # No change to SLUGS mode. -enums['SLUGS_MODE'][0] = EnumEntry('SLUGS_MODE_NONE', '''No change to SLUGS mode.''') -SLUGS_MODE_LIFTOFF = 1 # Vehicle is in liftoff mode. -enums['SLUGS_MODE'][1] = EnumEntry('SLUGS_MODE_LIFTOFF', '''Vehicle is in liftoff mode.''') -SLUGS_MODE_PASSTHROUGH = 2 # Vehicle is in passthrough mode, being controlled by a pilot. -enums['SLUGS_MODE'][2] = EnumEntry('SLUGS_MODE_PASSTHROUGH', '''Vehicle is in passthrough mode, being controlled by a pilot.''') -SLUGS_MODE_WAYPOINT = 3 # Vehicle is in waypoint mode, navigating to waypoints. -enums['SLUGS_MODE'][3] = EnumEntry('SLUGS_MODE_WAYPOINT', '''Vehicle is in waypoint mode, navigating to waypoints.''') -SLUGS_MODE_MID_LEVEL = 4 # Vehicle is executing mid-level commands. -enums['SLUGS_MODE'][4] = EnumEntry('SLUGS_MODE_MID_LEVEL', '''Vehicle is executing mid-level commands.''') -SLUGS_MODE_RETURNING = 5 # Vehicle is returning to the home location. -enums['SLUGS_MODE'][5] = EnumEntry('SLUGS_MODE_RETURNING', '''Vehicle is returning to the home location.''') -SLUGS_MODE_LANDING = 6 # Vehicle is landing. -enums['SLUGS_MODE'][6] = EnumEntry('SLUGS_MODE_LANDING', '''Vehicle is landing.''') -SLUGS_MODE_LOST = 7 # Lost connection with vehicle. -enums['SLUGS_MODE'][7] = EnumEntry('SLUGS_MODE_LOST', '''Lost connection with vehicle.''') -SLUGS_MODE_SELECTIVE_PASSTHROUGH = 8 # Vehicle is in selective passthrough mode, where selected surfaces are - # being manually controlled. -enums['SLUGS_MODE'][8] = EnumEntry('SLUGS_MODE_SELECTIVE_PASSTHROUGH', '''Vehicle is in selective passthrough mode, where selected surfaces are being manually controlled.''') -SLUGS_MODE_ISR = 9 # Vehicle is in ISR mode, performing reconaissance at a point specified - # by ISR_LOCATION message. -enums['SLUGS_MODE'][9] = EnumEntry('SLUGS_MODE_ISR', '''Vehicle is in ISR mode, performing reconaissance at a point specified by ISR_LOCATION message.''') -SLUGS_MODE_LINE_PATROL = 10 # Vehicle is patrolling along lines between waypoints. -enums['SLUGS_MODE'][10] = EnumEntry('SLUGS_MODE_LINE_PATROL', '''Vehicle is patrolling along lines between waypoints.''') -SLUGS_MODE_GROUNDED = 11 # Vehicle is grounded or an error has occurred. -enums['SLUGS_MODE'][11] = EnumEntry('SLUGS_MODE_GROUNDED', '''Vehicle is grounded or an error has occurred.''') -SLUGS_MODE_ENUM_END = 12 # -enums['SLUGS_MODE'][12] = EnumEntry('SLUGS_MODE_ENUM_END', '''''') - -# CONTROL_SURFACE_FLAG -enums['CONTROL_SURFACE_FLAG'] = {} -CONTROL_SURFACE_FLAG_RIGHT_FLAP = 1 # 0b00000001 Right flap control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][1] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_FLAP', '''0b00000001 Right flap control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_FLAP = 2 # 0b00000010 Left flap control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][2] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_FLAP', '''0b00000010 Left flap control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RIGHT_ELEVATOR = 4 # 0b00000100 Right elevator control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][4] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_ELEVATOR', '''0b00000100 Right elevator control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_ELEVATOR = 8 # 0b00001000 Left elevator control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][8] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_ELEVATOR', '''0b00001000 Left elevator control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RUDDER = 16 # 0b00010000 Rudder control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][16] = EnumEntry('CONTROL_SURFACE_FLAG_RUDDER', '''0b00010000 Rudder control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RIGHT_AILERON = 32 # 0b00100000 Right aileron control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][32] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_AILERON', '''0b00100000 Right aileron control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_AILERON = 64 # 0b01000000 Left aileron control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][64] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_AILERON', '''0b01000000 Left aileron control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_THROTTLE = 128 # 0b10000000 Throttle control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][128] = EnumEntry('CONTROL_SURFACE_FLAG_THROTTLE', '''0b10000000 Throttle control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_ENUM_END = 129 # -enums['CONTROL_SURFACE_FLAG'][129] = EnumEntry('CONTROL_SURFACE_FLAG_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_CPU_LOAD = 170 -MAVLINK_MSG_ID_SENSOR_BIAS = 172 -MAVLINK_MSG_ID_DIAGNOSTIC = 173 -MAVLINK_MSG_ID_SLUGS_NAVIGATION = 176 -MAVLINK_MSG_ID_DATA_LOG = 177 -MAVLINK_MSG_ID_GPS_DATE_TIME = 179 -MAVLINK_MSG_ID_MID_LVL_CMDS = 180 -MAVLINK_MSG_ID_CTRL_SRFC_PT = 181 -MAVLINK_MSG_ID_SLUGS_CAMERA_ORDER = 184 -MAVLINK_MSG_ID_CONTROL_SURFACE = 185 -MAVLINK_MSG_ID_SLUGS_MOBILE_LOCATION = 186 -MAVLINK_MSG_ID_SLUGS_CONFIGURATION_CAMERA = 188 -MAVLINK_MSG_ID_ISR_LOCATION = 189 -MAVLINK_MSG_ID_VOLT_SENSOR = 191 -MAVLINK_MSG_ID_PTZ_STATUS = 192 -MAVLINK_MSG_ID_UAV_STATUS = 193 -MAVLINK_MSG_ID_STATUS_GPS = 194 -MAVLINK_MSG_ID_NOVATEL_DIAG = 195 -MAVLINK_MSG_ID_SENSOR_DIAG = 196 -MAVLINK_MSG_ID_BOOT = 197 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_cpu_load_message(MAVLink_message): - ''' - Sensor and DSC control loads. - ''' - id = MAVLINK_MSG_ID_CPU_LOAD - name = 'CPU_LOAD' - fieldnames = ['sensLoad', 'ctrlLoad', 'batVolt'] - ordered_fieldnames = [ 'batVolt', 'sensLoad', 'ctrlLoad' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.xml deleted file mode 100755 index a985eab38..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/slugs.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - common.xml - - - - - - Does nothing. - 1 to arm, 0 to disarm - - - - - - Return vehicle to base. - 0: return to base, 1: track mobile base - - - Stops the vehicle from returning to base and resumes flight. - - - Turns the vehicle's visible or infrared lights on or off. - 0: visible lights, 1: infrared lights - 0: turn on, 1: turn off - - - Requests vehicle to send current mid-level commands to ground station. - - - Requests storage of mid-level commands. - Mid-level command storage: 0: read from flash/EEPROM, 1: write to flash/EEPROM - - - - - - Slugs-specific navigation modes. - - No change to SLUGS mode. - - - Vehicle is in liftoff mode. - - - Vehicle is in passthrough mode, being controlled by a pilot. - - - Vehicle is in waypoint mode, navigating to waypoints. - - - Vehicle is executing mid-level commands. - - - Vehicle is returning to the home location. - - - Vehicle is landing. - - - Lost connection with vehicle. - - - Vehicle is in selective passthrough mode, where selected surfaces are being manually controlled. - - - Vehicle is in ISR mode, performing reconaissance at a point specified by ISR_LOCATION message. - - - Vehicle is patrolling along lines between waypoints. - - - Vehicle is grounded or an error has occurred. - - - - - These flags encode the control surfaces for selective passthrough mode. If a bit is set then the pilot console - has control of the surface, and if not then the autopilot has control of the surface. - - 0b10000000 Throttle control passes through to pilot console. - - - 0b01000000 Left aileron control passes through to pilot console. - - - 0b00100000 Right aileron control passes through to pilot console. - - - 0b00010000 Rudder control passes through to pilot console. - - - 0b00001000 Left elevator control passes through to pilot console. - - - 0b00000100 Right elevator control passes through to pilot console. - - - 0b00000010 Left flap control passes through to pilot console. - - - 0b00000001 Right flap control passes through to pilot console. - - - - - - - - Sensor and DSC control loads. - Sensor DSC Load - Control DSC Load - Battery Voltage in millivolts - - - - Accelerometer and gyro biases. - Accelerometer X bias (m/s) - Accelerometer Y bias (m/s) - Accelerometer Z bias (m/s) - Gyro X bias (rad/s) - Gyro Y bias (rad/s) - Gyro Z bias (rad/s) - - - - Configurable diagnostic messages. - Diagnostic float 1 - Diagnostic float 2 - Diagnostic float 3 - Diagnostic short 1 - Diagnostic short 2 - Diagnostic short 3 - - - - Data used in the navigation algorithm. - Measured Airspeed prior to the nav filter in m/s - Commanded Roll - Commanded Pitch - Commanded Turn rate - Y component of the body acceleration - Total Distance to Run on this leg of Navigation - Remaining distance to Run on this leg of Navigation - Origin WP - Destination WP - Commanded altitude in 0.1 m - - - - Configurable data log probes to be used inside Simulink - Log value 1 - Log value 2 - Log value 3 - Log value 4 - Log value 5 - Log value 6 - - - - Pilot console PWM messges. - Year reported by Gps - Month reported by Gps - Day reported by Gps - Hour reported by Gps - Min reported by Gps - Sec reported by Gps - Clock Status. See table 47 page 211 OEMStar Manual - Visible satellites reported by Gps - Used satellites in Solution - GPS+GLONASS satellites in Solution - GPS and GLONASS usage mask (bit 0 GPS_used? bit_4 GLONASS_used?) - Percent used GPS - - - - Mid Level commands sent from the GS to the autopilot. These are only sent when being operated in mid-level commands mode from the ground. - The system setting the commands - Commanded Altitude in meters - Commanded Airspeed in m/s - Commanded Turnrate in rad/s - - - - This message sets the control surfaces for selective passthrough mode. - The system setting the commands - Bitfield containing the passthrough configuration, see CONTROL_SURFACE_FLAG ENUM. - - - - Orders generated to the SLUGS camera mount. - The system reporting the action - Order the mount to pan: -1 left, 0 No pan motion, +1 right - Order the mount to tilt: -1 down, 0 No tilt motion, +1 up - Order the zoom values 0 to 10 - Orders the camera mount to move home. The other fields are ignored when this field is set. 1: move home, 0 ignored - - - - Control for surface; pending and order to origin. - The system setting the commands - ID control surface send 0: throttle 1: aileron 2: elevator 3: rudder - Pending - Order to origin - - - - - - - Transmits the last known position of the mobile GS to the UAV. Very relevant when Track Mobile is enabled - The system reporting the action - Mobile Latitude - Mobile Longitude - - - - Control for camara. - The system setting the commands - ID 0: brightness 1: aperture 2: iris 3: ICR 4: backlight - 1: up/on 2: down/off 3: auto/reset/no action - - - - Transmits the position of watch - The system reporting the action - ISR Latitude - ISR Longitude - ISR Height - Option 1 - Option 2 - Option 3 - - - - - - - Transmits the readings from the voltage and current sensors - It is the value of reading 2: 0 - Current, 1 - Foreward Sonar, 2 - Back Sonar, 3 - RPM - Voltage in uS of PWM. 0 uS = 0V, 20 uS = 21.5V - Depends on the value of r2Type (0) Current consumption in uS of PWM, 20 uS = 90Amp (1) Distance in cm (2) Distance in cm (3) Absolute value - - - - Transmits the actual Pan, Tilt and Zoom values of the camera unit - The actual Zoom Value - The Pan value in 10ths of degree - The Tilt value in 10ths of degree - - - - Transmits the actual status values UAV in flight - The ID system reporting the action - Latitude UAV - Longitude UAV - Altitude UAV - Speed UAV - Course UAV - - - - This contains the status of the GPS readings - Number of times checksum has failed - The quality indicator, 0=fix not available or invalid, 1=GPS fix, 2=C/A differential GPS, 6=Dead reckoning mode, 7=Manual input mode (fixed position), 8=Simulator mode, 9= WAAS a - Indicates if GN, GL or GP messages are being received - A = data valid, V = data invalid - Magnetic variation, degrees - Magnetic variation direction E/W. Easterly variation (E) subtracts from True course and Westerly variation (W) adds to True course - Positioning system mode indicator. A - Autonomous;D-Differential; E-Estimated (dead reckoning) mode;M-Manual input; N-Data not valid - - - - Transmits the diagnostics data from the Novatel OEMStar GPS - The Time Status. See Table 8 page 27 Novatel OEMStar Manual - Status Bitfield. See table 69 page 350 Novatel OEMstar Manual - solution Status. See table 44 page 197 - position type. See table 43 page 196 - velocity type. See table 43 page 196 - Age of the position solution in seconds - Times the CRC has failed since boot - - - - Diagnostic data Sensor MCU - Float field 1 - Float field 2 - Int 16 field 1 - Int 8 field 1 - - - - - The boot message indicates that a system is starting. The onboard software version allows to keep track of onboard soft/firmware revisions. This message allows the sensor and control MCUs to communicate version numbers on startup. - The onboard software version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/test.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/test.py deleted file mode 100644 index bd4663104..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/test.py +++ /dev/null @@ -1,715 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: test.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'test' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - 3 - - - Test all field types - char - string - uint8_t - uint16_t - uint32_t - uint64_t - int8_t - int16_t - int32_t - int64_t - float - double - uint8_t_array - uint16_t_array - uint32_t_array - uint64_t_array - int8_t_array - int16_t_array - int32_t_array - int64_t_array - float_array - double_array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/uAvionix.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/uAvionix.py deleted file mode 100644 index 20cbf85e8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/uAvionix.py +++ /dev/null @@ -1,753 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: uAvionix.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'uAvionix' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - - - - - - - - - State flags for ADS-B transponder dynamic report - - - - - - - - Transceiver RF control flags for ADS-B transponder dynamic reports - - - - - - Status for ADS-B transponder dynamic input - - - - - - - - - Status flags for ADS-B transponder dynamic output - - - - - - - Definitions for aircraft size - - - - - - - - - - - - - - - - - - - GPS lataral offset encoding - - - - - - - - - - - GPS longitudinal offset encoding - - - - - Emergency status encoding - - - - - - - - - - - - - Static data to configure the ADS-B transponder (send within 10 sec of a POR and every 10 sec thereafter) - Vehicle address (24 bit) - Vehicle identifier (8 characters, null terminated, valid characters are A-Z, 0-9, " " only) - Transmitting vehicle type. See ADSB_EMITTER_TYPE enum - Aircraft length and width encoding (table 2-35 of DO-282B) - GPS antenna lateral offset (table 2-36 of DO-282B) - GPS antenna longitudinal offset from nose [if non-zero, take position (in meters) divide by 2 and add one] (table 2-37 DO-282B) - Aircraft stall speed in cm/s - ADS-B transponder reciever and transmit enable flags - - - Dynamic data used to generate ADS-B out transponder data (send at 5Hz) - UTC time in seconds since GPS epoch (Jan 6, 1980). If unknown set to UINT32_MAX - Latitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Longitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Altitude in mm (m * 1E-3) UP +ve. WGS84 altitude. If unknown set to INT32_MAX - 0-1: no fix, 2: 2D fix, 3: 3D fix, 4: DGPS, 5: RTK - Number of satellites visible. If unknown set to UINT8_MAX - Barometric pressure altitude relative to a standard atmosphere of 1013.2 mBar and NOT bar corrected altitude (m * 1E-3). (up +ve). If unknown set to INT32_MAX - Horizontal accuracy in mm (m * 1E-3). If unknown set to UINT32_MAX - Vertical accuracy in cm. If unknown set to UINT16_MAX - Velocity accuracy in mm/s (m * 1E-3). If unknown set to UINT16_MAX - GPS vertical speed in cm/s. If unknown set to INT16_MAX - North-South velocity over ground in cm/s North +ve. If unknown set to INT16_MAX - East-West velocity over ground in cm/s East +ve. If unknown set to INT16_MAX - Emergency status - ADS-B transponder dynamic input state flags - Mode A code (typically 1200 [0x04B0] for VFR) - - - Transceiver heartbeat with health report (updated every 10s) - ADS-B transponder messages - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.py deleted file mode 100644 index 656cb2789..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.py +++ /dev/null @@ -1,12041 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ualberta.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '1.0' -DIALECT = 'ualberta' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_NAV_FILTER_BIAS = 220 -MAVLINK_MSG_ID_RADIO_CALIBRATION = 221 -MAVLINK_MSG_ID_UALBERTA_SYS_STATUS = 222 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 - -class MAVLink_nav_filter_bias_message(MAVLink_message): - ''' - Accelerometer and Gyro biases from the navigation filter - ''' - id = MAVLINK_MSG_ID_NAV_FILTER_BIAS - name = 'NAV_FILTER_BIAS' - fieldnames = ['usec', 'accel_0', 'accel_1', 'accel_2', 'gyro_0', 'gyro_1', 'gyro_2'] - ordered_fieldnames = [ 'usec', 'accel_0', 'accel_1', 'accel_2', 'gyro_0', 'gyro_1', 'gyro_2' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.xml deleted file mode 100644 index bb57e8435..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v10/ualberta.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - common.xml - - - Available autopilot modes for ualberta uav - - Raw input pulse widts sent to output - - - Inputs are normalized using calibration, the converted back to raw pulse widths for output - - - dfsdfs - - - dfsfds - - - dfsdfsdfs - - - - Navigation filter mode - - - AHRS mode - - - INS/GPS initialization mode - - - INS/GPS mode - - - - Mode currently commanded by pilot - - sdf - - - dfs - - - Rotomotion mode - - - - - - Accelerometer and Gyro biases from the navigation filter - Timestamp (microseconds) - b_f[0] - b_f[1] - b_f[2] - b_f[0] - b_f[1] - b_f[2] - - - Complete set of calibration parameters for the radio - Aileron setpoints: left, center, right - Elevator setpoints: nose down, center, nose up - Rudder setpoints: nose left, center, nose right - Tail gyro mode/gain setpoints: heading hold, rate mode - Pitch curve setpoints (every 25%) - Throttle curve setpoints (every 25%) - - - System status specific to ualberta uav - System mode, see UALBERTA_AUTOPILOT_MODE ENUM - Navigation mode, see UALBERTA_NAV_MODE ENUM - Pilot mode, see UALBERTA_PILOT_MODE - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.py deleted file mode 100644 index 36f0427f3..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.py +++ /dev/null @@ -1,12907 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ASLUAV.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'ASLUAV' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_RESET_MPPT = 40001 # Mission command to reset Maximum Power Point Tracker (MPPT) -enums['MAV_CMD'][40001] = EnumEntry('MAV_CMD_RESET_MPPT', '''Mission command to reset Maximum Power Point Tracker (MPPT)''') -enums['MAV_CMD'][40001].param[1] = '''MPPT number''' -enums['MAV_CMD'][40001].param[2] = '''Empty''' -enums['MAV_CMD'][40001].param[3] = '''Empty''' -enums['MAV_CMD'][40001].param[4] = '''Empty''' -enums['MAV_CMD'][40001].param[5] = '''Empty''' -enums['MAV_CMD'][40001].param[6] = '''Empty''' -enums['MAV_CMD'][40001].param[7] = '''Empty''' -MAV_CMD_PAYLOAD_CONTROL = 40002 # Mission command to perform a power cycle on payload -enums['MAV_CMD'][40002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL', '''Mission command to perform a power cycle on payload''') -enums['MAV_CMD'][40002].param[1] = '''Complete power cycle''' -enums['MAV_CMD'][40002].param[2] = '''VISensor power cycle''' -enums['MAV_CMD'][40002].param[3] = '''Empty''' -enums['MAV_CMD'][40002].param[4] = '''Empty''' -enums['MAV_CMD'][40002].param[5] = '''Empty''' -enums['MAV_CMD'][40002].param[6] = '''Empty''' -enums['MAV_CMD'][40002].param[7] = '''Empty''' -MAV_CMD_ENUM_END = 40003 # -enums['MAV_CMD'][40003] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SENS_POWER = 201 -MAVLINK_MSG_ID_SENS_MPPT = 202 -MAVLINK_MSG_ID_ASLCTRL_DATA = 203 -MAVLINK_MSG_ID_ASLCTRL_DEBUG = 204 -MAVLINK_MSG_ID_ASLUAV_STATUS = 205 -MAVLINK_MSG_ID_EKF_EXT = 206 -MAVLINK_MSG_ID_ASL_OBCTRL = 207 -MAVLINK_MSG_ID_SENS_ATMOS = 208 -MAVLINK_MSG_ID_SENS_BATMON = 209 -MAVLINK_MSG_ID_FW_SOARING_DATA = 210 -MAVLINK_MSG_ID_SENSORPOD_STATUS = 211 -MAVLINK_MSG_ID_SENS_POWER_BOARD = 212 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_sens_power_message(MAVLink_message): - ''' - Voltage and current sensor data - ''' - id = MAVLINK_MSG_ID_SENS_POWER - name = 'SENS_POWER' - fieldnames = ['adc121_vspb_volt', 'adc121_cspb_amp', 'adc121_cs1_amp', 'adc121_cs2_amp'] - ordered_fieldnames = [ 'adc121_vspb_volt', 'adc121_cspb_amp', 'adc121_cs1_amp', 'adc121_cs2_amp' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.xml deleted file mode 100644 index 5eba2d187..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ASLUAV.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - common.xml - - - - - Mission command to reset Maximum Power Point Tracker (MPPT) - MPPT number - Empty - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a power cycle on payload - Complete power cycle - VISensor power cycle - Empty - Empty - Empty - Empty - Empty - - - - - - Voltage and current sensor data - Power board voltage sensor reading in volts - Power board current sensor reading in amps - Board current sensor 1 reading in amps - Board current sensor 2 reading in amps - - - Maximum Power Point Tracker (MPPT) sensor data for solar module power performance tracking - MPPT last timestamp - MPPT1 voltage - MPPT1 current - MPPT1 pwm - MPPT1 status - MPPT2 voltage - MPPT2 current - MPPT2 pwm - MPPT2 status - MPPT3 voltage - MPPT3 current - MPPT3 pwm - MPPT3 status - - - ASL-fixed-wing controller data - Timestamp - ASLCTRL control-mode (manual, stabilized, auto, etc...) - See sourcecode for a description of these values... - - - Pitch angle [deg] - Pitch angle reference[deg] - - - - - - - Airspeed reference [m/s] - - Yaw angle [deg] - Yaw angle reference[deg] - Roll angle [deg] - Roll angle reference[deg] - - - - - - - - - ASL-fixed-wing controller debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - - - Extended state information for ASLUAVs - Status of the position-indicator LEDs - Status of the IRIDIUM satellite communication system - Status vector for up to 8 servos - Motor RPM - - - - Extended EKF state estimates for ASLUAVs - Time since system start [us] - Magnitude of wind velocity (in lateral inertial plane) [m/s] - Wind heading angle from North [rad] - Z (Down) component of inertial wind velocity [m/s] - Magnitude of air velocity [m/s] - Sideslip angle [rad] - Angle of attack [rad] - - - Off-board controls/commands for ASLUAVs - Time since system start [us] - Elevator command [~] - Throttle command [~] - Throttle 2 command [~] - Left aileron command [~] - Right aileron command [~] - Rudder command [~] - Off-board computer status - - - Atmospheric sensors (temperature, humidity, ...) - Ambient temperature [degrees Celsius] - Relative humidity [%] - - - Battery pack monitoring data for Li-Ion batteries - Battery pack temperature in [deg C] - Battery pack voltage in [mV] - Battery pack current in [mA] - Battery pack state-of-charge - Battery monitor status report bits in Hex - Battery monitor serial number in Hex - Battery monitor sensor host FET control in Hex - Battery pack cell 1 voltage in [mV] - Battery pack cell 2 voltage in [mV] - Battery pack cell 3 voltage in [mV] - Battery pack cell 4 voltage in [mV] - Battery pack cell 5 voltage in [mV] - Battery pack cell 6 voltage in [mV] - - - Fixed-wing soaring (i.e. thermal seeking) data - Timestamp [ms] - Timestamp since last mode change[ms] - Thermal core updraft strength [m/s] - Thermal radius [m] - Thermal center latitude [deg] - Thermal center longitude [deg] - Variance W - Variance R - Variance Lat - Variance Lon - Suggested loiter radius [m] - Suggested loiter direction - Distance to soar point [m] - Expected sink rate at current airspeed, roll and throttle [m/s] - Measurement / updraft speed at current/local airplane position [m/s] - Measurement / roll angle tracking error [deg] - Expected measurement 1 - Expected measurement 2 - Thermal drift (from estimator prediction step only) [m/s] - Thermal drift (from estimator prediction step only) [m/s] - Total specific energy change (filtered) [m/s] - Debug variable 1 - Debug variable 2 - Control Mode [-] - Data valid [-] - - - Monitoring of sensorpod status - Timestamp in linuxtime [ms] (since 1.1.1970) - Rate of ROS topic 1 - Rate of ROS topic 2 - Rate of ROS topic 3 - Rate of ROS topic 4 - Number of recording nodes - Temperature of sensorpod CPU in [deg C] - Free space available in recordings directory in [Gb] * 1e2 - - - Monitoring of power board status - Timestamp - Power board status register - Power board leds status - Power board system voltage - Power board servo voltage - Power board left motor current sensor - Power board right motor current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board aux current sensor - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/__init__.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.py deleted file mode 100644 index c23497bc9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.py +++ /dev/null @@ -1,15949 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ardupilotmega.xml,common.xml,uAvionix.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'ardupilotmega' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_ALTITUDE_WAIT = 83 # Mission command to wait for an altitude or downwards vertical speed. - # This is meant for high altitude balloon - # launches, allowing the aircraft to be idle - # until either an altitude is reached or a - # negative vertical speed is reached - # (indicating early balloon burst). The wiggle - # time is how often to wiggle the control - # surfaces to prevent them seizing up. -enums['MAV_CMD'][83] = EnumEntry('MAV_CMD_NAV_ALTITUDE_WAIT', '''Mission command to wait for an altitude or downwards vertical speed. This is meant for high altitude balloon launches, allowing the aircraft to be idle until either an altitude is reached or a negative vertical speed is reached (indicating early balloon burst). The wiggle time is how often to wiggle the control surfaces to prevent them seizing up.''') -enums['MAV_CMD'][83].param[1] = '''altitude (m)''' -enums['MAV_CMD'][83].param[2] = '''descent speed (m/s)''' -enums['MAV_CMD'][83].param[3] = '''Wiggle Time (s)''' -enums['MAV_CMD'][83].param[4] = '''Empty''' -enums['MAV_CMD'][83].param[5] = '''Empty''' -enums['MAV_CMD'][83].param[6] = '''Empty''' -enums['MAV_CMD'][83].param[7] = '''Empty''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_GRIPPER = 211 # Mission command to operate EPM gripper -enums['MAV_CMD'][211] = EnumEntry('MAV_CMD_DO_GRIPPER', '''Mission command to operate EPM gripper''') -enums['MAV_CMD'][211].param[1] = '''gripper number (a number from 1 to max number of grippers on the vehicle)''' -enums['MAV_CMD'][211].param[2] = '''gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum)''' -enums['MAV_CMD'][211].param[3] = '''Empty''' -enums['MAV_CMD'][211].param[4] = '''Empty''' -enums['MAV_CMD'][211].param[5] = '''Empty''' -enums['MAV_CMD'][211].param[6] = '''Empty''' -enums['MAV_CMD'][211].param[7] = '''Empty''' -MAV_CMD_DO_AUTOTUNE_ENABLE = 212 # Enable/disable autotune -enums['MAV_CMD'][212] = EnumEntry('MAV_CMD_DO_AUTOTUNE_ENABLE', '''Enable/disable autotune''') -enums['MAV_CMD'][212].param[1] = '''enable (1: enable, 0:disable)''' -enums['MAV_CMD'][212].param[2] = '''Empty''' -enums['MAV_CMD'][212].param[3] = '''Empty''' -enums['MAV_CMD'][212].param[4] = '''Empty''' -enums['MAV_CMD'][212].param[5] = '''Empty''' -enums['MAV_CMD'][212].param[6] = '''Empty''' -enums['MAV_CMD'][212].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_POWER_OFF_INITIATED = 42000 # A system wide power-off event has been initiated. -enums['MAV_CMD'][42000] = EnumEntry('MAV_CMD_POWER_OFF_INITIATED', '''A system wide power-off event has been initiated.''') -enums['MAV_CMD'][42000].param[1] = '''Empty''' -enums['MAV_CMD'][42000].param[2] = '''Empty''' -enums['MAV_CMD'][42000].param[3] = '''Empty''' -enums['MAV_CMD'][42000].param[4] = '''Empty''' -enums['MAV_CMD'][42000].param[5] = '''Empty''' -enums['MAV_CMD'][42000].param[6] = '''Empty''' -enums['MAV_CMD'][42000].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_FLY_CLICK = 42001 # FLY button has been clicked. -enums['MAV_CMD'][42001] = EnumEntry('MAV_CMD_SOLO_BTN_FLY_CLICK', '''FLY button has been clicked.''') -enums['MAV_CMD'][42001].param[1] = '''Empty''' -enums['MAV_CMD'][42001].param[2] = '''Empty''' -enums['MAV_CMD'][42001].param[3] = '''Empty''' -enums['MAV_CMD'][42001].param[4] = '''Empty''' -enums['MAV_CMD'][42001].param[5] = '''Empty''' -enums['MAV_CMD'][42001].param[6] = '''Empty''' -enums['MAV_CMD'][42001].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_FLY_HOLD = 42002 # FLY button has been held for 1.5 seconds. -enums['MAV_CMD'][42002] = EnumEntry('MAV_CMD_SOLO_BTN_FLY_HOLD', '''FLY button has been held for 1.5 seconds.''') -enums['MAV_CMD'][42002].param[1] = '''Takeoff altitude''' -enums['MAV_CMD'][42002].param[2] = '''Empty''' -enums['MAV_CMD'][42002].param[3] = '''Empty''' -enums['MAV_CMD'][42002].param[4] = '''Empty''' -enums['MAV_CMD'][42002].param[5] = '''Empty''' -enums['MAV_CMD'][42002].param[6] = '''Empty''' -enums['MAV_CMD'][42002].param[7] = '''Empty''' -MAV_CMD_SOLO_BTN_PAUSE_CLICK = 42003 # PAUSE button has been clicked. -enums['MAV_CMD'][42003] = EnumEntry('MAV_CMD_SOLO_BTN_PAUSE_CLICK', '''PAUSE button has been clicked.''') -enums['MAV_CMD'][42003].param[1] = '''1 if Solo is in a shot mode, 0 otherwise''' -enums['MAV_CMD'][42003].param[2] = '''Empty''' -enums['MAV_CMD'][42003].param[3] = '''Empty''' -enums['MAV_CMD'][42003].param[4] = '''Empty''' -enums['MAV_CMD'][42003].param[5] = '''Empty''' -enums['MAV_CMD'][42003].param[6] = '''Empty''' -enums['MAV_CMD'][42003].param[7] = '''Empty''' -MAV_CMD_DO_START_MAG_CAL = 42424 # Initiate a magnetometer calibration -enums['MAV_CMD'][42424] = EnumEntry('MAV_CMD_DO_START_MAG_CAL', '''Initiate a magnetometer calibration''') -enums['MAV_CMD'][42424].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42424].param[2] = '''Automatically retry on failure (0=no retry, 1=retry).''' -enums['MAV_CMD'][42424].param[3] = '''Save without user input (0=require input, 1=autosave).''' -enums['MAV_CMD'][42424].param[4] = '''Delay (seconds)''' -enums['MAV_CMD'][42424].param[5] = '''Autoreboot (0=user reboot, 1=autoreboot)''' -enums['MAV_CMD'][42424].param[6] = '''Empty''' -enums['MAV_CMD'][42424].param[7] = '''Empty''' -MAV_CMD_DO_ACCEPT_MAG_CAL = 42425 # Initiate a magnetometer calibration -enums['MAV_CMD'][42425] = EnumEntry('MAV_CMD_DO_ACCEPT_MAG_CAL', '''Initiate a magnetometer calibration''') -enums['MAV_CMD'][42425].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42425].param[2] = '''Empty''' -enums['MAV_CMD'][42425].param[3] = '''Empty''' -enums['MAV_CMD'][42425].param[4] = '''Empty''' -enums['MAV_CMD'][42425].param[5] = '''Empty''' -enums['MAV_CMD'][42425].param[6] = '''Empty''' -enums['MAV_CMD'][42425].param[7] = '''Empty''' -MAV_CMD_DO_CANCEL_MAG_CAL = 42426 # Cancel a running magnetometer calibration -enums['MAV_CMD'][42426] = EnumEntry('MAV_CMD_DO_CANCEL_MAG_CAL', '''Cancel a running magnetometer calibration''') -enums['MAV_CMD'][42426].param[1] = '''uint8_t bitmask of magnetometers (0 means all)''' -enums['MAV_CMD'][42426].param[2] = '''Empty''' -enums['MAV_CMD'][42426].param[3] = '''Empty''' -enums['MAV_CMD'][42426].param[4] = '''Empty''' -enums['MAV_CMD'][42426].param[5] = '''Empty''' -enums['MAV_CMD'][42426].param[6] = '''Empty''' -enums['MAV_CMD'][42426].param[7] = '''Empty''' -MAV_CMD_SET_FACTORY_TEST_MODE = 42427 # Command autopilot to get into factory test/diagnostic mode -enums['MAV_CMD'][42427] = EnumEntry('MAV_CMD_SET_FACTORY_TEST_MODE', '''Command autopilot to get into factory test/diagnostic mode''') -enums['MAV_CMD'][42427].param[1] = '''0 means get out of test mode, 1 means get into test mode''' -enums['MAV_CMD'][42427].param[2] = '''Empty''' -enums['MAV_CMD'][42427].param[3] = '''Empty''' -enums['MAV_CMD'][42427].param[4] = '''Empty''' -enums['MAV_CMD'][42427].param[5] = '''Empty''' -enums['MAV_CMD'][42427].param[6] = '''Empty''' -enums['MAV_CMD'][42427].param[7] = '''Empty''' -MAV_CMD_DO_SEND_BANNER = 42428 # Reply with the version banner -enums['MAV_CMD'][42428] = EnumEntry('MAV_CMD_DO_SEND_BANNER', '''Reply with the version banner''') -enums['MAV_CMD'][42428].param[1] = '''Empty''' -enums['MAV_CMD'][42428].param[2] = '''Empty''' -enums['MAV_CMD'][42428].param[3] = '''Empty''' -enums['MAV_CMD'][42428].param[4] = '''Empty''' -enums['MAV_CMD'][42428].param[5] = '''Empty''' -enums['MAV_CMD'][42428].param[6] = '''Empty''' -enums['MAV_CMD'][42428].param[7] = '''Empty''' -MAV_CMD_GIMBAL_RESET = 42501 # Causes the gimbal to reset and boot as if it was just powered on -enums['MAV_CMD'][42501] = EnumEntry('MAV_CMD_GIMBAL_RESET', '''Causes the gimbal to reset and boot as if it was just powered on''') -enums['MAV_CMD'][42501].param[1] = '''Empty''' -enums['MAV_CMD'][42501].param[2] = '''Empty''' -enums['MAV_CMD'][42501].param[3] = '''Empty''' -enums['MAV_CMD'][42501].param[4] = '''Empty''' -enums['MAV_CMD'][42501].param[5] = '''Empty''' -enums['MAV_CMD'][42501].param[6] = '''Empty''' -enums['MAV_CMD'][42501].param[7] = '''Empty''' -MAV_CMD_GIMBAL_AXIS_CALIBRATION_STATUS = 42502 # Reports progress and success or failure of gimbal axis calibration - # procedure -enums['MAV_CMD'][42502] = EnumEntry('MAV_CMD_GIMBAL_AXIS_CALIBRATION_STATUS', '''Reports progress and success or failure of gimbal axis calibration procedure''') -enums['MAV_CMD'][42502].param[1] = '''Gimbal axis we're reporting calibration progress for''' -enums['MAV_CMD'][42502].param[2] = '''Current calibration progress for this axis, 0x64=100%''' -enums['MAV_CMD'][42502].param[3] = '''Status of the calibration''' -enums['MAV_CMD'][42502].param[4] = '''Empty''' -enums['MAV_CMD'][42502].param[5] = '''Empty''' -enums['MAV_CMD'][42502].param[6] = '''Empty''' -enums['MAV_CMD'][42502].param[7] = '''Empty''' -MAV_CMD_GIMBAL_REQUEST_AXIS_CALIBRATION = 42503 # Starts commutation calibration on the gimbal -enums['MAV_CMD'][42503] = EnumEntry('MAV_CMD_GIMBAL_REQUEST_AXIS_CALIBRATION', '''Starts commutation calibration on the gimbal''') -enums['MAV_CMD'][42503].param[1] = '''Empty''' -enums['MAV_CMD'][42503].param[2] = '''Empty''' -enums['MAV_CMD'][42503].param[3] = '''Empty''' -enums['MAV_CMD'][42503].param[4] = '''Empty''' -enums['MAV_CMD'][42503].param[5] = '''Empty''' -enums['MAV_CMD'][42503].param[6] = '''Empty''' -enums['MAV_CMD'][42503].param[7] = '''Empty''' -MAV_CMD_GIMBAL_FULL_RESET = 42505 # Erases gimbal application and parameters -enums['MAV_CMD'][42505] = EnumEntry('MAV_CMD_GIMBAL_FULL_RESET', '''Erases gimbal application and parameters''') -enums['MAV_CMD'][42505].param[1] = '''Magic number''' -enums['MAV_CMD'][42505].param[2] = '''Magic number''' -enums['MAV_CMD'][42505].param[3] = '''Magic number''' -enums['MAV_CMD'][42505].param[4] = '''Magic number''' -enums['MAV_CMD'][42505].param[5] = '''Magic number''' -enums['MAV_CMD'][42505].param[6] = '''Magic number''' -enums['MAV_CMD'][42505].param[7] = '''Magic number''' -MAV_CMD_ENUM_END = 42506 # -enums['MAV_CMD'][42506] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# LIMITS_STATE -enums['LIMITS_STATE'] = {} -LIMITS_INIT = 0 # pre-initialization -enums['LIMITS_STATE'][0] = EnumEntry('LIMITS_INIT', '''pre-initialization''') -LIMITS_DISABLED = 1 # disabled -enums['LIMITS_STATE'][1] = EnumEntry('LIMITS_DISABLED', '''disabled''') -LIMITS_ENABLED = 2 # checking limits -enums['LIMITS_STATE'][2] = EnumEntry('LIMITS_ENABLED', '''checking limits''') -LIMITS_TRIGGERED = 3 # a limit has been breached -enums['LIMITS_STATE'][3] = EnumEntry('LIMITS_TRIGGERED', '''a limit has been breached''') -LIMITS_RECOVERING = 4 # taking action eg. RTL -enums['LIMITS_STATE'][4] = EnumEntry('LIMITS_RECOVERING', '''taking action eg. RTL''') -LIMITS_RECOVERED = 5 # we're no longer in breach of a limit -enums['LIMITS_STATE'][5] = EnumEntry('LIMITS_RECOVERED', '''we're no longer in breach of a limit''') -LIMITS_STATE_ENUM_END = 6 # -enums['LIMITS_STATE'][6] = EnumEntry('LIMITS_STATE_ENUM_END', '''''') - -# LIMIT_MODULE -enums['LIMIT_MODULE'] = {} -LIMIT_GPSLOCK = 1 # pre-initialization -enums['LIMIT_MODULE'][1] = EnumEntry('LIMIT_GPSLOCK', '''pre-initialization''') -LIMIT_GEOFENCE = 2 # disabled -enums['LIMIT_MODULE'][2] = EnumEntry('LIMIT_GEOFENCE', '''disabled''') -LIMIT_ALTITUDE = 4 # checking limits -enums['LIMIT_MODULE'][4] = EnumEntry('LIMIT_ALTITUDE', '''checking limits''') -LIMIT_MODULE_ENUM_END = 5 # -enums['LIMIT_MODULE'][5] = EnumEntry('LIMIT_MODULE_ENUM_END', '''''') - -# RALLY_FLAGS -enums['RALLY_FLAGS'] = {} -FAVORABLE_WIND = 1 # Flag set when requiring favorable winds for landing. -enums['RALLY_FLAGS'][1] = EnumEntry('FAVORABLE_WIND', '''Flag set when requiring favorable winds for landing.''') -LAND_IMMEDIATELY = 2 # Flag set when plane is to immediately descend to break altitude and - # land without GCS intervention. Flag not set - # when plane is to loiter at Rally point until - # commanded to land. -enums['RALLY_FLAGS'][2] = EnumEntry('LAND_IMMEDIATELY', '''Flag set when plane is to immediately descend to break altitude and land without GCS intervention. Flag not set when plane is to loiter at Rally point until commanded to land.''') -RALLY_FLAGS_ENUM_END = 3 # -enums['RALLY_FLAGS'][3] = EnumEntry('RALLY_FLAGS_ENUM_END', '''''') - -# PARACHUTE_ACTION -enums['PARACHUTE_ACTION'] = {} -PARACHUTE_DISABLE = 0 # Disable parachute release -enums['PARACHUTE_ACTION'][0] = EnumEntry('PARACHUTE_DISABLE', '''Disable parachute release''') -PARACHUTE_ENABLE = 1 # Enable parachute release -enums['PARACHUTE_ACTION'][1] = EnumEntry('PARACHUTE_ENABLE', '''Enable parachute release''') -PARACHUTE_RELEASE = 2 # Release parachute -enums['PARACHUTE_ACTION'][2] = EnumEntry('PARACHUTE_RELEASE', '''Release parachute''') -PARACHUTE_ACTION_ENUM_END = 3 # -enums['PARACHUTE_ACTION'][3] = EnumEntry('PARACHUTE_ACTION_ENUM_END', '''''') - -# GRIPPER_ACTIONS -enums['GRIPPER_ACTIONS'] = {} -GRIPPER_ACTION_RELEASE = 0 # gripper release of cargo -enums['GRIPPER_ACTIONS'][0] = EnumEntry('GRIPPER_ACTION_RELEASE', '''gripper release of cargo''') -GRIPPER_ACTION_GRAB = 1 # gripper grabs onto cargo -enums['GRIPPER_ACTIONS'][1] = EnumEntry('GRIPPER_ACTION_GRAB', '''gripper grabs onto cargo''') -GRIPPER_ACTIONS_ENUM_END = 2 # -enums['GRIPPER_ACTIONS'][2] = EnumEntry('GRIPPER_ACTIONS_ENUM_END', '''''') - -# CAMERA_STATUS_TYPES -enums['CAMERA_STATUS_TYPES'] = {} -CAMERA_STATUS_TYPE_HEARTBEAT = 0 # Camera heartbeat, announce camera component ID at 1hz -enums['CAMERA_STATUS_TYPES'][0] = EnumEntry('CAMERA_STATUS_TYPE_HEARTBEAT', '''Camera heartbeat, announce camera component ID at 1hz''') -CAMERA_STATUS_TYPE_TRIGGER = 1 # Camera image triggered -enums['CAMERA_STATUS_TYPES'][1] = EnumEntry('CAMERA_STATUS_TYPE_TRIGGER', '''Camera image triggered''') -CAMERA_STATUS_TYPE_DISCONNECT = 2 # Camera connection lost -enums['CAMERA_STATUS_TYPES'][2] = EnumEntry('CAMERA_STATUS_TYPE_DISCONNECT', '''Camera connection lost''') -CAMERA_STATUS_TYPE_ERROR = 3 # Camera unknown error -enums['CAMERA_STATUS_TYPES'][3] = EnumEntry('CAMERA_STATUS_TYPE_ERROR', '''Camera unknown error''') -CAMERA_STATUS_TYPE_LOWBATT = 4 # Camera battery low. Parameter p1 shows reported voltage -enums['CAMERA_STATUS_TYPES'][4] = EnumEntry('CAMERA_STATUS_TYPE_LOWBATT', '''Camera battery low. Parameter p1 shows reported voltage''') -CAMERA_STATUS_TYPE_LOWSTORE = 5 # Camera storage low. Parameter p1 shows reported shots remaining -enums['CAMERA_STATUS_TYPES'][5] = EnumEntry('CAMERA_STATUS_TYPE_LOWSTORE', '''Camera storage low. Parameter p1 shows reported shots remaining''') -CAMERA_STATUS_TYPE_LOWSTOREV = 6 # Camera storage low. Parameter p1 shows reported video minutes - # remaining -enums['CAMERA_STATUS_TYPES'][6] = EnumEntry('CAMERA_STATUS_TYPE_LOWSTOREV', '''Camera storage low. Parameter p1 shows reported video minutes remaining''') -CAMERA_STATUS_TYPES_ENUM_END = 7 # -enums['CAMERA_STATUS_TYPES'][7] = EnumEntry('CAMERA_STATUS_TYPES_ENUM_END', '''''') - -# CAMERA_FEEDBACK_FLAGS -enums['CAMERA_FEEDBACK_FLAGS'] = {} -CAMERA_FEEDBACK_PHOTO = 0 # Shooting photos, not video -enums['CAMERA_FEEDBACK_FLAGS'][0] = EnumEntry('CAMERA_FEEDBACK_PHOTO', '''Shooting photos, not video''') -CAMERA_FEEDBACK_VIDEO = 1 # Shooting video, not stills -enums['CAMERA_FEEDBACK_FLAGS'][1] = EnumEntry('CAMERA_FEEDBACK_VIDEO', '''Shooting video, not stills''') -CAMERA_FEEDBACK_BADEXPOSURE = 2 # Unable to achieve requested exposure (e.g. shutter speed too low) -enums['CAMERA_FEEDBACK_FLAGS'][2] = EnumEntry('CAMERA_FEEDBACK_BADEXPOSURE', '''Unable to achieve requested exposure (e.g. shutter speed too low)''') -CAMERA_FEEDBACK_CLOSEDLOOP = 3 # Closed loop feedback from camera, we know for sure it has successfully - # taken a picture -enums['CAMERA_FEEDBACK_FLAGS'][3] = EnumEntry('CAMERA_FEEDBACK_CLOSEDLOOP', '''Closed loop feedback from camera, we know for sure it has successfully taken a picture''') -CAMERA_FEEDBACK_OPENLOOP = 4 # Open loop camera, an image trigger has been requested but we can't - # know for sure it has successfully taken a - # picture -enums['CAMERA_FEEDBACK_FLAGS'][4] = EnumEntry('CAMERA_FEEDBACK_OPENLOOP', '''Open loop camera, an image trigger has been requested but we can't know for sure it has successfully taken a picture''') -CAMERA_FEEDBACK_FLAGS_ENUM_END = 5 # -enums['CAMERA_FEEDBACK_FLAGS'][5] = EnumEntry('CAMERA_FEEDBACK_FLAGS_ENUM_END', '''''') - -# MAV_MODE_GIMBAL -enums['MAV_MODE_GIMBAL'] = {} -MAV_MODE_GIMBAL_UNINITIALIZED = 0 # Gimbal is powered on but has not started initializing yet -enums['MAV_MODE_GIMBAL'][0] = EnumEntry('MAV_MODE_GIMBAL_UNINITIALIZED', '''Gimbal is powered on but has not started initializing yet''') -MAV_MODE_GIMBAL_CALIBRATING_PITCH = 1 # Gimbal is currently running calibration on the pitch axis -enums['MAV_MODE_GIMBAL'][1] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_PITCH', '''Gimbal is currently running calibration on the pitch axis''') -MAV_MODE_GIMBAL_CALIBRATING_ROLL = 2 # Gimbal is currently running calibration on the roll axis -enums['MAV_MODE_GIMBAL'][2] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_ROLL', '''Gimbal is currently running calibration on the roll axis''') -MAV_MODE_GIMBAL_CALIBRATING_YAW = 3 # Gimbal is currently running calibration on the yaw axis -enums['MAV_MODE_GIMBAL'][3] = EnumEntry('MAV_MODE_GIMBAL_CALIBRATING_YAW', '''Gimbal is currently running calibration on the yaw axis''') -MAV_MODE_GIMBAL_INITIALIZED = 4 # Gimbal has finished calibrating and initializing, but is relaxed - # pending reception of first rate command from - # copter -enums['MAV_MODE_GIMBAL'][4] = EnumEntry('MAV_MODE_GIMBAL_INITIALIZED', '''Gimbal has finished calibrating and initializing, but is relaxed pending reception of first rate command from copter''') -MAV_MODE_GIMBAL_ACTIVE = 5 # Gimbal is actively stabilizing -enums['MAV_MODE_GIMBAL'][5] = EnumEntry('MAV_MODE_GIMBAL_ACTIVE', '''Gimbal is actively stabilizing''') -MAV_MODE_GIMBAL_RATE_CMD_TIMEOUT = 6 # Gimbal is relaxed because it missed more than 10 expected rate command - # messages in a row. Gimbal will move back to - # active mode when it receives a new rate - # command -enums['MAV_MODE_GIMBAL'][6] = EnumEntry('MAV_MODE_GIMBAL_RATE_CMD_TIMEOUT', '''Gimbal is relaxed because it missed more than 10 expected rate command messages in a row. Gimbal will move back to active mode when it receives a new rate command''') -MAV_MODE_GIMBAL_ENUM_END = 7 # -enums['MAV_MODE_GIMBAL'][7] = EnumEntry('MAV_MODE_GIMBAL_ENUM_END', '''''') - -# GIMBAL_AXIS -enums['GIMBAL_AXIS'] = {} -GIMBAL_AXIS_YAW = 0 # Gimbal yaw axis -enums['GIMBAL_AXIS'][0] = EnumEntry('GIMBAL_AXIS_YAW', '''Gimbal yaw axis''') -GIMBAL_AXIS_PITCH = 1 # Gimbal pitch axis -enums['GIMBAL_AXIS'][1] = EnumEntry('GIMBAL_AXIS_PITCH', '''Gimbal pitch axis''') -GIMBAL_AXIS_ROLL = 2 # Gimbal roll axis -enums['GIMBAL_AXIS'][2] = EnumEntry('GIMBAL_AXIS_ROLL', '''Gimbal roll axis''') -GIMBAL_AXIS_ENUM_END = 3 # -enums['GIMBAL_AXIS'][3] = EnumEntry('GIMBAL_AXIS_ENUM_END', '''''') - -# GIMBAL_AXIS_CALIBRATION_STATUS -enums['GIMBAL_AXIS_CALIBRATION_STATUS'] = {} -GIMBAL_AXIS_CALIBRATION_STATUS_IN_PROGRESS = 0 # Axis calibration is in progress -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][0] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_IN_PROGRESS', '''Axis calibration is in progress''') -GIMBAL_AXIS_CALIBRATION_STATUS_SUCCEEDED = 1 # Axis calibration succeeded -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][1] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_SUCCEEDED', '''Axis calibration succeeded''') -GIMBAL_AXIS_CALIBRATION_STATUS_FAILED = 2 # Axis calibration failed -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][2] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_FAILED', '''Axis calibration failed''') -GIMBAL_AXIS_CALIBRATION_STATUS_ENUM_END = 3 # -enums['GIMBAL_AXIS_CALIBRATION_STATUS'][3] = EnumEntry('GIMBAL_AXIS_CALIBRATION_STATUS_ENUM_END', '''''') - -# GIMBAL_AXIS_CALIBRATION_REQUIRED -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'] = {} -GIMBAL_AXIS_CALIBRATION_REQUIRED_UNKNOWN = 0 # Whether or not this axis requires calibration is unknown at this time -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][0] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_UNKNOWN', '''Whether or not this axis requires calibration is unknown at this time''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_TRUE = 1 # This axis requires calibration -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][1] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_TRUE', '''This axis requires calibration''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_FALSE = 2 # This axis does not require calibration -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][2] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_FALSE', '''This axis does not require calibration''') -GIMBAL_AXIS_CALIBRATION_REQUIRED_ENUM_END = 3 # -enums['GIMBAL_AXIS_CALIBRATION_REQUIRED'][3] = EnumEntry('GIMBAL_AXIS_CALIBRATION_REQUIRED_ENUM_END', '''''') - -# GOPRO_HEARTBEAT_STATUS -enums['GOPRO_HEARTBEAT_STATUS'] = {} -GOPRO_HEARTBEAT_STATUS_DISCONNECTED = 0 # No GoPro connected -enums['GOPRO_HEARTBEAT_STATUS'][0] = EnumEntry('GOPRO_HEARTBEAT_STATUS_DISCONNECTED', '''No GoPro connected''') -GOPRO_HEARTBEAT_STATUS_INCOMPATIBLE = 1 # The detected GoPro is not HeroBus compatible -enums['GOPRO_HEARTBEAT_STATUS'][1] = EnumEntry('GOPRO_HEARTBEAT_STATUS_INCOMPATIBLE', '''The detected GoPro is not HeroBus compatible''') -GOPRO_HEARTBEAT_STATUS_CONNECTED = 2 # A HeroBus compatible GoPro is connected -enums['GOPRO_HEARTBEAT_STATUS'][2] = EnumEntry('GOPRO_HEARTBEAT_STATUS_CONNECTED', '''A HeroBus compatible GoPro is connected''') -GOPRO_HEARTBEAT_STATUS_ERROR = 3 # An unrecoverable error was encountered with the connected GoPro, it - # may require a power cycle -enums['GOPRO_HEARTBEAT_STATUS'][3] = EnumEntry('GOPRO_HEARTBEAT_STATUS_ERROR', '''An unrecoverable error was encountered with the connected GoPro, it may require a power cycle''') -GOPRO_HEARTBEAT_STATUS_ENUM_END = 4 # -enums['GOPRO_HEARTBEAT_STATUS'][4] = EnumEntry('GOPRO_HEARTBEAT_STATUS_ENUM_END', '''''') - -# GOPRO_HEARTBEAT_FLAGS -enums['GOPRO_HEARTBEAT_FLAGS'] = {} -GOPRO_FLAG_RECORDING = 1 # GoPro is currently recording -enums['GOPRO_HEARTBEAT_FLAGS'][1] = EnumEntry('GOPRO_FLAG_RECORDING', '''GoPro is currently recording''') -GOPRO_HEARTBEAT_FLAGS_ENUM_END = 2 # -enums['GOPRO_HEARTBEAT_FLAGS'][2] = EnumEntry('GOPRO_HEARTBEAT_FLAGS_ENUM_END', '''''') - -# GOPRO_REQUEST_STATUS -enums['GOPRO_REQUEST_STATUS'] = {} -GOPRO_REQUEST_SUCCESS = 0 # The write message with ID indicated succeeded -enums['GOPRO_REQUEST_STATUS'][0] = EnumEntry('GOPRO_REQUEST_SUCCESS', '''The write message with ID indicated succeeded''') -GOPRO_REQUEST_FAILED = 1 # The write message with ID indicated failed -enums['GOPRO_REQUEST_STATUS'][1] = EnumEntry('GOPRO_REQUEST_FAILED', '''The write message with ID indicated failed''') -GOPRO_REQUEST_STATUS_ENUM_END = 2 # -enums['GOPRO_REQUEST_STATUS'][2] = EnumEntry('GOPRO_REQUEST_STATUS_ENUM_END', '''''') - -# GOPRO_COMMAND -enums['GOPRO_COMMAND'] = {} -GOPRO_COMMAND_POWER = 0 # (Get/Set) -enums['GOPRO_COMMAND'][0] = EnumEntry('GOPRO_COMMAND_POWER', '''(Get/Set)''') -GOPRO_COMMAND_CAPTURE_MODE = 1 # (Get/Set) -enums['GOPRO_COMMAND'][1] = EnumEntry('GOPRO_COMMAND_CAPTURE_MODE', '''(Get/Set)''') -GOPRO_COMMAND_SHUTTER = 2 # (___/Set) -enums['GOPRO_COMMAND'][2] = EnumEntry('GOPRO_COMMAND_SHUTTER', '''(___/Set)''') -GOPRO_COMMAND_BATTERY = 3 # (Get/___) -enums['GOPRO_COMMAND'][3] = EnumEntry('GOPRO_COMMAND_BATTERY', '''(Get/___)''') -GOPRO_COMMAND_MODEL = 4 # (Get/___) -enums['GOPRO_COMMAND'][4] = EnumEntry('GOPRO_COMMAND_MODEL', '''(Get/___)''') -GOPRO_COMMAND_VIDEO_SETTINGS = 5 # (Get/Set) -enums['GOPRO_COMMAND'][5] = EnumEntry('GOPRO_COMMAND_VIDEO_SETTINGS', '''(Get/Set)''') -GOPRO_COMMAND_LOW_LIGHT = 6 # (Get/Set) -enums['GOPRO_COMMAND'][6] = EnumEntry('GOPRO_COMMAND_LOW_LIGHT', '''(Get/Set)''') -GOPRO_COMMAND_PHOTO_RESOLUTION = 7 # (Get/Set) -enums['GOPRO_COMMAND'][7] = EnumEntry('GOPRO_COMMAND_PHOTO_RESOLUTION', '''(Get/Set)''') -GOPRO_COMMAND_PHOTO_BURST_RATE = 8 # (Get/Set) -enums['GOPRO_COMMAND'][8] = EnumEntry('GOPRO_COMMAND_PHOTO_BURST_RATE', '''(Get/Set)''') -GOPRO_COMMAND_PROTUNE = 9 # (Get/Set) -enums['GOPRO_COMMAND'][9] = EnumEntry('GOPRO_COMMAND_PROTUNE', '''(Get/Set)''') -GOPRO_COMMAND_PROTUNE_WHITE_BALANCE = 10 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][10] = EnumEntry('GOPRO_COMMAND_PROTUNE_WHITE_BALANCE', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_COLOUR = 11 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][11] = EnumEntry('GOPRO_COMMAND_PROTUNE_COLOUR', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_GAIN = 12 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][12] = EnumEntry('GOPRO_COMMAND_PROTUNE_GAIN', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_SHARPNESS = 13 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][13] = EnumEntry('GOPRO_COMMAND_PROTUNE_SHARPNESS', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_PROTUNE_EXPOSURE = 14 # (Get/Set) Hero 3+ Only -enums['GOPRO_COMMAND'][14] = EnumEntry('GOPRO_COMMAND_PROTUNE_EXPOSURE', '''(Get/Set) Hero 3+ Only''') -GOPRO_COMMAND_TIME = 15 # (Get/Set) -enums['GOPRO_COMMAND'][15] = EnumEntry('GOPRO_COMMAND_TIME', '''(Get/Set)''') -GOPRO_COMMAND_CHARGING = 16 # (Get/Set) -enums['GOPRO_COMMAND'][16] = EnumEntry('GOPRO_COMMAND_CHARGING', '''(Get/Set)''') -GOPRO_COMMAND_ENUM_END = 17 # -enums['GOPRO_COMMAND'][17] = EnumEntry('GOPRO_COMMAND_ENUM_END', '''''') - -# GOPRO_CAPTURE_MODE -enums['GOPRO_CAPTURE_MODE'] = {} -GOPRO_CAPTURE_MODE_VIDEO = 0 # Video mode -enums['GOPRO_CAPTURE_MODE'][0] = EnumEntry('GOPRO_CAPTURE_MODE_VIDEO', '''Video mode''') -GOPRO_CAPTURE_MODE_PHOTO = 1 # Photo mode -enums['GOPRO_CAPTURE_MODE'][1] = EnumEntry('GOPRO_CAPTURE_MODE_PHOTO', '''Photo mode''') -GOPRO_CAPTURE_MODE_BURST = 2 # Burst mode, hero 3+ only -enums['GOPRO_CAPTURE_MODE'][2] = EnumEntry('GOPRO_CAPTURE_MODE_BURST', '''Burst mode, hero 3+ only''') -GOPRO_CAPTURE_MODE_TIME_LAPSE = 3 # Time lapse mode, hero 3+ only -enums['GOPRO_CAPTURE_MODE'][3] = EnumEntry('GOPRO_CAPTURE_MODE_TIME_LAPSE', '''Time lapse mode, hero 3+ only''') -GOPRO_CAPTURE_MODE_MULTI_SHOT = 4 # Multi shot mode, hero 4 only -enums['GOPRO_CAPTURE_MODE'][4] = EnumEntry('GOPRO_CAPTURE_MODE_MULTI_SHOT', '''Multi shot mode, hero 4 only''') -GOPRO_CAPTURE_MODE_PLAYBACK = 5 # Playback mode, hero 4 only, silver only except when LCD or HDMI is - # connected to black -enums['GOPRO_CAPTURE_MODE'][5] = EnumEntry('GOPRO_CAPTURE_MODE_PLAYBACK', '''Playback mode, hero 4 only, silver only except when LCD or HDMI is connected to black''') -GOPRO_CAPTURE_MODE_SETUP = 6 # Playback mode, hero 4 only -enums['GOPRO_CAPTURE_MODE'][6] = EnumEntry('GOPRO_CAPTURE_MODE_SETUP', '''Playback mode, hero 4 only''') -GOPRO_CAPTURE_MODE_UNKNOWN = 255 # Mode not yet known -enums['GOPRO_CAPTURE_MODE'][255] = EnumEntry('GOPRO_CAPTURE_MODE_UNKNOWN', '''Mode not yet known''') -GOPRO_CAPTURE_MODE_ENUM_END = 256 # -enums['GOPRO_CAPTURE_MODE'][256] = EnumEntry('GOPRO_CAPTURE_MODE_ENUM_END', '''''') - -# GOPRO_RESOLUTION -enums['GOPRO_RESOLUTION'] = {} -GOPRO_RESOLUTION_480p = 0 # 848 x 480 (480p) -enums['GOPRO_RESOLUTION'][0] = EnumEntry('GOPRO_RESOLUTION_480p', '''848 x 480 (480p)''') -GOPRO_RESOLUTION_720p = 1 # 1280 x 720 (720p) -enums['GOPRO_RESOLUTION'][1] = EnumEntry('GOPRO_RESOLUTION_720p', '''1280 x 720 (720p)''') -GOPRO_RESOLUTION_960p = 2 # 1280 x 960 (960p) -enums['GOPRO_RESOLUTION'][2] = EnumEntry('GOPRO_RESOLUTION_960p', '''1280 x 960 (960p)''') -GOPRO_RESOLUTION_1080p = 3 # 1920 x 1080 (1080p) -enums['GOPRO_RESOLUTION'][3] = EnumEntry('GOPRO_RESOLUTION_1080p', '''1920 x 1080 (1080p)''') -GOPRO_RESOLUTION_1440p = 4 # 1920 x 1440 (1440p) -enums['GOPRO_RESOLUTION'][4] = EnumEntry('GOPRO_RESOLUTION_1440p', '''1920 x 1440 (1440p)''') -GOPRO_RESOLUTION_2_7k_17_9 = 5 # 2704 x 1440 (2.7k-17:9) -enums['GOPRO_RESOLUTION'][5] = EnumEntry('GOPRO_RESOLUTION_2_7k_17_9', '''2704 x 1440 (2.7k-17:9)''') -GOPRO_RESOLUTION_2_7k_16_9 = 6 # 2704 x 1524 (2.7k-16:9) -enums['GOPRO_RESOLUTION'][6] = EnumEntry('GOPRO_RESOLUTION_2_7k_16_9', '''2704 x 1524 (2.7k-16:9)''') -GOPRO_RESOLUTION_2_7k_4_3 = 7 # 2704 x 2028 (2.7k-4:3) -enums['GOPRO_RESOLUTION'][7] = EnumEntry('GOPRO_RESOLUTION_2_7k_4_3', '''2704 x 2028 (2.7k-4:3)''') -GOPRO_RESOLUTION_4k_16_9 = 8 # 3840 x 2160 (4k-16:9) -enums['GOPRO_RESOLUTION'][8] = EnumEntry('GOPRO_RESOLUTION_4k_16_9', '''3840 x 2160 (4k-16:9)''') -GOPRO_RESOLUTION_4k_17_9 = 9 # 4096 x 2160 (4k-17:9) -enums['GOPRO_RESOLUTION'][9] = EnumEntry('GOPRO_RESOLUTION_4k_17_9', '''4096 x 2160 (4k-17:9)''') -GOPRO_RESOLUTION_720p_SUPERVIEW = 10 # 1280 x 720 (720p-SuperView) -enums['GOPRO_RESOLUTION'][10] = EnumEntry('GOPRO_RESOLUTION_720p_SUPERVIEW', '''1280 x 720 (720p-SuperView)''') -GOPRO_RESOLUTION_1080p_SUPERVIEW = 11 # 1920 x 1080 (1080p-SuperView) -enums['GOPRO_RESOLUTION'][11] = EnumEntry('GOPRO_RESOLUTION_1080p_SUPERVIEW', '''1920 x 1080 (1080p-SuperView)''') -GOPRO_RESOLUTION_2_7k_SUPERVIEW = 12 # 2704 x 1520 (2.7k-SuperView) -enums['GOPRO_RESOLUTION'][12] = EnumEntry('GOPRO_RESOLUTION_2_7k_SUPERVIEW', '''2704 x 1520 (2.7k-SuperView)''') -GOPRO_RESOLUTION_4k_SUPERVIEW = 13 # 3840 x 2160 (4k-SuperView) -enums['GOPRO_RESOLUTION'][13] = EnumEntry('GOPRO_RESOLUTION_4k_SUPERVIEW', '''3840 x 2160 (4k-SuperView)''') -GOPRO_RESOLUTION_ENUM_END = 14 # -enums['GOPRO_RESOLUTION'][14] = EnumEntry('GOPRO_RESOLUTION_ENUM_END', '''''') - -# GOPRO_FRAME_RATE -enums['GOPRO_FRAME_RATE'] = {} -GOPRO_FRAME_RATE_12 = 0 # 12 FPS -enums['GOPRO_FRAME_RATE'][0] = EnumEntry('GOPRO_FRAME_RATE_12', '''12 FPS''') -GOPRO_FRAME_RATE_15 = 1 # 15 FPS -enums['GOPRO_FRAME_RATE'][1] = EnumEntry('GOPRO_FRAME_RATE_15', '''15 FPS''') -GOPRO_FRAME_RATE_24 = 2 # 24 FPS -enums['GOPRO_FRAME_RATE'][2] = EnumEntry('GOPRO_FRAME_RATE_24', '''24 FPS''') -GOPRO_FRAME_RATE_25 = 3 # 25 FPS -enums['GOPRO_FRAME_RATE'][3] = EnumEntry('GOPRO_FRAME_RATE_25', '''25 FPS''') -GOPRO_FRAME_RATE_30 = 4 # 30 FPS -enums['GOPRO_FRAME_RATE'][4] = EnumEntry('GOPRO_FRAME_RATE_30', '''30 FPS''') -GOPRO_FRAME_RATE_48 = 5 # 48 FPS -enums['GOPRO_FRAME_RATE'][5] = EnumEntry('GOPRO_FRAME_RATE_48', '''48 FPS''') -GOPRO_FRAME_RATE_50 = 6 # 50 FPS -enums['GOPRO_FRAME_RATE'][6] = EnumEntry('GOPRO_FRAME_RATE_50', '''50 FPS''') -GOPRO_FRAME_RATE_60 = 7 # 60 FPS -enums['GOPRO_FRAME_RATE'][7] = EnumEntry('GOPRO_FRAME_RATE_60', '''60 FPS''') -GOPRO_FRAME_RATE_80 = 8 # 80 FPS -enums['GOPRO_FRAME_RATE'][8] = EnumEntry('GOPRO_FRAME_RATE_80', '''80 FPS''') -GOPRO_FRAME_RATE_90 = 9 # 90 FPS -enums['GOPRO_FRAME_RATE'][9] = EnumEntry('GOPRO_FRAME_RATE_90', '''90 FPS''') -GOPRO_FRAME_RATE_100 = 10 # 100 FPS -enums['GOPRO_FRAME_RATE'][10] = EnumEntry('GOPRO_FRAME_RATE_100', '''100 FPS''') -GOPRO_FRAME_RATE_120 = 11 # 120 FPS -enums['GOPRO_FRAME_RATE'][11] = EnumEntry('GOPRO_FRAME_RATE_120', '''120 FPS''') -GOPRO_FRAME_RATE_240 = 12 # 240 FPS -enums['GOPRO_FRAME_RATE'][12] = EnumEntry('GOPRO_FRAME_RATE_240', '''240 FPS''') -GOPRO_FRAME_RATE_12_5 = 13 # 12.5 FPS -enums['GOPRO_FRAME_RATE'][13] = EnumEntry('GOPRO_FRAME_RATE_12_5', '''12.5 FPS''') -GOPRO_FRAME_RATE_ENUM_END = 14 # -enums['GOPRO_FRAME_RATE'][14] = EnumEntry('GOPRO_FRAME_RATE_ENUM_END', '''''') - -# GOPRO_FIELD_OF_VIEW -enums['GOPRO_FIELD_OF_VIEW'] = {} -GOPRO_FIELD_OF_VIEW_WIDE = 0 # 0x00: Wide -enums['GOPRO_FIELD_OF_VIEW'][0] = EnumEntry('GOPRO_FIELD_OF_VIEW_WIDE', '''0x00: Wide''') -GOPRO_FIELD_OF_VIEW_MEDIUM = 1 # 0x01: Medium -enums['GOPRO_FIELD_OF_VIEW'][1] = EnumEntry('GOPRO_FIELD_OF_VIEW_MEDIUM', '''0x01: Medium''') -GOPRO_FIELD_OF_VIEW_NARROW = 2 # 0x02: Narrow -enums['GOPRO_FIELD_OF_VIEW'][2] = EnumEntry('GOPRO_FIELD_OF_VIEW_NARROW', '''0x02: Narrow''') -GOPRO_FIELD_OF_VIEW_ENUM_END = 3 # -enums['GOPRO_FIELD_OF_VIEW'][3] = EnumEntry('GOPRO_FIELD_OF_VIEW_ENUM_END', '''''') - -# GOPRO_VIDEO_SETTINGS_FLAGS -enums['GOPRO_VIDEO_SETTINGS_FLAGS'] = {} -GOPRO_VIDEO_SETTINGS_TV_MODE = 1 # 0=NTSC, 1=PAL -enums['GOPRO_VIDEO_SETTINGS_FLAGS'][1] = EnumEntry('GOPRO_VIDEO_SETTINGS_TV_MODE', '''0=NTSC, 1=PAL''') -GOPRO_VIDEO_SETTINGS_FLAGS_ENUM_END = 2 # -enums['GOPRO_VIDEO_SETTINGS_FLAGS'][2] = EnumEntry('GOPRO_VIDEO_SETTINGS_FLAGS_ENUM_END', '''''') - -# GOPRO_PHOTO_RESOLUTION -enums['GOPRO_PHOTO_RESOLUTION'] = {} -GOPRO_PHOTO_RESOLUTION_5MP_MEDIUM = 0 # 5MP Medium -enums['GOPRO_PHOTO_RESOLUTION'][0] = EnumEntry('GOPRO_PHOTO_RESOLUTION_5MP_MEDIUM', '''5MP Medium''') -GOPRO_PHOTO_RESOLUTION_7MP_MEDIUM = 1 # 7MP Medium -enums['GOPRO_PHOTO_RESOLUTION'][1] = EnumEntry('GOPRO_PHOTO_RESOLUTION_7MP_MEDIUM', '''7MP Medium''') -GOPRO_PHOTO_RESOLUTION_7MP_WIDE = 2 # 7MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][2] = EnumEntry('GOPRO_PHOTO_RESOLUTION_7MP_WIDE', '''7MP Wide''') -GOPRO_PHOTO_RESOLUTION_10MP_WIDE = 3 # 10MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][3] = EnumEntry('GOPRO_PHOTO_RESOLUTION_10MP_WIDE', '''10MP Wide''') -GOPRO_PHOTO_RESOLUTION_12MP_WIDE = 4 # 12MP Wide -enums['GOPRO_PHOTO_RESOLUTION'][4] = EnumEntry('GOPRO_PHOTO_RESOLUTION_12MP_WIDE', '''12MP Wide''') -GOPRO_PHOTO_RESOLUTION_ENUM_END = 5 # -enums['GOPRO_PHOTO_RESOLUTION'][5] = EnumEntry('GOPRO_PHOTO_RESOLUTION_ENUM_END', '''''') - -# GOPRO_PROTUNE_WHITE_BALANCE -enums['GOPRO_PROTUNE_WHITE_BALANCE'] = {} -GOPRO_PROTUNE_WHITE_BALANCE_AUTO = 0 # Auto -enums['GOPRO_PROTUNE_WHITE_BALANCE'][0] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_AUTO', '''Auto''') -GOPRO_PROTUNE_WHITE_BALANCE_3000K = 1 # 3000K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][1] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_3000K', '''3000K''') -GOPRO_PROTUNE_WHITE_BALANCE_5500K = 2 # 5500K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][2] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_5500K', '''5500K''') -GOPRO_PROTUNE_WHITE_BALANCE_6500K = 3 # 6500K -enums['GOPRO_PROTUNE_WHITE_BALANCE'][3] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_6500K', '''6500K''') -GOPRO_PROTUNE_WHITE_BALANCE_RAW = 4 # Camera Raw -enums['GOPRO_PROTUNE_WHITE_BALANCE'][4] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_RAW', '''Camera Raw''') -GOPRO_PROTUNE_WHITE_BALANCE_ENUM_END = 5 # -enums['GOPRO_PROTUNE_WHITE_BALANCE'][5] = EnumEntry('GOPRO_PROTUNE_WHITE_BALANCE_ENUM_END', '''''') - -# GOPRO_PROTUNE_COLOUR -enums['GOPRO_PROTUNE_COLOUR'] = {} -GOPRO_PROTUNE_COLOUR_STANDARD = 0 # Auto -enums['GOPRO_PROTUNE_COLOUR'][0] = EnumEntry('GOPRO_PROTUNE_COLOUR_STANDARD', '''Auto''') -GOPRO_PROTUNE_COLOUR_NEUTRAL = 1 # Neutral -enums['GOPRO_PROTUNE_COLOUR'][1] = EnumEntry('GOPRO_PROTUNE_COLOUR_NEUTRAL', '''Neutral''') -GOPRO_PROTUNE_COLOUR_ENUM_END = 2 # -enums['GOPRO_PROTUNE_COLOUR'][2] = EnumEntry('GOPRO_PROTUNE_COLOUR_ENUM_END', '''''') - -# GOPRO_PROTUNE_GAIN -enums['GOPRO_PROTUNE_GAIN'] = {} -GOPRO_PROTUNE_GAIN_400 = 0 # ISO 400 -enums['GOPRO_PROTUNE_GAIN'][0] = EnumEntry('GOPRO_PROTUNE_GAIN_400', '''ISO 400''') -GOPRO_PROTUNE_GAIN_800 = 1 # ISO 800 (Only Hero 4) -enums['GOPRO_PROTUNE_GAIN'][1] = EnumEntry('GOPRO_PROTUNE_GAIN_800', '''ISO 800 (Only Hero 4)''') -GOPRO_PROTUNE_GAIN_1600 = 2 # ISO 1600 -enums['GOPRO_PROTUNE_GAIN'][2] = EnumEntry('GOPRO_PROTUNE_GAIN_1600', '''ISO 1600''') -GOPRO_PROTUNE_GAIN_3200 = 3 # ISO 3200 (Only Hero 4) -enums['GOPRO_PROTUNE_GAIN'][3] = EnumEntry('GOPRO_PROTUNE_GAIN_3200', '''ISO 3200 (Only Hero 4)''') -GOPRO_PROTUNE_GAIN_6400 = 4 # ISO 6400 -enums['GOPRO_PROTUNE_GAIN'][4] = EnumEntry('GOPRO_PROTUNE_GAIN_6400', '''ISO 6400''') -GOPRO_PROTUNE_GAIN_ENUM_END = 5 # -enums['GOPRO_PROTUNE_GAIN'][5] = EnumEntry('GOPRO_PROTUNE_GAIN_ENUM_END', '''''') - -# GOPRO_PROTUNE_SHARPNESS -enums['GOPRO_PROTUNE_SHARPNESS'] = {} -GOPRO_PROTUNE_SHARPNESS_LOW = 0 # Low Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][0] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_LOW', '''Low Sharpness''') -GOPRO_PROTUNE_SHARPNESS_MEDIUM = 1 # Medium Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][1] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_MEDIUM', '''Medium Sharpness''') -GOPRO_PROTUNE_SHARPNESS_HIGH = 2 # High Sharpness -enums['GOPRO_PROTUNE_SHARPNESS'][2] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_HIGH', '''High Sharpness''') -GOPRO_PROTUNE_SHARPNESS_ENUM_END = 3 # -enums['GOPRO_PROTUNE_SHARPNESS'][3] = EnumEntry('GOPRO_PROTUNE_SHARPNESS_ENUM_END', '''''') - -# GOPRO_PROTUNE_EXPOSURE -enums['GOPRO_PROTUNE_EXPOSURE'] = {} -GOPRO_PROTUNE_EXPOSURE_NEG_5_0 = 0 # -5.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][0] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_5_0', '''-5.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_4_5 = 1 # -4.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][1] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_4_5', '''-4.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_4_0 = 2 # -4.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][2] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_4_0', '''-4.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_3_5 = 3 # -3.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][3] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_3_5', '''-3.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_3_0 = 4 # -3.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][4] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_3_0', '''-3.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_2_5 = 5 # -2.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][5] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_2_5', '''-2.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_NEG_2_0 = 6 # -2.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][6] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_2_0', '''-2.0 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_1_5 = 7 # -1.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][7] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_1_5', '''-1.5 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_1_0 = 8 # -1.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][8] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_1_0', '''-1.0 EV''') -GOPRO_PROTUNE_EXPOSURE_NEG_0_5 = 9 # -0.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][9] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_NEG_0_5', '''-0.5 EV''') -GOPRO_PROTUNE_EXPOSURE_ZERO = 10 # 0.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][10] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_ZERO', '''0.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_0_5 = 11 # +0.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][11] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_0_5', '''+0.5 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_1_0 = 12 # +1.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][12] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_1_0', '''+1.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_1_5 = 13 # +1.5 EV -enums['GOPRO_PROTUNE_EXPOSURE'][13] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_1_5', '''+1.5 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_2_0 = 14 # +2.0 EV -enums['GOPRO_PROTUNE_EXPOSURE'][14] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_2_0', '''+2.0 EV''') -GOPRO_PROTUNE_EXPOSURE_POS_2_5 = 15 # +2.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][15] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_2_5', '''+2.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_3_0 = 16 # +3.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][16] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_3_0', '''+3.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_3_5 = 17 # +3.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][17] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_3_5', '''+3.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_4_0 = 18 # +4.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][18] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_4_0', '''+4.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_4_5 = 19 # +4.5 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][19] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_4_5', '''+4.5 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_POS_5_0 = 20 # +5.0 EV (Hero 3+ Only) -enums['GOPRO_PROTUNE_EXPOSURE'][20] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_POS_5_0', '''+5.0 EV (Hero 3+ Only)''') -GOPRO_PROTUNE_EXPOSURE_ENUM_END = 21 # -enums['GOPRO_PROTUNE_EXPOSURE'][21] = EnumEntry('GOPRO_PROTUNE_EXPOSURE_ENUM_END', '''''') - -# GOPRO_CHARGING -enums['GOPRO_CHARGING'] = {} -GOPRO_CHARGING_DISABLED = 0 # Charging disabled -enums['GOPRO_CHARGING'][0] = EnumEntry('GOPRO_CHARGING_DISABLED', '''Charging disabled''') -GOPRO_CHARGING_ENABLED = 1 # Charging enabled -enums['GOPRO_CHARGING'][1] = EnumEntry('GOPRO_CHARGING_ENABLED', '''Charging enabled''') -GOPRO_CHARGING_ENUM_END = 2 # -enums['GOPRO_CHARGING'][2] = EnumEntry('GOPRO_CHARGING_ENUM_END', '''''') - -# GOPRO_MODEL -enums['GOPRO_MODEL'] = {} -GOPRO_MODEL_UNKNOWN = 0 # Unknown gopro model -enums['GOPRO_MODEL'][0] = EnumEntry('GOPRO_MODEL_UNKNOWN', '''Unknown gopro model''') -GOPRO_MODEL_HERO_3_PLUS_SILVER = 1 # Hero 3+ Silver (HeroBus not supported by GoPro) -enums['GOPRO_MODEL'][1] = EnumEntry('GOPRO_MODEL_HERO_3_PLUS_SILVER', '''Hero 3+ Silver (HeroBus not supported by GoPro)''') -GOPRO_MODEL_HERO_3_PLUS_BLACK = 2 # Hero 3+ Black -enums['GOPRO_MODEL'][2] = EnumEntry('GOPRO_MODEL_HERO_3_PLUS_BLACK', '''Hero 3+ Black''') -GOPRO_MODEL_HERO_4_SILVER = 3 # Hero 4 Silver -enums['GOPRO_MODEL'][3] = EnumEntry('GOPRO_MODEL_HERO_4_SILVER', '''Hero 4 Silver''') -GOPRO_MODEL_HERO_4_BLACK = 4 # Hero 4 Black -enums['GOPRO_MODEL'][4] = EnumEntry('GOPRO_MODEL_HERO_4_BLACK', '''Hero 4 Black''') -GOPRO_MODEL_ENUM_END = 5 # -enums['GOPRO_MODEL'][5] = EnumEntry('GOPRO_MODEL_ENUM_END', '''''') - -# GOPRO_BURST_RATE -enums['GOPRO_BURST_RATE'] = {} -GOPRO_BURST_RATE_3_IN_1_SECOND = 0 # 3 Shots / 1 Second -enums['GOPRO_BURST_RATE'][0] = EnumEntry('GOPRO_BURST_RATE_3_IN_1_SECOND', '''3 Shots / 1 Second''') -GOPRO_BURST_RATE_5_IN_1_SECOND = 1 # 5 Shots / 1 Second -enums['GOPRO_BURST_RATE'][1] = EnumEntry('GOPRO_BURST_RATE_5_IN_1_SECOND', '''5 Shots / 1 Second''') -GOPRO_BURST_RATE_10_IN_1_SECOND = 2 # 10 Shots / 1 Second -enums['GOPRO_BURST_RATE'][2] = EnumEntry('GOPRO_BURST_RATE_10_IN_1_SECOND', '''10 Shots / 1 Second''') -GOPRO_BURST_RATE_10_IN_2_SECOND = 3 # 10 Shots / 2 Second -enums['GOPRO_BURST_RATE'][3] = EnumEntry('GOPRO_BURST_RATE_10_IN_2_SECOND', '''10 Shots / 2 Second''') -GOPRO_BURST_RATE_10_IN_3_SECOND = 4 # 10 Shots / 3 Second (Hero 4 Only) -enums['GOPRO_BURST_RATE'][4] = EnumEntry('GOPRO_BURST_RATE_10_IN_3_SECOND', '''10 Shots / 3 Second (Hero 4 Only)''') -GOPRO_BURST_RATE_30_IN_1_SECOND = 5 # 30 Shots / 1 Second -enums['GOPRO_BURST_RATE'][5] = EnumEntry('GOPRO_BURST_RATE_30_IN_1_SECOND', '''30 Shots / 1 Second''') -GOPRO_BURST_RATE_30_IN_2_SECOND = 6 # 30 Shots / 2 Second -enums['GOPRO_BURST_RATE'][6] = EnumEntry('GOPRO_BURST_RATE_30_IN_2_SECOND', '''30 Shots / 2 Second''') -GOPRO_BURST_RATE_30_IN_3_SECOND = 7 # 30 Shots / 3 Second -enums['GOPRO_BURST_RATE'][7] = EnumEntry('GOPRO_BURST_RATE_30_IN_3_SECOND', '''30 Shots / 3 Second''') -GOPRO_BURST_RATE_30_IN_6_SECOND = 8 # 30 Shots / 6 Second -enums['GOPRO_BURST_RATE'][8] = EnumEntry('GOPRO_BURST_RATE_30_IN_6_SECOND', '''30 Shots / 6 Second''') -GOPRO_BURST_RATE_ENUM_END = 9 # -enums['GOPRO_BURST_RATE'][9] = EnumEntry('GOPRO_BURST_RATE_ENUM_END', '''''') - -# LED_CONTROL_PATTERN -enums['LED_CONTROL_PATTERN'] = {} -LED_CONTROL_PATTERN_OFF = 0 # LED patterns off (return control to regular vehicle control) -enums['LED_CONTROL_PATTERN'][0] = EnumEntry('LED_CONTROL_PATTERN_OFF', '''LED patterns off (return control to regular vehicle control)''') -LED_CONTROL_PATTERN_FIRMWAREUPDATE = 1 # LEDs show pattern during firmware update -enums['LED_CONTROL_PATTERN'][1] = EnumEntry('LED_CONTROL_PATTERN_FIRMWAREUPDATE', '''LEDs show pattern during firmware update''') -LED_CONTROL_PATTERN_CUSTOM = 255 # Custom Pattern using custom bytes fields -enums['LED_CONTROL_PATTERN'][255] = EnumEntry('LED_CONTROL_PATTERN_CUSTOM', '''Custom Pattern using custom bytes fields''') -LED_CONTROL_PATTERN_ENUM_END = 256 # -enums['LED_CONTROL_PATTERN'][256] = EnumEntry('LED_CONTROL_PATTERN_ENUM_END', '''''') - -# EKF_STATUS_FLAGS -enums['EKF_STATUS_FLAGS'] = {} -EKF_ATTITUDE = 1 # set if EKF's attitude estimate is good -enums['EKF_STATUS_FLAGS'][1] = EnumEntry('EKF_ATTITUDE', '''set if EKF's attitude estimate is good''') -EKF_VELOCITY_HORIZ = 2 # set if EKF's horizontal velocity estimate is good -enums['EKF_STATUS_FLAGS'][2] = EnumEntry('EKF_VELOCITY_HORIZ', '''set if EKF's horizontal velocity estimate is good''') -EKF_VELOCITY_VERT = 4 # set if EKF's vertical velocity estimate is good -enums['EKF_STATUS_FLAGS'][4] = EnumEntry('EKF_VELOCITY_VERT', '''set if EKF's vertical velocity estimate is good''') -EKF_POS_HORIZ_REL = 8 # set if EKF's horizontal position (relative) estimate is good -enums['EKF_STATUS_FLAGS'][8] = EnumEntry('EKF_POS_HORIZ_REL', '''set if EKF's horizontal position (relative) estimate is good''') -EKF_POS_HORIZ_ABS = 16 # set if EKF's horizontal position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][16] = EnumEntry('EKF_POS_HORIZ_ABS', '''set if EKF's horizontal position (absolute) estimate is good''') -EKF_POS_VERT_ABS = 32 # set if EKF's vertical position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][32] = EnumEntry('EKF_POS_VERT_ABS', '''set if EKF's vertical position (absolute) estimate is good''') -EKF_POS_VERT_AGL = 64 # set if EKF's vertical position (above ground) estimate is good -enums['EKF_STATUS_FLAGS'][64] = EnumEntry('EKF_POS_VERT_AGL', '''set if EKF's vertical position (above ground) estimate is good''') -EKF_CONST_POS_MODE = 128 # EKF is in constant position mode and does not know it's absolute or - # relative position -enums['EKF_STATUS_FLAGS'][128] = EnumEntry('EKF_CONST_POS_MODE', '''EKF is in constant position mode and does not know it's absolute or relative position''') -EKF_PRED_POS_HORIZ_REL = 256 # set if EKF's predicted horizontal position (relative) estimate is good -enums['EKF_STATUS_FLAGS'][256] = EnumEntry('EKF_PRED_POS_HORIZ_REL', '''set if EKF's predicted horizontal position (relative) estimate is good''') -EKF_PRED_POS_HORIZ_ABS = 512 # set if EKF's predicted horizontal position (absolute) estimate is good -enums['EKF_STATUS_FLAGS'][512] = EnumEntry('EKF_PRED_POS_HORIZ_ABS', '''set if EKF's predicted horizontal position (absolute) estimate is good''') -EKF_STATUS_FLAGS_ENUM_END = 513 # -enums['EKF_STATUS_FLAGS'][513] = EnumEntry('EKF_STATUS_FLAGS_ENUM_END', '''''') - -# PID_TUNING_AXIS -enums['PID_TUNING_AXIS'] = {} -PID_TUNING_ROLL = 1 # -enums['PID_TUNING_AXIS'][1] = EnumEntry('PID_TUNING_ROLL', '''''') -PID_TUNING_PITCH = 2 # -enums['PID_TUNING_AXIS'][2] = EnumEntry('PID_TUNING_PITCH', '''''') -PID_TUNING_YAW = 3 # -enums['PID_TUNING_AXIS'][3] = EnumEntry('PID_TUNING_YAW', '''''') -PID_TUNING_ACCZ = 4 # -enums['PID_TUNING_AXIS'][4] = EnumEntry('PID_TUNING_ACCZ', '''''') -PID_TUNING_STEER = 5 # -enums['PID_TUNING_AXIS'][5] = EnumEntry('PID_TUNING_STEER', '''''') -PID_TUNING_AXIS_ENUM_END = 6 # -enums['PID_TUNING_AXIS'][6] = EnumEntry('PID_TUNING_AXIS_ENUM_END', '''''') - -# MAG_CAL_STATUS -enums['MAG_CAL_STATUS'] = {} -MAG_CAL_NOT_STARTED = 0 # -enums['MAG_CAL_STATUS'][0] = EnumEntry('MAG_CAL_NOT_STARTED', '''''') -MAG_CAL_WAITING_TO_START = 1 # -enums['MAG_CAL_STATUS'][1] = EnumEntry('MAG_CAL_WAITING_TO_START', '''''') -MAG_CAL_RUNNING_STEP_ONE = 2 # -enums['MAG_CAL_STATUS'][2] = EnumEntry('MAG_CAL_RUNNING_STEP_ONE', '''''') -MAG_CAL_RUNNING_STEP_TWO = 3 # -enums['MAG_CAL_STATUS'][3] = EnumEntry('MAG_CAL_RUNNING_STEP_TWO', '''''') -MAG_CAL_SUCCESS = 4 # -enums['MAG_CAL_STATUS'][4] = EnumEntry('MAG_CAL_SUCCESS', '''''') -MAG_CAL_FAILED = 5 # -enums['MAG_CAL_STATUS'][5] = EnumEntry('MAG_CAL_FAILED', '''''') -MAG_CAL_STATUS_ENUM_END = 6 # -enums['MAG_CAL_STATUS'][6] = EnumEntry('MAG_CAL_STATUS_ENUM_END', '''''') - -# MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'] = {} -MAV_REMOTE_LOG_DATA_BLOCK_STOP = 2147483645 # UAV to stop sending DataFlash blocks -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483645] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_STOP', '''UAV to stop sending DataFlash blocks''') -MAV_REMOTE_LOG_DATA_BLOCK_START = 2147483646 # UAV to start sending DataFlash blocks -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483646] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_START', '''UAV to start sending DataFlash blocks''') -MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS_ENUM_END = 2147483647 # -enums['MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS'][2147483647] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_COMMANDS_ENUM_END', '''''') - -# MAV_REMOTE_LOG_DATA_BLOCK_STATUSES -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'] = {} -MAV_REMOTE_LOG_DATA_BLOCK_NACK = 0 # This block has NOT been received -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][0] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_NACK', '''This block has NOT been received''') -MAV_REMOTE_LOG_DATA_BLOCK_ACK = 1 # This block has been received -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][1] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_ACK', '''This block has been received''') -MAV_REMOTE_LOG_DATA_BLOCK_STATUSES_ENUM_END = 2 # -enums['MAV_REMOTE_LOG_DATA_BLOCK_STATUSES'][2] = EnumEntry('MAV_REMOTE_LOG_DATA_BLOCK_STATUSES_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_DYNAMIC_STATE -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'] = {} -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_INTENT_CHANGE = 1 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][1] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_INTENT_CHANGE', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_AUTOPILOT_ENABLED = 2 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][2] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_AUTOPILOT_ENABLED', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_NICBARO_CROSSCHECKED = 4 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][4] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_NICBARO_CROSSCHECKED', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ON_GROUND = 8 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][8] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ON_GROUND', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_IDENT = 16 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][16] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_IDENT', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ENUM_END = 17 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_STATE'][17] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_STATE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_RF_SELECT -enums['UAVIONIX_ADSB_OUT_RF_SELECT'] = {} -UAVIONIX_ADSB_OUT_RF_SELECT_STANDBY = 0 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][0] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_STANDBY', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_RX_ENABLED = 1 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][1] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_RX_ENABLED', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_TX_ENABLED = 2 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][2] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_TX_ENABLED', '''''') -UAVIONIX_ADSB_OUT_RF_SELECT_ENUM_END = 3 # -enums['UAVIONIX_ADSB_OUT_RF_SELECT'][3] = EnumEntry('UAVIONIX_ADSB_OUT_RF_SELECT_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'] = {} -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_0 = 0 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][0] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_0', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_1 = 1 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][1] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_NONE_1', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_2D = 2 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][2] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_2D', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_3D = 3 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][3] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_3D', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_DGPS = 4 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][4] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_DGPS', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_RTK = 5 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][5] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_RTK', '''''') -UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_ENUM_END = 6 # -enums['UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX'][6] = EnumEntry('UAVIONIX_ADSB_OUT_DYNAMIC_GPS_FIX_ENUM_END', '''''') - -# UAVIONIX_ADSB_RF_HEALTH -enums['UAVIONIX_ADSB_RF_HEALTH'] = {} -UAVIONIX_ADSB_RF_HEALTH_INITIALIZING = 0 # -enums['UAVIONIX_ADSB_RF_HEALTH'][0] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_INITIALIZING', '''''') -UAVIONIX_ADSB_RF_HEALTH_OK = 1 # -enums['UAVIONIX_ADSB_RF_HEALTH'][1] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_OK', '''''') -UAVIONIX_ADSB_RF_HEALTH_FAIL_TX = 2 # -enums['UAVIONIX_ADSB_RF_HEALTH'][2] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_FAIL_TX', '''''') -UAVIONIX_ADSB_RF_HEALTH_FAIL_RX = 16 # -enums['UAVIONIX_ADSB_RF_HEALTH'][16] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_FAIL_RX', '''''') -UAVIONIX_ADSB_RF_HEALTH_ENUM_END = 17 # -enums['UAVIONIX_ADSB_RF_HEALTH'][17] = EnumEntry('UAVIONIX_ADSB_RF_HEALTH_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'] = {} -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L15M_W23M = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L15M_W23M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25M_W28P5M = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25M_W28P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25_34M = 3 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][3] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L25_34M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_33M = 4 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][4] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_33M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_38M = 5 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][5] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L35_38M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_39P5M = 6 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][6] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_39P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_45M = 7 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][7] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L45_45M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_45M = 8 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][8] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_45M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_52M = 9 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][9] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L55_52M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_59P5M = 10 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][10] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_59P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_67M = 11 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][11] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L65_67M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W72P5M = 12 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][12] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W72P5M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W80M = 13 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][13] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L75_W80M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W80M = 14 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][14] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W80M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W90M = 15 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][15] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_L85_W90M', '''''') -UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_ENUM_END = 16 # -enums['UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE'][16] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_AIRCRAFT_SIZE_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'] = {} -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_2M = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_2M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_4M = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_4M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_6M = 3 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][3] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_LEFT_6M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_0M = 4 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][4] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_0M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_2M = 5 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][5] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_2M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_4M = 6 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][6] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_4M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_6M = 7 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][7] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_RIGHT_6M', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_ENUM_END = 8 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT'][8] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LAT_ENUM_END', '''''') - -# UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'] = {} -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_NO_DATA = 0 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][0] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_NO_DATA', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_APPLIED_BY_SENSOR = 1 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][1] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_APPLIED_BY_SENSOR', '''''') -UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_ENUM_END = 2 # -enums['UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON'][2] = EnumEntry('UAVIONIX_ADSB_OUT_CFG_GPS_OFFSET_LON_ENUM_END', '''''') - -# UAVIONIX_ADSB_EMERGENCY_STATUS -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'] = {} -UAVIONIX_ADSB_OUT_NO_EMERGENCY = 0 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][0] = EnumEntry('UAVIONIX_ADSB_OUT_NO_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_GENERAL_EMERGENCY = 1 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][1] = EnumEntry('UAVIONIX_ADSB_OUT_GENERAL_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_LIFEGUARD_EMERGENCY = 2 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][2] = EnumEntry('UAVIONIX_ADSB_OUT_LIFEGUARD_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_MINIMUM_FUEL_EMERGENCY = 3 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][3] = EnumEntry('UAVIONIX_ADSB_OUT_MINIMUM_FUEL_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_NO_COMM_EMERGENCY = 4 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][4] = EnumEntry('UAVIONIX_ADSB_OUT_NO_COMM_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_UNLAWFUL_INTERFERANCE_EMERGENCY = 5 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][5] = EnumEntry('UAVIONIX_ADSB_OUT_UNLAWFUL_INTERFERANCE_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_DOWNED_AIRCRAFT_EMERGENCY = 6 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][6] = EnumEntry('UAVIONIX_ADSB_OUT_DOWNED_AIRCRAFT_EMERGENCY', '''''') -UAVIONIX_ADSB_OUT_RESERVED = 7 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][7] = EnumEntry('UAVIONIX_ADSB_OUT_RESERVED', '''''') -UAVIONIX_ADSB_EMERGENCY_STATUS_ENUM_END = 8 # -enums['UAVIONIX_ADSB_EMERGENCY_STATUS'][8] = EnumEntry('UAVIONIX_ADSB_EMERGENCY_STATUS_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SENSOR_OFFSETS = 150 -MAVLINK_MSG_ID_SET_MAG_OFFSETS = 151 -MAVLINK_MSG_ID_MEMINFO = 152 -MAVLINK_MSG_ID_AP_ADC = 153 -MAVLINK_MSG_ID_DIGICAM_CONFIGURE = 154 -MAVLINK_MSG_ID_DIGICAM_CONTROL = 155 -MAVLINK_MSG_ID_MOUNT_CONFIGURE = 156 -MAVLINK_MSG_ID_MOUNT_CONTROL = 157 -MAVLINK_MSG_ID_MOUNT_STATUS = 158 -MAVLINK_MSG_ID_FENCE_POINT = 160 -MAVLINK_MSG_ID_FENCE_FETCH_POINT = 161 -MAVLINK_MSG_ID_FENCE_STATUS = 162 -MAVLINK_MSG_ID_AHRS = 163 -MAVLINK_MSG_ID_SIMSTATE = 164 -MAVLINK_MSG_ID_HWSTATUS = 165 -MAVLINK_MSG_ID_RADIO = 166 -MAVLINK_MSG_ID_LIMITS_STATUS = 167 -MAVLINK_MSG_ID_WIND = 168 -MAVLINK_MSG_ID_DATA16 = 169 -MAVLINK_MSG_ID_DATA32 = 170 -MAVLINK_MSG_ID_DATA64 = 171 -MAVLINK_MSG_ID_DATA96 = 172 -MAVLINK_MSG_ID_RANGEFINDER = 173 -MAVLINK_MSG_ID_AIRSPEED_AUTOCAL = 174 -MAVLINK_MSG_ID_RALLY_POINT = 175 -MAVLINK_MSG_ID_RALLY_FETCH_POINT = 176 -MAVLINK_MSG_ID_COMPASSMOT_STATUS = 177 -MAVLINK_MSG_ID_AHRS2 = 178 -MAVLINK_MSG_ID_CAMERA_STATUS = 179 -MAVLINK_MSG_ID_CAMERA_FEEDBACK = 180 -MAVLINK_MSG_ID_BATTERY2 = 181 -MAVLINK_MSG_ID_AHRS3 = 182 -MAVLINK_MSG_ID_AUTOPILOT_VERSION_REQUEST = 183 -MAVLINK_MSG_ID_REMOTE_LOG_DATA_BLOCK = 184 -MAVLINK_MSG_ID_REMOTE_LOG_BLOCK_STATUS = 185 -MAVLINK_MSG_ID_LED_CONTROL = 186 -MAVLINK_MSG_ID_MAG_CAL_PROGRESS = 191 -MAVLINK_MSG_ID_MAG_CAL_REPORT = 192 -MAVLINK_MSG_ID_EKF_STATUS_REPORT = 193 -MAVLINK_MSG_ID_PID_TUNING = 194 -MAVLINK_MSG_ID_GIMBAL_REPORT = 200 -MAVLINK_MSG_ID_GIMBAL_CONTROL = 201 -MAVLINK_MSG_ID_GIMBAL_TORQUE_CMD_REPORT = 214 -MAVLINK_MSG_ID_GOPRO_HEARTBEAT = 215 -MAVLINK_MSG_ID_GOPRO_GET_REQUEST = 216 -MAVLINK_MSG_ID_GOPRO_GET_RESPONSE = 217 -MAVLINK_MSG_ID_GOPRO_SET_REQUEST = 218 -MAVLINK_MSG_ID_GOPRO_SET_RESPONSE = 219 -MAVLINK_MSG_ID_RPM = 226 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 -MAVLINK_MSG_ID_UAVIONIX_ADSB_OUT_CFG = 10001 -MAVLINK_MSG_ID_UAVIONIX_ADSB_OUT_DYNAMIC = 10002 -MAVLINK_MSG_ID_UAVIONIX_ADSB_TRANSCEIVER_HEALTH_REPORT = 10003 - -class MAVLink_sensor_offsets_message(MAVLink_message): - ''' - Offsets and calibrations values for hardware sensors. This - makes it easier to debug the calibration process. - ''' - id = MAVLINK_MSG_ID_SENSOR_OFFSETS - name = 'SENSOR_OFFSETS' - fieldnames = ['mag_ofs_x', 'mag_ofs_y', 'mag_ofs_z', 'mag_declination', 'raw_press', 'raw_temp', 'gyro_cal_x', 'gyro_cal_y', 'gyro_cal_z', 'accel_cal_x', 'accel_cal_y', 'accel_cal_z'] - ordered_fieldnames = [ 'mag_declination', 'raw_press', 'raw_temp', 'gyro_cal_x', 'gyro_cal_y', 'gyro_cal_z', 'accel_cal_x', 'accel_cal_y', 'accel_cal_z', 'mag_ofs_x', 'mag_ofs_y', 'mag_ofs_z' ] - format = ' MAV. Also - used to return a point from MAV -> GCS - ''' - id = MAVLINK_MSG_ID_FENCE_POINT - name = 'FENCE_POINT' - fieldnames = ['target_system', 'target_component', 'idx', 'count', 'lat', 'lng'] - ordered_fieldnames = [ 'lat', 'lng', 'target_system', 'target_component', 'idx', 'count' ] - format = ' MAV. Also - used to return a point from MAV -> GCS - ''' - id = MAVLINK_MSG_ID_RALLY_POINT - name = 'RALLY_POINT' - fieldnames = ['target_system', 'target_component', 'idx', 'count', 'lat', 'lng', 'alt', 'break_alt', 'land_dir', 'flags'] - ordered_fieldnames = [ 'lat', 'lng', 'alt', 'break_alt', 'land_dir', 'target_system', 'target_component', 'idx', 'count', 'flags' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point (float) - lng : Longitude of point (float) - - ''' - return MAVLink_fence_point_message(target_system, target_component, idx, count, lat, lng) - - def fence_point_send(self, target_system, target_component, idx, count, lat, lng, force_mavlink1=False): - ''' - A fence point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point (float) - lng : Longitude of point (float) - - ''' - return self.send(self.fence_point_encode(target_system, target_component, idx, count, lat, lng), force_mavlink1=force_mavlink1) - - def fence_fetch_point_encode(self, target_system, target_component, idx): - ''' - Request a current fence point from MAV - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - - ''' - return MAVLink_fence_fetch_point_message(target_system, target_component, idx) - - def fence_fetch_point_send(self, target_system, target_component, idx, force_mavlink1=False): - ''' - Request a current fence point from MAV - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 1, 0 is for return point) (uint8_t) - - ''' - return self.send(self.fence_fetch_point_encode(target_system, target_component, idx), force_mavlink1=force_mavlink1) - - def fence_status_encode(self, breach_status, breach_count, breach_type, breach_time): - ''' - Status of geo-fencing. Sent in extended status stream when fencing - enabled - - breach_status : 0 if currently inside fence, 1 if outside (uint8_t) - breach_count : number of fence breaches (uint16_t) - breach_type : last breach type (see FENCE_BREACH_* enum) (uint8_t) - breach_time : time of last breach in milliseconds since boot (uint32_t) - - ''' - return MAVLink_fence_status_message(breach_status, breach_count, breach_type, breach_time) - - def fence_status_send(self, breach_status, breach_count, breach_type, breach_time, force_mavlink1=False): - ''' - Status of geo-fencing. Sent in extended status stream when fencing - enabled - - breach_status : 0 if currently inside fence, 1 if outside (uint8_t) - breach_count : number of fence breaches (uint16_t) - breach_type : last breach type (see FENCE_BREACH_* enum) (uint8_t) - breach_time : time of last breach in milliseconds since boot (uint32_t) - - ''' - return self.send(self.fence_status_encode(breach_status, breach_count, breach_type, breach_time), force_mavlink1=force_mavlink1) - - def ahrs_encode(self, omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw): - ''' - Status of DCM attitude estimator - - omegaIx : X gyro drift estimate rad/s (float) - omegaIy : Y gyro drift estimate rad/s (float) - omegaIz : Z gyro drift estimate rad/s (float) - accel_weight : average accel_weight (float) - renorm_val : average renormalisation value (float) - error_rp : average error_roll_pitch value (float) - error_yaw : average error_yaw value (float) - - ''' - return MAVLink_ahrs_message(omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw) - - def ahrs_send(self, omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw, force_mavlink1=False): - ''' - Status of DCM attitude estimator - - omegaIx : X gyro drift estimate rad/s (float) - omegaIy : Y gyro drift estimate rad/s (float) - omegaIz : Z gyro drift estimate rad/s (float) - accel_weight : average accel_weight (float) - renorm_val : average renormalisation value (float) - error_rp : average error_roll_pitch value (float) - error_yaw : average error_yaw value (float) - - ''' - return self.send(self.ahrs_encode(omegaIx, omegaIy, omegaIz, accel_weight, renorm_val, error_rp, error_yaw), force_mavlink1=force_mavlink1) - - def simstate_encode(self, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng): - ''' - Status of simulation environment, if used - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return MAVLink_simstate_message(roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng) - - def simstate_send(self, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng, force_mavlink1=False): - ''' - Status of simulation environment, if used - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return self.send(self.simstate_encode(roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lng), force_mavlink1=force_mavlink1) - - def hwstatus_encode(self, Vcc, I2Cerr): - ''' - Status of key hardware - - Vcc : board voltage (mV) (uint16_t) - I2Cerr : I2C error count (uint8_t) - - ''' - return MAVLink_hwstatus_message(Vcc, I2Cerr) - - def hwstatus_send(self, Vcc, I2Cerr, force_mavlink1=False): - ''' - Status of key hardware - - Vcc : board voltage (mV) (uint16_t) - I2Cerr : I2C error count (uint8_t) - - ''' - return self.send(self.hwstatus_encode(Vcc, I2Cerr), force_mavlink1=force_mavlink1) - - def radio_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio - - rssi : local signal strength (uint8_t) - remrssi : remote signal strength (uint8_t) - txbuf : how full the tx buffer is as a percentage (uint8_t) - noise : background noise level (uint8_t) - remnoise : remote background noise level (uint8_t) - rxerrors : receive errors (uint16_t) - fixed : count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio - - rssi : local signal strength (uint8_t) - remrssi : remote signal strength (uint8_t) - txbuf : how full the tx buffer is as a percentage (uint8_t) - noise : background noise level (uint8_t) - remnoise : remote background noise level (uint8_t) - rxerrors : receive errors (uint16_t) - fixed : count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def limits_status_encode(self, limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered): - ''' - Status of AP_Limits. Sent in extended status stream when AP_Limits is - enabled - - limits_state : state of AP_Limits, (see enum LimitState, LIMITS_STATE) (uint8_t) - last_trigger : time of last breach in milliseconds since boot (uint32_t) - last_action : time of last recovery action in milliseconds since boot (uint32_t) - last_recovery : time of last successful recovery in milliseconds since boot (uint32_t) - last_clear : time of last all-clear in milliseconds since boot (uint32_t) - breach_count : number of fence breaches (uint16_t) - mods_enabled : AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_required : AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_triggered : AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - - ''' - return MAVLink_limits_status_message(limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered) - - def limits_status_send(self, limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered, force_mavlink1=False): - ''' - Status of AP_Limits. Sent in extended status stream when AP_Limits is - enabled - - limits_state : state of AP_Limits, (see enum LimitState, LIMITS_STATE) (uint8_t) - last_trigger : time of last breach in milliseconds since boot (uint32_t) - last_action : time of last recovery action in milliseconds since boot (uint32_t) - last_recovery : time of last successful recovery in milliseconds since boot (uint32_t) - last_clear : time of last all-clear in milliseconds since boot (uint32_t) - breach_count : number of fence breaches (uint16_t) - mods_enabled : AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_required : AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - mods_triggered : AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) (uint8_t) - - ''' - return self.send(self.limits_status_encode(limits_state, last_trigger, last_action, last_recovery, last_clear, breach_count, mods_enabled, mods_required, mods_triggered), force_mavlink1=force_mavlink1) - - def wind_encode(self, direction, speed, speed_z): - ''' - Wind estimation - - direction : wind direction that wind is coming from (degrees) (float) - speed : wind speed in ground plane (m/s) (float) - speed_z : vertical wind speed (m/s) (float) - - ''' - return MAVLink_wind_message(direction, speed, speed_z) - - def wind_send(self, direction, speed, speed_z, force_mavlink1=False): - ''' - Wind estimation - - direction : wind direction that wind is coming from (degrees) (float) - speed : wind speed in ground plane (m/s) (float) - speed_z : vertical wind speed (m/s) (float) - - ''' - return self.send(self.wind_encode(direction, speed, speed_z), force_mavlink1=force_mavlink1) - - def data16_encode(self, type, len, data): - ''' - Data packet, size 16 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data16_message(type, len, data) - - def data16_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 16 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data16_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data32_encode(self, type, len, data): - ''' - Data packet, size 32 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data32_message(type, len, data) - - def data32_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 32 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data32_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data64_encode(self, type, len, data): - ''' - Data packet, size 64 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data64_message(type, len, data) - - def data64_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 64 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data64_encode(type, len, data), force_mavlink1=force_mavlink1) - - def data96_encode(self, type, len, data): - ''' - Data packet, size 96 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return MAVLink_data96_message(type, len, data) - - def data96_send(self, type, len, data, force_mavlink1=False): - ''' - Data packet, size 96 - - type : data type (uint8_t) - len : data length (uint8_t) - data : raw data (uint8_t) - - ''' - return self.send(self.data96_encode(type, len, data), force_mavlink1=force_mavlink1) - - def rangefinder_encode(self, distance, voltage): - ''' - Rangefinder reporting - - distance : distance in meters (float) - voltage : raw voltage if available, zero otherwise (float) - - ''' - return MAVLink_rangefinder_message(distance, voltage) - - def rangefinder_send(self, distance, voltage, force_mavlink1=False): - ''' - Rangefinder reporting - - distance : distance in meters (float) - voltage : raw voltage if available, zero otherwise (float) - - ''' - return self.send(self.rangefinder_encode(distance, voltage), force_mavlink1=force_mavlink1) - - def airspeed_autocal_encode(self, vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz): - ''' - Airspeed auto-calibration - - vx : GPS velocity north m/s (float) - vy : GPS velocity east m/s (float) - vz : GPS velocity down m/s (float) - diff_pressure : Differential pressure pascals (float) - EAS2TAS : Estimated to true airspeed ratio (float) - ratio : Airspeed ratio (float) - state_x : EKF state x (float) - state_y : EKF state y (float) - state_z : EKF state z (float) - Pax : EKF Pax (float) - Pby : EKF Pby (float) - Pcz : EKF Pcz (float) - - ''' - return MAVLink_airspeed_autocal_message(vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz) - - def airspeed_autocal_send(self, vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz, force_mavlink1=False): - ''' - Airspeed auto-calibration - - vx : GPS velocity north m/s (float) - vy : GPS velocity east m/s (float) - vz : GPS velocity down m/s (float) - diff_pressure : Differential pressure pascals (float) - EAS2TAS : Estimated to true airspeed ratio (float) - ratio : Airspeed ratio (float) - state_x : EKF state x (float) - state_y : EKF state y (float) - state_z : EKF state z (float) - Pax : EKF Pax (float) - Pby : EKF Pby (float) - Pcz : EKF Pcz (float) - - ''' - return self.send(self.airspeed_autocal_encode(vx, vy, vz, diff_pressure, EAS2TAS, ratio, state_x, state_y, state_z, Pax, Pby, Pcz), force_mavlink1=force_mavlink1) - - def rally_point_encode(self, target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags): - ''' - A rally point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point in degrees * 1E7 (int32_t) - lng : Longitude of point in degrees * 1E7 (int32_t) - alt : Transit / loiter altitude in meters relative to home (int16_t) - break_alt : Break altitude in meters relative to home (int16_t) - land_dir : Heading to aim for when landing. In centi-degrees. (uint16_t) - flags : See RALLY_FLAGS enum for definition of the bitmask. (uint8_t) - - ''' - return MAVLink_rally_point_message(target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags) - - def rally_point_send(self, target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags, force_mavlink1=False): - ''' - A rally point. Used to set a point when from GCS -> MAV. Also used to - return a point from MAV -> GCS - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - count : total number of points (for sanity checking) (uint8_t) - lat : Latitude of point in degrees * 1E7 (int32_t) - lng : Longitude of point in degrees * 1E7 (int32_t) - alt : Transit / loiter altitude in meters relative to home (int16_t) - break_alt : Break altitude in meters relative to home (int16_t) - land_dir : Heading to aim for when landing. In centi-degrees. (uint16_t) - flags : See RALLY_FLAGS enum for definition of the bitmask. (uint8_t) - - ''' - return self.send(self.rally_point_encode(target_system, target_component, idx, count, lat, lng, alt, break_alt, land_dir, flags), force_mavlink1=force_mavlink1) - - def rally_fetch_point_encode(self, target_system, target_component, idx): - ''' - Request a current rally point from MAV. MAV should respond with a - RALLY_POINT message. MAV should not respond if the - request is invalid. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - - ''' - return MAVLink_rally_fetch_point_message(target_system, target_component, idx) - - def rally_fetch_point_send(self, target_system, target_component, idx, force_mavlink1=False): - ''' - Request a current rally point from MAV. MAV should respond with a - RALLY_POINT message. MAV should not respond if the - request is invalid. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - idx : point index (first point is 0) (uint8_t) - - ''' - return self.send(self.rally_fetch_point_encode(target_system, target_component, idx), force_mavlink1=force_mavlink1) - - def compassmot_status_encode(self, throttle, current, interference, CompensationX, CompensationY, CompensationZ): - ''' - Status of compassmot calibration - - throttle : throttle (percent*10) (uint16_t) - current : current (amps) (float) - interference : interference (percent) (uint16_t) - CompensationX : Motor Compensation X (float) - CompensationY : Motor Compensation Y (float) - CompensationZ : Motor Compensation Z (float) - - ''' - return MAVLink_compassmot_status_message(throttle, current, interference, CompensationX, CompensationY, CompensationZ) - - def compassmot_status_send(self, throttle, current, interference, CompensationX, CompensationY, CompensationZ, force_mavlink1=False): - ''' - Status of compassmot calibration - - throttle : throttle (percent*10) (uint16_t) - current : current (amps) (float) - interference : interference (percent) (uint16_t) - CompensationX : Motor Compensation X (float) - CompensationY : Motor Compensation Y (float) - CompensationZ : Motor Compensation Z (float) - - ''' - return self.send(self.compassmot_status_encode(throttle, current, interference, CompensationX, CompensationY, CompensationZ), force_mavlink1=force_mavlink1) - - def ahrs2_encode(self, roll, pitch, yaw, altitude, lat, lng): - ''' - Status of secondary AHRS filter if available - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return MAVLink_ahrs2_message(roll, pitch, yaw, altitude, lat, lng) - - def ahrs2_send(self, roll, pitch, yaw, altitude, lat, lng, force_mavlink1=False): - ''' - Status of secondary AHRS filter if available - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - - ''' - return self.send(self.ahrs2_encode(roll, pitch, yaw, altitude, lat, lng), force_mavlink1=force_mavlink1) - - def camera_status_encode(self, time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4): - ''' - Camera Event - - time_usec : Image timestamp (microseconds since UNIX epoch, according to camera clock) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - event_id : See CAMERA_STATUS_TYPES enum for definition of the bitmask (uint8_t) - p1 : Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p2 : Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p3 : Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p4 : Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - - ''' - return MAVLink_camera_status_message(time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4) - - def camera_status_send(self, time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4, force_mavlink1=False): - ''' - Camera Event - - time_usec : Image timestamp (microseconds since UNIX epoch, according to camera clock) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - event_id : See CAMERA_STATUS_TYPES enum for definition of the bitmask (uint8_t) - p1 : Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p2 : Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p3 : Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - p4 : Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) (float) - - ''' - return self.send(self.camera_status_encode(time_usec, target_system, cam_idx, img_idx, event_id, p1, p2, p3, p4), force_mavlink1=force_mavlink1) - - def camera_feedback_encode(self, time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags): - ''' - Camera Capture Feedback - - time_usec : Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - lat : Latitude in (deg * 1E7) (int32_t) - lng : Longitude in (deg * 1E7) (int32_t) - alt_msl : Altitude Absolute (meters AMSL) (float) - alt_rel : Altitude Relative (meters above HOME location) (float) - roll : Camera Roll angle (earth frame, degrees, +-180) (float) - pitch : Camera Pitch angle (earth frame, degrees, +-180) (float) - yaw : Camera Yaw (earth frame, degrees, 0-360, true) (float) - foc_len : Focal Length (mm) (float) - flags : See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask (uint8_t) - - ''' - return MAVLink_camera_feedback_message(time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags) - - def camera_feedback_send(self, time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags, force_mavlink1=False): - ''' - Camera Capture Feedback - - time_usec : Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) (uint64_t) - target_system : System ID (uint8_t) - cam_idx : Camera ID (uint8_t) - img_idx : Image index (uint16_t) - lat : Latitude in (deg * 1E7) (int32_t) - lng : Longitude in (deg * 1E7) (int32_t) - alt_msl : Altitude Absolute (meters AMSL) (float) - alt_rel : Altitude Relative (meters above HOME location) (float) - roll : Camera Roll angle (earth frame, degrees, +-180) (float) - pitch : Camera Pitch angle (earth frame, degrees, +-180) (float) - yaw : Camera Yaw (earth frame, degrees, 0-360, true) (float) - foc_len : Focal Length (mm) (float) - flags : See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask (uint8_t) - - ''' - return self.send(self.camera_feedback_encode(time_usec, target_system, cam_idx, img_idx, lat, lng, alt_msl, alt_rel, roll, pitch, yaw, foc_len, flags), force_mavlink1=force_mavlink1) - - def battery2_encode(self, voltage, current_battery): - ''' - 2nd Battery status - - voltage : voltage in millivolts (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - - ''' - return MAVLink_battery2_message(voltage, current_battery) - - def battery2_send(self, voltage, current_battery, force_mavlink1=False): - ''' - 2nd Battery status - - voltage : voltage in millivolts (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - - ''' - return self.send(self.battery2_encode(voltage, current_battery), force_mavlink1=force_mavlink1) - - def ahrs3_encode(self, roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4): - ''' - Status of third AHRS filter if available. This is for ANU research - group (Ali and Sean) - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - v1 : test variable1 (float) - v2 : test variable2 (float) - v3 : test variable3 (float) - v4 : test variable4 (float) - - ''' - return MAVLink_ahrs3_message(roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4) - - def ahrs3_send(self, roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4, force_mavlink1=False): - ''' - Status of third AHRS filter if available. This is for ANU research - group (Ali and Sean) - - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - altitude : Altitude (MSL) (float) - lat : Latitude in degrees * 1E7 (int32_t) - lng : Longitude in degrees * 1E7 (int32_t) - v1 : test variable1 (float) - v2 : test variable2 (float) - v3 : test variable3 (float) - v4 : test variable4 (float) - - ''' - return self.send(self.ahrs3_encode(roll, pitch, yaw, altitude, lat, lng, v1, v2, v3, v4), force_mavlink1=force_mavlink1) - - def autopilot_version_request_encode(self, target_system, target_component): - ''' - Request the autopilot version from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_autopilot_version_request_message(target_system, target_component) - - def autopilot_version_request_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the autopilot version from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.autopilot_version_request_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def remote_log_data_block_encode(self, target_system, target_component, seqno, data): - ''' - Send a block of log data to remote location - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - data : log data block (uint8_t) - - ''' - return MAVLink_remote_log_data_block_message(target_system, target_component, seqno, data) - - def remote_log_data_block_send(self, target_system, target_component, seqno, data, force_mavlink1=False): - ''' - Send a block of log data to remote location - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - data : log data block (uint8_t) - - ''' - return self.send(self.remote_log_data_block_encode(target_system, target_component, seqno, data), force_mavlink1=force_mavlink1) - - def remote_log_block_status_encode(self, target_system, target_component, seqno, status): - ''' - Send Status of each log block that autopilot board might have sent - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - status : log data block status (uint8_t) - - ''' - return MAVLink_remote_log_block_status_message(target_system, target_component, seqno, status) - - def remote_log_block_status_send(self, target_system, target_component, seqno, status, force_mavlink1=False): - ''' - Send Status of each log block that autopilot board might have sent - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seqno : log data block sequence number (uint32_t) - status : log data block status (uint8_t) - - ''' - return self.send(self.remote_log_block_status_encode(target_system, target_component, seqno, status), force_mavlink1=force_mavlink1) - - def led_control_encode(self, target_system, target_component, instance, pattern, custom_len, custom_bytes): - ''' - Control vehicle LEDs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - instance : Instance (LED instance to control or 255 for all LEDs) (uint8_t) - pattern : Pattern (see LED_PATTERN_ENUM) (uint8_t) - custom_len : Custom Byte Length (uint8_t) - custom_bytes : Custom Bytes (uint8_t) - - ''' - return MAVLink_led_control_message(target_system, target_component, instance, pattern, custom_len, custom_bytes) - - def led_control_send(self, target_system, target_component, instance, pattern, custom_len, custom_bytes, force_mavlink1=False): - ''' - Control vehicle LEDs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - instance : Instance (LED instance to control or 255 for all LEDs) (uint8_t) - pattern : Pattern (see LED_PATTERN_ENUM) (uint8_t) - custom_len : Custom Byte Length (uint8_t) - custom_bytes : Custom Bytes (uint8_t) - - ''' - return self.send(self.led_control_encode(target_system, target_component, instance, pattern, custom_len, custom_bytes), force_mavlink1=force_mavlink1) - - def mag_cal_progress_encode(self, compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z): - ''' - Reports progress of compass calibration. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - attempt : Attempt number (uint8_t) - completion_pct : Completion percentage (uint8_t) - completion_mask : Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) (uint8_t) - direction_x : Body frame direction vector for display (float) - direction_y : Body frame direction vector for display (float) - direction_z : Body frame direction vector for display (float) - - ''' - return MAVLink_mag_cal_progress_message(compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z) - - def mag_cal_progress_send(self, compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z, force_mavlink1=False): - ''' - Reports progress of compass calibration. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - attempt : Attempt number (uint8_t) - completion_pct : Completion percentage (uint8_t) - completion_mask : Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) (uint8_t) - direction_x : Body frame direction vector for display (float) - direction_y : Body frame direction vector for display (float) - direction_z : Body frame direction vector for display (float) - - ''' - return self.send(self.mag_cal_progress_encode(compass_id, cal_mask, cal_status, attempt, completion_pct, completion_mask, direction_x, direction_y, direction_z), force_mavlink1=force_mavlink1) - - def mag_cal_report_encode(self, compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z): - ''' - Reports results of completed compass calibration. Sent until - MAG_CAL_ACK received. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - autosaved : 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters (uint8_t) - fitness : RMS milligauss residuals (float) - ofs_x : X offset (float) - ofs_y : Y offset (float) - ofs_z : Z offset (float) - diag_x : X diagonal (matrix 11) (float) - diag_y : Y diagonal (matrix 22) (float) - diag_z : Z diagonal (matrix 33) (float) - offdiag_x : X off-diagonal (matrix 12 and 21) (float) - offdiag_y : Y off-diagonal (matrix 13 and 31) (float) - offdiag_z : Z off-diagonal (matrix 32 and 23) (float) - - ''' - return MAVLink_mag_cal_report_message(compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z) - - def mag_cal_report_send(self, compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z, force_mavlink1=False): - ''' - Reports results of completed compass calibration. Sent until - MAG_CAL_ACK received. - - compass_id : Compass being calibrated (uint8_t) - cal_mask : Bitmask of compasses being calibrated (uint8_t) - cal_status : Status (see MAG_CAL_STATUS enum) (uint8_t) - autosaved : 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters (uint8_t) - fitness : RMS milligauss residuals (float) - ofs_x : X offset (float) - ofs_y : Y offset (float) - ofs_z : Z offset (float) - diag_x : X diagonal (matrix 11) (float) - diag_y : Y diagonal (matrix 22) (float) - diag_z : Z diagonal (matrix 33) (float) - offdiag_x : X off-diagonal (matrix 12 and 21) (float) - offdiag_y : Y off-diagonal (matrix 13 and 31) (float) - offdiag_z : Z off-diagonal (matrix 32 and 23) (float) - - ''' - return self.send(self.mag_cal_report_encode(compass_id, cal_mask, cal_status, autosaved, fitness, ofs_x, ofs_y, ofs_z, diag_x, diag_y, diag_z, offdiag_x, offdiag_y, offdiag_z), force_mavlink1=force_mavlink1) - - def ekf_status_report_encode(self, flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance): - ''' - EKF Status message including flags and variances - - flags : Flags (uint16_t) - velocity_variance : Velocity variance (float) - pos_horiz_variance : Horizontal Position variance (float) - pos_vert_variance : Vertical Position variance (float) - compass_variance : Compass variance (float) - terrain_alt_variance : Terrain Altitude variance (float) - - ''' - return MAVLink_ekf_status_report_message(flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance) - - def ekf_status_report_send(self, flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance, force_mavlink1=False): - ''' - EKF Status message including flags and variances - - flags : Flags (uint16_t) - velocity_variance : Velocity variance (float) - pos_horiz_variance : Horizontal Position variance (float) - pos_vert_variance : Vertical Position variance (float) - compass_variance : Compass variance (float) - terrain_alt_variance : Terrain Altitude variance (float) - - ''' - return self.send(self.ekf_status_report_encode(flags, velocity_variance, pos_horiz_variance, pos_vert_variance, compass_variance, terrain_alt_variance), force_mavlink1=force_mavlink1) - - def pid_tuning_encode(self, axis, desired, achieved, FF, P, I, D): - ''' - PID tuning information - - axis : axis (uint8_t) - desired : desired rate (degrees/s) (float) - achieved : achieved rate (degrees/s) (float) - FF : FF component (float) - P : P component (float) - I : I component (float) - D : D component (float) - - ''' - return MAVLink_pid_tuning_message(axis, desired, achieved, FF, P, I, D) - - def pid_tuning_send(self, axis, desired, achieved, FF, P, I, D, force_mavlink1=False): - ''' - PID tuning information - - axis : axis (uint8_t) - desired : desired rate (degrees/s) (float) - achieved : achieved rate (degrees/s) (float) - FF : FF component (float) - P : P component (float) - I : I component (float) - D : D component (float) - - ''' - return self.send(self.pid_tuning_encode(axis, desired, achieved, FF, P, I, D), force_mavlink1=force_mavlink1) - - def gimbal_report_encode(self, target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az): - ''' - 3 axis gimbal mesuraments - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - delta_time : Time since last update (seconds) (float) - delta_angle_x : Delta angle X (radians) (float) - delta_angle_y : Delta angle Y (radians) (float) - delta_angle_z : Delta angle X (radians) (float) - delta_velocity_x : Delta velocity X (m/s) (float) - delta_velocity_y : Delta velocity Y (m/s) (float) - delta_velocity_z : Delta velocity Z (m/s) (float) - joint_roll : Joint ROLL (radians) (float) - joint_el : Joint EL (radians) (float) - joint_az : Joint AZ (radians) (float) - - ''' - return MAVLink_gimbal_report_message(target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az) - - def gimbal_report_send(self, target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az, force_mavlink1=False): - ''' - 3 axis gimbal mesuraments - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - delta_time : Time since last update (seconds) (float) - delta_angle_x : Delta angle X (radians) (float) - delta_angle_y : Delta angle Y (radians) (float) - delta_angle_z : Delta angle X (radians) (float) - delta_velocity_x : Delta velocity X (m/s) (float) - delta_velocity_y : Delta velocity Y (m/s) (float) - delta_velocity_z : Delta velocity Z (m/s) (float) - joint_roll : Joint ROLL (radians) (float) - joint_el : Joint EL (radians) (float) - joint_az : Joint AZ (radians) (float) - - ''' - return self.send(self.gimbal_report_encode(target_system, target_component, delta_time, delta_angle_x, delta_angle_y, delta_angle_z, delta_velocity_x, delta_velocity_y, delta_velocity_z, joint_roll, joint_el, joint_az), force_mavlink1=force_mavlink1) - - def gimbal_control_encode(self, target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z): - ''' - Control message for rate gimbal - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - demanded_rate_x : Demanded angular rate X (rad/s) (float) - demanded_rate_y : Demanded angular rate Y (rad/s) (float) - demanded_rate_z : Demanded angular rate Z (rad/s) (float) - - ''' - return MAVLink_gimbal_control_message(target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z) - - def gimbal_control_send(self, target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z, force_mavlink1=False): - ''' - Control message for rate gimbal - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - demanded_rate_x : Demanded angular rate X (rad/s) (float) - demanded_rate_y : Demanded angular rate Y (rad/s) (float) - demanded_rate_z : Demanded angular rate Z (rad/s) (float) - - ''' - return self.send(self.gimbal_control_encode(target_system, target_component, demanded_rate_x, demanded_rate_y, demanded_rate_z), force_mavlink1=force_mavlink1) - - def gimbal_torque_cmd_report_encode(self, target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd): - ''' - 100 Hz gimbal torque command telemetry - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - rl_torque_cmd : Roll Torque Command (int16_t) - el_torque_cmd : Elevation Torque Command (int16_t) - az_torque_cmd : Azimuth Torque Command (int16_t) - - ''' - return MAVLink_gimbal_torque_cmd_report_message(target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd) - - def gimbal_torque_cmd_report_send(self, target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd, force_mavlink1=False): - ''' - 100 Hz gimbal torque command telemetry - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - rl_torque_cmd : Roll Torque Command (int16_t) - el_torque_cmd : Elevation Torque Command (int16_t) - az_torque_cmd : Azimuth Torque Command (int16_t) - - ''' - return self.send(self.gimbal_torque_cmd_report_encode(target_system, target_component, rl_torque_cmd, el_torque_cmd, az_torque_cmd), force_mavlink1=force_mavlink1) - - def gopro_heartbeat_encode(self, status, capture_mode, flags): - ''' - Heartbeat from a HeroBus attached GoPro - - status : Status (uint8_t) - capture_mode : Current capture mode (uint8_t) - flags : additional status bits (uint8_t) - - ''' - return MAVLink_gopro_heartbeat_message(status, capture_mode, flags) - - def gopro_heartbeat_send(self, status, capture_mode, flags, force_mavlink1=False): - ''' - Heartbeat from a HeroBus attached GoPro - - status : Status (uint8_t) - capture_mode : Current capture mode (uint8_t) - flags : additional status bits (uint8_t) - - ''' - return self.send(self.gopro_heartbeat_encode(status, capture_mode, flags), force_mavlink1=force_mavlink1) - - def gopro_get_request_encode(self, target_system, target_component, cmd_id): - ''' - Request a GOPRO_COMMAND response from the GoPro - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - - ''' - return MAVLink_gopro_get_request_message(target_system, target_component, cmd_id) - - def gopro_get_request_send(self, target_system, target_component, cmd_id, force_mavlink1=False): - ''' - Request a GOPRO_COMMAND response from the GoPro - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - - ''' - return self.send(self.gopro_get_request_encode(target_system, target_component, cmd_id), force_mavlink1=force_mavlink1) - - def gopro_get_response_encode(self, cmd_id, status, value): - ''' - Response from a GOPRO_COMMAND get request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - value : Value (uint8_t) - - ''' - return MAVLink_gopro_get_response_message(cmd_id, status, value) - - def gopro_get_response_send(self, cmd_id, status, value, force_mavlink1=False): - ''' - Response from a GOPRO_COMMAND get request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - value : Value (uint8_t) - - ''' - return self.send(self.gopro_get_response_encode(cmd_id, status, value), force_mavlink1=force_mavlink1) - - def gopro_set_request_encode(self, target_system, target_component, cmd_id, value): - ''' - Request to set a GOPRO_COMMAND with a desired - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - value : Value (uint8_t) - - ''' - return MAVLink_gopro_set_request_message(target_system, target_component, cmd_id, value) - - def gopro_set_request_send(self, target_system, target_component, cmd_id, value, force_mavlink1=False): - ''' - Request to set a GOPRO_COMMAND with a desired - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - cmd_id : Command ID (uint8_t) - value : Value (uint8_t) - - ''' - return self.send(self.gopro_set_request_encode(target_system, target_component, cmd_id, value), force_mavlink1=force_mavlink1) - - def gopro_set_response_encode(self, cmd_id, status): - ''' - Response from a GOPRO_COMMAND set request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - - ''' - return MAVLink_gopro_set_response_message(cmd_id, status) - - def gopro_set_response_send(self, cmd_id, status, force_mavlink1=False): - ''' - Response from a GOPRO_COMMAND set request - - cmd_id : Command ID (uint8_t) - status : Status (uint8_t) - - ''' - return self.send(self.gopro_set_response_encode(cmd_id, status), force_mavlink1=force_mavlink1) - - def rpm_encode(self, rpm1, rpm2): - ''' - RPM sensor output - - rpm1 : RPM Sensor1 (float) - rpm2 : RPM Sensor2 (float) - - ''' - return MAVLink_rpm_message(rpm1, rpm2) - - def rpm_send(self, rpm1, rpm2, force_mavlink1=False): - ''' - RPM sensor output - - rpm1 : RPM Sensor1 (float) - rpm2 : RPM Sensor2 (float) - - ''' - return self.send(self.rpm_encode(rpm1, rpm2), force_mavlink1=force_mavlink1) - - def heartbeat_encode(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return MAVLink_heartbeat_message(type, autopilot, base_mode, custom_mode, system_status, mavlink_version) - - def heartbeat_send(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3, force_mavlink1=False): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return self.send(self.heartbeat_encode(type, autopilot, base_mode, custom_mode, system_status, mavlink_version), force_mavlink1=force_mavlink1) - - def sys_status_encode(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return MAVLink_sys_status_message(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4) - - def sys_status_send(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4, force_mavlink1=False): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return self.send(self.sys_status_encode(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4), force_mavlink1=force_mavlink1) - - def system_time_encode(self, time_unix_usec, time_boot_ms): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return MAVLink_system_time_message(time_unix_usec, time_boot_ms) - - def system_time_send(self, time_unix_usec, time_boot_ms, force_mavlink1=False): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return self.send(self.system_time_encode(time_unix_usec, time_boot_ms), force_mavlink1=force_mavlink1) - - def ping_encode(self, time_usec, seq, target_system, target_component): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return MAVLink_ping_message(time_usec, seq, target_system, target_component) - - def ping_send(self, time_usec, seq, target_system, target_component, force_mavlink1=False): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return self.send(self.ping_encode(time_usec, seq, target_system, target_component), force_mavlink1=force_mavlink1) - - def change_operator_control_encode(self, target_system, control_request, version, passkey): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return MAVLink_change_operator_control_message(target_system, control_request, version, passkey) - - def change_operator_control_send(self, target_system, control_request, version, passkey, force_mavlink1=False): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return self.send(self.change_operator_control_encode(target_system, control_request, version, passkey), force_mavlink1=force_mavlink1) - - def change_operator_control_ack_encode(self, gcs_system_id, control_request, ack): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return MAVLink_change_operator_control_ack_message(gcs_system_id, control_request, ack) - - def change_operator_control_ack_send(self, gcs_system_id, control_request, ack, force_mavlink1=False): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return self.send(self.change_operator_control_ack_encode(gcs_system_id, control_request, ack), force_mavlink1=force_mavlink1) - - def auth_key_encode(self, key): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return MAVLink_auth_key_message(key) - - def auth_key_send(self, key, force_mavlink1=False): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return self.send(self.auth_key_encode(key), force_mavlink1=force_mavlink1) - - def set_mode_encode(self, target_system, base_mode, custom_mode): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return MAVLink_set_mode_message(target_system, base_mode, custom_mode) - - def set_mode_send(self, target_system, base_mode, custom_mode, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return self.send(self.set_mode_encode(target_system, base_mode, custom_mode), force_mavlink1=force_mavlink1) - - def param_request_read_encode(self, target_system, target_component, param_id, param_index): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - - def uavionix_adsb_out_cfg_encode(self, ICAO, callsign, emitterType, aircraftSize, gpsOffsetLat, gpsOffsetLon, stallSpeed, rfSelect): - ''' - Static data to configure the ADS-B transponder (send within 10 sec of - a POR and every 10 sec thereafter) - - ICAO : Vehicle address (24 bit) (uint32_t) - callsign : Vehicle identifier (8 characters, null terminated, valid characters are A-Z, 0-9, " " only) (char) - emitterType : Transmitting vehicle type. See ADSB_EMITTER_TYPE enum (uint8_t) - aircraftSize : Aircraft length and width encoding (table 2-35 of DO-282B) (uint8_t) - gpsOffsetLat : GPS antenna lateral offset (table 2-36 of DO-282B) (uint8_t) - gpsOffsetLon : GPS antenna longitudinal offset from nose [if non-zero, take position (in meters) divide by 2 and add one] (table 2-37 DO-282B) (uint8_t) - stallSpeed : Aircraft stall speed in cm/s (uint16_t) - rfSelect : ADS-B transponder reciever and transmit enable flags (uint8_t) - - ''' - return MAVLink_uavionix_adsb_out_cfg_message(ICAO, callsign, emitterType, aircraftSize, gpsOffsetLat, gpsOffsetLon, stallSpeed, rfSelect) - - def uavionix_adsb_out_cfg_send(self, ICAO, callsign, emitterType, aircraftSize, gpsOffsetLat, gpsOffsetLon, stallSpeed, rfSelect, force_mavlink1=False): - ''' - Static data to configure the ADS-B transponder (send within 10 sec of - a POR and every 10 sec thereafter) - - ICAO : Vehicle address (24 bit) (uint32_t) - callsign : Vehicle identifier (8 characters, null terminated, valid characters are A-Z, 0-9, " " only) (char) - emitterType : Transmitting vehicle type. See ADSB_EMITTER_TYPE enum (uint8_t) - aircraftSize : Aircraft length and width encoding (table 2-35 of DO-282B) (uint8_t) - gpsOffsetLat : GPS antenna lateral offset (table 2-36 of DO-282B) (uint8_t) - gpsOffsetLon : GPS antenna longitudinal offset from nose [if non-zero, take position (in meters) divide by 2 and add one] (table 2-37 DO-282B) (uint8_t) - stallSpeed : Aircraft stall speed in cm/s (uint16_t) - rfSelect : ADS-B transponder reciever and transmit enable flags (uint8_t) - - ''' - return self.send(self.uavionix_adsb_out_cfg_encode(ICAO, callsign, emitterType, aircraftSize, gpsOffsetLat, gpsOffsetLon, stallSpeed, rfSelect), force_mavlink1=force_mavlink1) - - def uavionix_adsb_out_dynamic_encode(self, utcTime, gpsLat, gpsLon, gpsAlt, gpsFix, numSats, baroAltMSL, accuracyHor, accuracyVert, accuracyVel, velVert, velNS, VelEW, emergencyStatus, state, squawk): - ''' - Dynamic data used to generate ADS-B out transponder data (send at 5Hz) - - utcTime : UTC time in seconds since GPS epoch (Jan 6, 1980). If unknown set to UINT32_MAX (uint32_t) - gpsLat : Latitude WGS84 (deg * 1E7). If unknown set to INT32_MAX (int32_t) - gpsLon : Longitude WGS84 (deg * 1E7). If unknown set to INT32_MAX (int32_t) - gpsAlt : Altitude in mm (m * 1E-3) UP +ve. WGS84 altitude. If unknown set to INT32_MAX (int32_t) - gpsFix : 0-1: no fix, 2: 2D fix, 3: 3D fix, 4: DGPS, 5: RTK (uint8_t) - numSats : Number of satellites visible. If unknown set to UINT8_MAX (uint8_t) - baroAltMSL : Barometric pressure altitude relative to a standard atmosphere of 1013.2 mBar and NOT bar corrected altitude (m * 1E-3). (up +ve). If unknown set to INT32_MAX (int32_t) - accuracyHor : Horizontal accuracy in mm (m * 1E-3). If unknown set to UINT32_MAX (uint32_t) - accuracyVert : Vertical accuracy in cm. If unknown set to UINT16_MAX (uint16_t) - accuracyVel : Velocity accuracy in mm/s (m * 1E-3). If unknown set to UINT16_MAX (uint16_t) - velVert : GPS vertical speed in cm/s. If unknown set to INT16_MAX (int16_t) - velNS : North-South velocity over ground in cm/s North +ve. If unknown set to INT16_MAX (int16_t) - VelEW : East-West velocity over ground in cm/s East +ve. If unknown set to INT16_MAX (int16_t) - emergencyStatus : Emergency status (uint8_t) - state : ADS-B transponder dynamic input state flags (uint16_t) - squawk : Mode A code (typically 1200 [0x04B0] for VFR) (uint16_t) - - ''' - return MAVLink_uavionix_adsb_out_dynamic_message(utcTime, gpsLat, gpsLon, gpsAlt, gpsFix, numSats, baroAltMSL, accuracyHor, accuracyVert, accuracyVel, velVert, velNS, VelEW, emergencyStatus, state, squawk) - - def uavionix_adsb_out_dynamic_send(self, utcTime, gpsLat, gpsLon, gpsAlt, gpsFix, numSats, baroAltMSL, accuracyHor, accuracyVert, accuracyVel, velVert, velNS, VelEW, emergencyStatus, state, squawk, force_mavlink1=False): - ''' - Dynamic data used to generate ADS-B out transponder data (send at 5Hz) - - utcTime : UTC time in seconds since GPS epoch (Jan 6, 1980). If unknown set to UINT32_MAX (uint32_t) - gpsLat : Latitude WGS84 (deg * 1E7). If unknown set to INT32_MAX (int32_t) - gpsLon : Longitude WGS84 (deg * 1E7). If unknown set to INT32_MAX (int32_t) - gpsAlt : Altitude in mm (m * 1E-3) UP +ve. WGS84 altitude. If unknown set to INT32_MAX (int32_t) - gpsFix : 0-1: no fix, 2: 2D fix, 3: 3D fix, 4: DGPS, 5: RTK (uint8_t) - numSats : Number of satellites visible. If unknown set to UINT8_MAX (uint8_t) - baroAltMSL : Barometric pressure altitude relative to a standard atmosphere of 1013.2 mBar and NOT bar corrected altitude (m * 1E-3). (up +ve). If unknown set to INT32_MAX (int32_t) - accuracyHor : Horizontal accuracy in mm (m * 1E-3). If unknown set to UINT32_MAX (uint32_t) - accuracyVert : Vertical accuracy in cm. If unknown set to UINT16_MAX (uint16_t) - accuracyVel : Velocity accuracy in mm/s (m * 1E-3). If unknown set to UINT16_MAX (uint16_t) - velVert : GPS vertical speed in cm/s. If unknown set to INT16_MAX (int16_t) - velNS : North-South velocity over ground in cm/s North +ve. If unknown set to INT16_MAX (int16_t) - VelEW : East-West velocity over ground in cm/s East +ve. If unknown set to INT16_MAX (int16_t) - emergencyStatus : Emergency status (uint8_t) - state : ADS-B transponder dynamic input state flags (uint16_t) - squawk : Mode A code (typically 1200 [0x04B0] for VFR) (uint16_t) - - ''' - return self.send(self.uavionix_adsb_out_dynamic_encode(utcTime, gpsLat, gpsLon, gpsAlt, gpsFix, numSats, baroAltMSL, accuracyHor, accuracyVert, accuracyVel, velVert, velNS, VelEW, emergencyStatus, state, squawk), force_mavlink1=force_mavlink1) - - def uavionix_adsb_transceiver_health_report_encode(self, rfHealth): - ''' - Transceiver heartbeat with health report (updated every 10s) - - rfHealth : ADS-B transponder messages (uint8_t) - - ''' - return MAVLink_uavionix_adsb_transceiver_health_report_message(rfHealth) - - def uavionix_adsb_transceiver_health_report_send(self, rfHealth, force_mavlink1=False): - ''' - Transceiver heartbeat with health report (updated every 10s) - - rfHealth : ADS-B transponder messages (uint8_t) - - ''' - return self.send(self.uavionix_adsb_transceiver_health_report_encode(rfHealth), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.xml deleted file mode 100644 index 21f66ae50..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ardupilotmega.xml +++ /dev/null @@ -1,1545 +0,0 @@ - - - common.xml - - - uAvionix.xml - - 2 - - - - - - Mission command to operate EPM gripper - gripper number (a number from 1 to max number of grippers on the vehicle) - gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum) - Empty - Empty - Empty - Empty - Empty - - - - Enable/disable autotune - enable (1: enable, 0:disable) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to wait for an altitude or downwards vertical speed. This is meant for high altitude balloon launches, allowing the aircraft to be idle until either an altitude is reached or a negative vertical speed is reached (indicating early balloon burst). The wiggle time is how often to wiggle the control surfaces to prevent them seizing up. - altitude (m) - descent speed (m/s) - Wiggle Time (s) - Empty - Empty - Empty - Empty - - - - A system wide power-off event has been initiated. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - FLY button has been clicked. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - FLY button has been held for 1.5 seconds. - Takeoff altitude - Empty - Empty - Empty - Empty - Empty - Empty - - - - PAUSE button has been clicked. - 1 if Solo is in a shot mode, 0 otherwise - Empty - Empty - Empty - Empty - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Automatically retry on failure (0=no retry, 1=retry). - Save without user input (0=require input, 1=autosave). - Delay (seconds) - Autoreboot (0=user reboot, 1=autoreboot) - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Cancel a running magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reply with the version banner - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Causes the gimbal to reset and boot as if it was just powered on - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Command autopilot to get into factory test/diagnostic mode - 0 means get out of test mode, 1 means get into test mode - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reports progress and success or failure of gimbal axis calibration procedure - Gimbal axis we're reporting calibration progress for - Current calibration progress for this axis, 0x64=100% - Status of the calibration - Empty - Empty - Empty - Empty - - - - Starts commutation calibration on the gimbal - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Erases gimbal application and parameters - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - a limit has been breached - - - - taking action eg. RTL - - - - we're no longer in breach of a limit - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - - - Flags in RALLY_POINT message - - Flag set when requiring favorable winds for landing. - - - - Flag set when plane is to immediately descend to break altitude and land without GCS intervention. Flag not set when plane is to loiter at Rally point until commanded to land. - - - - - - - Disable parachute release - - - - Enable parachute release - - - - Release parachute - - - - - - Gripper actions. - - gripper release of cargo - - - - gripper grabs onto cargo - - - - - - - Camera heartbeat, announce camera component ID at 1hz - - - - Camera image triggered - - - - Camera connection lost - - - - Camera unknown error - - - - Camera battery low. Parameter p1 shows reported voltage - - - - Camera storage low. Parameter p1 shows reported shots remaining - - - - Camera storage low. Parameter p1 shows reported video minutes remaining - - - - - - - Shooting photos, not video - - - - Shooting video, not stills - - - - Unable to achieve requested exposure (e.g. shutter speed too low) - - - - Closed loop feedback from camera, we know for sure it has successfully taken a picture - - - - Open loop camera, an image trigger has been requested but we can't know for sure it has successfully taken a picture - - - - - - - Gimbal is powered on but has not started initializing yet - - - - Gimbal is currently running calibration on the pitch axis - - - - Gimbal is currently running calibration on the roll axis - - - - Gimbal is currently running calibration on the yaw axis - - - - Gimbal has finished calibrating and initializing, but is relaxed pending reception of first rate command from copter - - - - Gimbal is actively stabilizing - - - - Gimbal is relaxed because it missed more than 10 expected rate command messages in a row. Gimbal will move back to active mode when it receives a new rate command - - - - - - Gimbal yaw axis - - - - Gimbal pitch axis - - - - Gimbal roll axis - - - - - - Axis calibration is in progress - - - - Axis calibration succeeded - - - - Axis calibration failed - - - - - - Whether or not this axis requires calibration is unknown at this time - - - - This axis requires calibration - - - - This axis does not require calibration - - - - - - - No GoPro connected - - - - The detected GoPro is not HeroBus compatible - - - - A HeroBus compatible GoPro is connected - - - - An unrecoverable error was encountered with the connected GoPro, it may require a power cycle - - - - - - - GoPro is currently recording - - - - - - The write message with ID indicated succeeded - - - - The write message with ID indicated failed - - - - - - (Get/Set) - - - - (Get/Set) - - - - (___/Set) - - - - (Get/___) - - - - (Get/___) - - - - (Get/Set) - - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) - - - - - (Get/Set) - - - - - - Video mode - - - - Photo mode - - - - Burst mode, hero 3+ only - - - - Time lapse mode, hero 3+ only - - - - Multi shot mode, hero 4 only - - - - Playback mode, hero 4 only, silver only except when LCD or HDMI is connected to black - - - - Playback mode, hero 4 only - - - - Mode not yet known - - - - - - 848 x 480 (480p) - - - - 1280 x 720 (720p) - - - - 1280 x 960 (960p) - - - - 1920 x 1080 (1080p) - - - - 1920 x 1440 (1440p) - - - - 2704 x 1440 (2.7k-17:9) - - - - 2704 x 1524 (2.7k-16:9) - - - - 2704 x 2028 (2.7k-4:3) - - - - 3840 x 2160 (4k-16:9) - - - - 4096 x 2160 (4k-17:9) - - - - 1280 x 720 (720p-SuperView) - - - - 1920 x 1080 (1080p-SuperView) - - - - 2704 x 1520 (2.7k-SuperView) - - - - 3840 x 2160 (4k-SuperView) - - - - - - 12 FPS - - - - 15 FPS - - - - 24 FPS - - - - 25 FPS - - - - 30 FPS - - - - 48 FPS - - - - 50 FPS - - - - 60 FPS - - - - 80 FPS - - - - 90 FPS - - - - 100 FPS - - - - 120 FPS - - - - 240 FPS - - - - 12.5 FPS - - - - - - 0x00: Wide - - - - 0x01: Medium - - - - 0x02: Narrow - - - - - - 0=NTSC, 1=PAL - - - - - - 5MP Medium - - - - 7MP Medium - - - - 7MP Wide - - - - 10MP Wide - - - - 12MP Wide - - - - - - Auto - - - - 3000K - - - - 5500K - - - - 6500K - - - - Camera Raw - - - - - - Auto - - - - Neutral - - - - - - ISO 400 - - - - ISO 800 (Only Hero 4) - - - - ISO 1600 - - - - ISO 3200 (Only Hero 4) - - - - ISO 6400 - - - - - - Low Sharpness - - - - Medium Sharpness - - - - High Sharpness - - - - - - -5.0 EV (Hero 3+ Only) - - - - -4.5 EV (Hero 3+ Only) - - - - -4.0 EV (Hero 3+ Only) - - - - -3.5 EV (Hero 3+ Only) - - - - -3.0 EV (Hero 3+ Only) - - - - -2.5 EV (Hero 3+ Only) - - - - -2.0 EV - - - - -1.5 EV - - - - -1.0 EV - - - - -0.5 EV - - - - 0.0 EV - - - - +0.5 EV - - - - +1.0 EV - - - - +1.5 EV - - - - +2.0 EV - - - - +2.5 EV (Hero 3+ Only) - - - - +3.0 EV (Hero 3+ Only) - - - - +3.5 EV (Hero 3+ Only) - - - - +4.0 EV (Hero 3+ Only) - - - - +4.5 EV (Hero 3+ Only) - - - - +5.0 EV (Hero 3+ Only) - - - - - - Charging disabled - - - - Charging enabled - - - - - - Unknown gopro model - - - - Hero 3+ Silver (HeroBus not supported by GoPro) - - - - Hero 3+ Black - - - - Hero 4 Silver - - - - Hero 4 Black - - - - - - 3 Shots / 1 Second - - - - 5 Shots / 1 Second - - - - 10 Shots / 1 Second - - - - 10 Shots / 2 Second - - - - 10 Shots / 3 Second (Hero 4 Only) - - - - 30 Shots / 1 Second - - - - 30 Shots / 2 Second - - - - 30 Shots / 3 Second - - - - 30 Shots / 6 Second - - - - - - - LED patterns off (return control to regular vehicle control) - - - - LEDs show pattern during firmware update - - - - Custom Pattern using custom bytes fields - - - - - - Flags in EKF_STATUS message - - set if EKF's attitude estimate is good - - - - set if EKF's horizontal velocity estimate is good - - - - set if EKF's vertical velocity estimate is good - - - - set if EKF's horizontal position (relative) estimate is good - - - - set if EKF's horizontal position (absolute) estimate is good - - - - set if EKF's vertical position (absolute) estimate is good - - - - set if EKF's vertical position (above ground) estimate is good - - - - EKF is in constant position mode and does not know it's absolute or relative position - - - - set if EKF's predicted horizontal position (relative) estimate is good - - - - set if EKF's predicted horizontal position (absolute) estimate is good - - - - - - - - - - - - - - - - - - - - - - Special ACK block numbers control activation of dataflash log streaming - - - - UAV to stop sending DataFlash blocks - - - - - UAV to start sending DataFlash blocks - - - - - - - Possible remote log data block statuses - - This block has NOT been received - - - - This block has been received - - - - - - - Offsets and calibrations values for hardware sensors. This makes it easier to debug the calibration process. - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - magnetic declination (radians) - raw pressure from barometer - raw temperature from barometer - gyro X calibration - gyro Y calibration - gyro Z calibration - accel X calibration - accel Y calibration - accel Z calibration - - - - Deprecated. Use MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS instead. Set the magnetometer offsets - System ID - Component ID - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - - - - state of APM memory - heap top - free memory - - free memory (32 bit) - - - - raw ADC output - ADC output 1 - ADC output 2 - ADC output 3 - ADC output 4 - ADC output 5 - ADC output 6 - - - - - Configure on-board Camera Control System. - System ID - Component ID - Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - Exposure type enumeration from 1 to N (0 means ignore) - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - Control on-board Camera Control System to take shots. - System ID - Component ID - 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - 1 to N //Zoom's absolute position (0 means ignore) - -100 to 100 //Zooming step value to offset zoom from the current position - 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - 0: ignore, 1: shot or start filming - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - - Message to configure a camera mount, directional antenna, etc. - System ID - Component ID - mount operating mode (see MAV_MOUNT_MODE enum) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - - - - Message to control a camera mount, directional antenna, etc. - System ID - Component ID - pitch(deg*100) or lat, depending on mount mode - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - - - - Message with some status from APM to GCS about camera or antenna mount - System ID - Component ID - pitch(deg*100) - roll(deg*100) - yaw(deg*100) - - - - - A fence point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 1, 0 is for return point) - total number of points (for sanity checking) - Latitude of point - Longitude of point - - - - Request a current fence point from MAV - System ID - Component ID - point index (first point is 1, 0 is for return point) - - - - Status of geo-fencing. Sent in extended status stream when fencing enabled - 0 if currently inside fence, 1 if outside - number of fence breaches - last breach type (see FENCE_BREACH_* enum) - time of last breach in milliseconds since boot - - - - Status of DCM attitude estimator - X gyro drift estimate rad/s - Y gyro drift estimate rad/s - Z gyro drift estimate rad/s - average accel_weight - average renormalisation value - average error_roll_pitch value - average error_yaw value - - - - Status of simulation environment, if used - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - Status of key hardware - board voltage (mV) - I2C error count - - - - Status generated by radio - local signal strength - remote signal strength - how full the tx buffer is as a percentage - background noise level - remote background noise level - receive errors - count of error corrected packets - - - - - Status of AP_Limits. Sent in extended status stream when AP_Limits is enabled - state of AP_Limits, (see enum LimitState, LIMITS_STATE) - time of last breach in milliseconds since boot - time of last recovery action in milliseconds since boot - time of last successful recovery in milliseconds since boot - time of last all-clear in milliseconds since boot - number of fence breaches - AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) - - - - Wind estimation - wind direction that wind is coming from (degrees) - wind speed in ground plane (m/s) - vertical wind speed (m/s) - - - - Data packet, size 16 - data type - data length - raw data - - - - Data packet, size 32 - data type - data length - raw data - - - - Data packet, size 64 - data type - data length - raw data - - - - Data packet, size 96 - data type - data length - raw data - - - - Rangefinder reporting - distance in meters - raw voltage if available, zero otherwise - - - - Airspeed auto-calibration - GPS velocity north m/s - GPS velocity east m/s - GPS velocity down m/s - Differential pressure pascals - Estimated to true airspeed ratio - Airspeed ratio - EKF state x - EKF state y - EKF state z - EKF Pax - EKF Pby - EKF Pcz - - - - - A rally point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 0) - total number of points (for sanity checking) - Latitude of point in degrees * 1E7 - Longitude of point in degrees * 1E7 - Transit / loiter altitude in meters relative to home - - Break altitude in meters relative to home - Heading to aim for when landing. In centi-degrees. - See RALLY_FLAGS enum for definition of the bitmask. - - - - Request a current rally point from MAV. MAV should respond with a RALLY_POINT message. MAV should not respond if the request is invalid. - System ID - Component ID - point index (first point is 0) - - - - Status of compassmot calibration - throttle (percent*10) - current (amps) - interference (percent) - Motor Compensation X - Motor Compensation Y - Motor Compensation Z - - - - - Status of secondary AHRS filter if available - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - - Camera Event - Image timestamp (microseconds since UNIX epoch, according to camera clock) - System ID - - Camera ID - - Image index - - See CAMERA_STATUS_TYPES enum for definition of the bitmask - Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - - - - - Camera Capture Feedback - Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) - System ID - - Camera ID - - Image index - - Latitude in (deg * 1E7) - Longitude in (deg * 1E7) - Altitude Absolute (meters AMSL) - Altitude Relative (meters above HOME location) - Camera Roll angle (earth frame, degrees, +-180) - - Camera Pitch angle (earth frame, degrees, +-180) - - Camera Yaw (earth frame, degrees, 0-360, true) - - Focal Length (mm) - - See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask - - - - - 2nd Battery status - voltage in millivolts - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - - - - Status of third AHRS filter if available. This is for ANU research group (Ali and Sean) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - test variable1 - test variable2 - test variable3 - test variable4 - - - - Request the autopilot version from the system/component. - System ID - Component ID - - - - - Send a block of log data to remote location - System ID - Component ID - log data block sequence number - log data block - - - - Send Status of each log block that autopilot board might have sent - System ID - Component ID - log data block sequence number - log data block status - - - - Control vehicle LEDs - System ID - Component ID - Instance (LED instance to control or 255 for all LEDs) - Pattern (see LED_PATTERN_ENUM) - Custom Byte Length - Custom Bytes - - - - Reports progress of compass calibration. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - Attempt number - Completion percentage - Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) - Body frame direction vector for display - Body frame direction vector for display - Body frame direction vector for display - - - - Reports results of completed compass calibration. Sent until MAG_CAL_ACK received. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters - RMS milligauss residuals - X offset - Y offset - Z offset - X diagonal (matrix 11) - Y diagonal (matrix 22) - Z diagonal (matrix 33) - X off-diagonal (matrix 12 and 21) - Y off-diagonal (matrix 13 and 31) - Z off-diagonal (matrix 32 and 23) - - - - - EKF Status message including flags and variances - Flags - - Velocity variance - - Horizontal Position variance - Vertical Position variance - Compass variance - Terrain Altitude variance - - - - - PID tuning information - axis - desired rate (degrees/s) - achieved rate (degrees/s) - FF component - P component - I component - D component - - - - 3 axis gimbal mesuraments - System ID - Component ID - Time since last update (seconds) - Delta angle X (radians) - Delta angle Y (radians) - Delta angle X (radians) - Delta velocity X (m/s) - Delta velocity Y (m/s) - Delta velocity Z (m/s) - Joint ROLL (radians) - Joint EL (radians) - Joint AZ (radians) - - - - Control message for rate gimbal - System ID - Component ID - Demanded angular rate X (rad/s) - Demanded angular rate Y (rad/s) - Demanded angular rate Z (rad/s) - - - - 100 Hz gimbal torque command telemetry - System ID - Component ID - Roll Torque Command - Elevation Torque Command - Azimuth Torque Command - - - - - Heartbeat from a HeroBus attached GoPro - Status - Current capture mode - additional status bits - - - - - Request a GOPRO_COMMAND response from the GoPro - System ID - Component ID - Command ID - - - - Response from a GOPRO_COMMAND get request - Command ID - Status - Value - - - - Request to set a GOPRO_COMMAND with a desired - System ID - Component ID - Command ID - Value - - - - Response from a GOPRO_COMMAND set request - Command ID - Status - - - - - RPM sensor output - RPM Sensor1 - RPM Sensor2 - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.py deleted file mode 100644 index ba43875d8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.py +++ /dev/null @@ -1,12303 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: autoquad.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'autoquad' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_PROPULSION = 13 # Motor/ESC telemetry data. -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_PROPULSION', '''Motor/ESC telemetry data.''') -MAV_DATA_STREAM_ENUM_END = 14 # -enums['MAV_DATA_STREAM'][14] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_AQ_TELEMETRY_F = 150 -MAVLINK_MSG_ID_AQ_ESC_TELEMETRY = 152 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_aq_telemetry_f_message(MAVLink_message): - ''' - Sends up to 20 raw float values. - ''' - id = MAVLINK_MSG_ID_AQ_TELEMETRY_F - name = 'AQ_TELEMETRY_F' - fieldnames = ['Index', 'value1', 'value2', 'value3', 'value4', 'value5', 'value6', 'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15', 'value16', 'value17', 'value18', 'value19', 'value20'] - ordered_fieldnames = [ 'value1', 'value2', 'value3', 'value4', 'value5', 'value6', 'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15', 'value16', 'value17', 'value18', 'value19', 'value20', 'Index' ] - format = ' 4 motors. - Data is described as follows: - // unsigned int state : 3; // - unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error count - // - Data Version 3 - // - unsigned int temp : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - ''' - id = MAVLINK_MSG_ID_AQ_ESC_TELEMETRY - name = 'AQ_ESC_TELEMETRY' - fieldnames = ['time_boot_ms', 'seq', 'num_motors', 'num_in_seq', 'escid', 'status_age', 'data_version', 'data0', 'data1'] - ordered_fieldnames = [ 'time_boot_ms', 'data0', 'data1', 'status_age', 'seq', 'num_motors', 'num_in_seq', 'escid', 'data_version' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' 4 motors. Data - is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error - count // - Data Version 3 - - // unsigned int temp - : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - time_boot_ms : Timestamp of the component clock since boot time in ms. (uint32_t) - seq : Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). (uint8_t) - num_motors : Total number of active ESCs/motors on the system. (uint8_t) - num_in_seq : Number of active ESCs in this sequence (1 through this many array members will be populated with data) (uint8_t) - escid : ESC/Motor ID (uint8_t) - status_age : Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. (uint16_t) - data_version : Version of data structure (determines contents). (uint8_t) - data0 : Data bits 1-32 for each ESC. (uint32_t) - data1 : Data bits 33-64 for each ESC. (uint32_t) - - ''' - return MAVLink_aq_esc_telemetry_message(time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1) - - def aq_esc_telemetry_send(self, time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1, force_mavlink1=False): - ''' - Sends ESC32 telemetry data for up to 4 motors. Multiple messages may - be sent in sequence when system has > 4 motors. Data - is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - // - unsigned int errors : 9; // Bad detects error - count // - Data Version 3 - - // unsigned int temp - : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - time_boot_ms : Timestamp of the component clock since boot time in ms. (uint32_t) - seq : Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). (uint8_t) - num_motors : Total number of active ESCs/motors on the system. (uint8_t) - num_in_seq : Number of active ESCs in this sequence (1 through this many array members will be populated with data) (uint8_t) - escid : ESC/Motor ID (uint8_t) - status_age : Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. (uint16_t) - data_version : Version of data structure (determines contents). (uint8_t) - data0 : Data bits 1-32 for each ESC. (uint32_t) - data1 : Data bits 33-64 for each ESC. (uint32_t) - - ''' - return self.send(self.aq_esc_telemetry_encode(time_boot_ms, seq, num_motors, num_in_seq, escid, status_age, data_version, data0, data1), force_mavlink1=force_mavlink1) - - def heartbeat_encode(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return MAVLink_heartbeat_message(type, autopilot, base_mode, custom_mode, system_status, mavlink_version) - - def heartbeat_send(self, type, autopilot, base_mode, custom_mode, system_status, mavlink_version=3, force_mavlink1=False): - ''' - The heartbeat message shows that a system is present and responding. - The type of the MAV and Autopilot hardware allow the - receiving system to treat further messages from this - system appropriate (e.g. by laying out the user - interface based on the autopilot). - - type : Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) (uint8_t) - autopilot : Autopilot type / class. defined in MAV_AUTOPILOT ENUM (uint8_t) - base_mode : System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h (uint8_t) - custom_mode : A bitfield for use for autopilot-specific flags. (uint32_t) - system_status : System status flag, see MAV_STATE ENUM (uint8_t) - mavlink_version : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t) - - ''' - return self.send(self.heartbeat_encode(type, autopilot, base_mode, custom_mode, system_status, mavlink_version), force_mavlink1=force_mavlink1) - - def sys_status_encode(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return MAVLink_sys_status_message(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4) - - def sys_status_send(self, onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4, force_mavlink1=False): - ''' - The general system state. If the system is following the MAVLink - standard, the system state is mainly defined by three - orthogonal states/modes: The system mode, which is - either LOCKED (motors shut down and locked), MANUAL - (system under RC control), GUIDED (system with - autonomous position control, position setpoint - controlled manually) or AUTO (system guided by - path/waypoint planner). The NAV_MODE defined the - current flight state: LIFTOFF (often an open-loop - maneuver), LANDING, WAYPOINTS or VECTOR. This - represents the internal navigation state machine. The - system status shows wether the system is currently - active or not and if an emergency occured. During the - CRITICAL and EMERGENCY states the MAV is still - considered to be active, but should start emergency - procedures autonomously. After a failure occured it - should first move from active to critical to allow - manual intervention and then move to emergency after a - certain timeout. - - onboard_control_sensors_present : Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_enabled : Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - onboard_control_sensors_health : Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR (uint32_t) - load : Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 (uint16_t) - voltage_battery : Battery voltage, in millivolts (1 = 1 millivolt) (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery (int8_t) - drop_rate_comm : Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_comm : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t) - errors_count1 : Autopilot-specific errors (uint16_t) - errors_count2 : Autopilot-specific errors (uint16_t) - errors_count3 : Autopilot-specific errors (uint16_t) - errors_count4 : Autopilot-specific errors (uint16_t) - - ''' - return self.send(self.sys_status_encode(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4), force_mavlink1=force_mavlink1) - - def system_time_encode(self, time_unix_usec, time_boot_ms): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return MAVLink_system_time_message(time_unix_usec, time_boot_ms) - - def system_time_send(self, time_unix_usec, time_boot_ms, force_mavlink1=False): - ''' - The system time is the time of the master clock, typically the - computer clock of the main onboard computer. - - time_unix_usec : Timestamp of the master clock in microseconds since UNIX epoch. (uint64_t) - time_boot_ms : Timestamp of the component clock since boot time in milliseconds. (uint32_t) - - ''' - return self.send(self.system_time_encode(time_unix_usec, time_boot_ms), force_mavlink1=force_mavlink1) - - def ping_encode(self, time_usec, seq, target_system, target_component): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return MAVLink_ping_message(time_usec, seq, target_system, target_component) - - def ping_send(self, time_usec, seq, target_system, target_component, force_mavlink1=False): - ''' - A ping message either requesting or responding to a ping. This allows - to measure the system latencies, including serial - port, radio modem and UDP connections. - - time_usec : Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) (uint64_t) - seq : PING sequence (uint32_t) - target_system : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - target_component : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t) - - ''' - return self.send(self.ping_encode(time_usec, seq, target_system, target_component), force_mavlink1=force_mavlink1) - - def change_operator_control_encode(self, target_system, control_request, version, passkey): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return MAVLink_change_operator_control_message(target_system, control_request, version, passkey) - - def change_operator_control_send(self, target_system, control_request, version, passkey, force_mavlink1=False): - ''' - Request to control this MAV - - target_system : System the GCS requests control for (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - version : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t) - passkey : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char) - - ''' - return self.send(self.change_operator_control_encode(target_system, control_request, version, passkey), force_mavlink1=force_mavlink1) - - def change_operator_control_ack_encode(self, gcs_system_id, control_request, ack): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return MAVLink_change_operator_control_ack_message(gcs_system_id, control_request, ack) - - def change_operator_control_ack_send(self, gcs_system_id, control_request, ack, force_mavlink1=False): - ''' - Accept / deny control of this MAV - - gcs_system_id : ID of the GCS this message (uint8_t) - control_request : 0: request control of this MAV, 1: Release control of this MAV (uint8_t) - ack : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t) - - ''' - return self.send(self.change_operator_control_ack_encode(gcs_system_id, control_request, ack), force_mavlink1=force_mavlink1) - - def auth_key_encode(self, key): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return MAVLink_auth_key_message(key) - - def auth_key_send(self, key, force_mavlink1=False): - ''' - Emit an encrypted signature / key identifying this system. PLEASE - NOTE: This protocol has been kept simple, so - transmitting the key requires an encrypted channel for - true safety. - - key : key (char) - - ''' - return self.send(self.auth_key_encode(key), force_mavlink1=force_mavlink1) - - def set_mode_encode(self, target_system, base_mode, custom_mode): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return MAVLink_set_mode_message(target_system, base_mode, custom_mode) - - def set_mode_send(self, target_system, base_mode, custom_mode, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with - MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as - defined by enum MAV_MODE. There is no target component - id as the mode is by definition for the overall - aircraft, not only for one component. - - target_system : The system setting the mode (uint8_t) - base_mode : The new base mode (uint8_t) - custom_mode : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t) - - ''' - return self.send(self.set_mode_encode(target_system, base_mode, custom_mode), force_mavlink1=force_mavlink1) - - def param_request_read_encode(self, target_system, target_component, param_id, param_index): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.xml deleted file mode 100644 index 8c224783b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/autoquad.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - common.xml - 3 - - - Track current version of these definitions (can be used by checking value of AUTOQUAD_MAVLINK_DEFS_VERSION_ENUM_END). Append a new entry for each published change. - - - - Available operating modes/statuses for AutoQuad flight controller. - Bitmask up to 32 bits. Low side bits for base modes, high side for - additional active features/modifiers/constraints. - - System is initializing - - - - System is *armed* and standing by, with no throttle input and no autonomous mode - - - Flying (throttle input detected), assumed under manual control unless other mode bits are set - - - Altitude hold engaged - - - Position hold engaged - - - Externally-guided (eg. GCS) navigation mode - - - Autonomous mission execution mode - - - - Ready but *not armed* - - - Calibration mode active - - - - No valid control input (eg. no radio link) - - - Battery is low (stage 1 warning) - - - Battery is depleted (stage 2 warning) - - - - Dynamic Velocity Hold is active (PH with proportional manual direction override) - - - ynamic Altitude Override is active (AH with proportional manual adjustment) - - - - Craft is at ceiling altitude - - - Ceiling altitude is set - - - Heading-Free dynamic mode active - - - Heading-Free locked mode active - - - Automatic Return to Home is active - - - System is in failsafe recovery mode - - - - - Orbit a waypoint. - Orbit radius in meters - Loiter time in decimal seconds - Maximum horizontal speed in m/s - Desired yaw angle at waypoint - Latitude - Longitude - Altitude - - - Start/stop AutoQuad telemetry values stream. - Start or stop (1 or 0) - Stream frequency in us - Dataset ID (refer to aq_mavlink.h::mavlinkCustomDataSets enum in AQ flight controller code) - Empty - Empty - Empty - Empty - - - - Request AutoQuad firmware version number. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - - Motor/ESC telemetry data. - - - - - - Sends up to 20 raw float values. - Index of message - value1 - value2 - value3 - value4 - value5 - value6 - value7 - value8 - value9 - value10 - value11 - value12 - value13 - value14 - value15 - value16 - value17 - value18 - value19 - value20 - - - Sends ESC32 telemetry data for up to 4 motors. Multiple messages may be sent in sequence when system has > 4 motors. Data is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - - // unsigned int errors : 9; // Bad detects error count - // - Data Version 3 - - // unsigned int temp : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - Timestamp of the component clock since boot time in ms. - Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). - Total number of active ESCs/motors on the system. - Number of active ESCs in this sequence (1 through this many array members will be populated with data) - ESC/Motor ID - Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. - Version of data structure (determines contents). - Data bits 1-32 for each ESC. - Data bits 33-64 for each ESC. - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.py deleted file mode 100644 index 0db6df0f8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.py +++ /dev/null @@ -1,12010 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'common' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_heartbeat_message(MAVLink_message): - ''' - The heartbeat message shows that a system is present and - responding. The type of the MAV and Autopilot hardware allow - the receiving system to treat further messages from this - system appropriate (e.g. by laying out the user interface - based on the autopilot). - ''' - id = MAVLINK_MSG_ID_HEARTBEAT - name = 'HEARTBEAT' - fieldnames = ['type', 'autopilot', 'base_mode', 'custom_mode', 'system_status', 'mavlink_version'] - ordered_fieldnames = [ 'custom_mode', 'type', 'autopilot', 'base_mode', 'system_status', 'mavlink_version' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.xml deleted file mode 100644 index 8718cd7da..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/common.xml +++ /dev/null @@ -1,3716 +0,0 @@ - - - 3 - 0 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - Reserved for future use. - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - PX4 Autopilot - http://pixhawk.ethz.ch/px4/ - - - SMACCMPilot - http://smaccmpilot.org - - - AutoQuad -- http://autoquad.org - - - Armazila -- http://armazila.com - - - Aerob -- http://aerob.ru - - - ASLUAV autopilot -- http://www.asl.ethz.ch - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Tricopter - - - Flapping wing - - - Kite - - - Onboard companion controller - - - Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter. - - - Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter. - - - Tiltrotor VTOL - - - - VTOL reserved 2 - - - VTOL reserved 3 - - - VTOL reserved 4 - - - VTOL reserved 5 - - - Onboard gimbal - - - Onboard ADSB peripheral - - - - These values define the type of firmware release. These values indicate the first version or release of this type. For example the first alpha release would be 64, the second would be 65. - - development release - - - alpha release - - - beta release - - - release candidate - - - official stable release - - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - Override command, pauses current mission execution and moves immediately to a position - - Hold at the current position. - - - Continue with the next item in mission execution. - - - Hold at the current position of the system - - - Hold at the position specified in the parameters of the DO_HOLD action - - - - These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it - simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override. - - System is not ready to fly, booting, calibrating, etc. No flag is set. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - On Screen Display (OSD) devices for video links - - - Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol - - - - - - - These encode the sensors whose status is sent as part of the SYS_STATUS message. - - 0x01 3D gyro - - - 0x02 3D accelerometer - - - 0x04 3D magnetometer - - - 0x08 absolute pressure - - - 0x10 differential pressure - - - 0x20 GPS - - - 0x40 optical flow - - - 0x80 computer vision position - - - 0x100 laser based position - - - 0x200 external ground truth (Vicon or Leica) - - - 0x400 3D angular rate control - - - 0x800 attitude stabilization - - - 0x1000 yaw position - - - 0x2000 z/altitude control - - - 0x4000 x/y position control - - - 0x8000 motor outputs / control - - - 0x10000 rc receiver - - - 0x20000 2nd 3D gyro - - - 0x40000 2nd 3D accelerometer - - - 0x80000 2nd 3D magnetometer - - - 0x100000 geofence - - - 0x200000 AHRS subsystem health - - - 0x400000 Terrain subsystem health - - - 0x800000 Motors are reversed - - - 0x1000000 Logging - - - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL) - - - Local coordinate frame, Z-up (x: north, y: east, z: down). - - - NOT a coordinate frame, indicates a mission command. - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Local coordinate frame, Z-down (x: east, y: north, z: up) - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL) - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position. - - - Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right. - - - Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - - - - - - - - - - - - - - - - - - - - - - - - Disable fenced mode - - - Switched to guided mode to return point (fence point 0) - - - Report fence breach, but don't take action - - - Switched to guided mode to return point (fence point 0) with manual throttle control - - - Switch to RTL (return to launch) mode and head for the return point. - - - - - - No last fence breach - - - Breached minimum altitude - - - Breached maximum altitude - - - Breached fence boundary - - - - - Enumeration of possible mount operation modes - Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization - Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. - Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization - Load neutral position and start RC Roll,Pitch,Yaw control with stabilization - Load neutral position and start to point to Lat,Lon,Alt - - - Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. - - Navigate to MISSION. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached) - 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control. - Desired yaw angle at MISSION (rotary wing) - Latitude - Longitude - Altitude - - - Loiter around this MISSION an unlimited amount of time - Empty - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X turns - Turns - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X seconds - Seconds (decimal) - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Return to launch location - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Land at location - Abort Alt - Empty - Empty - Desired yaw angle - Latitude - Longitude - Altitude - - - Takeoff from ground / hand - Minimum pitch (if airspeed sensor present), desired pitch without sensor - Empty - Empty - Yaw angle (if magnetometer present), ignored without magnetometer - Latitude - Longitude - Altitude - - - Land at local position (local frame only) - Landing target number (if available) - Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land - Landing descend rate [ms^-1] - Desired yaw angle [rad] - Y-axis position [m] - X-axis position [m] - Z-axis / ground level position [m] - - - Takeoff from local position (local frame only) - Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad] - Empty - Takeoff ascend rate [ms^-1] - Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these - Y-axis position [m] - X-axis position [m] - Z-axis position [m] - - - Vehicle following, i.e. this waypoint represents the position of a moving vehicle - Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation - Ground speed of vehicle to be followed - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached. - Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. - Empty - Empty - Empty - Empty - Empty - Desired altitude in meters - - - Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. - Heading Required (0 = False) - Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter. - Empty - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location - Latitude - Longitude - Altitude - - - Being following a target - System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode - RESERVED - RESERVED - altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home - altitude - RESERVED - TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout - - - Reposition the MAV after a follow target command has been sent - Camera q1 (where 0 is on the ray from the camera to the tracking device) - Camera q2 - Camera q3 - Camera q4 - altitude offset from target (m) - X offset from target (m) - Y offset from target (m) - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - Control autonomous path planning on the MAV. - 0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning - 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid - Empty - Yaw angle at goal, in compass degrees, [0..360] - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Navigate to MISSION using a spline path. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Empty - Empty - Empty - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Takeoff from ground using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - Land using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - - - - hand control over to an external controller - On / Off (> 0.5f on) - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay the next navigation command a number of seconds or until a specified time - Delay in seconds (decimal, -1 to enable time-of-day fields) - hour (24h format, UTC, -1 to ignore) - minute (24h format, UTC, -1 to ignore) - second (24h format, UTC) - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay mission state machine. - Delay in seconds (decimal) - Empty - Empty - Empty - Empty - Empty - Empty - - - Ascend/descend at rate. Delay mission state machine until desired altitude reached. - Descent / Ascend rate (m/s) - Empty - Empty - Empty - Empty - Empty - Finish Altitude - - - Delay mission state machine until within desired distance of next NAV point. - Distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - Reach a certain target angle. - target angle: [0-360], 0 is north - speed during yaw change:[deg per second] - direction: negative: counter clockwise, positive: clockwise [-1,1] - relative offset or absolute angle: [ 1,0] - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Set system mode. - Mode, as defined by ENUM MAV_MODE - Custom mode - this is system specific, please refer to the individual autopilot specifications for details. - Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details. - Empty - Empty - Empty - Empty - - - Jump to the desired command in the mission list. Repeat this action only the specified number of times - Sequence number - Repeat count - Empty - Empty - Empty - Empty - Empty - - - Change speed and/or throttle set points. - Speed type (0=Airspeed, 1=Ground Speed) - Speed (m/s, -1 indicates no change) - Throttle ( Percent, -1 indicates no change) - absolute or relative [0,1] - Empty - Empty - Empty - - - Changes the home location either to the current location or a specified location. - Use current (1=use current location, 0=use specified location) - Empty - Empty - Empty - Latitude - Longitude - Altitude - - - Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. - Parameter number - Parameter value - Empty - Empty - Empty - Empty - Empty - - - Set a relay to a condition. - Relay number - Setting (1=on, 0=off, others possible depending on system hardware) - Empty - Empty - Empty - Empty - Empty - - - Cycle a relay on and off for a desired number of cyles with a desired period. - Relay number - Cycle count - Cycle time (seconds, decimal) - Empty - Empty - Empty - Empty - - - Set a servo to a desired PWM value. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Empty - Empty - Empty - Empty - Empty - - - Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Cycle count - Cycle time (seconds) - Empty - Empty - Empty - - - Terminate flight immediately - Flight termination activated if > 0.5 - Empty - Empty - Empty - Empty - Empty - Empty - - - Change altitude set point. - Altitude in meters - Mav frame of new altitude (see MAV_FRAME) - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. - Empty - Empty - Empty - Empty - Latitude - Longitude - Empty - - - Mission command to perform a landing from a rally point. - Break altitude (meters) - Landing speed (m/s) - Empty - Empty - Empty - Empty - Empty - - - Mission command to safely abort an autonmous landing. - Altitude (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reposition the vehicle to a specific WGS84 global position. - Ground speed, less than 0 (-1) for default - Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum. - Reserved - Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise) - Latitude (deg * 1E7) - Longitude (deg * 1E7) - Altitude (meters) - - - If in a GPS controlled position mode, hold the current position or continue. - 0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Set moving direction to forward or reverse. - Direction (0=Forward, 1=Reverse) - Empty - Empty - Empty - Empty - Empty - Empty - - - Control onboard camera system. - Camera ID (-1 for all) - Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw - Transmission mode: 0: video stream, >0: single images every n seconds (decimal) - Recording: 0: disabled, 1: enabled compressed, 2: enabled raw - Empty - Empty - Empty - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - - - Mission command to configure an on-board camera controller system. - Modes: P, TV, AV, M, Etc - Shutter speed: Divisor number for one second - Aperture: F stop number - ISO number e.g. 80, 100, 200, Etc - Exposure type enumerator - Command Identity - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - - - - Mission command to control an on-board camera controller system. - Session control e.g. show/hide lens - Zoom's absolute position - Zooming step value to offset zoom from the current position - Focus Locking, Unlocking or Re-locking - Shooting Command - Command Identity - Empty - - - - - Mission command to configure a camera or antenna mount - Mount operation mode (see MAV_MOUNT_MODE enum) - stabilize roll? (1 = yes, 0 = no) - stabilize pitch? (1 = yes, 0 = no) - stabilize yaw? (1 = yes, 0 = no) - Empty - Empty - Empty - - - - Mission command to control a camera or antenna mount - pitch or lat in degrees, depending on mount mode. - roll or lon in degrees depending on mount mode - yaw or alt (in meters) depending on mount mode - reserved - reserved - reserved - MAV_MOUNT_MODE enum value - - - - Mission command to set CAM_TRIGG_DIST for this flight - Camera trigger distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to enable the geofence - enable? (0=disable, 1=enable, 2=disable_floor_only) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to trigger a parachute - action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to perform motor test - motor sequence number (a number from 1 to max number of motors on the vehicle) - throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum) - throttle - timeout (in seconds) - Empty - Empty - Empty - - - - Change to/from inverted flight - inverted (0=normal, 1=inverted) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Sets a desired vehicle turn angle and thrust change - yaw angle to adjust steering by in centidegress - Thrust - normalized to -2 .. 2 - Empty - Empty - Empty - Empty - Empty - - - - - Mission command to control a camera or antenna mount, using a quaternion as reference. - q1 - quaternion param #1, w (1 in null-rotation) - q2 - quaternion param #2, x (0 in null-rotation) - q3 - quaternion param #3, y (0 in null-rotation) - q4 - quaternion param #4, z (0 in null-rotation) - Empty - Empty - Empty - - - - set id of master controller - System ID - Component ID - Empty - Empty - Empty - Empty - Empty - - - - set limits for external control - timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout - absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit - absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit - horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit - Empty - Empty - Empty - - - - Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines - 0: Stop engine, 1:Start Engine - 0: Warm start, 1:Cold start. Controls use of choke where applicable - Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay. - Empty - Empty - Empty - Empty - Empty - - - - NOP - This command is only used to mark the upper limit of the DO commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Trigger calibration. This command will be only accepted if in pre-flight mode. - Gyro calibration: 0: no, 1: yes - Magnetometer calibration: 0: no, 1: yes - Ground pressure: 0: no, 1: yes - Radio calibration: 0: no, 1: yes - Accelerometer calibration: 0: no, 1: yes - Compass/Motor interference calibration: 0: no, 1: yes - Empty - - - Set sensor offsets. This command will be only accepted if in pre-flight mode. - Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer - X axis offset (or generic dimension 1), in the sensor's raw units - Y axis offset (or generic dimension 2), in the sensor's raw units - Z axis offset (or generic dimension 3), in the sensor's raw units - Generic dimension 4, in the sensor's raw units - Generic dimension 5, in the sensor's raw units - Generic dimension 6, in the sensor's raw units - - - Trigger UAVCAN config. This command will be only accepted if in pre-flight mode. - 1: Trigger actuator ID assignment and direction mapping. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging) - Reserved - Empty - Empty - Empty - - - Request the reboot or shutdown of system components. - 0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded. - 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded. - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - - - Hold / continue the current action - MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan - MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position - MAV_FRAME coordinate frame of hold point - Desired yaw angle in degrees - Latitude / X position - Longitude / Y position - Altitude / Z position - - - start running a mission - first_item: the first mission item to run - last_item: the last mission item to run (after this item is run, the mission ends) - - - Arms / Disarms a component - 1 to arm, 0 to disarm - - - Request the home position from the vehicle. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Starts receiver pairing - 0:Spektrum - 0:Spektrum DSM2, 1:Spektrum DSMX - - - Request the interval between messages for a particular MAVLink message ID - The MAVLink message ID - - - Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM - The MAVLink message ID - The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate. - - - Request autopilot capabilities - 1: Request autopilot version - Reserved (all remaining params) - - - Start image capture sequence - Duration between two consecutive pictures (in seconds) - Number of images to capture total - 0 for unlimited capture - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop image capture sequence - Reserved - Reserved - - - - Enable or disable on-board camera triggering system. - Trigger enable/disable (0 for disable, 1 for start) - Shutter integration time (in ms) - Reserved - - - - Starts video capture - Camera ID (0 for all cameras), 1 for first, 2 for second, etc. - Frames per second - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop the current video capture - Reserved - Reserved - - - - Create a panorama at the current position - Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle) - Viewing angle vertical of panorama (in degrees) - Speed of the horizontal rotation (in degrees per second) - Speed of the vertical rotation (in degrees per second) - - - - Request VTOL transition - The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used. - - - - This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - - - - - This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - - Radius of desired circle in CIRCLE_MODE - User defined - User defined - User defined - Unscaled target latitude of center of circle in CIRCLE_MODE - Unscaled target longitude of center of circle in CIRCLE_MODE - - - - - - - Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity. - Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list. - Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will. - Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will. - Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will. - Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Altitude, in meters AMSL - - - Control the payload deployment. - Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - - - THIS INTERFACE IS DEPRECATED AS OF JULY 2015. Please use MESSAGE_INTERVAL instead. A data stream is not a fixed set of messages, but rather a - recommendation to the autopilot software. Individual autopilots may or may not obey - the recommended messages. - - Enable all data streams - - - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. - - - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS - - - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW - - - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. - - - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. - - - Dependent on the autopilot - - - Dependent on the autopilot - - - Dependent on the autopilot - - - - The ROI (region of interest) for the vehicle. This can be - be used by the vehicle for camera/vehicle attitude alignment (see - MAV_CMD_NAV_ROI). - - No region of interest. - - - Point toward next MISSION. - - - Point toward given MISSION. - - - Point toward fixed location. - - - Point toward of given id. - - - - ACK / NACK / ERROR values as a result of MAV_CMDs and for mission item transmission. - - Command / mission item is ok. - - - Generic error message if none of the other reasons fails or if no detailed error reporting is implemented. - - - The system is refusing to accept this command from this source / communication partner. - - - Command or mission item is not supported, other commands would be accepted. - - - The coordinate frame of this command / mission item is not supported. - - - The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible. - - - The X or latitude value is out of range. - - - The Y or longitude value is out of range. - - - The Z or altitude value is out of range. - - - - Specifies the datatype of a MAVLink parameter. - - 8-bit unsigned integer - - - 8-bit signed integer - - - 16-bit unsigned integer - - - 16-bit signed integer - - - 32-bit unsigned integer - - - 32-bit signed integer - - - 64-bit unsigned integer - - - 64-bit signed integer - - - 32-bit floating-point - - - 64-bit floating-point - - - - result from a mavlink command - - Command ACCEPTED and EXECUTED - - - Command TEMPORARY REJECTED/DENIED - - - Command PERMANENTLY DENIED - - - Command UNKNOWN/UNSUPPORTED - - - Command executed, but failed - - - - result in a mavlink mission ack - - mission accepted OK - - - generic error / not accepting mission commands at all right now - - - coordinate frame is not supported - - - command is not supported - - - mission item exceeds storage space - - - one of the parameters has an invalid value - - - param1 has an invalid value - - - param2 has an invalid value - - - param3 has an invalid value - - - param4 has an invalid value - - - x/param5 has an invalid value - - - y/param6 has an invalid value - - - param7 has an invalid value - - - received waypoint out of sequence - - - not accepting any mission commands from this communication partner - - - - Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/. - - System is unusable. This is a "panic" condition. - - - Action should be taken immediately. Indicates error in non-critical systems. - - - Action must be taken immediately. Indicates failure in a primary system. - - - Indicates an error in secondary/redundant systems. - - - Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning. - - - An unusual event has occured, though not an error condition. This should be investigated for the root cause. - - - Normal operational messages. Useful for logging. No action is required for these messages. - - - Useful non-operational messages that can assist in debugging. These should not occur during normal operation. - - - - Power supply status flags (bitmask) - - main brick power supply valid - - - main servo power supply valid for FMU - - - USB power is connected - - - peripheral supply is in over-current state - - - hi-power peripheral supply is in over-current state - - - Power status has changed since boot - - - - SERIAL_CONTROL device types - - First telemetry port - - - Second telemetry port - - - First GPS port - - - Second GPS port - - - system shell - - - - SERIAL_CONTROL flags (bitmask) - - Set if this is a reply - - - Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message - - - Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set - - - Block on writes to the serial port - - - Send multiple replies until port is drained - - - - Enumeration of distance sensor types - - Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units - - - Ultrasound rangefinder, e.g. MaxBotix units - - - Infrared rangefinder, e.g. Sharp units - - - - Enumeration of sensor orientation, according to its rotations - - Roll: 0, Pitch: 0, Yaw: 0 - - - Roll: 0, Pitch: 0, Yaw: 45 - - - Roll: 0, Pitch: 0, Yaw: 90 - - - Roll: 0, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 0, Yaw: 180 - - - Roll: 0, Pitch: 0, Yaw: 225 - - - Roll: 0, Pitch: 0, Yaw: 270 - - - Roll: 0, Pitch: 0, Yaw: 315 - - - Roll: 180, Pitch: 0, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 45 - - - Roll: 180, Pitch: 0, Yaw: 90 - - - Roll: 180, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 180, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 225 - - - Roll: 180, Pitch: 0, Yaw: 270 - - - Roll: 180, Pitch: 0, Yaw: 315 - - - Roll: 90, Pitch: 0, Yaw: 0 - - - Roll: 90, Pitch: 0, Yaw: 45 - - - Roll: 90, Pitch: 0, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 135 - - - Roll: 270, Pitch: 0, Yaw: 0 - - - Roll: 270, Pitch: 0, Yaw: 45 - - - Roll: 270, Pitch: 0, Yaw: 90 - - - Roll: 270, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 90, Yaw: 0 - - - Roll: 0, Pitch: 270, Yaw: 0 - - - Roll: 0, Pitch: 180, Yaw: 90 - - - Roll: 0, Pitch: 180, Yaw: 270 - - - Roll: 90, Pitch: 90, Yaw: 0 - - - Roll: 180, Pitch: 90, Yaw: 0 - - - Roll: 270, Pitch: 90, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 0 - - - Roll: 270, Pitch: 180, Yaw: 0 - - - Roll: 90, Pitch: 270, Yaw: 0 - - - Roll: 180, Pitch: 270, Yaw: 0 - - - Roll: 270, Pitch: 270, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 270 - - - Roll: 315, Pitch: 315, Yaw: 315 - - - - Bitmask of (optional) autopilot capabilities (64 bit). If a bit is set, the autopilot supports this capability. - - Autopilot supports MISSION float message type. - - - Autopilot supports the new param float message type. - - - Autopilot supports MISSION_INT scaled integer message type. - - - Autopilot supports COMMAND_INT scaled integer message type. - - - Autopilot supports the new param union message type. - - - Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. - - - Autopilot supports commanding attitude offboard. - - - Autopilot supports commanding position and velocity targets in local NED frame. - - - Autopilot supports commanding position and velocity targets in global scaled integers. - - - Autopilot supports terrain protocol / data handling. - - - Autopilot supports direct actuator control. - - - Autopilot supports the flight termination command. - - - Autopilot supports onboard compass calibration. - - - Autopilot supports mavlink version 2. - - - - Enumeration of estimator types - - This is a naive estimator without any real covariance feedback. - - - Computer vision based estimate. Might be up to scale. - - - Visual-inertial estimate. - - - Plain GPS estimate. - - - Estimator integrating GPS and inertial sensing. - - - - Enumeration of battery types - - Not specified. - - - Lithium polymer battery - - - Lithium-iron-phosphate battery - - - Lithium-ION battery - - - Nickel metal hydride battery - - - - Enumeration of battery functions - - Battery function is unknown - - - Battery supports all flight systems - - - Battery for the propulsion system - - - Avionics battery - - - Payload battery - - - - Enumeration of VTOL states - - MAV is not configured as VTOL - - - VTOL is in transition from multicopter to fixed-wing - - - VTOL is in transition from fixed-wing to multicopter - - - VTOL is in multicopter state - - - VTOL is in fixed-wing state - - - - Enumeration of landed detector states - - MAV landed state is unknown - - - MAV is landed (on ground) - - - MAV is in air - - - - Enumeration of the ADSB altimeter types - - Altitude reported from a Baro source using QNH reference - - - Altitude reported from a GNSS source - - - - ADSB classification for the type of vehicle emitting the transponder signal - - - - - - - - - - - - - - - - - - - - - - - These flags indicate status such as data validity of each data source. Set = data valid - - - - - - - - - - Bitmask of options for the MAV_CMD_DO_REPOSITION - - The aircraft should immediately transition into guided. This should not be set for follow me applications - - - - - Flags in EKF_STATUS message - - True if the attitude estimate is good - - - - True if the horizontal velocity estimate is good - - - - True if the vertical velocity estimate is good - - - - True if the horizontal position (relative) estimate is good - - - - True if the horizontal position (absolute) estimate is good - - - - True if the vertical position (absolute) estimate is good - - - - True if the vertical position (above ground) estimate is good - - - - True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow) - - - - True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate - - - - True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate - - - - True if the EKF has detected a GPS glitch - - - - - - - throttle as a percentage from 0 ~ 100 - - - - throttle as an absolute PWM value (normally in range of 1000~2000) - - - - throttle pass-through from pilot's transmitter - - - - - - - ignore altitude field - - - ignore hdop field - - - ignore vdop field - - - ignore horizontal velocity field (vn and ve) - - - ignore vertical velocity field (vd) - - - ignore speed accuracy field - - - ignore horizontal accuracy field - - - ignore vertical accuracy field - - - - Possible actions an aircraft can take to avoid a collision. - - Ignore any potential collisions - - - Report potential collision - - - Ascend or Descend to avoid thread - - - Ascend or Descend to avoid thread - - - Aircraft to move perpendicular to the collision's velocity vector - - - Aircraft to fly directly back to its launch point - - - Aircraft to stop in place - - - - Aircraft-rated danger from this threat. - - Not a threat - - - Craft is mildly concerned about this threat - - - Craft is panicing, and may take actions to avoid threat - - - - Source of information about this collision. - - ID field references ADSB_VEHICLE packets - - - ID field references MAVLink SRC ID - - - - Type of GPS fix - - No GPS connected - - - No position information, GPS is connected - - - 2D position - - - 3D position - - - DGPS/SBAS aided 3D position - - - RTK float, 3D position - - - RTK Fixed, 3D position - - - Static fixed, typically used for base stations - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version - - - The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout. - Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - Battery voltage, in millivolts (1 = 1 millivolt) - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery - Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - - - The system time is the time of the master clock, typically the computer clock of the main onboard computer. - Timestamp of the master clock in microseconds since UNIX epoch. - Timestamp of the component clock since boot time in milliseconds. - - - - A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. - Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) - PING sequence - 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - - - Request to control this MAV - System the GCS requests control for - 0: request control of this MAV, 1: Release control of this MAV - 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - - - Accept / deny control of this MAV - ID of the GCS this message - 0: request control of this MAV, 1: Release control of this MAV - 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - - - Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety. - key - - - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component. - The system setting the mode - The new base mode - The new autopilot-specific mode. This field can be ignored by an autopilot. - - - - Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) - - - Request all parameters of this component. After this request, all parameters are emitted. - System ID - Component ID - - - Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - Total number of onboard parameters - Index of this onboard parameter - - - Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. - GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - - - The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites. - Number of satellites visible - Global satellite ID - 0: Satellite not used, 1: used for localization - Elevation (0: right on top of receiver, 90: on the horizon) of satellite - Direction of satellite, 0: 0 deg, 255: 360 deg. - Signal to noise ratio of satellite - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X acceleration (raw) - Y acceleration (raw) - Z acceleration (raw) - Angular speed around X axis (raw) - Angular speed around Y axis (raw) - Angular speed around Z axis (raw) - X Magnetic field (raw) - Y Magnetic field (raw) - Z Magnetic field (raw) - - - The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Absolute pressure (raw) - Differential pressure 1 (raw, 0 if nonexistant) - Differential pressure 2 (raw, 0 if nonexistant) - Raw Temperature measurement (raw) - - - The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field. - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right). - Timestamp (milliseconds since system boot) - Roll angle (rad, -pi..+pi) - Pitch angle (rad, -pi..+pi) - Yaw angle (rad, -pi..+pi) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion component 1, w (1 in null-rotation) - Quaternion component 2, x (0 in null-rotation) - Quaternion component 3, y (0 in null-rotation) - Quaternion component 4, z (0 in null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - X Speed - Y Speed - Z Speed - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the resolution of float is not sufficient. - Timestamp (milliseconds since system boot) - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude, positive north), expressed as m/s * 100 - Ground Y Speed (Longitude, positive east), expressed as m/s * 100 - Ground Z Speed (Altitude, positive down), expressed as m/s * 100 - Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - - - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000. Channels that are inactive should be set to UINT16_MAX. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. - Timestamp (microseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - Servo output 1 value, in microseconds - Servo output 2 value, in microseconds - Servo output 3 value, in microseconds - Servo output 4 value, in microseconds - Servo output 5 value, in microseconds - Servo output 6 value, in microseconds - Servo output 7 value, in microseconds - Servo output 8 value, in microseconds - - Servo output 9 value, in microseconds - Servo output 10 value, in microseconds - Servo output 11 value, in microseconds - Servo output 12 value, in microseconds - Servo output 13 value, in microseconds - Servo output 14 value, in microseconds - Servo output 15 value, in microseconds - Servo output 16 value, in microseconds - - - Request a partial list of mission items from the system/component. http://qgroundcontrol.org/mavlink/waypoint_protocol. If start and end index are the same, just send one waypoint. - System ID - Component ID - Start index, 0 by default - End index, -1 by default (-1: send list to end). Else a valid index of the list - - - This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED! - System ID - Component ID - Start index, 0 by default and smaller / equal to the largest index of the current onboard list. - End index, equal or greater than start index. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See also http://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Sequence - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position, global: latitude - PARAM6 / y position: global: longitude - PARAM7 / z position: global: altitude (relative or absolute, depending on frame. - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set the mission item with sequence number seq as current item. This means that the MAV will continue to this mission item on the shortest path (not following the mission items in-between). - System ID - Component ID - Sequence - - - Message that announces the sequence number of the current active mission item. The MAV will fly towards this mission item. - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of MISSIONs. - System ID - Component ID - Number of mission items in the sequence - - - Delete all mission items at once. - System ID - Component ID - - - A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next MISSION. - Sequence - - - Ack message during MISSION handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero). - System ID - Component ID - See MAV_MISSION_RESULT enum - - - As local waypoints exist, the global MISSION reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor. - System ID - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Bind a RC channel to a parameter. The parameter should change accoding to the RC channel value. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. - Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. - Initial parameter value - Scale, maps the RC range [-1, 1] to a parameter value - Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) - Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM_INT message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/MISSIONs to accept and which to reject. Safety areas are often enforced by national or competition regulations. - System ID - Component ID - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - Read out the safety zone the MAV currently assumes. - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - Attitude covariance - - - The state of the fixed wing navigation and position controller. - Current desired roll in degrees - Current desired pitch in degrees - Current desired heading in degrees - Bearing to current MISSION/target in degrees - Distance to active MISSION in meters - Current altitude error in meters - Current airspeed error in meters/second - Current crosstrack error on x-y plane in meters - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It is designed as scaled integer message since the resolution of float is not sufficient. NOTE: This message is intended for onboard networks / companion computers and higher-bandwidth links and optimized for accuracy and completeness. Please use the GLOBAL_POSITION_INT message for a minimal subset. - Timestamp (milliseconds since system boot) - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), above MSL - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s - Ground Y Speed (Longitude), expressed as m/s - Ground Z Speed (Altitude), expressed as m/s - Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - X Position - Y Position - Z Position - X Speed (m/s) - Y Speed (m/s) - Z Speed (m/s) - X Acceleration (m/s^2) - Y Acceleration (m/s^2) - Z Acceleration (m/s^2) - Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) - - - The PPM values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - The target requested to send the message stream. - The target requested to send the message stream. - The ID of the requested data stream - The requested message rate - 1 to start sending, 0 to stop sending. - - - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - The ID of the requested data stream - The message rate - 1 stream is enabled, 0 stream is stopped. - - - This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled an buttons are also transmit as boolean values of their - The system to be controlled. - X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. - Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. - Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. - R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. - A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. - - - The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of UINT16_MAX means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - System ID - Component ID - RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See alsohttp://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Metrics typically displayed on a HUD for fixed wing aircraft - Current airspeed in m/s - Current ground speed in m/s - Current heading in degrees, in compass units (0..360, 0=north) - Current throttle setting in integer percent, 0 to 100 - Current altitude (MSL), in meters - Current climb rate in meters/second - - - Message encoding a command with parameters as scaled integers. Scaling depends on the actual command value. - System ID - Component ID - The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h - The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Send a command with up to seven parameters to the MAV - System which should execute the command - Component which should execute the command, 0 for all components - Command ID, as defined by MAV_CMD enum. - 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - Parameter 1, as defined by MAV_CMD enum. - Parameter 2, as defined by MAV_CMD enum. - Parameter 3, as defined by MAV_CMD enum. - Parameter 4, as defined by MAV_CMD enum. - Parameter 5, as defined by MAV_CMD enum. - Parameter 6, as defined by MAV_CMD enum. - Parameter 7, as defined by MAV_CMD enum. - - - Report status of a command. Includes feedback wether the command was executed. - Command ID, as defined by MAV_CMD enum. - See MAV_RESULT enum - - - Setpoint in roll, pitch, yaw and thrust from the operator - Timestamp in milliseconds since system boot - Desired roll rate in radians per second - Desired pitch rate in radians per second - Desired yaw rate in radians per second - Collective thrust, normalized to 0 .. 1 - Flight mode switch position, 0.. 255 - Override mode switch position, 0.. 255 - - - Sets a desired vehicle attitude. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Reports the current commanded attitude of the vehicle as specified by the autopilot. This should match the commands sent in a SET_ATTITUDE_TARGET message if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Sets a desired vehicle position in a local north-east-down coordinate frame. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Sets a desired vehicle position, velocity, and/or acceleration in a global coordinate system (WGS84). Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - System ID - Component ID - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - Roll - Pitch - Yaw - - - DEPRECATED PACKET! Suffers from missing airspeed fields and singularities due to Euler angles. Please use HIL_STATE_QUATERNION instead. Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - Sent from autopilot to simulation. Hardware in the loop control outputs - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control output -1 .. 1 - Control output -1 .. 1 - Control output -1 .. 1 - Throttle 0 .. 1 - Aux 1, -1 .. 1 - Aux 2, -1 .. 1 - Aux 3, -1 .. 1 - Aux 4, -1 .. 1 - System mode (MAV_MODE) - Navigation mode (MAV_NAV_MODE) - - - Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - RC channel 1 value, in microseconds - RC channel 2 value, in microseconds - RC channel 3 value, in microseconds - RC channel 4 value, in microseconds - RC channel 5 value, in microseconds - RC channel 6 value, in microseconds - RC channel 7 value, in microseconds - RC channel 8 value, in microseconds - RC channel 9 value, in microseconds - RC channel 10 value, in microseconds - RC channel 11 value, in microseconds - RC channel 12 value, in microseconds - Receive signal strength indicator, 0: 0%, 255: 100% - - - Sent from autopilot to simulation. Hardware in the loop control outputs (replacement for HIL_CONTROLS) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. - System mode (MAV_MODE), includes arming state. - Flags as bitfield, reserved for future use. - - - Optical flow from a flow sensor (e.g. optical mouse sensor) - Timestamp (UNIX) - Sensor ID - Flow in pixels * 10 in x-sensor direction (dezi-pixels) - Flow in pixels * 10 in y-sensor direction (dezi-pixels) - Flow in meters in x-sensor direction, angular-speed compensated - Flow in meters in y-sensor direction, angular-speed compensated - Optical flow quality / confidence. 0: bad, 255: maximum quality - Ground distance in meters. Positive value: distance known. Negative value: Unknown distance - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X speed - Global Y speed - Global Z speed - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis (rad / sec) - Angular speed around Y axis (rad / sec) - Angular speed around Z axis (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature - - - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis in body frame (rad / sec) - Angular speed around Y axis in body frame (rad / sec) - Angular speed around Z axis in body frame (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure (airspeed) in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. - - - - Status of simulation environment, if used - True attitude quaternion component 1, w (1 in null-rotation) - True attitude quaternion component 2, x (0 in null-rotation) - True attitude quaternion component 3, y (0 in null-rotation) - True attitude quaternion component 4, z (0 in null-rotation) - Attitude roll expressed as Euler angles, not recommended except for human-readable outputs - Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs - Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees - Longitude in degrees - Altitude in meters - Horizontal position standard deviation - Vertical position standard deviation - True velocity in m/s in NORTH direction in earth-fixed NED frame - True velocity in m/s in EAST direction in earth-fixed NED frame - True velocity in m/s in DOWN direction in earth-fixed NED frame - - - - Status generated by radio and injected into MAVLink stream. - Local signal strength - Remote signal strength - Remaining free buffer space in percent. - Background noise level - Remote background noise level - Receive errors - Count of error corrected packets - - - File transfer message - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Time synchronization message. - Time sync timestamp 1 - Time sync timestamp 2 - - - Camera-IMU triggering and synchronisation message. - Timestamp for the image frame in microseconds - Image frame sequence - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 - GPS ground speed (m/s * 100). If unknown, set to: 65535 - GPS velocity in cm/s in NORTH direction in earth-fixed NED frame - GPS velocity in cm/s in EAST direction in earth-fixed NED frame - GPS velocity in cm/s in DOWN direction in earth-fixed NED frame - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 - Number of satellites visible. If unknown, set to 255 - - - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - Sent from simulation to autopilot, avoids in contrast to HIL_STATE singularities. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - Indicated airspeed, expressed as m/s * 100 - True airspeed, expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - The RAW IMU readings for secondary 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - Request a list of available logs. On some systems calling this may stop on-board logging until LOG_REQUEST_END is called. - System ID - Component ID - First log id (0 for first available) - Last log id (0xffff for last available) - - - Reply to LOG_REQUEST_LIST - Log id - Total number of logs - High log number - UTC timestamp of log in seconds since 1970, or 0 if not available - Size of the log (may be approximate) in bytes - - - Request a chunk of a log - System ID - Component ID - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes - - - Reply to LOG_REQUEST_DATA - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes (zero for end of log) - log data - - - Erase all logs - System ID - Component ID - - - Stop log transfer and resume normal logging - System ID - Component ID - - - data for injecting into the onboard GPS (used for DGPS) - System ID - Component ID - data length - raw data (110 is enough for 12 satellites of RTCMv2) - - - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - Number of DGPS satellites - Age of DGPS info - - - Power supply status - 5V rail voltage in millivolts - servo rail voltage in millivolts - power supply status flags (see MAV_POWER_STATUS enum) - - - Control a serial port. This can be used for raw access to an onboard serial peripheral such as a GPS or telemetry radio. It is designed to make it possible to update the devices firmware via MAVLink messages or change the devices settings. A message with zero bytes can be used to change just the baudrate. - See SERIAL_CONTROL_DEV enum - See SERIAL_CONTROL_FLAG enum - Timeout for reply data in milliseconds - Baudrate of transfer. Zero means no change. - how many bytes in this transfer - serial data - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - The RAW IMU readings for 3rd 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) - total data size in bytes (set on ACK only) - Width of a matrix or image - Height of a matrix or image - number of packets beeing sent (set on ACK only) - payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) - JPEG quality out of [1,100] - - - sequence number (starting with 0 on every transmission) - image data bytes - - - Time since system boot - Minimum distance the sensor can measure in centimeters - Maximum distance the sensor can measure in centimeters - Current distance reading - Type from MAV_DISTANCE_SENSOR enum. - Onboard ID of the sensor - Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. - Measurement covariance in centimeters, 0 for unknown / invalid readings - - - Request for terrain data and terrain status - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) - - - Terrain data sent from GCS. The lat/lon and grid_spacing must be the same as a lat/lon from a TERRAIN_REQUEST - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - bit within the terrain request mask - Terrain data in meters AMSL - - - Request that the vehicle report terrain height at the given location. Used by GCS to check if vehicle has all terrain data needed for a mission. - Latitude (degrees *10^7) - Longitude (degrees *10^7) - - - Response from a TERRAIN_CHECK request - Latitude (degrees *10^7) - Longitude (degrees *10^7) - grid spacing (zero if terrain at this location unavailable) - Terrain height in meters AMSL - Current vehicle height above lat/lon terrain height (meters) - Number of 4x4 terrain blocks waiting to be received or read from disk - Number of 4x4 terrain blocks in memory - - - Barometer readings for 2nd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - Motion capture attitude and position - Timestamp (micros since boot or Unix epoch) - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - X position in meters (NED) - Y position in meters (NED) - Z position in meters (NED) - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - System ID - Component ID - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - The current system altitude. - Timestamp (micros since boot or Unix epoch) - This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. - This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. - This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. - This is the altitude above the home position. It resets on each change of the current home position. - This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. - This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. - - - The autopilot is requesting a resource (file, binary, other type of data) - Request ID. This ID should be re-used when sending back URI contents - The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary - The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) - The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. - The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). - - - Barometer readings for 3rd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - current motion information from a designated system - Timestamp in milliseconds since system boot - bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - AMSL, in meters - target velocity (0,0,0) for unknown - linear target acceleration (0,0,0) for unknown - (1 0 0 0 for unknown) - (0 0 0 for unknown) - eph epv - button states or switches of a tracker device - - - The smoothed, monotonic system state used to feed the control loops of the system. - Timestamp (micros since boot or Unix epoch) - X acceleration in body frame - Y acceleration in body frame - Z acceleration in body frame - X velocity in body frame - Y velocity in body frame - Z velocity in body frame - X position in local frame - Y position in local frame - Z position in local frame - Airspeed, set to -1 if unknown - Variance of body velocity estimate - Variance in local position - The attitude, represented as Quaternion - Angular rate in roll axis - Angular rate in pitch axis - Angular rate in yaw axis - - - Battery information - Battery ID - Function of the battery - Type (chemistry) of the battery - Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. - Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate - Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery - - - Version and capability of autopilot software - bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) - Firmware version number - Middleware version number - Operating system version number - HW / board version (last 8 bytes should be silicon ID, if any) - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - ID of the board vendor - ID of the product - UID if provided by hardware - - - The location of a landing area captured from a downward facing camera - Timestamp (micros since boot or Unix epoch) - The ID of the target if multiple targets are present - MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. - X-axis angular offset (in radians) of the target from the center of the image - Y-axis angular offset (in radians) of the target from the center of the image - Distance to the target from the vehicle in meters - Size in radians of target along x-axis - Size in radians of target along y-axis - - - - Estimator status message including flags, innovation test ratios and estimated accuracies. The flags message is an integer bitmask containing information on which EKF outputs are valid. See the ESTIMATOR_STATUS_FLAGS enum definition for further information. The innovaton test ratios show the magnitude of the sensor innovation divided by the innovation check threshold. Under normal operation the innovaton test ratios should be below 0.5 with occasional values up to 1.0. Values greater than 1.0 should be rare under normal operation and indicate that a measurement has been rejected by the filter. The user should be notified if an innovation test ratio greater than 1.0 is recorded. Notifications for values in the range between 0.5 and 1.0 should be optional and controllable by the user. - Timestamp (micros since boot or Unix epoch) - Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. - Velocity innovation test ratio - Horizontal position innovation test ratio - Vertical position innovation test ratio - Magnetometer innovation test ratio - Height above terrain innovation test ratio - True airspeed innovation test ratio - Horizontal position 1-STD accuracy relative to the EKF local origin (m) - Vertical position 1-STD accuracy relative to the EKF local origin (m) - - - Timestamp (micros since boot or Unix epoch) - Wind in X (NED) direction in m/s - Wind in Y (NED) direction in m/s - Wind in Z (NED) direction in m/s - Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. - Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. - AMSL altitude (m) this measurement was taken at - Horizontal speed 1-STD accuracy - Vertical speed 1-STD accuracy - - - GPS sensor input message. This is a raw sensor value sent by the GPS. This is NOT the global position estimate of the sytem. - Timestamp (micros since boot or Unix epoch) - ID of the GPS for multiple GPS inputs - Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. - GPS time (milliseconds from start of GPS week) - GPS week number - 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in m (positive for up) - GPS HDOP horizontal dilution of position in m - GPS VDOP vertical dilution of position in m - GPS velocity in m/s in NORTH direction in earth-fixed NED frame - GPS velocity in m/s in EAST direction in earth-fixed NED frame - GPS velocity in m/s in DOWN direction in earth-fixed NED frame - GPS speed accuracy in m/s - GPS horizontal accuracy in m - GPS vertical accuracy in m - Number of satellites visible. - - - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS (used for DGPS) - LSB: 1 means message is fragmented - data length - RTCM message (may be fragmented) - - - Vibration levels and accelerometer clipping - Timestamp (micros since boot or Unix epoch) - Vibration levels on X-axis - Vibration levels on Y-axis - Vibration levels on Z-axis - first accelerometer clipping count - second accelerometer clipping count - third accelerometer clipping count - - - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION command. The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The position the system will return to and land on. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - System ID. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - This interface replaces DATA_STREAM - The ID of the requested MAVLink message. v1.0 is limited to 254 messages. - The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. - - - Provides state for additional features - The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. - The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. - - - The location and information of an ADSB vehicle - ICAO address - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Type from ADSB_ALTITUDE_TYPE enum - Altitude(ASL) in millimeters - Course over ground in centidegrees - The horizontal velocity in centimeters/second - The vertical velocity in centimeters/second, positive is up - The callsign, 8+null - Type from ADSB_EMITTER_TYPE enum - Time since last communication in seconds - Flags to indicate various statuses including valid data fields - Squawk code - - - Information about a potential collision - Collision data source - Unique identifier, domain based on src field - Action that is being taken to avoid this collision - How concerned the aircraft is about this collision - Estimated time until collision occurs (seconds) - Closest vertical distance in meters between vehicle and object - Closest horizontal distance in meteres between vehicle and object - - - Message implementing parts of the V2 payload specs in V1 frames for transitional support. - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Starting address of the debug variables - Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below - Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 - Memory contents at specified address - - - Name - Timestamp - x - y - z - - - Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Floating point value - - - Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Signed integer value - - - Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz). - Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. - Status text message, without null termination character - - - Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N. - Timestamp (milliseconds since system boot) - index of debug variable - DEBUG value - - - - - Setup a MAVLink2 signing key. If called with secret_key of all zero and zero initial_timestamp will disable signing - system id of the target - component ID of the target - signing key - initial timestamp - - - - Report button state change - Timestamp (milliseconds since system boot) - Time of last change of button state - Bitmap state of buttons - - - - Control vehicle tone generation (buzzer) - System ID - Component ID - tune in board specific format - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.py deleted file mode 100644 index c8ebaa7f7..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.py +++ /dev/null @@ -1,13375 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: matrixpilot.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'matrixpilot' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_FLEXIFUNCTION_SET = 150 -MAVLINK_MSG_ID_FLEXIFUNCTION_READ_REQ = 151 -MAVLINK_MSG_ID_FLEXIFUNCTION_BUFFER_FUNCTION = 152 -MAVLINK_MSG_ID_FLEXIFUNCTION_BUFFER_FUNCTION_ACK = 153 -MAVLINK_MSG_ID_FLEXIFUNCTION_DIRECTORY = 155 -MAVLINK_MSG_ID_FLEXIFUNCTION_DIRECTORY_ACK = 156 -MAVLINK_MSG_ID_FLEXIFUNCTION_COMMAND = 157 -MAVLINK_MSG_ID_FLEXIFUNCTION_COMMAND_ACK = 158 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F2_A = 170 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F2_B = 171 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F4 = 172 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F5 = 173 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F6 = 174 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F7 = 175 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F8 = 176 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F13 = 177 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F14 = 178 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F15 = 179 -MAVLINK_MSG_ID_SERIAL_UDB_EXTRA_F16 = 180 -MAVLINK_MSG_ID_ALTITUDES = 181 -MAVLINK_MSG_ID_AIRSPEEDS = 182 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_flexifunction_set_message(MAVLink_message): - ''' - Depreciated but used as a compiler flag. Do not remove - ''' - id = MAVLINK_MSG_ID_FLEXIFUNCTION_SET - name = 'FLEXIFUNCTION_SET' - fieldnames = ['target_system', 'target_component'] - ordered_fieldnames = [ 'target_system', 'target_component' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.xml deleted file mode 100644 index 29d368d2a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/matrixpilot.xml +++ /dev/null @@ -1,284 +0,0 @@ - - - common.xml - - - - - - - - Action required when performing CMD_PREFLIGHT_STORAGE - - Read all parameters from storage - - - Write all parameters to storage - - - Clear all parameters in storage - - - Read specific parameters from storage - - - Write specific parameters to storage - - - Clear specific parameters in storage - - - do nothing - - - - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Storage action: Action defined by MAV_PREFLIGHT_STORAGE_ACTION_ADVANCED - Storage area as defined by parameter database - Storage flags as defined by parameter database - Empty - Empty - Empty - Empty - - - - - - - - - Depreciated but used as a compiler flag. Do not remove - System ID - Component ID - - - Reqest reading of flexifunction data - System ID - Component ID - Type of flexifunction data requested - index into data where needed - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - Total count of functions - Address in the flexifunction data, Set to 0xFFFF to use address in target memory - Size of the - Settings data - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - Settings data - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - Flexifunction command type - - - Acknowldge sucess or failure of a flexifunction command - Command acknowledged - result of acknowledge - - - Backwards compatible MAVLink version of SERIAL_UDB_EXTRA - F2: Format Part A - Serial UDB Extra Time - Serial UDB Extra Status - Serial UDB Extra Latitude - Serial UDB Extra Longitude - Serial UDB Extra Altitude - Serial UDB Extra Waypoint Index - Serial UDB Extra Rmat 0 - Serial UDB Extra Rmat 1 - Serial UDB Extra Rmat 2 - Serial UDB Extra Rmat 3 - Serial UDB Extra Rmat 4 - Serial UDB Extra Rmat 5 - Serial UDB Extra Rmat 6 - Serial UDB Extra Rmat 7 - Serial UDB Extra Rmat 8 - Serial UDB Extra GPS Course Over Ground - Serial UDB Extra Speed Over Ground - Serial UDB Extra CPU Load - Serial UDB Extra Voltage in MilliVolts - Serial UDB Extra 3D IMU Air Speed - Serial UDB Extra Estimated Wind 0 - Serial UDB Extra Estimated Wind 1 - Serial UDB Extra Estimated Wind 2 - Serial UDB Extra Magnetic Field Earth 0 - Serial UDB Extra Magnetic Field Earth 1 - Serial UDB Extra Magnetic Field Earth 2 - Serial UDB Extra Number of Sattelites in View - Serial UDB Extra GPS Horizontal Dilution of Precision - - - Backwards compatible version of SERIAL_UDB_EXTRA - F2: Part B - Serial UDB Extra Time - Serial UDB Extra PWM Input Channel 1 - Serial UDB Extra PWM Input Channel 2 - Serial UDB Extra PWM Input Channel 3 - Serial UDB Extra PWM Input Channel 4 - Serial UDB Extra PWM Input Channel 5 - Serial UDB Extra PWM Input Channel 6 - Serial UDB Extra PWM Input Channel 7 - Serial UDB Extra PWM Input Channel 8 - Serial UDB Extra PWM Input Channel 9 - Serial UDB Extra PWM Input Channel 10 - Serial UDB Extra PWM Output Channel 1 - Serial UDB Extra PWM Output Channel 2 - Serial UDB Extra PWM Output Channel 3 - Serial UDB Extra PWM Output Channel 4 - Serial UDB Extra PWM Output Channel 5 - Serial UDB Extra PWM Output Channel 6 - Serial UDB Extra PWM Output Channel 7 - Serial UDB Extra PWM Output Channel 8 - Serial UDB Extra PWM Output Channel 9 - Serial UDB Extra PWM Output Channel 10 - Serial UDB Extra IMU Location X - Serial UDB Extra IMU Location Y - Serial UDB Extra IMU Location Z - Serial UDB Extra Status Flags - Serial UDB Extra Oscillator Failure Count - Serial UDB Extra IMU Velocity X - Serial UDB Extra IMU Velocity Y - Serial UDB Extra IMU Velocity Z - Serial UDB Extra Current Waypoint Goal X - Serial UDB Extra Current Waypoint Goal Y - Serial UDB Extra Current Waypoint Goal Z - Serial UDB Extra Stack Memory Free - - - Backwards compatible version of SERIAL_UDB_EXTRA F4: format - Serial UDB Extra Roll Stabilization with Ailerons Enabled - Serial UDB Extra Roll Stabilization with Rudder Enabled - Serial UDB Extra Pitch Stabilization Enabled - Serial UDB Extra Yaw Stabilization using Rudder Enabled - Serial UDB Extra Yaw Stabilization using Ailerons Enabled - Serial UDB Extra Navigation with Ailerons Enabled - Serial UDB Extra Navigation with Rudder Enabled - Serial UDB Extra Type of Alitude Hold when in Stabilized Mode - Serial UDB Extra Type of Alitude Hold when in Waypoint Mode - Serial UDB Extra Firmware racing mode enabled - - - Backwards compatible version of SERIAL_UDB_EXTRA F5: format - Serial UDB YAWKP_AILERON Gain for Proporional control of navigation - Serial UDB YAWKD_AILERON Gain for Rate control of navigation - Serial UDB Extra ROLLKP Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD Gain for Rate control of roll stabilization - YAW_STABILIZATION_AILERON Proportional control - Gain For Boosting Manual Aileron control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F6: format - Serial UDB Extra PITCHGAIN Proportional Control - Serial UDB Extra Pitch Rate Control - Serial UDB Extra Rudder to Elevator Mix - Serial UDB Extra Roll to Elevator Mix - Gain For Boosting Manual Elevator control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F7: format - Serial UDB YAWKP_RUDDER Gain for Proporional control of navigation - Serial UDB YAWKD_RUDDER Gain for Rate control of navigation - Serial UDB Extra ROLLKP_RUDDER Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD_RUDDER Gain for Rate control of roll stabilization - SERIAL UDB EXTRA Rudder Boost Gain to Manual Control when stabilized - Serial UDB Extra Return To Landing - Angle to Pitch Plane Down - - - Backwards compatible version of SERIAL_UDB_EXTRA F8: format - Serial UDB Extra HEIGHT_TARGET_MAX - Serial UDB Extra HEIGHT_TARGET_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MAX - Serial UDB Extra ALT_HOLD_PITCH_MIN - Serial UDB Extra ALT_HOLD_PITCH_MAX - Serial UDB Extra ALT_HOLD_PITCH_HIGH - - - Backwards compatible version of SERIAL_UDB_EXTRA F13: format - Serial UDB Extra GPS Week Number - Serial UDB Extra MP Origin Latitude - Serial UDB Extra MP Origin Longitude - Serial UDB Extra MP Origin Altitude Above Sea Level - - - Backwards compatible version of SERIAL_UDB_EXTRA F14: format - Serial UDB Extra Wind Estimation Enabled - Serial UDB Extra Type of GPS Unit - Serial UDB Extra Dead Reckoning Enabled - Serial UDB Extra Type of UDB Hardware - Serial UDB Extra Type of Airframe - Serial UDB Extra Reboot Regitster of DSPIC - Serial UDB Extra Last dspic Trap Flags - Serial UDB Extra Type Program Address of Last Trap - Serial UDB Extra Number of Ocillator Failures - Serial UDB Extra UDB Internal Clock Configuration - Serial UDB Extra Type of Flight Plan - - - Backwards compatible version of SERIAL_UDB_EXTRA F15 and F16: format - Serial UDB Extra Model Name Of Vehicle - Serial UDB Extra Registraton Number of Vehicle - - - Serial UDB Extra Name of Expected Lead Pilot - Serial UDB Extra URL of Lead Pilot or Team - - - The altitude measured by sensors and IMU - Timestamp (milliseconds since system boot) - GPS altitude in meters, expressed as * 1000 (millimeters), above MSL - IMU altitude above ground in meters, expressed as * 1000 (millimeters) - barometeric altitude above ground in meters, expressed as * 1000 (millimeters) - Optical flow altitude above ground in meters, expressed as * 1000 (millimeters) - Rangefinder Altitude above ground in meters, expressed as * 1000 (millimeters) - Extra altitude above ground in meters, expressed as * 1000 (millimeters) - - - The airspeed measured by sensors and IMU - Timestamp (milliseconds since system boot) - Airspeed estimate from IMU, cm/s - Pitot measured forward airpseed, cm/s - Hot wire anenometer measured airspeed, cm/s - Ultrasonic measured airspeed, cm/s - Angle of attack sensor, degrees * 10 - Yaw angle sensor, degrees * 10 - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/minimal.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/minimal.py deleted file mode 100644 index 78022c3ac..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/minimal.py +++ /dev/null @@ -1,822 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: minimal.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'minimal' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - 2 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - PIXHAWK autopilot, http://pixhawk.ethz.ch - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Octorotor - - - Flapping wing - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.py deleted file mode 100644 index d86b4502a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.py +++ /dev/null @@ -1,12261 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: paparazzi.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'paparazzi' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_SCRIPT_ITEM = 180 -MAVLINK_MSG_ID_SCRIPT_REQUEST = 181 -MAVLINK_MSG_ID_SCRIPT_REQUEST_LIST = 182 -MAVLINK_MSG_ID_SCRIPT_COUNT = 183 -MAVLINK_MSG_ID_SCRIPT_CURRENT = 184 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_script_item_message(MAVLink_message): - ''' - Message encoding a mission script item. This message is - emitted upon a request for the next script item. - ''' - id = MAVLINK_MSG_ID_SCRIPT_ITEM - name = 'SCRIPT_ITEM' - fieldnames = ['target_system', 'target_component', 'seq', 'name'] - ordered_fieldnames = [ 'seq', 'target_system', 'target_component', 'name' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.xml deleted file mode 100755 index 220007558..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/paparazzi.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - common.xml - 3 - - - - - - Message encoding a mission script item. This message is emitted upon a request for the next script item. - System ID - Component ID - Sequence - The name of the mission script, NULL terminated. - - - Request script item with the sequence number seq. The response of the system to this message should be a SCRIPT_ITEM message. - System ID - Component ID - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to SCRIPT_REQUEST_LIST by the MAV to get the number of mission scripts. - System ID - Component ID - Number of script items in the sequence - - - This message informs about the currently active SCRIPT. - Active Sequence - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.py deleted file mode 100644 index 793003102..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.py +++ /dev/null @@ -1,12438 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: python_array_test.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'python_array_test' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_ARRAY_TEST_0 = 150 -MAVLINK_MSG_ID_ARRAY_TEST_1 = 151 -MAVLINK_MSG_ID_ARRAY_TEST_3 = 153 -MAVLINK_MSG_ID_ARRAY_TEST_4 = 154 -MAVLINK_MSG_ID_ARRAY_TEST_5 = 155 -MAVLINK_MSG_ID_ARRAY_TEST_6 = 156 -MAVLINK_MSG_ID_ARRAY_TEST_7 = 157 -MAVLINK_MSG_ID_ARRAY_TEST_8 = 158 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_array_test_0_message(MAVLink_message): - ''' - Array test #0. - ''' - id = MAVLINK_MSG_ID_ARRAY_TEST_0 - name = 'ARRAY_TEST_0' - fieldnames = ['v1', 'ar_i8', 'ar_u8', 'ar_u16', 'ar_u32'] - ordered_fieldnames = [ 'ar_u32', 'ar_u16', 'v1', 'ar_i8', 'ar_u8' ] - format = '<4I4HB4b4B' - native_format = bytearray(' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.xml deleted file mode 100644 index f230d0126..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/python_array_test.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - -common.xml - - - Array test #0. - Stub field - Value array - Value array - Value array - Value array - - - Array test #1. - Value array - - - Array test #3. - Stub field - Value array - - - Array test #4. - Value array - Stub field - - - Array test #5. - Value array - Value array - - - Array test #6. - Stub field - Stub field - Stub field - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #7. - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #8. - Stub field - Value array - Value array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.py deleted file mode 100644 index 5440f91e9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.py +++ /dev/null @@ -1,13207 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: slugs.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'slugs' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_DO_NOTHING = 10001 # Does nothing. -enums['MAV_CMD'][10001] = EnumEntry('MAV_CMD_DO_NOTHING', '''Does nothing.''') -enums['MAV_CMD'][10001].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_RETURN_TO_BASE = 10011 # Return vehicle to base. -enums['MAV_CMD'][10011] = EnumEntry('MAV_CMD_RETURN_TO_BASE', '''Return vehicle to base.''') -enums['MAV_CMD'][10011].param[1] = '''0: return to base, 1: track mobile base''' -MAV_CMD_STOP_RETURN_TO_BASE = 10012 # Stops the vehicle from returning to base and resumes flight. -enums['MAV_CMD'][10012] = EnumEntry('MAV_CMD_STOP_RETURN_TO_BASE', '''Stops the vehicle from returning to base and resumes flight. ''') -MAV_CMD_TURN_LIGHT = 10013 # Turns the vehicle's visible or infrared lights on or off. -enums['MAV_CMD'][10013] = EnumEntry('MAV_CMD_TURN_LIGHT', '''Turns the vehicle's visible or infrared lights on or off.''') -enums['MAV_CMD'][10013].param[1] = '''0: visible lights, 1: infrared lights''' -enums['MAV_CMD'][10013].param[2] = '''0: turn on, 1: turn off''' -MAV_CMD_GET_MID_LEVEL_COMMANDS = 10014 # Requests vehicle to send current mid-level commands to ground station. -enums['MAV_CMD'][10014] = EnumEntry('MAV_CMD_GET_MID_LEVEL_COMMANDS', '''Requests vehicle to send current mid-level commands to ground station.''') -MAV_CMD_MIDLEVEL_STORAGE = 10015 # Requests storage of mid-level commands. -enums['MAV_CMD'][10015] = EnumEntry('MAV_CMD_MIDLEVEL_STORAGE', '''Requests storage of mid-level commands.''') -enums['MAV_CMD'][10015].param[1] = '''Mid-level command storage: 0: read from flash/EEPROM, 1: write to flash/EEPROM''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# SLUGS_MODE -enums['SLUGS_MODE'] = {} -SLUGS_MODE_NONE = 0 # No change to SLUGS mode. -enums['SLUGS_MODE'][0] = EnumEntry('SLUGS_MODE_NONE', '''No change to SLUGS mode.''') -SLUGS_MODE_LIFTOFF = 1 # Vehicle is in liftoff mode. -enums['SLUGS_MODE'][1] = EnumEntry('SLUGS_MODE_LIFTOFF', '''Vehicle is in liftoff mode.''') -SLUGS_MODE_PASSTHROUGH = 2 # Vehicle is in passthrough mode, being controlled by a pilot. -enums['SLUGS_MODE'][2] = EnumEntry('SLUGS_MODE_PASSTHROUGH', '''Vehicle is in passthrough mode, being controlled by a pilot.''') -SLUGS_MODE_WAYPOINT = 3 # Vehicle is in waypoint mode, navigating to waypoints. -enums['SLUGS_MODE'][3] = EnumEntry('SLUGS_MODE_WAYPOINT', '''Vehicle is in waypoint mode, navigating to waypoints.''') -SLUGS_MODE_MID_LEVEL = 4 # Vehicle is executing mid-level commands. -enums['SLUGS_MODE'][4] = EnumEntry('SLUGS_MODE_MID_LEVEL', '''Vehicle is executing mid-level commands.''') -SLUGS_MODE_RETURNING = 5 # Vehicle is returning to the home location. -enums['SLUGS_MODE'][5] = EnumEntry('SLUGS_MODE_RETURNING', '''Vehicle is returning to the home location.''') -SLUGS_MODE_LANDING = 6 # Vehicle is landing. -enums['SLUGS_MODE'][6] = EnumEntry('SLUGS_MODE_LANDING', '''Vehicle is landing.''') -SLUGS_MODE_LOST = 7 # Lost connection with vehicle. -enums['SLUGS_MODE'][7] = EnumEntry('SLUGS_MODE_LOST', '''Lost connection with vehicle.''') -SLUGS_MODE_SELECTIVE_PASSTHROUGH = 8 # Vehicle is in selective passthrough mode, where selected surfaces are - # being manually controlled. -enums['SLUGS_MODE'][8] = EnumEntry('SLUGS_MODE_SELECTIVE_PASSTHROUGH', '''Vehicle is in selective passthrough mode, where selected surfaces are being manually controlled.''') -SLUGS_MODE_ISR = 9 # Vehicle is in ISR mode, performing reconaissance at a point specified - # by ISR_LOCATION message. -enums['SLUGS_MODE'][9] = EnumEntry('SLUGS_MODE_ISR', '''Vehicle is in ISR mode, performing reconaissance at a point specified by ISR_LOCATION message.''') -SLUGS_MODE_LINE_PATROL = 10 # Vehicle is patrolling along lines between waypoints. -enums['SLUGS_MODE'][10] = EnumEntry('SLUGS_MODE_LINE_PATROL', '''Vehicle is patrolling along lines between waypoints.''') -SLUGS_MODE_GROUNDED = 11 # Vehicle is grounded or an error has occurred. -enums['SLUGS_MODE'][11] = EnumEntry('SLUGS_MODE_GROUNDED', '''Vehicle is grounded or an error has occurred.''') -SLUGS_MODE_ENUM_END = 12 # -enums['SLUGS_MODE'][12] = EnumEntry('SLUGS_MODE_ENUM_END', '''''') - -# CONTROL_SURFACE_FLAG -enums['CONTROL_SURFACE_FLAG'] = {} -CONTROL_SURFACE_FLAG_RIGHT_FLAP = 1 # 0b00000001 Right flap control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][1] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_FLAP', '''0b00000001 Right flap control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_FLAP = 2 # 0b00000010 Left flap control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][2] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_FLAP', '''0b00000010 Left flap control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RIGHT_ELEVATOR = 4 # 0b00000100 Right elevator control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][4] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_ELEVATOR', '''0b00000100 Right elevator control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_ELEVATOR = 8 # 0b00001000 Left elevator control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][8] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_ELEVATOR', '''0b00001000 Left elevator control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RUDDER = 16 # 0b00010000 Rudder control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][16] = EnumEntry('CONTROL_SURFACE_FLAG_RUDDER', '''0b00010000 Rudder control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_RIGHT_AILERON = 32 # 0b00100000 Right aileron control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][32] = EnumEntry('CONTROL_SURFACE_FLAG_RIGHT_AILERON', '''0b00100000 Right aileron control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_LEFT_AILERON = 64 # 0b01000000 Left aileron control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][64] = EnumEntry('CONTROL_SURFACE_FLAG_LEFT_AILERON', '''0b01000000 Left aileron control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_THROTTLE = 128 # 0b10000000 Throttle control passes through to pilot console. -enums['CONTROL_SURFACE_FLAG'][128] = EnumEntry('CONTROL_SURFACE_FLAG_THROTTLE', '''0b10000000 Throttle control passes through to pilot console.''') -CONTROL_SURFACE_FLAG_ENUM_END = 129 # -enums['CONTROL_SURFACE_FLAG'][129] = EnumEntry('CONTROL_SURFACE_FLAG_ENUM_END', '''''') - -# MAV_AUTOPILOT -enums['MAV_AUTOPILOT'] = {} -MAV_AUTOPILOT_GENERIC = 0 # Generic autopilot, full support for everything -enums['MAV_AUTOPILOT'][0] = EnumEntry('MAV_AUTOPILOT_GENERIC', '''Generic autopilot, full support for everything''') -MAV_AUTOPILOT_RESERVED = 1 # Reserved for future use. -enums['MAV_AUTOPILOT'][1] = EnumEntry('MAV_AUTOPILOT_RESERVED', '''Reserved for future use.''') -MAV_AUTOPILOT_SLUGS = 2 # SLUGS autopilot, http://slugsuav.soe.ucsc.edu -enums['MAV_AUTOPILOT'][2] = EnumEntry('MAV_AUTOPILOT_SLUGS', '''SLUGS autopilot, http://slugsuav.soe.ucsc.edu''') -MAV_AUTOPILOT_ARDUPILOTMEGA = 3 # ArduPilotMega / ArduCopter, http://diydrones.com -enums['MAV_AUTOPILOT'][3] = EnumEntry('MAV_AUTOPILOT_ARDUPILOTMEGA', '''ArduPilotMega / ArduCopter, http://diydrones.com''') -MAV_AUTOPILOT_OPENPILOT = 4 # OpenPilot, http://openpilot.org -enums['MAV_AUTOPILOT'][4] = EnumEntry('MAV_AUTOPILOT_OPENPILOT', '''OpenPilot, http://openpilot.org''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 # Generic autopilot only supporting simple waypoints -enums['MAV_AUTOPILOT'][5] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY', '''Generic autopilot only supporting simple waypoints''') -MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 # Generic autopilot supporting waypoints and other simple navigation - # commands -enums['MAV_AUTOPILOT'][6] = EnumEntry('MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY', '''Generic autopilot supporting waypoints and other simple navigation commands''') -MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 # Generic autopilot supporting the full mission command set -enums['MAV_AUTOPILOT'][7] = EnumEntry('MAV_AUTOPILOT_GENERIC_MISSION_FULL', '''Generic autopilot supporting the full mission command set''') -MAV_AUTOPILOT_INVALID = 8 # No valid autopilot, e.g. a GCS or other MAVLink component -enums['MAV_AUTOPILOT'][8] = EnumEntry('MAV_AUTOPILOT_INVALID', '''No valid autopilot, e.g. a GCS or other MAVLink component''') -MAV_AUTOPILOT_PPZ = 9 # PPZ UAV - http://nongnu.org/paparazzi -enums['MAV_AUTOPILOT'][9] = EnumEntry('MAV_AUTOPILOT_PPZ', '''PPZ UAV - http://nongnu.org/paparazzi''') -MAV_AUTOPILOT_UDB = 10 # UAV Dev Board -enums['MAV_AUTOPILOT'][10] = EnumEntry('MAV_AUTOPILOT_UDB', '''UAV Dev Board''') -MAV_AUTOPILOT_FP = 11 # FlexiPilot -enums['MAV_AUTOPILOT'][11] = EnumEntry('MAV_AUTOPILOT_FP', '''FlexiPilot''') -MAV_AUTOPILOT_PX4 = 12 # PX4 Autopilot - http://pixhawk.ethz.ch/px4/ -enums['MAV_AUTOPILOT'][12] = EnumEntry('MAV_AUTOPILOT_PX4', '''PX4 Autopilot - http://pixhawk.ethz.ch/px4/''') -MAV_AUTOPILOT_SMACCMPILOT = 13 # SMACCMPilot - http://smaccmpilot.org -enums['MAV_AUTOPILOT'][13] = EnumEntry('MAV_AUTOPILOT_SMACCMPILOT', '''SMACCMPilot - http://smaccmpilot.org''') -MAV_AUTOPILOT_AUTOQUAD = 14 # AutoQuad -- http://autoquad.org -enums['MAV_AUTOPILOT'][14] = EnumEntry('MAV_AUTOPILOT_AUTOQUAD', '''AutoQuad -- http://autoquad.org''') -MAV_AUTOPILOT_ARMAZILA = 15 # Armazila -- http://armazila.com -enums['MAV_AUTOPILOT'][15] = EnumEntry('MAV_AUTOPILOT_ARMAZILA', '''Armazila -- http://armazila.com''') -MAV_AUTOPILOT_AEROB = 16 # Aerob -- http://aerob.ru -enums['MAV_AUTOPILOT'][16] = EnumEntry('MAV_AUTOPILOT_AEROB', '''Aerob -- http://aerob.ru''') -MAV_AUTOPILOT_ASLUAV = 17 # ASLUAV autopilot -- http://www.asl.ethz.ch -enums['MAV_AUTOPILOT'][17] = EnumEntry('MAV_AUTOPILOT_ASLUAV', '''ASLUAV autopilot -- http://www.asl.ethz.ch''') -MAV_AUTOPILOT_ENUM_END = 18 # -enums['MAV_AUTOPILOT'][18] = EnumEntry('MAV_AUTOPILOT_ENUM_END', '''''') - -# MAV_TYPE -enums['MAV_TYPE'] = {} -MAV_TYPE_GENERIC = 0 # Generic micro air vehicle. -enums['MAV_TYPE'][0] = EnumEntry('MAV_TYPE_GENERIC', '''Generic micro air vehicle.''') -MAV_TYPE_FIXED_WING = 1 # Fixed wing aircraft. -enums['MAV_TYPE'][1] = EnumEntry('MAV_TYPE_FIXED_WING', '''Fixed wing aircraft.''') -MAV_TYPE_QUADROTOR = 2 # Quadrotor -enums['MAV_TYPE'][2] = EnumEntry('MAV_TYPE_QUADROTOR', '''Quadrotor''') -MAV_TYPE_COAXIAL = 3 # Coaxial helicopter -enums['MAV_TYPE'][3] = EnumEntry('MAV_TYPE_COAXIAL', '''Coaxial helicopter''') -MAV_TYPE_HELICOPTER = 4 # Normal helicopter with tail rotor. -enums['MAV_TYPE'][4] = EnumEntry('MAV_TYPE_HELICOPTER', '''Normal helicopter with tail rotor.''') -MAV_TYPE_ANTENNA_TRACKER = 5 # Ground installation -enums['MAV_TYPE'][5] = EnumEntry('MAV_TYPE_ANTENNA_TRACKER', '''Ground installation''') -MAV_TYPE_GCS = 6 # Operator control unit / ground control station -enums['MAV_TYPE'][6] = EnumEntry('MAV_TYPE_GCS', '''Operator control unit / ground control station''') -MAV_TYPE_AIRSHIP = 7 # Airship, controlled -enums['MAV_TYPE'][7] = EnumEntry('MAV_TYPE_AIRSHIP', '''Airship, controlled''') -MAV_TYPE_FREE_BALLOON = 8 # Free balloon, uncontrolled -enums['MAV_TYPE'][8] = EnumEntry('MAV_TYPE_FREE_BALLOON', '''Free balloon, uncontrolled''') -MAV_TYPE_ROCKET = 9 # Rocket -enums['MAV_TYPE'][9] = EnumEntry('MAV_TYPE_ROCKET', '''Rocket''') -MAV_TYPE_GROUND_ROVER = 10 # Ground rover -enums['MAV_TYPE'][10] = EnumEntry('MAV_TYPE_GROUND_ROVER', '''Ground rover''') -MAV_TYPE_SURFACE_BOAT = 11 # Surface vessel, boat, ship -enums['MAV_TYPE'][11] = EnumEntry('MAV_TYPE_SURFACE_BOAT', '''Surface vessel, boat, ship''') -MAV_TYPE_SUBMARINE = 12 # Submarine -enums['MAV_TYPE'][12] = EnumEntry('MAV_TYPE_SUBMARINE', '''Submarine''') -MAV_TYPE_HEXAROTOR = 13 # Hexarotor -enums['MAV_TYPE'][13] = EnumEntry('MAV_TYPE_HEXAROTOR', '''Hexarotor''') -MAV_TYPE_OCTOROTOR = 14 # Octorotor -enums['MAV_TYPE'][14] = EnumEntry('MAV_TYPE_OCTOROTOR', '''Octorotor''') -MAV_TYPE_TRICOPTER = 15 # Tricopter -enums['MAV_TYPE'][15] = EnumEntry('MAV_TYPE_TRICOPTER', '''Tricopter''') -MAV_TYPE_FLAPPING_WING = 16 # Flapping wing -enums['MAV_TYPE'][16] = EnumEntry('MAV_TYPE_FLAPPING_WING', '''Flapping wing''') -MAV_TYPE_KITE = 17 # Kite -enums['MAV_TYPE'][17] = EnumEntry('MAV_TYPE_KITE', '''Kite''') -MAV_TYPE_ONBOARD_CONTROLLER = 18 # Onboard companion controller -enums['MAV_TYPE'][18] = EnumEntry('MAV_TYPE_ONBOARD_CONTROLLER', '''Onboard companion controller''') -MAV_TYPE_VTOL_DUOROTOR = 19 # Two-rotor VTOL using control surfaces in vertical operation in - # addition. Tailsitter. -enums['MAV_TYPE'][19] = EnumEntry('MAV_TYPE_VTOL_DUOROTOR', '''Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter.''') -MAV_TYPE_VTOL_QUADROTOR = 20 # Quad-rotor VTOL using a V-shaped quad config in vertical operation. - # Tailsitter. -enums['MAV_TYPE'][20] = EnumEntry('MAV_TYPE_VTOL_QUADROTOR', '''Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter.''') -MAV_TYPE_VTOL_TILTROTOR = 21 # Tiltrotor VTOL -enums['MAV_TYPE'][21] = EnumEntry('MAV_TYPE_VTOL_TILTROTOR', '''Tiltrotor VTOL''') -MAV_TYPE_VTOL_RESERVED2 = 22 # VTOL reserved 2 -enums['MAV_TYPE'][22] = EnumEntry('MAV_TYPE_VTOL_RESERVED2', '''VTOL reserved 2''') -MAV_TYPE_VTOL_RESERVED3 = 23 # VTOL reserved 3 -enums['MAV_TYPE'][23] = EnumEntry('MAV_TYPE_VTOL_RESERVED3', '''VTOL reserved 3''') -MAV_TYPE_VTOL_RESERVED4 = 24 # VTOL reserved 4 -enums['MAV_TYPE'][24] = EnumEntry('MAV_TYPE_VTOL_RESERVED4', '''VTOL reserved 4''') -MAV_TYPE_VTOL_RESERVED5 = 25 # VTOL reserved 5 -enums['MAV_TYPE'][25] = EnumEntry('MAV_TYPE_VTOL_RESERVED5', '''VTOL reserved 5''') -MAV_TYPE_GIMBAL = 26 # Onboard gimbal -enums['MAV_TYPE'][26] = EnumEntry('MAV_TYPE_GIMBAL', '''Onboard gimbal''') -MAV_TYPE_ADSB = 27 # Onboard ADSB peripheral -enums['MAV_TYPE'][27] = EnumEntry('MAV_TYPE_ADSB', '''Onboard ADSB peripheral''') -MAV_TYPE_ENUM_END = 28 # -enums['MAV_TYPE'][28] = EnumEntry('MAV_TYPE_ENUM_END', '''''') - -# FIRMWARE_VERSION_TYPE -enums['FIRMWARE_VERSION_TYPE'] = {} -FIRMWARE_VERSION_TYPE_DEV = 0 # development release -enums['FIRMWARE_VERSION_TYPE'][0] = EnumEntry('FIRMWARE_VERSION_TYPE_DEV', '''development release''') -FIRMWARE_VERSION_TYPE_ALPHA = 64 # alpha release -enums['FIRMWARE_VERSION_TYPE'][64] = EnumEntry('FIRMWARE_VERSION_TYPE_ALPHA', '''alpha release''') -FIRMWARE_VERSION_TYPE_BETA = 128 # beta release -enums['FIRMWARE_VERSION_TYPE'][128] = EnumEntry('FIRMWARE_VERSION_TYPE_BETA', '''beta release''') -FIRMWARE_VERSION_TYPE_RC = 192 # release candidate -enums['FIRMWARE_VERSION_TYPE'][192] = EnumEntry('FIRMWARE_VERSION_TYPE_RC', '''release candidate''') -FIRMWARE_VERSION_TYPE_OFFICIAL = 255 # official stable release -enums['FIRMWARE_VERSION_TYPE'][255] = EnumEntry('FIRMWARE_VERSION_TYPE_OFFICIAL', '''official stable release''') -FIRMWARE_VERSION_TYPE_ENUM_END = 256 # -enums['FIRMWARE_VERSION_TYPE'][256] = EnumEntry('FIRMWARE_VERSION_TYPE_ENUM_END', '''''') - -# MAV_MODE_FLAG -enums['MAV_MODE_FLAG'] = {} -MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 # 0b00000001 Reserved for future use. -enums['MAV_MODE_FLAG'][1] = EnumEntry('MAV_MODE_FLAG_CUSTOM_MODE_ENABLED', '''0b00000001 Reserved for future use.''') -MAV_MODE_FLAG_TEST_ENABLED = 2 # 0b00000010 system has a test mode enabled. This flag is intended for - # temporary system tests and should not be - # used for stable implementations. -enums['MAV_MODE_FLAG'][2] = EnumEntry('MAV_MODE_FLAG_TEST_ENABLED', '''0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations.''') -MAV_MODE_FLAG_AUTO_ENABLED = 4 # 0b00000100 autonomous mode enabled, system finds its own goal - # positions. Guided flag can be set or not, - # depends on the actual implementation. -enums['MAV_MODE_FLAG'][4] = EnumEntry('MAV_MODE_FLAG_AUTO_ENABLED', '''0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation.''') -MAV_MODE_FLAG_GUIDED_ENABLED = 8 # 0b00001000 guided mode enabled, system flies MISSIONs / mission items. -enums['MAV_MODE_FLAG'][8] = EnumEntry('MAV_MODE_FLAG_GUIDED_ENABLED', '''0b00001000 guided mode enabled, system flies MISSIONs / mission items.''') -MAV_MODE_FLAG_STABILIZE_ENABLED = 16 # 0b00010000 system stabilizes electronically its attitude (and - # optionally position). It needs however - # further control inputs to move around. -enums['MAV_MODE_FLAG'][16] = EnumEntry('MAV_MODE_FLAG_STABILIZE_ENABLED', '''0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around.''') -MAV_MODE_FLAG_HIL_ENABLED = 32 # 0b00100000 hardware in the loop simulation. All motors / actuators are - # blocked, but internal software is full - # operational. -enums['MAV_MODE_FLAG'][32] = EnumEntry('MAV_MODE_FLAG_HIL_ENABLED', '''0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational.''') -MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 # 0b01000000 remote control input is enabled. -enums['MAV_MODE_FLAG'][64] = EnumEntry('MAV_MODE_FLAG_MANUAL_INPUT_ENABLED', '''0b01000000 remote control input is enabled.''') -MAV_MODE_FLAG_SAFETY_ARMED = 128 # 0b10000000 MAV safety set to armed. Motors are enabled / running / can - # start. Ready to fly. -enums['MAV_MODE_FLAG'][128] = EnumEntry('MAV_MODE_FLAG_SAFETY_ARMED', '''0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly.''') -MAV_MODE_FLAG_ENUM_END = 129 # -enums['MAV_MODE_FLAG'][129] = EnumEntry('MAV_MODE_FLAG_ENUM_END', '''''') - -# MAV_MODE_FLAG_DECODE_POSITION -enums['MAV_MODE_FLAG_DECODE_POSITION'] = {} -MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 # Eighth bit: 00000001 -enums['MAV_MODE_FLAG_DECODE_POSITION'][1] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE', '''Eighth bit: 00000001''') -MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 # Seventh bit: 00000010 -enums['MAV_MODE_FLAG_DECODE_POSITION'][2] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_TEST', '''Seventh bit: 00000010''') -MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 # Sixt bit: 00000100 -enums['MAV_MODE_FLAG_DECODE_POSITION'][4] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_AUTO', '''Sixt bit: 00000100''') -MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 # Fifth bit: 00001000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][8] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_GUIDED', '''Fifth bit: 00001000''') -MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 # Fourth bit: 00010000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][16] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_STABILIZE', '''Fourth bit: 00010000''') -MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 # Third bit: 00100000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][32] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_HIL', '''Third bit: 00100000''') -MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 # Second bit: 01000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][64] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_MANUAL', '''Second bit: 01000000''') -MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 # First bit: 10000000 -enums['MAV_MODE_FLAG_DECODE_POSITION'][128] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_SAFETY', '''First bit: 10000000''') -MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 # -enums['MAV_MODE_FLAG_DECODE_POSITION'][129] = EnumEntry('MAV_MODE_FLAG_DECODE_POSITION_ENUM_END', '''''') - -# MAV_GOTO -enums['MAV_GOTO'] = {} -MAV_GOTO_DO_HOLD = 0 # Hold at the current position. -enums['MAV_GOTO'][0] = EnumEntry('MAV_GOTO_DO_HOLD', '''Hold at the current position.''') -MAV_GOTO_DO_CONTINUE = 1 # Continue with the next item in mission execution. -enums['MAV_GOTO'][1] = EnumEntry('MAV_GOTO_DO_CONTINUE', '''Continue with the next item in mission execution.''') -MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 # Hold at the current position of the system -enums['MAV_GOTO'][2] = EnumEntry('MAV_GOTO_HOLD_AT_CURRENT_POSITION', '''Hold at the current position of the system''') -MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 # Hold at the position specified in the parameters of the DO_HOLD action -enums['MAV_GOTO'][3] = EnumEntry('MAV_GOTO_HOLD_AT_SPECIFIED_POSITION', '''Hold at the position specified in the parameters of the DO_HOLD action''') -MAV_GOTO_ENUM_END = 4 # -enums['MAV_GOTO'][4] = EnumEntry('MAV_GOTO_ENUM_END', '''''') - -# MAV_MODE -enums['MAV_MODE'] = {} -MAV_MODE_PREFLIGHT = 0 # System is not ready to fly, booting, calibrating, etc. No flag is set. -enums['MAV_MODE'][0] = EnumEntry('MAV_MODE_PREFLIGHT', '''System is not ready to fly, booting, calibrating, etc. No flag is set.''') -MAV_MODE_MANUAL_DISARMED = 64 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][64] = EnumEntry('MAV_MODE_MANUAL_DISARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_DISARMED = 66 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][66] = EnumEntry('MAV_MODE_TEST_DISARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_DISARMED = 80 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][80] = EnumEntry('MAV_MODE_STABILIZE_DISARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_DISARMED = 88 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][88] = EnumEntry('MAV_MODE_GUIDED_DISARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_DISARMED = 92 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][92] = EnumEntry('MAV_MODE_AUTO_DISARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_MANUAL_ARMED = 192 # System is allowed to be active, under manual (RC) control, no - # stabilization -enums['MAV_MODE'][192] = EnumEntry('MAV_MODE_MANUAL_ARMED', '''System is allowed to be active, under manual (RC) control, no stabilization''') -MAV_MODE_TEST_ARMED = 194 # UNDEFINED mode. This solely depends on the autopilot - use with - # caution, intended for developers only. -enums['MAV_MODE'][194] = EnumEntry('MAV_MODE_TEST_ARMED', '''UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only.''') -MAV_MODE_STABILIZE_ARMED = 208 # System is allowed to be active, under assisted RC control. -enums['MAV_MODE'][208] = EnumEntry('MAV_MODE_STABILIZE_ARMED', '''System is allowed to be active, under assisted RC control.''') -MAV_MODE_GUIDED_ARMED = 216 # System is allowed to be active, under autonomous control, manual - # setpoint -enums['MAV_MODE'][216] = EnumEntry('MAV_MODE_GUIDED_ARMED', '''System is allowed to be active, under autonomous control, manual setpoint''') -MAV_MODE_AUTO_ARMED = 220 # System is allowed to be active, under autonomous control and - # navigation (the trajectory is decided - # onboard and not pre-programmed by MISSIONs) -enums['MAV_MODE'][220] = EnumEntry('MAV_MODE_AUTO_ARMED', '''System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs)''') -MAV_MODE_ENUM_END = 221 # -enums['MAV_MODE'][221] = EnumEntry('MAV_MODE_ENUM_END', '''''') - -# MAV_STATE -enums['MAV_STATE'] = {} -MAV_STATE_UNINIT = 0 # Uninitialized system, state is unknown. -enums['MAV_STATE'][0] = EnumEntry('MAV_STATE_UNINIT', '''Uninitialized system, state is unknown.''') -MAV_STATE_BOOT = 1 # System is booting up. -enums['MAV_STATE'][1] = EnumEntry('MAV_STATE_BOOT', '''System is booting up.''') -MAV_STATE_CALIBRATING = 2 # System is calibrating and not flight-ready. -enums['MAV_STATE'][2] = EnumEntry('MAV_STATE_CALIBRATING', '''System is calibrating and not flight-ready.''') -MAV_STATE_STANDBY = 3 # System is grounded and on standby. It can be launched any time. -enums['MAV_STATE'][3] = EnumEntry('MAV_STATE_STANDBY', '''System is grounded and on standby. It can be launched any time.''') -MAV_STATE_ACTIVE = 4 # System is active and might be already airborne. Motors are engaged. -enums['MAV_STATE'][4] = EnumEntry('MAV_STATE_ACTIVE', '''System is active and might be already airborne. Motors are engaged.''') -MAV_STATE_CRITICAL = 5 # System is in a non-normal flight mode. It can however still navigate. -enums['MAV_STATE'][5] = EnumEntry('MAV_STATE_CRITICAL', '''System is in a non-normal flight mode. It can however still navigate.''') -MAV_STATE_EMERGENCY = 6 # System is in a non-normal flight mode. It lost control over parts or - # over the whole airframe. It is in mayday and - # going down. -enums['MAV_STATE'][6] = EnumEntry('MAV_STATE_EMERGENCY', '''System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down.''') -MAV_STATE_POWEROFF = 7 # System just initialized its power-down sequence, will shut down now. -enums['MAV_STATE'][7] = EnumEntry('MAV_STATE_POWEROFF', '''System just initialized its power-down sequence, will shut down now.''') -MAV_STATE_ENUM_END = 8 # -enums['MAV_STATE'][8] = EnumEntry('MAV_STATE_ENUM_END', '''''') - -# MAV_COMPONENT -enums['MAV_COMPONENT'] = {} -MAV_COMP_ID_ALL = 0 # -enums['MAV_COMPONENT'][0] = EnumEntry('MAV_COMP_ID_ALL', '''''') -MAV_COMP_ID_CAMERA = 100 # -enums['MAV_COMPONENT'][100] = EnumEntry('MAV_COMP_ID_CAMERA', '''''') -MAV_COMP_ID_SERVO1 = 140 # -enums['MAV_COMPONENT'][140] = EnumEntry('MAV_COMP_ID_SERVO1', '''''') -MAV_COMP_ID_SERVO2 = 141 # -enums['MAV_COMPONENT'][141] = EnumEntry('MAV_COMP_ID_SERVO2', '''''') -MAV_COMP_ID_SERVO3 = 142 # -enums['MAV_COMPONENT'][142] = EnumEntry('MAV_COMP_ID_SERVO3', '''''') -MAV_COMP_ID_SERVO4 = 143 # -enums['MAV_COMPONENT'][143] = EnumEntry('MAV_COMP_ID_SERVO4', '''''') -MAV_COMP_ID_SERVO5 = 144 # -enums['MAV_COMPONENT'][144] = EnumEntry('MAV_COMP_ID_SERVO5', '''''') -MAV_COMP_ID_SERVO6 = 145 # -enums['MAV_COMPONENT'][145] = EnumEntry('MAV_COMP_ID_SERVO6', '''''') -MAV_COMP_ID_SERVO7 = 146 # -enums['MAV_COMPONENT'][146] = EnumEntry('MAV_COMP_ID_SERVO7', '''''') -MAV_COMP_ID_SERVO8 = 147 # -enums['MAV_COMPONENT'][147] = EnumEntry('MAV_COMP_ID_SERVO8', '''''') -MAV_COMP_ID_SERVO9 = 148 # -enums['MAV_COMPONENT'][148] = EnumEntry('MAV_COMP_ID_SERVO9', '''''') -MAV_COMP_ID_SERVO10 = 149 # -enums['MAV_COMPONENT'][149] = EnumEntry('MAV_COMP_ID_SERVO10', '''''') -MAV_COMP_ID_SERVO11 = 150 # -enums['MAV_COMPONENT'][150] = EnumEntry('MAV_COMP_ID_SERVO11', '''''') -MAV_COMP_ID_SERVO12 = 151 # -enums['MAV_COMPONENT'][151] = EnumEntry('MAV_COMP_ID_SERVO12', '''''') -MAV_COMP_ID_SERVO13 = 152 # -enums['MAV_COMPONENT'][152] = EnumEntry('MAV_COMP_ID_SERVO13', '''''') -MAV_COMP_ID_SERVO14 = 153 # -enums['MAV_COMPONENT'][153] = EnumEntry('MAV_COMP_ID_SERVO14', '''''') -MAV_COMP_ID_GIMBAL = 154 # -enums['MAV_COMPONENT'][154] = EnumEntry('MAV_COMP_ID_GIMBAL', '''''') -MAV_COMP_ID_LOG = 155 # -enums['MAV_COMPONENT'][155] = EnumEntry('MAV_COMP_ID_LOG', '''''') -MAV_COMP_ID_ADSB = 156 # -enums['MAV_COMPONENT'][156] = EnumEntry('MAV_COMP_ID_ADSB', '''''') -MAV_COMP_ID_OSD = 157 # On Screen Display (OSD) devices for video links -enums['MAV_COMPONENT'][157] = EnumEntry('MAV_COMP_ID_OSD', '''On Screen Display (OSD) devices for video links''') -MAV_COMP_ID_PERIPHERAL = 158 # Generic autopilot peripheral component ID. Meant for devices that do - # not implement the parameter sub-protocol -enums['MAV_COMPONENT'][158] = EnumEntry('MAV_COMP_ID_PERIPHERAL', '''Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol''') -MAV_COMP_ID_QX1_GIMBAL = 159 # -enums['MAV_COMPONENT'][159] = EnumEntry('MAV_COMP_ID_QX1_GIMBAL', '''''') -MAV_COMP_ID_MAPPER = 180 # -enums['MAV_COMPONENT'][180] = EnumEntry('MAV_COMP_ID_MAPPER', '''''') -MAV_COMP_ID_MISSIONPLANNER = 190 # -enums['MAV_COMPONENT'][190] = EnumEntry('MAV_COMP_ID_MISSIONPLANNER', '''''') -MAV_COMP_ID_PATHPLANNER = 195 # -enums['MAV_COMPONENT'][195] = EnumEntry('MAV_COMP_ID_PATHPLANNER', '''''') -MAV_COMP_ID_IMU = 200 # -enums['MAV_COMPONENT'][200] = EnumEntry('MAV_COMP_ID_IMU', '''''') -MAV_COMP_ID_IMU_2 = 201 # -enums['MAV_COMPONENT'][201] = EnumEntry('MAV_COMP_ID_IMU_2', '''''') -MAV_COMP_ID_IMU_3 = 202 # -enums['MAV_COMPONENT'][202] = EnumEntry('MAV_COMP_ID_IMU_3', '''''') -MAV_COMP_ID_GPS = 220 # -enums['MAV_COMPONENT'][220] = EnumEntry('MAV_COMP_ID_GPS', '''''') -MAV_COMP_ID_UDP_BRIDGE = 240 # -enums['MAV_COMPONENT'][240] = EnumEntry('MAV_COMP_ID_UDP_BRIDGE', '''''') -MAV_COMP_ID_UART_BRIDGE = 241 # -enums['MAV_COMPONENT'][241] = EnumEntry('MAV_COMP_ID_UART_BRIDGE', '''''') -MAV_COMP_ID_SYSTEM_CONTROL = 250 # -enums['MAV_COMPONENT'][250] = EnumEntry('MAV_COMP_ID_SYSTEM_CONTROL', '''''') -MAV_COMPONENT_ENUM_END = 251 # -enums['MAV_COMPONENT'][251] = EnumEntry('MAV_COMPONENT_ENUM_END', '''''') - -# MAV_SYS_STATUS_SENSOR -enums['MAV_SYS_STATUS_SENSOR'] = {} -MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 # 0x01 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][1] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO', '''0x01 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 # 0x02 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][2] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL', '''0x02 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG = 4 # 0x04 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][4] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG', '''0x04 3D magnetometer''') -MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 # 0x08 absolute pressure -enums['MAV_SYS_STATUS_SENSOR'][8] = EnumEntry('MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE', '''0x08 absolute pressure''') -MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 # 0x10 differential pressure -enums['MAV_SYS_STATUS_SENSOR'][16] = EnumEntry('MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE', '''0x10 differential pressure''') -MAV_SYS_STATUS_SENSOR_GPS = 32 # 0x20 GPS -enums['MAV_SYS_STATUS_SENSOR'][32] = EnumEntry('MAV_SYS_STATUS_SENSOR_GPS', '''0x20 GPS''') -MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 # 0x40 optical flow -enums['MAV_SYS_STATUS_SENSOR'][64] = EnumEntry('MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW', '''0x40 optical flow''') -MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 # 0x80 computer vision position -enums['MAV_SYS_STATUS_SENSOR'][128] = EnumEntry('MAV_SYS_STATUS_SENSOR_VISION_POSITION', '''0x80 computer vision position''') -MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 # 0x100 laser based position -enums['MAV_SYS_STATUS_SENSOR'][256] = EnumEntry('MAV_SYS_STATUS_SENSOR_LASER_POSITION', '''0x100 laser based position''') -MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 # 0x200 external ground truth (Vicon or Leica) -enums['MAV_SYS_STATUS_SENSOR'][512] = EnumEntry('MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH', '''0x200 external ground truth (Vicon or Leica)''') -MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 # 0x400 3D angular rate control -enums['MAV_SYS_STATUS_SENSOR'][1024] = EnumEntry('MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL', '''0x400 3D angular rate control''') -MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 # 0x800 attitude stabilization -enums['MAV_SYS_STATUS_SENSOR'][2048] = EnumEntry('MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION', '''0x800 attitude stabilization''') -MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 # 0x1000 yaw position -enums['MAV_SYS_STATUS_SENSOR'][4096] = EnumEntry('MAV_SYS_STATUS_SENSOR_YAW_POSITION', '''0x1000 yaw position''') -MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 # 0x2000 z/altitude control -enums['MAV_SYS_STATUS_SENSOR'][8192] = EnumEntry('MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL', '''0x2000 z/altitude control''') -MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 # 0x4000 x/y position control -enums['MAV_SYS_STATUS_SENSOR'][16384] = EnumEntry('MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL', '''0x4000 x/y position control''') -MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 # 0x8000 motor outputs / control -enums['MAV_SYS_STATUS_SENSOR'][32768] = EnumEntry('MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS', '''0x8000 motor outputs / control''') -MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 # 0x10000 rc receiver -enums['MAV_SYS_STATUS_SENSOR'][65536] = EnumEntry('MAV_SYS_STATUS_SENSOR_RC_RECEIVER', '''0x10000 rc receiver''') -MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 # 0x20000 2nd 3D gyro -enums['MAV_SYS_STATUS_SENSOR'][131072] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_GYRO2', '''0x20000 2nd 3D gyro''') -MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 # 0x40000 2nd 3D accelerometer -enums['MAV_SYS_STATUS_SENSOR'][262144] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_ACCEL2', '''0x40000 2nd 3D accelerometer''') -MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 # 0x80000 2nd 3D magnetometer -enums['MAV_SYS_STATUS_SENSOR'][524288] = EnumEntry('MAV_SYS_STATUS_SENSOR_3D_MAG2', '''0x80000 2nd 3D magnetometer''') -MAV_SYS_STATUS_GEOFENCE = 1048576 # 0x100000 geofence -enums['MAV_SYS_STATUS_SENSOR'][1048576] = EnumEntry('MAV_SYS_STATUS_GEOFENCE', '''0x100000 geofence''') -MAV_SYS_STATUS_AHRS = 2097152 # 0x200000 AHRS subsystem health -enums['MAV_SYS_STATUS_SENSOR'][2097152] = EnumEntry('MAV_SYS_STATUS_AHRS', '''0x200000 AHRS subsystem health''') -MAV_SYS_STATUS_TERRAIN = 4194304 # 0x400000 Terrain subsystem health -enums['MAV_SYS_STATUS_SENSOR'][4194304] = EnumEntry('MAV_SYS_STATUS_TERRAIN', '''0x400000 Terrain subsystem health''') -MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 # 0x800000 Motors are reversed -enums['MAV_SYS_STATUS_SENSOR'][8388608] = EnumEntry('MAV_SYS_STATUS_REVERSE_MOTOR', '''0x800000 Motors are reversed''') -MAV_SYS_STATUS_LOGGING = 16777216 # 0x1000000 Logging -enums['MAV_SYS_STATUS_SENSOR'][16777216] = EnumEntry('MAV_SYS_STATUS_LOGGING', '''0x1000000 Logging''') -MAV_SYS_STATUS_SENSOR_ENUM_END = 16777217 # -enums['MAV_SYS_STATUS_SENSOR'][16777217] = EnumEntry('MAV_SYS_STATUS_SENSOR_ENUM_END', '''''') - -# MAV_FRAME -enums['MAV_FRAME'] = {} -MAV_FRAME_GLOBAL = 0 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude, second value / y: longitude, third - # value / z: positive altitude over mean sea - # level (MSL) -enums['MAV_FRAME'][0] = EnumEntry('MAV_FRAME_GLOBAL', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_LOCAL_NED = 1 # Local coordinate frame, Z-up (x: north, y: east, z: down). -enums['MAV_FRAME'][1] = EnumEntry('MAV_FRAME_LOCAL_NED', '''Local coordinate frame, Z-up (x: north, y: east, z: down).''') -MAV_FRAME_MISSION = 2 # NOT a coordinate frame, indicates a mission command. -enums['MAV_FRAME'][2] = EnumEntry('MAV_FRAME_MISSION', '''NOT a coordinate frame, indicates a mission command.''') -MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude, second - # value / y: longitude, third value / z: - # positive altitude with 0 being at the - # altitude of the home location. -enums['MAV_FRAME'][3] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_ENU = 4 # Local coordinate frame, Z-down (x: east, y: north, z: up) -enums['MAV_FRAME'][4] = EnumEntry('MAV_FRAME_LOCAL_ENU', '''Local coordinate frame, Z-down (x: east, y: north, z: up)''') -MAV_FRAME_GLOBAL_INT = 5 # Global coordinate frame, WGS84 coordinate system. First value / x: - # latitude in degrees*1.0e-7, second value / - # y: longitude in degrees*1.0e-7, third value - # / z: positive altitude over mean sea level - # (MSL) -enums['MAV_FRAME'][5] = EnumEntry('MAV_FRAME_GLOBAL_INT', '''Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL)''') -MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 # Global coordinate frame, WGS84 coordinate system, relative altitude - # over ground with respect to the home - # position. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude with 0 being at the altitude of the - # home location. -enums['MAV_FRAME'][6] = EnumEntry('MAV_FRAME_GLOBAL_RELATIVE_ALT_INT', '''Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location.''') -MAV_FRAME_LOCAL_OFFSET_NED = 7 # Offset to the current local frame. Anything expressed in this frame - # should be added to the current local frame - # position. -enums['MAV_FRAME'][7] = EnumEntry('MAV_FRAME_LOCAL_OFFSET_NED', '''Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position.''') -MAV_FRAME_BODY_NED = 8 # Setpoint in body NED frame. This makes sense if all position control - # is externalized - e.g. useful to command 2 - # m/s^2 acceleration to the right. -enums['MAV_FRAME'][8] = EnumEntry('MAV_FRAME_BODY_NED', '''Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right.''') -MAV_FRAME_BODY_OFFSET_NED = 9 # Offset in body NED frame. This makes sense if adding setpoints to the - # current flight path, to avoid an obstacle - - # e.g. useful to command 2 m/s^2 acceleration - # to the east. -enums['MAV_FRAME'][9] = EnumEntry('MAV_FRAME_BODY_OFFSET_NED', '''Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees, second value / y: longitude in - # degrees, third value / z: positive altitude - # in meters with 0 being at ground level in - # terrain model. -enums['MAV_FRAME'][10] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 # Global coordinate frame with above terrain level altitude. WGS84 - # coordinate system, relative altitude over - # terrain with respect to the waypoint - # coordinate. First value / x: latitude in - # degrees*10e-7, second value / y: longitude - # in degrees*10e-7, third value / z: positive - # altitude in meters with 0 being at ground - # level in terrain model. -enums['MAV_FRAME'][11] = EnumEntry('MAV_FRAME_GLOBAL_TERRAIN_ALT_INT', '''Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model.''') -MAV_FRAME_ENUM_END = 12 # -enums['MAV_FRAME'][12] = EnumEntry('MAV_FRAME_ENUM_END', '''''') - -# MAVLINK_DATA_STREAM_TYPE -enums['MAVLINK_DATA_STREAM_TYPE'] = {} -MAVLINK_DATA_STREAM_IMG_JPEG = 1 # -enums['MAVLINK_DATA_STREAM_TYPE'][1] = EnumEntry('MAVLINK_DATA_STREAM_IMG_JPEG', '''''') -MAVLINK_DATA_STREAM_IMG_BMP = 2 # -enums['MAVLINK_DATA_STREAM_TYPE'][2] = EnumEntry('MAVLINK_DATA_STREAM_IMG_BMP', '''''') -MAVLINK_DATA_STREAM_IMG_RAW8U = 3 # -enums['MAVLINK_DATA_STREAM_TYPE'][3] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW8U', '''''') -MAVLINK_DATA_STREAM_IMG_RAW32U = 4 # -enums['MAVLINK_DATA_STREAM_TYPE'][4] = EnumEntry('MAVLINK_DATA_STREAM_IMG_RAW32U', '''''') -MAVLINK_DATA_STREAM_IMG_PGM = 5 # -enums['MAVLINK_DATA_STREAM_TYPE'][5] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PGM', '''''') -MAVLINK_DATA_STREAM_IMG_PNG = 6 # -enums['MAVLINK_DATA_STREAM_TYPE'][6] = EnumEntry('MAVLINK_DATA_STREAM_IMG_PNG', '''''') -MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 # -enums['MAVLINK_DATA_STREAM_TYPE'][7] = EnumEntry('MAVLINK_DATA_STREAM_TYPE_ENUM_END', '''''') - -# FENCE_ACTION -enums['FENCE_ACTION'] = {} -FENCE_ACTION_NONE = 0 # Disable fenced mode -enums['FENCE_ACTION'][0] = EnumEntry('FENCE_ACTION_NONE', '''Disable fenced mode''') -FENCE_ACTION_GUIDED = 1 # Switched to guided mode to return point (fence point 0) -enums['FENCE_ACTION'][1] = EnumEntry('FENCE_ACTION_GUIDED', '''Switched to guided mode to return point (fence point 0)''') -FENCE_ACTION_REPORT = 2 # Report fence breach, but don't take action -enums['FENCE_ACTION'][2] = EnumEntry('FENCE_ACTION_REPORT', '''Report fence breach, but don't take action''') -FENCE_ACTION_GUIDED_THR_PASS = 3 # Switched to guided mode to return point (fence point 0) with manual - # throttle control -enums['FENCE_ACTION'][3] = EnumEntry('FENCE_ACTION_GUIDED_THR_PASS', '''Switched to guided mode to return point (fence point 0) with manual throttle control''') -FENCE_ACTION_RTL = 4 # Switch to RTL (return to launch) mode and head for the return point. -enums['FENCE_ACTION'][4] = EnumEntry('FENCE_ACTION_RTL', '''Switch to RTL (return to launch) mode and head for the return point.''') -FENCE_ACTION_ENUM_END = 5 # -enums['FENCE_ACTION'][5] = EnumEntry('FENCE_ACTION_ENUM_END', '''''') - -# FENCE_BREACH -enums['FENCE_BREACH'] = {} -FENCE_BREACH_NONE = 0 # No last fence breach -enums['FENCE_BREACH'][0] = EnumEntry('FENCE_BREACH_NONE', '''No last fence breach''') -FENCE_BREACH_MINALT = 1 # Breached minimum altitude -enums['FENCE_BREACH'][1] = EnumEntry('FENCE_BREACH_MINALT', '''Breached minimum altitude''') -FENCE_BREACH_MAXALT = 2 # Breached maximum altitude -enums['FENCE_BREACH'][2] = EnumEntry('FENCE_BREACH_MAXALT', '''Breached maximum altitude''') -FENCE_BREACH_BOUNDARY = 3 # Breached fence boundary -enums['FENCE_BREACH'][3] = EnumEntry('FENCE_BREACH_BOUNDARY', '''Breached fence boundary''') -FENCE_BREACH_ENUM_END = 4 # -enums['FENCE_BREACH'][4] = EnumEntry('FENCE_BREACH_ENUM_END', '''''') - -# MAV_MOUNT_MODE -enums['MAV_MOUNT_MODE'] = {} -MAV_MOUNT_MODE_RETRACT = 0 # Load and keep safe position (Roll,Pitch,Yaw) from permant memory and - # stop stabilization -enums['MAV_MOUNT_MODE'][0] = EnumEntry('MAV_MOUNT_MODE_RETRACT', '''Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization''') -MAV_MOUNT_MODE_NEUTRAL = 1 # Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. -enums['MAV_MOUNT_MODE'][1] = EnumEntry('MAV_MOUNT_MODE_NEUTRAL', '''Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.''') -MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 # Load neutral position and start MAVLink Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][2] = EnumEntry('MAV_MOUNT_MODE_MAVLINK_TARGETING', '''Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_RC_TARGETING = 3 # Load neutral position and start RC Roll,Pitch,Yaw control with - # stabilization -enums['MAV_MOUNT_MODE'][3] = EnumEntry('MAV_MOUNT_MODE_RC_TARGETING', '''Load neutral position and start RC Roll,Pitch,Yaw control with stabilization''') -MAV_MOUNT_MODE_GPS_POINT = 4 # Load neutral position and start to point to Lat,Lon,Alt -enums['MAV_MOUNT_MODE'][4] = EnumEntry('MAV_MOUNT_MODE_GPS_POINT', '''Load neutral position and start to point to Lat,Lon,Alt''') -MAV_MOUNT_MODE_ENUM_END = 5 # -enums['MAV_MOUNT_MODE'][5] = EnumEntry('MAV_MOUNT_MODE_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_CPU_LOAD = 170 -MAVLINK_MSG_ID_SENSOR_BIAS = 172 -MAVLINK_MSG_ID_DIAGNOSTIC = 173 -MAVLINK_MSG_ID_SLUGS_NAVIGATION = 176 -MAVLINK_MSG_ID_DATA_LOG = 177 -MAVLINK_MSG_ID_GPS_DATE_TIME = 179 -MAVLINK_MSG_ID_MID_LVL_CMDS = 180 -MAVLINK_MSG_ID_CTRL_SRFC_PT = 181 -MAVLINK_MSG_ID_SLUGS_CAMERA_ORDER = 184 -MAVLINK_MSG_ID_CONTROL_SURFACE = 185 -MAVLINK_MSG_ID_SLUGS_MOBILE_LOCATION = 186 -MAVLINK_MSG_ID_SLUGS_CONFIGURATION_CAMERA = 188 -MAVLINK_MSG_ID_ISR_LOCATION = 189 -MAVLINK_MSG_ID_VOLT_SENSOR = 191 -MAVLINK_MSG_ID_PTZ_STATUS = 192 -MAVLINK_MSG_ID_UAV_STATUS = 193 -MAVLINK_MSG_ID_STATUS_GPS = 194 -MAVLINK_MSG_ID_NOVATEL_DIAG = 195 -MAVLINK_MSG_ID_SENSOR_DIAG = 196 -MAVLINK_MSG_ID_BOOT = 197 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_cpu_load_message(MAVLink_message): - ''' - Sensor and DSC control loads. - ''' - id = MAVLINK_MSG_ID_CPU_LOAD - name = 'CPU_LOAD' - fieldnames = ['sensLoad', 'ctrlLoad', 'batVolt'] - ordered_fieldnames = [ 'batVolt', 'sensLoad', 'ctrlLoad' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.xml deleted file mode 100755 index a985eab38..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/slugs.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - common.xml - - - - - - Does nothing. - 1 to arm, 0 to disarm - - - - - - Return vehicle to base. - 0: return to base, 1: track mobile base - - - Stops the vehicle from returning to base and resumes flight. - - - Turns the vehicle's visible or infrared lights on or off. - 0: visible lights, 1: infrared lights - 0: turn on, 1: turn off - - - Requests vehicle to send current mid-level commands to ground station. - - - Requests storage of mid-level commands. - Mid-level command storage: 0: read from flash/EEPROM, 1: write to flash/EEPROM - - - - - - Slugs-specific navigation modes. - - No change to SLUGS mode. - - - Vehicle is in liftoff mode. - - - Vehicle is in passthrough mode, being controlled by a pilot. - - - Vehicle is in waypoint mode, navigating to waypoints. - - - Vehicle is executing mid-level commands. - - - Vehicle is returning to the home location. - - - Vehicle is landing. - - - Lost connection with vehicle. - - - Vehicle is in selective passthrough mode, where selected surfaces are being manually controlled. - - - Vehicle is in ISR mode, performing reconaissance at a point specified by ISR_LOCATION message. - - - Vehicle is patrolling along lines between waypoints. - - - Vehicle is grounded or an error has occurred. - - - - - These flags encode the control surfaces for selective passthrough mode. If a bit is set then the pilot console - has control of the surface, and if not then the autopilot has control of the surface. - - 0b10000000 Throttle control passes through to pilot console. - - - 0b01000000 Left aileron control passes through to pilot console. - - - 0b00100000 Right aileron control passes through to pilot console. - - - 0b00010000 Rudder control passes through to pilot console. - - - 0b00001000 Left elevator control passes through to pilot console. - - - 0b00000100 Right elevator control passes through to pilot console. - - - 0b00000010 Left flap control passes through to pilot console. - - - 0b00000001 Right flap control passes through to pilot console. - - - - - - - - Sensor and DSC control loads. - Sensor DSC Load - Control DSC Load - Battery Voltage in millivolts - - - - Accelerometer and gyro biases. - Accelerometer X bias (m/s) - Accelerometer Y bias (m/s) - Accelerometer Z bias (m/s) - Gyro X bias (rad/s) - Gyro Y bias (rad/s) - Gyro Z bias (rad/s) - - - - Configurable diagnostic messages. - Diagnostic float 1 - Diagnostic float 2 - Diagnostic float 3 - Diagnostic short 1 - Diagnostic short 2 - Diagnostic short 3 - - - - Data used in the navigation algorithm. - Measured Airspeed prior to the nav filter in m/s - Commanded Roll - Commanded Pitch - Commanded Turn rate - Y component of the body acceleration - Total Distance to Run on this leg of Navigation - Remaining distance to Run on this leg of Navigation - Origin WP - Destination WP - Commanded altitude in 0.1 m - - - - Configurable data log probes to be used inside Simulink - Log value 1 - Log value 2 - Log value 3 - Log value 4 - Log value 5 - Log value 6 - - - - Pilot console PWM messges. - Year reported by Gps - Month reported by Gps - Day reported by Gps - Hour reported by Gps - Min reported by Gps - Sec reported by Gps - Clock Status. See table 47 page 211 OEMStar Manual - Visible satellites reported by Gps - Used satellites in Solution - GPS+GLONASS satellites in Solution - GPS and GLONASS usage mask (bit 0 GPS_used? bit_4 GLONASS_used?) - Percent used GPS - - - - Mid Level commands sent from the GS to the autopilot. These are only sent when being operated in mid-level commands mode from the ground. - The system setting the commands - Commanded Altitude in meters - Commanded Airspeed in m/s - Commanded Turnrate in rad/s - - - - This message sets the control surfaces for selective passthrough mode. - The system setting the commands - Bitfield containing the passthrough configuration, see CONTROL_SURFACE_FLAG ENUM. - - - - Orders generated to the SLUGS camera mount. - The system reporting the action - Order the mount to pan: -1 left, 0 No pan motion, +1 right - Order the mount to tilt: -1 down, 0 No tilt motion, +1 up - Order the zoom values 0 to 10 - Orders the camera mount to move home. The other fields are ignored when this field is set. 1: move home, 0 ignored - - - - Control for surface; pending and order to origin. - The system setting the commands - ID control surface send 0: throttle 1: aileron 2: elevator 3: rudder - Pending - Order to origin - - - - - - - Transmits the last known position of the mobile GS to the UAV. Very relevant when Track Mobile is enabled - The system reporting the action - Mobile Latitude - Mobile Longitude - - - - Control for camara. - The system setting the commands - ID 0: brightness 1: aperture 2: iris 3: ICR 4: backlight - 1: up/on 2: down/off 3: auto/reset/no action - - - - Transmits the position of watch - The system reporting the action - ISR Latitude - ISR Longitude - ISR Height - Option 1 - Option 2 - Option 3 - - - - - - - Transmits the readings from the voltage and current sensors - It is the value of reading 2: 0 - Current, 1 - Foreward Sonar, 2 - Back Sonar, 3 - RPM - Voltage in uS of PWM. 0 uS = 0V, 20 uS = 21.5V - Depends on the value of r2Type (0) Current consumption in uS of PWM, 20 uS = 90Amp (1) Distance in cm (2) Distance in cm (3) Absolute value - - - - Transmits the actual Pan, Tilt and Zoom values of the camera unit - The actual Zoom Value - The Pan value in 10ths of degree - The Tilt value in 10ths of degree - - - - Transmits the actual status values UAV in flight - The ID system reporting the action - Latitude UAV - Longitude UAV - Altitude UAV - Speed UAV - Course UAV - - - - This contains the status of the GPS readings - Number of times checksum has failed - The quality indicator, 0=fix not available or invalid, 1=GPS fix, 2=C/A differential GPS, 6=Dead reckoning mode, 7=Manual input mode (fixed position), 8=Simulator mode, 9= WAAS a - Indicates if GN, GL or GP messages are being received - A = data valid, V = data invalid - Magnetic variation, degrees - Magnetic variation direction E/W. Easterly variation (E) subtracts from True course and Westerly variation (W) adds to True course - Positioning system mode indicator. A - Autonomous;D-Differential; E-Estimated (dead reckoning) mode;M-Manual input; N-Data not valid - - - - Transmits the diagnostics data from the Novatel OEMStar GPS - The Time Status. See Table 8 page 27 Novatel OEMStar Manual - Status Bitfield. See table 69 page 350 Novatel OEMstar Manual - solution Status. See table 44 page 197 - position type. See table 43 page 196 - velocity type. See table 43 page 196 - Age of the position solution in seconds - Times the CRC has failed since boot - - - - Diagnostic data Sensor MCU - Float field 1 - Float field 2 - Int 16 field 1 - Int 8 field 1 - - - - - The boot message indicates that a system is starting. The onboard software version allows to keep track of onboard soft/firmware revisions. This message allows the sensor and control MCUs to communicate version numbers on startup. - The onboard software version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/test.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/test.py deleted file mode 100644 index d97ce34a9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/test.py +++ /dev/null @@ -1,715 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: test.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'test' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - 3 - - - Test all field types - char - string - uint8_t - uint16_t - uint32_t - uint64_t - int8_t - int16_t - int32_t - int64_t - float - double - uint8_t_array - uint16_t_array - uint32_t_array - uint64_t_array - int8_t_array - int16_t_array - int32_t_array - int64_t_array - float_array - double_array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/uAvionix.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/uAvionix.py deleted file mode 100644 index 88a95accd..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/uAvionix.py +++ /dev/null @@ -1,952 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: uAvionix.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'uAvionix' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack('= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - - - - - - - - - - State flags for ADS-B transponder dynamic report - - - - - - - - Transceiver RF control flags for ADS-B transponder dynamic reports - - - - - - Status for ADS-B transponder dynamic input - - - - - - - - - Status flags for ADS-B transponder dynamic output - - - - - - - Definitions for aircraft size - - - - - - - - - - - - - - - - - - - GPS lataral offset encoding - - - - - - - - - - - GPS longitudinal offset encoding - - - - - Emergency status encoding - - - - - - - - - - - - - Static data to configure the ADS-B transponder (send within 10 sec of a POR and every 10 sec thereafter) - Vehicle address (24 bit) - Vehicle identifier (8 characters, null terminated, valid characters are A-Z, 0-9, " " only) - Transmitting vehicle type. See ADSB_EMITTER_TYPE enum - Aircraft length and width encoding (table 2-35 of DO-282B) - GPS antenna lateral offset (table 2-36 of DO-282B) - GPS antenna longitudinal offset from nose [if non-zero, take position (in meters) divide by 2 and add one] (table 2-37 DO-282B) - Aircraft stall speed in cm/s - ADS-B transponder reciever and transmit enable flags - - - Dynamic data used to generate ADS-B out transponder data (send at 5Hz) - UTC time in seconds since GPS epoch (Jan 6, 1980). If unknown set to UINT32_MAX - Latitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Longitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Altitude in mm (m * 1E-3) UP +ve. WGS84 altitude. If unknown set to INT32_MAX - 0-1: no fix, 2: 2D fix, 3: 3D fix, 4: DGPS, 5: RTK - Number of satellites visible. If unknown set to UINT8_MAX - Barometric pressure altitude relative to a standard atmosphere of 1013.2 mBar and NOT bar corrected altitude (m * 1E-3). (up +ve). If unknown set to INT32_MAX - Horizontal accuracy in mm (m * 1E-3). If unknown set to UINT32_MAX - Vertical accuracy in cm. If unknown set to UINT16_MAX - Velocity accuracy in mm/s (m * 1E-3). If unknown set to UINT16_MAX - GPS vertical speed in cm/s. If unknown set to INT16_MAX - North-South velocity over ground in cm/s North +ve. If unknown set to INT16_MAX - East-West velocity over ground in cm/s East +ve. If unknown set to INT16_MAX - Emergency status - ADS-B transponder dynamic input state flags - Mode A code (typically 1200 [0x04B0] for VFR) - - - Transceiver heartbeat with health report (updated every 10s) - ADS-B transponder messages - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.py deleted file mode 100644 index 5f87d7e24..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.py +++ /dev/null @@ -1,12218 +0,0 @@ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ualberta.xml,common.xml - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '2.0' -DIALECT = 'ualberta' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if True: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control.''' -enums['MAV_CMD'][16].param[4] = '''Desired yaw angle at MISSION (rotary wing)''' -enums['MAV_CMD'][16].param[5] = '''Latitude''' -enums['MAV_CMD'][16].param[6] = '''Longitude''' -enums['MAV_CMD'][16].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_UNLIM = 17 # Loiter around this MISSION an unlimited amount of time -enums['MAV_CMD'][17] = EnumEntry('MAV_CMD_NAV_LOITER_UNLIM', '''Loiter around this MISSION an unlimited amount of time''') -enums['MAV_CMD'][17].param[1] = '''Empty''' -enums['MAV_CMD'][17].param[2] = '''Empty''' -enums['MAV_CMD'][17].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][17].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][17].param[5] = '''Latitude''' -enums['MAV_CMD'][17].param[6] = '''Longitude''' -enums['MAV_CMD'][17].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TURNS = 18 # Loiter around this MISSION for X turns -enums['MAV_CMD'][18] = EnumEntry('MAV_CMD_NAV_LOITER_TURNS', '''Loiter around this MISSION for X turns''') -enums['MAV_CMD'][18].param[1] = '''Turns''' -enums['MAV_CMD'][18].param[2] = '''Empty''' -enums['MAV_CMD'][18].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][18].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][18].param[5] = '''Latitude''' -enums['MAV_CMD'][18].param[6] = '''Longitude''' -enums['MAV_CMD'][18].param[7] = '''Altitude''' -MAV_CMD_NAV_LOITER_TIME = 19 # Loiter around this MISSION for X seconds -enums['MAV_CMD'][19] = EnumEntry('MAV_CMD_NAV_LOITER_TIME', '''Loiter around this MISSION for X seconds''') -enums['MAV_CMD'][19].param[1] = '''Seconds (decimal)''' -enums['MAV_CMD'][19].param[2] = '''Empty''' -enums['MAV_CMD'][19].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][19].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle''' -enums['MAV_CMD'][19].param[5] = '''Latitude''' -enums['MAV_CMD'][19].param[6] = '''Longitude''' -enums['MAV_CMD'][19].param[7] = '''Altitude''' -MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 # Return to launch location -enums['MAV_CMD'][20] = EnumEntry('MAV_CMD_NAV_RETURN_TO_LAUNCH', '''Return to launch location''') -enums['MAV_CMD'][20].param[1] = '''Empty''' -enums['MAV_CMD'][20].param[2] = '''Empty''' -enums['MAV_CMD'][20].param[3] = '''Empty''' -enums['MAV_CMD'][20].param[4] = '''Empty''' -enums['MAV_CMD'][20].param[5] = '''Empty''' -enums['MAV_CMD'][20].param[6] = '''Empty''' -enums['MAV_CMD'][20].param[7] = '''Empty''' -MAV_CMD_NAV_LAND = 21 # Land at location -enums['MAV_CMD'][21] = EnumEntry('MAV_CMD_NAV_LAND', '''Land at location''') -enums['MAV_CMD'][21].param[1] = '''Abort Alt''' -enums['MAV_CMD'][21].param[2] = '''Empty''' -enums['MAV_CMD'][21].param[3] = '''Empty''' -enums['MAV_CMD'][21].param[4] = '''Desired yaw angle''' -enums['MAV_CMD'][21].param[5] = '''Latitude''' -enums['MAV_CMD'][21].param[6] = '''Longitude''' -enums['MAV_CMD'][21].param[7] = '''Altitude''' -MAV_CMD_NAV_TAKEOFF = 22 # Takeoff from ground / hand -enums['MAV_CMD'][22] = EnumEntry('MAV_CMD_NAV_TAKEOFF', '''Takeoff from ground / hand''') -enums['MAV_CMD'][22].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor''' -enums['MAV_CMD'][22].param[2] = '''Empty''' -enums['MAV_CMD'][22].param[3] = '''Empty''' -enums['MAV_CMD'][22].param[4] = '''Yaw angle (if magnetometer present), ignored without magnetometer''' -enums['MAV_CMD'][22].param[5] = '''Latitude''' -enums['MAV_CMD'][22].param[6] = '''Longitude''' -enums['MAV_CMD'][22].param[7] = '''Altitude''' -MAV_CMD_NAV_LAND_LOCAL = 23 # Land at local position (local frame only) -enums['MAV_CMD'][23] = EnumEntry('MAV_CMD_NAV_LAND_LOCAL', '''Land at local position (local frame only)''') -enums['MAV_CMD'][23].param[1] = '''Landing target number (if available)''' -enums['MAV_CMD'][23].param[2] = '''Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land''' -enums['MAV_CMD'][23].param[3] = '''Landing descend rate [ms^-1]''' -enums['MAV_CMD'][23].param[4] = '''Desired yaw angle [rad]''' -enums['MAV_CMD'][23].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][23].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][23].param[7] = '''Z-axis / ground level position [m]''' -MAV_CMD_NAV_TAKEOFF_LOCAL = 24 # Takeoff from local position (local frame only) -enums['MAV_CMD'][24] = EnumEntry('MAV_CMD_NAV_TAKEOFF_LOCAL', '''Takeoff from local position (local frame only)''') -enums['MAV_CMD'][24].param[1] = '''Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad]''' -enums['MAV_CMD'][24].param[2] = '''Empty''' -enums['MAV_CMD'][24].param[3] = '''Takeoff ascend rate [ms^-1]''' -enums['MAV_CMD'][24].param[4] = '''Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these''' -enums['MAV_CMD'][24].param[5] = '''Y-axis position [m]''' -enums['MAV_CMD'][24].param[6] = '''X-axis position [m]''' -enums['MAV_CMD'][24].param[7] = '''Z-axis position [m]''' -MAV_CMD_NAV_FOLLOW = 25 # Vehicle following, i.e. this waypoint represents the position of a - # moving vehicle -enums['MAV_CMD'][25] = EnumEntry('MAV_CMD_NAV_FOLLOW', '''Vehicle following, i.e. this waypoint represents the position of a moving vehicle''') -enums['MAV_CMD'][25].param[1] = '''Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation''' -enums['MAV_CMD'][25].param[2] = '''Ground speed of vehicle to be followed''' -enums['MAV_CMD'][25].param[3] = '''Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise''' -enums['MAV_CMD'][25].param[4] = '''Desired yaw angle.''' -enums['MAV_CMD'][25].param[5] = '''Latitude''' -enums['MAV_CMD'][25].param[6] = '''Longitude''' -enums['MAV_CMD'][25].param[7] = '''Altitude''' -MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 # Continue on the current course and climb/descend to specified - # altitude. When the altitude is reached - # continue to the next command (i.e., don't - # proceed to the next command until the - # desired altitude is reached. -enums['MAV_CMD'][30] = EnumEntry('MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT', '''Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached.''') -enums['MAV_CMD'][30].param[1] = '''Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. ''' -enums['MAV_CMD'][30].param[2] = '''Empty''' -enums['MAV_CMD'][30].param[3] = '''Empty''' -enums['MAV_CMD'][30].param[4] = '''Empty''' -enums['MAV_CMD'][30].param[5] = '''Empty''' -enums['MAV_CMD'][30].param[6] = '''Empty''' -enums['MAV_CMD'][30].param[7] = '''Desired altitude in meters''' -MAV_CMD_NAV_LOITER_TO_ALT = 31 # Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, - # then loiter at the current position. Don't - # consider the navigation command complete - # (don't leave loiter) until the altitude has - # been reached. Additionally, if the Heading - # Required parameter is non-zero the aircraft - # will not leave the loiter until heading - # toward the next waypoint. -enums['MAV_CMD'][31] = EnumEntry('MAV_CMD_NAV_LOITER_TO_ALT', '''Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. ''') -enums['MAV_CMD'][31].param[1] = '''Heading Required (0 = False)''' -enums['MAV_CMD'][31].param[2] = '''Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter.''' -enums['MAV_CMD'][31].param[3] = '''Empty''' -enums['MAV_CMD'][31].param[4] = '''Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location''' -enums['MAV_CMD'][31].param[5] = '''Latitude''' -enums['MAV_CMD'][31].param[6] = '''Longitude''' -enums['MAV_CMD'][31].param[7] = '''Altitude''' -MAV_CMD_DO_FOLLOW = 32 # Being following a target -enums['MAV_CMD'][32] = EnumEntry('MAV_CMD_DO_FOLLOW', '''Being following a target''') -enums['MAV_CMD'][32].param[1] = '''System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode''' -enums['MAV_CMD'][32].param[2] = '''RESERVED''' -enums['MAV_CMD'][32].param[3] = '''RESERVED''' -enums['MAV_CMD'][32].param[4] = '''altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home''' -enums['MAV_CMD'][32].param[5] = '''altitude''' -enums['MAV_CMD'][32].param[6] = '''RESERVED''' -enums['MAV_CMD'][32].param[7] = '''TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout''' -MAV_CMD_DO_FOLLOW_REPOSITION = 33 # Reposition the MAV after a follow target command has been sent -enums['MAV_CMD'][33] = EnumEntry('MAV_CMD_DO_FOLLOW_REPOSITION', '''Reposition the MAV after a follow target command has been sent''') -enums['MAV_CMD'][33].param[1] = '''Camera q1 (where 0 is on the ray from the camera to the tracking device)''' -enums['MAV_CMD'][33].param[2] = '''Camera q2''' -enums['MAV_CMD'][33].param[3] = '''Camera q3''' -enums['MAV_CMD'][33].param[4] = '''Camera q4''' -enums['MAV_CMD'][33].param[5] = '''altitude offset from target (m)''' -enums['MAV_CMD'][33].param[6] = '''X offset from target (m)''' -enums['MAV_CMD'][33].param[7] = '''Y offset from target (m)''' -MAV_CMD_NAV_ROI = 80 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][80] = EnumEntry('MAV_CMD_NAV_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][80].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][80].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][80].param[4] = '''Empty''' -enums['MAV_CMD'][80].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][80].param[6] = '''y''' -enums['MAV_CMD'][80].param[7] = '''z''' -MAV_CMD_NAV_PATHPLANNING = 81 # Control autonomous path planning on the MAV. -enums['MAV_CMD'][81] = EnumEntry('MAV_CMD_NAV_PATHPLANNING', '''Control autonomous path planning on the MAV.''') -enums['MAV_CMD'][81].param[1] = '''0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning''' -enums['MAV_CMD'][81].param[2] = '''0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid''' -enums['MAV_CMD'][81].param[3] = '''Empty''' -enums['MAV_CMD'][81].param[4] = '''Yaw angle at goal, in compass degrees, [0..360]''' -enums['MAV_CMD'][81].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][81].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][81].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_SPLINE_WAYPOINT = 82 # Navigate to MISSION using a spline path. -enums['MAV_CMD'][82] = EnumEntry('MAV_CMD_NAV_SPLINE_WAYPOINT', '''Navigate to MISSION using a spline path.''') -enums['MAV_CMD'][82].param[1] = '''Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing)''' -enums['MAV_CMD'][82].param[2] = '''Empty''' -enums['MAV_CMD'][82].param[3] = '''Empty''' -enums['MAV_CMD'][82].param[4] = '''Empty''' -enums['MAV_CMD'][82].param[5] = '''Latitude/X of goal''' -enums['MAV_CMD'][82].param[6] = '''Longitude/Y of goal''' -enums['MAV_CMD'][82].param[7] = '''Altitude/Z of goal''' -MAV_CMD_NAV_VTOL_TAKEOFF = 84 # Takeoff from ground using VTOL mode -enums['MAV_CMD'][84] = EnumEntry('MAV_CMD_NAV_VTOL_TAKEOFF', '''Takeoff from ground using VTOL mode''') -enums['MAV_CMD'][84].param[1] = '''Empty''' -enums['MAV_CMD'][84].param[2] = '''Empty''' -enums['MAV_CMD'][84].param[3] = '''Empty''' -enums['MAV_CMD'][84].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][84].param[5] = '''Latitude''' -enums['MAV_CMD'][84].param[6] = '''Longitude''' -enums['MAV_CMD'][84].param[7] = '''Altitude''' -MAV_CMD_NAV_VTOL_LAND = 85 # Land using VTOL mode -enums['MAV_CMD'][85] = EnumEntry('MAV_CMD_NAV_VTOL_LAND', '''Land using VTOL mode''') -enums['MAV_CMD'][85].param[1] = '''Empty''' -enums['MAV_CMD'][85].param[2] = '''Empty''' -enums['MAV_CMD'][85].param[3] = '''Empty''' -enums['MAV_CMD'][85].param[4] = '''Yaw angle in degrees''' -enums['MAV_CMD'][85].param[5] = '''Latitude''' -enums['MAV_CMD'][85].param[6] = '''Longitude''' -enums['MAV_CMD'][85].param[7] = '''Altitude''' -MAV_CMD_NAV_GUIDED_ENABLE = 92 # hand control over to an external controller -enums['MAV_CMD'][92] = EnumEntry('MAV_CMD_NAV_GUIDED_ENABLE', '''hand control over to an external controller''') -enums['MAV_CMD'][92].param[1] = '''On / Off (> 0.5f on)''' -enums['MAV_CMD'][92].param[2] = '''Empty''' -enums['MAV_CMD'][92].param[3] = '''Empty''' -enums['MAV_CMD'][92].param[4] = '''Empty''' -enums['MAV_CMD'][92].param[5] = '''Empty''' -enums['MAV_CMD'][92].param[6] = '''Empty''' -enums['MAV_CMD'][92].param[7] = '''Empty''' -MAV_CMD_NAV_DELAY = 93 # Delay the next navigation command a number of seconds or until a - # specified time -enums['MAV_CMD'][93] = EnumEntry('MAV_CMD_NAV_DELAY', '''Delay the next navigation command a number of seconds or until a specified time''') -enums['MAV_CMD'][93].param[1] = '''Delay in seconds (decimal, -1 to enable time-of-day fields)''' -enums['MAV_CMD'][93].param[2] = '''hour (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[3] = '''minute (24h format, UTC, -1 to ignore)''' -enums['MAV_CMD'][93].param[4] = '''second (24h format, UTC)''' -enums['MAV_CMD'][93].param[5] = '''Empty''' -enums['MAV_CMD'][93].param[6] = '''Empty''' -enums['MAV_CMD'][93].param[7] = '''Empty''' -MAV_CMD_NAV_LAST = 95 # NOP - This command is only used to mark the upper limit of the - # NAV/ACTION commands in the enumeration -enums['MAV_CMD'][95] = EnumEntry('MAV_CMD_NAV_LAST', '''NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration''') -enums['MAV_CMD'][95].param[1] = '''Empty''' -enums['MAV_CMD'][95].param[2] = '''Empty''' -enums['MAV_CMD'][95].param[3] = '''Empty''' -enums['MAV_CMD'][95].param[4] = '''Empty''' -enums['MAV_CMD'][95].param[5] = '''Empty''' -enums['MAV_CMD'][95].param[6] = '''Empty''' -enums['MAV_CMD'][95].param[7] = '''Empty''' -MAV_CMD_CONDITION_DELAY = 112 # Delay mission state machine. -enums['MAV_CMD'][112] = EnumEntry('MAV_CMD_CONDITION_DELAY', '''Delay mission state machine.''') -enums['MAV_CMD'][112].param[1] = '''Delay in seconds (decimal)''' -enums['MAV_CMD'][112].param[2] = '''Empty''' -enums['MAV_CMD'][112].param[3] = '''Empty''' -enums['MAV_CMD'][112].param[4] = '''Empty''' -enums['MAV_CMD'][112].param[5] = '''Empty''' -enums['MAV_CMD'][112].param[6] = '''Empty''' -enums['MAV_CMD'][112].param[7] = '''Empty''' -MAV_CMD_CONDITION_CHANGE_ALT = 113 # Ascend/descend at rate. Delay mission state machine until desired - # altitude reached. -enums['MAV_CMD'][113] = EnumEntry('MAV_CMD_CONDITION_CHANGE_ALT', '''Ascend/descend at rate. Delay mission state machine until desired altitude reached.''') -enums['MAV_CMD'][113].param[1] = '''Descent / Ascend rate (m/s)''' -enums['MAV_CMD'][113].param[2] = '''Empty''' -enums['MAV_CMD'][113].param[3] = '''Empty''' -enums['MAV_CMD'][113].param[4] = '''Empty''' -enums['MAV_CMD'][113].param[5] = '''Empty''' -enums['MAV_CMD'][113].param[6] = '''Empty''' -enums['MAV_CMD'][113].param[7] = '''Finish Altitude''' -MAV_CMD_CONDITION_DISTANCE = 114 # Delay mission state machine until within desired distance of next NAV - # point. -enums['MAV_CMD'][114] = EnumEntry('MAV_CMD_CONDITION_DISTANCE', '''Delay mission state machine until within desired distance of next NAV point.''') -enums['MAV_CMD'][114].param[1] = '''Distance (meters)''' -enums['MAV_CMD'][114].param[2] = '''Empty''' -enums['MAV_CMD'][114].param[3] = '''Empty''' -enums['MAV_CMD'][114].param[4] = '''Empty''' -enums['MAV_CMD'][114].param[5] = '''Empty''' -enums['MAV_CMD'][114].param[6] = '''Empty''' -enums['MAV_CMD'][114].param[7] = '''Empty''' -MAV_CMD_CONDITION_YAW = 115 # Reach a certain target angle. -enums['MAV_CMD'][115] = EnumEntry('MAV_CMD_CONDITION_YAW', '''Reach a certain target angle.''') -enums['MAV_CMD'][115].param[1] = '''target angle: [0-360], 0 is north''' -enums['MAV_CMD'][115].param[2] = '''speed during yaw change:[deg per second]''' -enums['MAV_CMD'][115].param[3] = '''direction: negative: counter clockwise, positive: clockwise [-1,1]''' -enums['MAV_CMD'][115].param[4] = '''relative offset or absolute angle: [ 1,0]''' -enums['MAV_CMD'][115].param[5] = '''Empty''' -enums['MAV_CMD'][115].param[6] = '''Empty''' -enums['MAV_CMD'][115].param[7] = '''Empty''' -MAV_CMD_CONDITION_LAST = 159 # NOP - This command is only used to mark the upper limit of the - # CONDITION commands in the enumeration -enums['MAV_CMD'][159] = EnumEntry('MAV_CMD_CONDITION_LAST', '''NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration''') -enums['MAV_CMD'][159].param[1] = '''Empty''' -enums['MAV_CMD'][159].param[2] = '''Empty''' -enums['MAV_CMD'][159].param[3] = '''Empty''' -enums['MAV_CMD'][159].param[4] = '''Empty''' -enums['MAV_CMD'][159].param[5] = '''Empty''' -enums['MAV_CMD'][159].param[6] = '''Empty''' -enums['MAV_CMD'][159].param[7] = '''Empty''' -MAV_CMD_DO_SET_MODE = 176 # Set system mode. -enums['MAV_CMD'][176] = EnumEntry('MAV_CMD_DO_SET_MODE', '''Set system mode.''') -enums['MAV_CMD'][176].param[1] = '''Mode, as defined by ENUM MAV_MODE''' -enums['MAV_CMD'][176].param[2] = '''Custom mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[3] = '''Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details.''' -enums['MAV_CMD'][176].param[4] = '''Empty''' -enums['MAV_CMD'][176].param[5] = '''Empty''' -enums['MAV_CMD'][176].param[6] = '''Empty''' -enums['MAV_CMD'][176].param[7] = '''Empty''' -MAV_CMD_DO_JUMP = 177 # Jump to the desired command in the mission list. Repeat this action - # only the specified number of times -enums['MAV_CMD'][177] = EnumEntry('MAV_CMD_DO_JUMP', '''Jump to the desired command in the mission list. Repeat this action only the specified number of times''') -enums['MAV_CMD'][177].param[1] = '''Sequence number''' -enums['MAV_CMD'][177].param[2] = '''Repeat count''' -enums['MAV_CMD'][177].param[3] = '''Empty''' -enums['MAV_CMD'][177].param[4] = '''Empty''' -enums['MAV_CMD'][177].param[5] = '''Empty''' -enums['MAV_CMD'][177].param[6] = '''Empty''' -enums['MAV_CMD'][177].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_SPEED = 178 # Change speed and/or throttle set points. -enums['MAV_CMD'][178] = EnumEntry('MAV_CMD_DO_CHANGE_SPEED', '''Change speed and/or throttle set points.''') -enums['MAV_CMD'][178].param[1] = '''Speed type (0=Airspeed, 1=Ground Speed)''' -enums['MAV_CMD'][178].param[2] = '''Speed (m/s, -1 indicates no change)''' -enums['MAV_CMD'][178].param[3] = '''Throttle ( Percent, -1 indicates no change)''' -enums['MAV_CMD'][178].param[4] = '''absolute or relative [0,1]''' -enums['MAV_CMD'][178].param[5] = '''Empty''' -enums['MAV_CMD'][178].param[6] = '''Empty''' -enums['MAV_CMD'][178].param[7] = '''Empty''' -MAV_CMD_DO_SET_HOME = 179 # Changes the home location either to the current location or a - # specified location. -enums['MAV_CMD'][179] = EnumEntry('MAV_CMD_DO_SET_HOME', '''Changes the home location either to the current location or a specified location.''') -enums['MAV_CMD'][179].param[1] = '''Use current (1=use current location, 0=use specified location)''' -enums['MAV_CMD'][179].param[2] = '''Empty''' -enums['MAV_CMD'][179].param[3] = '''Empty''' -enums['MAV_CMD'][179].param[4] = '''Empty''' -enums['MAV_CMD'][179].param[5] = '''Latitude''' -enums['MAV_CMD'][179].param[6] = '''Longitude''' -enums['MAV_CMD'][179].param[7] = '''Altitude''' -MAV_CMD_DO_SET_PARAMETER = 180 # Set a system parameter. Caution! Use of this command requires - # knowledge of the numeric enumeration value - # of the parameter. -enums['MAV_CMD'][180] = EnumEntry('MAV_CMD_DO_SET_PARAMETER', '''Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter.''') -enums['MAV_CMD'][180].param[1] = '''Parameter number''' -enums['MAV_CMD'][180].param[2] = '''Parameter value''' -enums['MAV_CMD'][180].param[3] = '''Empty''' -enums['MAV_CMD'][180].param[4] = '''Empty''' -enums['MAV_CMD'][180].param[5] = '''Empty''' -enums['MAV_CMD'][180].param[6] = '''Empty''' -enums['MAV_CMD'][180].param[7] = '''Empty''' -MAV_CMD_DO_SET_RELAY = 181 # Set a relay to a condition. -enums['MAV_CMD'][181] = EnumEntry('MAV_CMD_DO_SET_RELAY', '''Set a relay to a condition.''') -enums['MAV_CMD'][181].param[1] = '''Relay number''' -enums['MAV_CMD'][181].param[2] = '''Setting (1=on, 0=off, others possible depending on system hardware)''' -enums['MAV_CMD'][181].param[3] = '''Empty''' -enums['MAV_CMD'][181].param[4] = '''Empty''' -enums['MAV_CMD'][181].param[5] = '''Empty''' -enums['MAV_CMD'][181].param[6] = '''Empty''' -enums['MAV_CMD'][181].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_RELAY = 182 # Cycle a relay on and off for a desired number of cyles with a desired - # period. -enums['MAV_CMD'][182] = EnumEntry('MAV_CMD_DO_REPEAT_RELAY', '''Cycle a relay on and off for a desired number of cyles with a desired period.''') -enums['MAV_CMD'][182].param[1] = '''Relay number''' -enums['MAV_CMD'][182].param[2] = '''Cycle count''' -enums['MAV_CMD'][182].param[3] = '''Cycle time (seconds, decimal)''' -enums['MAV_CMD'][182].param[4] = '''Empty''' -enums['MAV_CMD'][182].param[5] = '''Empty''' -enums['MAV_CMD'][182].param[6] = '''Empty''' -enums['MAV_CMD'][182].param[7] = '''Empty''' -MAV_CMD_DO_SET_SERVO = 183 # Set a servo to a desired PWM value. -enums['MAV_CMD'][183] = EnumEntry('MAV_CMD_DO_SET_SERVO', '''Set a servo to a desired PWM value.''') -enums['MAV_CMD'][183].param[1] = '''Servo number''' -enums['MAV_CMD'][183].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][183].param[3] = '''Empty''' -enums['MAV_CMD'][183].param[4] = '''Empty''' -enums['MAV_CMD'][183].param[5] = '''Empty''' -enums['MAV_CMD'][183].param[6] = '''Empty''' -enums['MAV_CMD'][183].param[7] = '''Empty''' -MAV_CMD_DO_REPEAT_SERVO = 184 # Cycle a between its nominal setting and a desired PWM for a desired - # number of cycles with a desired period. -enums['MAV_CMD'][184] = EnumEntry('MAV_CMD_DO_REPEAT_SERVO', '''Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period.''') -enums['MAV_CMD'][184].param[1] = '''Servo number''' -enums['MAV_CMD'][184].param[2] = '''PWM (microseconds, 1000 to 2000 typical)''' -enums['MAV_CMD'][184].param[3] = '''Cycle count''' -enums['MAV_CMD'][184].param[4] = '''Cycle time (seconds)''' -enums['MAV_CMD'][184].param[5] = '''Empty''' -enums['MAV_CMD'][184].param[6] = '''Empty''' -enums['MAV_CMD'][184].param[7] = '''Empty''' -MAV_CMD_DO_FLIGHTTERMINATION = 185 # Terminate flight immediately -enums['MAV_CMD'][185] = EnumEntry('MAV_CMD_DO_FLIGHTTERMINATION', '''Terminate flight immediately''') -enums['MAV_CMD'][185].param[1] = '''Flight termination activated if > 0.5''' -enums['MAV_CMD'][185].param[2] = '''Empty''' -enums['MAV_CMD'][185].param[3] = '''Empty''' -enums['MAV_CMD'][185].param[4] = '''Empty''' -enums['MAV_CMD'][185].param[5] = '''Empty''' -enums['MAV_CMD'][185].param[6] = '''Empty''' -enums['MAV_CMD'][185].param[7] = '''Empty''' -MAV_CMD_DO_CHANGE_ALTITUDE = 186 # Change altitude set point. -enums['MAV_CMD'][186] = EnumEntry('MAV_CMD_DO_CHANGE_ALTITUDE', '''Change altitude set point.''') -enums['MAV_CMD'][186].param[1] = '''Altitude in meters''' -enums['MAV_CMD'][186].param[2] = '''Mav frame of new altitude (see MAV_FRAME)''' -enums['MAV_CMD'][186].param[3] = '''Empty''' -enums['MAV_CMD'][186].param[4] = '''Empty''' -enums['MAV_CMD'][186].param[5] = '''Empty''' -enums['MAV_CMD'][186].param[6] = '''Empty''' -enums['MAV_CMD'][186].param[7] = '''Empty''' -MAV_CMD_DO_LAND_START = 189 # Mission command to perform a landing. This is used as a marker in a - # mission to tell the autopilot where a - # sequence of mission items that represents a - # landing starts. It may also be sent via a - # COMMAND_LONG to trigger a landing, in which - # case the nearest (geographically) landing - # sequence in the mission will be used. The - # Latitude/Longitude is optional, and may be - # set to 0/0 if not needed. If specified then - # it will be used to help find the closest - # landing sequence. -enums['MAV_CMD'][189] = EnumEntry('MAV_CMD_DO_LAND_START', '''Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence.''') -enums['MAV_CMD'][189].param[1] = '''Empty''' -enums['MAV_CMD'][189].param[2] = '''Empty''' -enums['MAV_CMD'][189].param[3] = '''Empty''' -enums['MAV_CMD'][189].param[4] = '''Empty''' -enums['MAV_CMD'][189].param[5] = '''Latitude''' -enums['MAV_CMD'][189].param[6] = '''Longitude''' -enums['MAV_CMD'][189].param[7] = '''Empty''' -MAV_CMD_DO_RALLY_LAND = 190 # Mission command to perform a landing from a rally point. -enums['MAV_CMD'][190] = EnumEntry('MAV_CMD_DO_RALLY_LAND', '''Mission command to perform a landing from a rally point.''') -enums['MAV_CMD'][190].param[1] = '''Break altitude (meters)''' -enums['MAV_CMD'][190].param[2] = '''Landing speed (m/s)''' -enums['MAV_CMD'][190].param[3] = '''Empty''' -enums['MAV_CMD'][190].param[4] = '''Empty''' -enums['MAV_CMD'][190].param[5] = '''Empty''' -enums['MAV_CMD'][190].param[6] = '''Empty''' -enums['MAV_CMD'][190].param[7] = '''Empty''' -MAV_CMD_DO_GO_AROUND = 191 # Mission command to safely abort an autonmous landing. -enums['MAV_CMD'][191] = EnumEntry('MAV_CMD_DO_GO_AROUND', '''Mission command to safely abort an autonmous landing.''') -enums['MAV_CMD'][191].param[1] = '''Altitude (meters)''' -enums['MAV_CMD'][191].param[2] = '''Empty''' -enums['MAV_CMD'][191].param[3] = '''Empty''' -enums['MAV_CMD'][191].param[4] = '''Empty''' -enums['MAV_CMD'][191].param[5] = '''Empty''' -enums['MAV_CMD'][191].param[6] = '''Empty''' -enums['MAV_CMD'][191].param[7] = '''Empty''' -MAV_CMD_DO_REPOSITION = 192 # Reposition the vehicle to a specific WGS84 global position. -enums['MAV_CMD'][192] = EnumEntry('MAV_CMD_DO_REPOSITION', '''Reposition the vehicle to a specific WGS84 global position.''') -enums['MAV_CMD'][192].param[1] = '''Ground speed, less than 0 (-1) for default''' -enums['MAV_CMD'][192].param[2] = '''Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum.''' -enums['MAV_CMD'][192].param[3] = '''Reserved''' -enums['MAV_CMD'][192].param[4] = '''Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise)''' -enums['MAV_CMD'][192].param[5] = '''Latitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[6] = '''Longitude (deg * 1E7)''' -enums['MAV_CMD'][192].param[7] = '''Altitude (meters)''' -MAV_CMD_DO_PAUSE_CONTINUE = 193 # If in a GPS controlled position mode, hold the current position or - # continue. -enums['MAV_CMD'][193] = EnumEntry('MAV_CMD_DO_PAUSE_CONTINUE', '''If in a GPS controlled position mode, hold the current position or continue.''') -enums['MAV_CMD'][193].param[1] = '''0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius.''' -enums['MAV_CMD'][193].param[2] = '''Reserved''' -enums['MAV_CMD'][193].param[3] = '''Reserved''' -enums['MAV_CMD'][193].param[4] = '''Reserved''' -enums['MAV_CMD'][193].param[5] = '''Reserved''' -enums['MAV_CMD'][193].param[6] = '''Reserved''' -enums['MAV_CMD'][193].param[7] = '''Reserved''' -MAV_CMD_DO_SET_REVERSE = 194 # Set moving direction to forward or reverse. -enums['MAV_CMD'][194] = EnumEntry('MAV_CMD_DO_SET_REVERSE', '''Set moving direction to forward or reverse.''') -enums['MAV_CMD'][194].param[1] = '''Direction (0=Forward, 1=Reverse)''' -enums['MAV_CMD'][194].param[2] = '''Empty''' -enums['MAV_CMD'][194].param[3] = '''Empty''' -enums['MAV_CMD'][194].param[4] = '''Empty''' -enums['MAV_CMD'][194].param[5] = '''Empty''' -enums['MAV_CMD'][194].param[6] = '''Empty''' -enums['MAV_CMD'][194].param[7] = '''Empty''' -MAV_CMD_DO_CONTROL_VIDEO = 200 # Control onboard camera system. -enums['MAV_CMD'][200] = EnumEntry('MAV_CMD_DO_CONTROL_VIDEO', '''Control onboard camera system.''') -enums['MAV_CMD'][200].param[1] = '''Camera ID (-1 for all)''' -enums['MAV_CMD'][200].param[2] = '''Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[3] = '''Transmission mode: 0: video stream, >0: single images every n seconds (decimal)''' -enums['MAV_CMD'][200].param[4] = '''Recording: 0: disabled, 1: enabled compressed, 2: enabled raw''' -enums['MAV_CMD'][200].param[5] = '''Empty''' -enums['MAV_CMD'][200].param[6] = '''Empty''' -enums['MAV_CMD'][200].param[7] = '''Empty''' -MAV_CMD_DO_SET_ROI = 201 # Sets the region of interest (ROI) for a sensor set or the vehicle - # itself. This can then be used by the - # vehicles control system to control the - # vehicle attitude and the attitude of various - # sensors such as cameras. -enums['MAV_CMD'][201] = EnumEntry('MAV_CMD_DO_SET_ROI', '''Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras.''') -enums['MAV_CMD'][201].param[1] = '''Region of intereset mode. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[2] = '''MISSION index/ target ID. (see MAV_ROI enum)''' -enums['MAV_CMD'][201].param[3] = '''ROI index (allows a vehicle to manage multiple ROI's)''' -enums['MAV_CMD'][201].param[4] = '''Empty''' -enums['MAV_CMD'][201].param[5] = '''x the location of the fixed ROI (see MAV_FRAME)''' -enums['MAV_CMD'][201].param[6] = '''y''' -enums['MAV_CMD'][201].param[7] = '''z''' -MAV_CMD_DO_DIGICAM_CONFIGURE = 202 # Mission command to configure an on-board camera controller system. -enums['MAV_CMD'][202] = EnumEntry('MAV_CMD_DO_DIGICAM_CONFIGURE', '''Mission command to configure an on-board camera controller system.''') -enums['MAV_CMD'][202].param[1] = '''Modes: P, TV, AV, M, Etc''' -enums['MAV_CMD'][202].param[2] = '''Shutter speed: Divisor number for one second''' -enums['MAV_CMD'][202].param[3] = '''Aperture: F stop number''' -enums['MAV_CMD'][202].param[4] = '''ISO number e.g. 80, 100, 200, Etc''' -enums['MAV_CMD'][202].param[5] = '''Exposure type enumerator''' -enums['MAV_CMD'][202].param[6] = '''Command Identity''' -enums['MAV_CMD'][202].param[7] = '''Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off)''' -MAV_CMD_DO_DIGICAM_CONTROL = 203 # Mission command to control an on-board camera controller system. -enums['MAV_CMD'][203] = EnumEntry('MAV_CMD_DO_DIGICAM_CONTROL', '''Mission command to control an on-board camera controller system.''') -enums['MAV_CMD'][203].param[1] = '''Session control e.g. show/hide lens''' -enums['MAV_CMD'][203].param[2] = '''Zoom's absolute position''' -enums['MAV_CMD'][203].param[3] = '''Zooming step value to offset zoom from the current position''' -enums['MAV_CMD'][203].param[4] = '''Focus Locking, Unlocking or Re-locking''' -enums['MAV_CMD'][203].param[5] = '''Shooting Command''' -enums['MAV_CMD'][203].param[6] = '''Command Identity''' -enums['MAV_CMD'][203].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONFIGURE = 204 # Mission command to configure a camera or antenna mount -enums['MAV_CMD'][204] = EnumEntry('MAV_CMD_DO_MOUNT_CONFIGURE', '''Mission command to configure a camera or antenna mount''') -enums['MAV_CMD'][204].param[1] = '''Mount operation mode (see MAV_MOUNT_MODE enum)''' -enums['MAV_CMD'][204].param[2] = '''stabilize roll? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[3] = '''stabilize pitch? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[4] = '''stabilize yaw? (1 = yes, 0 = no)''' -enums['MAV_CMD'][204].param[5] = '''Empty''' -enums['MAV_CMD'][204].param[6] = '''Empty''' -enums['MAV_CMD'][204].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL = 205 # Mission command to control a camera or antenna mount -enums['MAV_CMD'][205] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL', '''Mission command to control a camera or antenna mount''') -enums['MAV_CMD'][205].param[1] = '''pitch or lat in degrees, depending on mount mode.''' -enums['MAV_CMD'][205].param[2] = '''roll or lon in degrees depending on mount mode''' -enums['MAV_CMD'][205].param[3] = '''yaw or alt (in meters) depending on mount mode''' -enums['MAV_CMD'][205].param[4] = '''reserved''' -enums['MAV_CMD'][205].param[5] = '''reserved''' -enums['MAV_CMD'][205].param[6] = '''reserved''' -enums['MAV_CMD'][205].param[7] = '''MAV_MOUNT_MODE enum value''' -MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 # Mission command to set CAM_TRIGG_DIST for this flight -enums['MAV_CMD'][206] = EnumEntry('MAV_CMD_DO_SET_CAM_TRIGG_DIST', '''Mission command to set CAM_TRIGG_DIST for this flight''') -enums['MAV_CMD'][206].param[1] = '''Camera trigger distance (meters)''' -enums['MAV_CMD'][206].param[2] = '''Empty''' -enums['MAV_CMD'][206].param[3] = '''Empty''' -enums['MAV_CMD'][206].param[4] = '''Empty''' -enums['MAV_CMD'][206].param[5] = '''Empty''' -enums['MAV_CMD'][206].param[6] = '''Empty''' -enums['MAV_CMD'][206].param[7] = '''Empty''' -MAV_CMD_DO_FENCE_ENABLE = 207 # Mission command to enable the geofence -enums['MAV_CMD'][207] = EnumEntry('MAV_CMD_DO_FENCE_ENABLE', '''Mission command to enable the geofence''') -enums['MAV_CMD'][207].param[1] = '''enable? (0=disable, 1=enable, 2=disable_floor_only)''' -enums['MAV_CMD'][207].param[2] = '''Empty''' -enums['MAV_CMD'][207].param[3] = '''Empty''' -enums['MAV_CMD'][207].param[4] = '''Empty''' -enums['MAV_CMD'][207].param[5] = '''Empty''' -enums['MAV_CMD'][207].param[6] = '''Empty''' -enums['MAV_CMD'][207].param[7] = '''Empty''' -MAV_CMD_DO_PARACHUTE = 208 # Mission command to trigger a parachute -enums['MAV_CMD'][208] = EnumEntry('MAV_CMD_DO_PARACHUTE', '''Mission command to trigger a parachute''') -enums['MAV_CMD'][208].param[1] = '''action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.)''' -enums['MAV_CMD'][208].param[2] = '''Empty''' -enums['MAV_CMD'][208].param[3] = '''Empty''' -enums['MAV_CMD'][208].param[4] = '''Empty''' -enums['MAV_CMD'][208].param[5] = '''Empty''' -enums['MAV_CMD'][208].param[6] = '''Empty''' -enums['MAV_CMD'][208].param[7] = '''Empty''' -MAV_CMD_DO_MOTOR_TEST = 209 # Mission command to perform motor test -enums['MAV_CMD'][209] = EnumEntry('MAV_CMD_DO_MOTOR_TEST', '''Mission command to perform motor test''') -enums['MAV_CMD'][209].param[1] = '''motor sequence number (a number from 1 to max number of motors on the vehicle)''' -enums['MAV_CMD'][209].param[2] = '''throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum)''' -enums['MAV_CMD'][209].param[3] = '''throttle''' -enums['MAV_CMD'][209].param[4] = '''timeout (in seconds)''' -enums['MAV_CMD'][209].param[5] = '''Empty''' -enums['MAV_CMD'][209].param[6] = '''Empty''' -enums['MAV_CMD'][209].param[7] = '''Empty''' -MAV_CMD_DO_INVERTED_FLIGHT = 210 # Change to/from inverted flight -enums['MAV_CMD'][210] = EnumEntry('MAV_CMD_DO_INVERTED_FLIGHT', '''Change to/from inverted flight''') -enums['MAV_CMD'][210].param[1] = '''inverted (0=normal, 1=inverted)''' -enums['MAV_CMD'][210].param[2] = '''Empty''' -enums['MAV_CMD'][210].param[3] = '''Empty''' -enums['MAV_CMD'][210].param[4] = '''Empty''' -enums['MAV_CMD'][210].param[5] = '''Empty''' -enums['MAV_CMD'][210].param[6] = '''Empty''' -enums['MAV_CMD'][210].param[7] = '''Empty''' -MAV_CMD_DO_SET_POSITION_YAW_THRUST = 213 # Sets a desired vehicle turn angle and thrust change -enums['MAV_CMD'][213] = EnumEntry('MAV_CMD_DO_SET_POSITION_YAW_THRUST', '''Sets a desired vehicle turn angle and thrust change''') -enums['MAV_CMD'][213].param[1] = '''yaw angle to adjust steering by in centidegress''' -enums['MAV_CMD'][213].param[2] = '''Thrust - normalized to -2 .. 2''' -enums['MAV_CMD'][213].param[3] = '''Empty''' -enums['MAV_CMD'][213].param[4] = '''Empty''' -enums['MAV_CMD'][213].param[5] = '''Empty''' -enums['MAV_CMD'][213].param[6] = '''Empty''' -enums['MAV_CMD'][213].param[7] = '''Empty''' -MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 # Mission command to control a camera or antenna mount, using a - # quaternion as reference. -enums['MAV_CMD'][220] = EnumEntry('MAV_CMD_DO_MOUNT_CONTROL_QUAT', '''Mission command to control a camera or antenna mount, using a quaternion as reference.''') -enums['MAV_CMD'][220].param[1] = '''q1 - quaternion param #1, w (1 in null-rotation)''' -enums['MAV_CMD'][220].param[2] = '''q2 - quaternion param #2, x (0 in null-rotation)''' -enums['MAV_CMD'][220].param[3] = '''q3 - quaternion param #3, y (0 in null-rotation)''' -enums['MAV_CMD'][220].param[4] = '''q4 - quaternion param #4, z (0 in null-rotation)''' -enums['MAV_CMD'][220].param[5] = '''Empty''' -enums['MAV_CMD'][220].param[6] = '''Empty''' -enums['MAV_CMD'][220].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_MASTER = 221 # set id of master controller -enums['MAV_CMD'][221] = EnumEntry('MAV_CMD_DO_GUIDED_MASTER', '''set id of master controller''') -enums['MAV_CMD'][221].param[1] = '''System ID''' -enums['MAV_CMD'][221].param[2] = '''Component ID''' -enums['MAV_CMD'][221].param[3] = '''Empty''' -enums['MAV_CMD'][221].param[4] = '''Empty''' -enums['MAV_CMD'][221].param[5] = '''Empty''' -enums['MAV_CMD'][221].param[6] = '''Empty''' -enums['MAV_CMD'][221].param[7] = '''Empty''' -MAV_CMD_DO_GUIDED_LIMITS = 222 # set limits for external control -enums['MAV_CMD'][222] = EnumEntry('MAV_CMD_DO_GUIDED_LIMITS', '''set limits for external control''') -enums['MAV_CMD'][222].param[1] = '''timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout''' -enums['MAV_CMD'][222].param[2] = '''absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit''' -enums['MAV_CMD'][222].param[3] = '''absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit''' -enums['MAV_CMD'][222].param[4] = '''horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit''' -enums['MAV_CMD'][222].param[5] = '''Empty''' -enums['MAV_CMD'][222].param[6] = '''Empty''' -enums['MAV_CMD'][222].param[7] = '''Empty''' -MAV_CMD_DO_ENGINE_CONTROL = 223 # Control vehicle engine. This is interpreted by the vehicles engine - # controller to change the target engine - # state. It is intended for vehicles with - # internal combustion engines -enums['MAV_CMD'][223] = EnumEntry('MAV_CMD_DO_ENGINE_CONTROL', '''Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines''') -enums['MAV_CMD'][223].param[1] = '''0: Stop engine, 1:Start Engine''' -enums['MAV_CMD'][223].param[2] = '''0: Warm start, 1:Cold start. Controls use of choke where applicable''' -enums['MAV_CMD'][223].param[3] = '''Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay.''' -enums['MAV_CMD'][223].param[4] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[5] = '''Empty''' -enums['MAV_CMD'][223].param[6] = '''Empty''' -enums['MAV_CMD'][223].param[7] = '''Empty''' -MAV_CMD_DO_LAST = 240 # NOP - This command is only used to mark the upper limit of the DO - # commands in the enumeration -enums['MAV_CMD'][240] = EnumEntry('MAV_CMD_DO_LAST', '''NOP - This command is only used to mark the upper limit of the DO commands in the enumeration''') -enums['MAV_CMD'][240].param[1] = '''Empty''' -enums['MAV_CMD'][240].param[2] = '''Empty''' -enums['MAV_CMD'][240].param[3] = '''Empty''' -enums['MAV_CMD'][240].param[4] = '''Empty''' -enums['MAV_CMD'][240].param[5] = '''Empty''' -enums['MAV_CMD'][240].param[6] = '''Empty''' -enums['MAV_CMD'][240].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_CALIBRATION = 241 # Trigger calibration. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][241] = EnumEntry('MAV_CMD_PREFLIGHT_CALIBRATION', '''Trigger calibration. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][241].param[1] = '''Gyro calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[2] = '''Magnetometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[3] = '''Ground pressure: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[4] = '''Radio calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[5] = '''Accelerometer calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[6] = '''Compass/Motor interference calibration: 0: no, 1: yes''' -enums['MAV_CMD'][241].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 # Set sensor offsets. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][242] = EnumEntry('MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS', '''Set sensor offsets. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][242].param[1] = '''Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer''' -enums['MAV_CMD'][242].param[2] = '''X axis offset (or generic dimension 1), in the sensor's raw units''' -enums['MAV_CMD'][242].param[3] = '''Y axis offset (or generic dimension 2), in the sensor's raw units''' -enums['MAV_CMD'][242].param[4] = '''Z axis offset (or generic dimension 3), in the sensor's raw units''' -enums['MAV_CMD'][242].param[5] = '''Generic dimension 4, in the sensor's raw units''' -enums['MAV_CMD'][242].param[6] = '''Generic dimension 5, in the sensor's raw units''' -enums['MAV_CMD'][242].param[7] = '''Generic dimension 6, in the sensor's raw units''' -MAV_CMD_PREFLIGHT_UAVCAN = 243 # Trigger UAVCAN config. This command will be only accepted if in pre- - # flight mode. -enums['MAV_CMD'][243] = EnumEntry('MAV_CMD_PREFLIGHT_UAVCAN', '''Trigger UAVCAN config. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][243].param[1] = '''1: Trigger actuator ID assignment and direction mapping.''' -enums['MAV_CMD'][243].param[2] = '''Reserved''' -enums['MAV_CMD'][243].param[3] = '''Reserved''' -enums['MAV_CMD'][243].param[4] = '''Reserved''' -enums['MAV_CMD'][243].param[5] = '''Reserved''' -enums['MAV_CMD'][243].param[6] = '''Reserved''' -enums['MAV_CMD'][243].param[7] = '''Reserved''' -MAV_CMD_PREFLIGHT_STORAGE = 245 # Request storage of different parameter values and logs. This command - # will be only accepted if in pre-flight mode. -enums['MAV_CMD'][245] = EnumEntry('MAV_CMD_PREFLIGHT_STORAGE', '''Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode.''') -enums['MAV_CMD'][245].param[1] = '''Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[2] = '''Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults''' -enums['MAV_CMD'][245].param[3] = '''Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging)''' -enums['MAV_CMD'][245].param[4] = '''Reserved''' -enums['MAV_CMD'][245].param[5] = '''Empty''' -enums['MAV_CMD'][245].param[6] = '''Empty''' -enums['MAV_CMD'][245].param[7] = '''Empty''' -MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 # Request the reboot or shutdown of system components. -enums['MAV_CMD'][246] = EnumEntry('MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN', '''Request the reboot or shutdown of system components.''') -enums['MAV_CMD'][246].param[1] = '''0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[2] = '''0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded.''' -enums['MAV_CMD'][246].param[3] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[4] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[5] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[6] = '''Reserved, send 0''' -enums['MAV_CMD'][246].param[7] = '''Reserved, send 0''' -MAV_CMD_OVERRIDE_GOTO = 252 # Hold / continue the current action -enums['MAV_CMD'][252] = EnumEntry('MAV_CMD_OVERRIDE_GOTO', '''Hold / continue the current action''') -enums['MAV_CMD'][252].param[1] = '''MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan''' -enums['MAV_CMD'][252].param[2] = '''MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position''' -enums['MAV_CMD'][252].param[3] = '''MAV_FRAME coordinate frame of hold point''' -enums['MAV_CMD'][252].param[4] = '''Desired yaw angle in degrees''' -enums['MAV_CMD'][252].param[5] = '''Latitude / X position''' -enums['MAV_CMD'][252].param[6] = '''Longitude / Y position''' -enums['MAV_CMD'][252].param[7] = '''Altitude / Z position''' -MAV_CMD_MISSION_START = 300 # start running a mission -enums['MAV_CMD'][300] = EnumEntry('MAV_CMD_MISSION_START', '''start running a mission''') -enums['MAV_CMD'][300].param[1] = '''first_item: the first mission item to run''' -enums['MAV_CMD'][300].param[2] = '''last_item: the last mission item to run (after this item is run, the mission ends)''' -MAV_CMD_COMPONENT_ARM_DISARM = 400 # Arms / Disarms a component -enums['MAV_CMD'][400] = EnumEntry('MAV_CMD_COMPONENT_ARM_DISARM', '''Arms / Disarms a component''') -enums['MAV_CMD'][400].param[1] = '''1 to arm, 0 to disarm''' -MAV_CMD_GET_HOME_POSITION = 410 # Request the home position from the vehicle. -enums['MAV_CMD'][410] = EnumEntry('MAV_CMD_GET_HOME_POSITION', '''Request the home position from the vehicle.''') -enums['MAV_CMD'][410].param[1] = '''Reserved''' -enums['MAV_CMD'][410].param[2] = '''Reserved''' -enums['MAV_CMD'][410].param[3] = '''Reserved''' -enums['MAV_CMD'][410].param[4] = '''Reserved''' -enums['MAV_CMD'][410].param[5] = '''Reserved''' -enums['MAV_CMD'][410].param[6] = '''Reserved''' -enums['MAV_CMD'][410].param[7] = '''Reserved''' -MAV_CMD_START_RX_PAIR = 500 # Starts receiver pairing -enums['MAV_CMD'][500] = EnumEntry('MAV_CMD_START_RX_PAIR', '''Starts receiver pairing''') -enums['MAV_CMD'][500].param[1] = '''0:Spektrum''' -enums['MAV_CMD'][500].param[2] = '''0:Spektrum DSM2, 1:Spektrum DSMX''' -MAV_CMD_GET_MESSAGE_INTERVAL = 510 # Request the interval between messages for a particular MAVLink message - # ID -enums['MAV_CMD'][510] = EnumEntry('MAV_CMD_GET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID''') -enums['MAV_CMD'][510].param[1] = '''The MAVLink message ID''' -MAV_CMD_SET_MESSAGE_INTERVAL = 511 # Request the interval between messages for a particular MAVLink message - # ID. This interface replaces - # REQUEST_DATA_STREAM -enums['MAV_CMD'][511] = EnumEntry('MAV_CMD_SET_MESSAGE_INTERVAL', '''Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM''') -enums['MAV_CMD'][511].param[1] = '''The MAVLink message ID''' -enums['MAV_CMD'][511].param[2] = '''The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate.''' -MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 # Request autopilot capabilities -enums['MAV_CMD'][520] = EnumEntry('MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES', '''Request autopilot capabilities''') -enums['MAV_CMD'][520].param[1] = '''1: Request autopilot version''' -enums['MAV_CMD'][520].param[2] = '''Reserved (all remaining params)''' -MAV_CMD_IMAGE_START_CAPTURE = 2000 # Start image capture sequence -enums['MAV_CMD'][2000] = EnumEntry('MAV_CMD_IMAGE_START_CAPTURE', '''Start image capture sequence''') -enums['MAV_CMD'][2000].param[1] = '''Duration between two consecutive pictures (in seconds)''' -enums['MAV_CMD'][2000].param[2] = '''Number of images to capture total - 0 for unlimited capture''' -enums['MAV_CMD'][2000].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_IMAGE_STOP_CAPTURE = 2001 # Stop image capture sequence -enums['MAV_CMD'][2001] = EnumEntry('MAV_CMD_IMAGE_STOP_CAPTURE', '''Stop image capture sequence''') -enums['MAV_CMD'][2001].param[1] = '''Reserved''' -enums['MAV_CMD'][2001].param[2] = '''Reserved''' -MAV_CMD_DO_TRIGGER_CONTROL = 2003 # Enable or disable on-board camera triggering system. -enums['MAV_CMD'][2003] = EnumEntry('MAV_CMD_DO_TRIGGER_CONTROL', '''Enable or disable on-board camera triggering system.''') -enums['MAV_CMD'][2003].param[1] = '''Trigger enable/disable (0 for disable, 1 for start)''' -enums['MAV_CMD'][2003].param[2] = '''Shutter integration time (in ms)''' -enums['MAV_CMD'][2003].param[3] = '''Reserved''' -MAV_CMD_VIDEO_START_CAPTURE = 2500 # Starts video capture -enums['MAV_CMD'][2500] = EnumEntry('MAV_CMD_VIDEO_START_CAPTURE', '''Starts video capture''') -enums['MAV_CMD'][2500].param[1] = '''Camera ID (0 for all cameras), 1 for first, 2 for second, etc.''' -enums['MAV_CMD'][2500].param[2] = '''Frames per second''' -enums['MAV_CMD'][2500].param[3] = '''Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc)''' -MAV_CMD_VIDEO_STOP_CAPTURE = 2501 # Stop the current video capture -enums['MAV_CMD'][2501] = EnumEntry('MAV_CMD_VIDEO_STOP_CAPTURE', '''Stop the current video capture''') -enums['MAV_CMD'][2501].param[1] = '''Reserved''' -enums['MAV_CMD'][2501].param[2] = '''Reserved''' -MAV_CMD_PANORAMA_CREATE = 2800 # Create a panorama at the current position -enums['MAV_CMD'][2800] = EnumEntry('MAV_CMD_PANORAMA_CREATE', '''Create a panorama at the current position''') -enums['MAV_CMD'][2800].param[1] = '''Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle)''' -enums['MAV_CMD'][2800].param[2] = '''Viewing angle vertical of panorama (in degrees)''' -enums['MAV_CMD'][2800].param[3] = '''Speed of the horizontal rotation (in degrees per second)''' -enums['MAV_CMD'][2800].param[4] = '''Speed of the vertical rotation (in degrees per second)''' -MAV_CMD_DO_VTOL_TRANSITION = 3000 # Request VTOL transition -enums['MAV_CMD'][3000] = EnumEntry('MAV_CMD_DO_VTOL_TRANSITION', '''Request VTOL transition''') -enums['MAV_CMD'][3000].param[1] = '''The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used.''' -MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 # This command sets the submode to standard guided when vehicle is in - # guided mode. The vehicle holds position and - # altitude and the user can input the desired - # velocites along all three axes. -enums['MAV_CMD'][4000] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_STANDARD', '''This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - ''') -MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 # This command sets submode circle when vehicle is in guided mode. - # Vehicle flies along a circle facing the - # center of the circle. The user can input the - # velocity along the circle and change the - # radius. If no input is given the vehicle - # will hold position. -enums['MAV_CMD'][4001] = EnumEntry('MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE', '''This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - ''') -enums['MAV_CMD'][4001].param[1] = '''Radius of desired circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[2] = '''User defined''' -enums['MAV_CMD'][4001].param[3] = '''User defined''' -enums['MAV_CMD'][4001].param[4] = '''User defined''' -enums['MAV_CMD'][4001].param[5] = '''Unscaled target latitude of center of circle in CIRCLE_MODE''' -enums['MAV_CMD'][4001].param[6] = '''Unscaled target longitude of center of circle in CIRCLE_MODE''' -MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 # Deploy payload on a Lat / Lon / Alt position. This includes the - # navigation to reach the required release - # position and velocity. -enums['MAV_CMD'][30001] = EnumEntry('MAV_CMD_PAYLOAD_PREPARE_DEPLOY', '''Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity.''') -enums['MAV_CMD'][30001].param[1] = '''Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list.''' -enums['MAV_CMD'][30001].param[2] = '''Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will.''' -enums['MAV_CMD'][30001].param[3] = '''Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will.''' -enums['MAV_CMD'][30001].param[4] = '''Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will.''' -enums['MAV_CMD'][30001].param[5] = '''Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[6] = '''Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT''' -enums['MAV_CMD'][30001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 # Control the payload deployment. -enums['MAV_CMD'][30002] = EnumEntry('MAV_CMD_PAYLOAD_CONTROL_DEPLOY', '''Control the payload deployment.''') -enums['MAV_CMD'][30002].param[1] = '''Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests.''' -enums['MAV_CMD'][30002].param[2] = '''Reserved''' -enums['MAV_CMD'][30002].param[3] = '''Reserved''' -enums['MAV_CMD'][30002].param[4] = '''Reserved''' -enums['MAV_CMD'][30002].param[5] = '''Reserved''' -enums['MAV_CMD'][30002].param[6] = '''Reserved''' -enums['MAV_CMD'][30002].param[7] = '''Reserved''' -MAV_CMD_WAYPOINT_USER_1 = 31000 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31000] = EnumEntry('MAV_CMD_WAYPOINT_USER_1', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31000].param[1] = '''User defined''' -enums['MAV_CMD'][31000].param[2] = '''User defined''' -enums['MAV_CMD'][31000].param[3] = '''User defined''' -enums['MAV_CMD'][31000].param[4] = '''User defined''' -enums['MAV_CMD'][31000].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31000].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31000].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_2 = 31001 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31001] = EnumEntry('MAV_CMD_WAYPOINT_USER_2', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31001].param[1] = '''User defined''' -enums['MAV_CMD'][31001].param[2] = '''User defined''' -enums['MAV_CMD'][31001].param[3] = '''User defined''' -enums['MAV_CMD'][31001].param[4] = '''User defined''' -enums['MAV_CMD'][31001].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31001].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31001].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_3 = 31002 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31002] = EnumEntry('MAV_CMD_WAYPOINT_USER_3', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31002].param[1] = '''User defined''' -enums['MAV_CMD'][31002].param[2] = '''User defined''' -enums['MAV_CMD'][31002].param[3] = '''User defined''' -enums['MAV_CMD'][31002].param[4] = '''User defined''' -enums['MAV_CMD'][31002].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31002].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31002].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_4 = 31003 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31003] = EnumEntry('MAV_CMD_WAYPOINT_USER_4', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31003].param[1] = '''User defined''' -enums['MAV_CMD'][31003].param[2] = '''User defined''' -enums['MAV_CMD'][31003].param[3] = '''User defined''' -enums['MAV_CMD'][31003].param[4] = '''User defined''' -enums['MAV_CMD'][31003].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31003].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31003].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_WAYPOINT_USER_5 = 31004 # User defined waypoint item. Ground Station will show the Vehicle as - # flying through this item. -enums['MAV_CMD'][31004] = EnumEntry('MAV_CMD_WAYPOINT_USER_5', '''User defined waypoint item. Ground Station will show the Vehicle as flying through this item.''') -enums['MAV_CMD'][31004].param[1] = '''User defined''' -enums['MAV_CMD'][31004].param[2] = '''User defined''' -enums['MAV_CMD'][31004].param[3] = '''User defined''' -enums['MAV_CMD'][31004].param[4] = '''User defined''' -enums['MAV_CMD'][31004].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31004].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31004].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_1 = 31005 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31005] = EnumEntry('MAV_CMD_SPATIAL_USER_1', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31005].param[1] = '''User defined''' -enums['MAV_CMD'][31005].param[2] = '''User defined''' -enums['MAV_CMD'][31005].param[3] = '''User defined''' -enums['MAV_CMD'][31005].param[4] = '''User defined''' -enums['MAV_CMD'][31005].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31005].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31005].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_2 = 31006 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31006] = EnumEntry('MAV_CMD_SPATIAL_USER_2', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31006].param[1] = '''User defined''' -enums['MAV_CMD'][31006].param[2] = '''User defined''' -enums['MAV_CMD'][31006].param[3] = '''User defined''' -enums['MAV_CMD'][31006].param[4] = '''User defined''' -enums['MAV_CMD'][31006].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31006].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31006].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_3 = 31007 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31007] = EnumEntry('MAV_CMD_SPATIAL_USER_3', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31007].param[1] = '''User defined''' -enums['MAV_CMD'][31007].param[2] = '''User defined''' -enums['MAV_CMD'][31007].param[3] = '''User defined''' -enums['MAV_CMD'][31007].param[4] = '''User defined''' -enums['MAV_CMD'][31007].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31007].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31007].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_4 = 31008 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31008] = EnumEntry('MAV_CMD_SPATIAL_USER_4', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31008].param[1] = '''User defined''' -enums['MAV_CMD'][31008].param[2] = '''User defined''' -enums['MAV_CMD'][31008].param[3] = '''User defined''' -enums['MAV_CMD'][31008].param[4] = '''User defined''' -enums['MAV_CMD'][31008].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31008].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31008].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_SPATIAL_USER_5 = 31009 # User defined spatial item. Ground Station will not show the Vehicle as - # flying through this item. Example: ROI item. -enums['MAV_CMD'][31009] = EnumEntry('MAV_CMD_SPATIAL_USER_5', '''User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item.''') -enums['MAV_CMD'][31009].param[1] = '''User defined''' -enums['MAV_CMD'][31009].param[2] = '''User defined''' -enums['MAV_CMD'][31009].param[3] = '''User defined''' -enums['MAV_CMD'][31009].param[4] = '''User defined''' -enums['MAV_CMD'][31009].param[5] = '''Latitude unscaled''' -enums['MAV_CMD'][31009].param[6] = '''Longitude unscaled''' -enums['MAV_CMD'][31009].param[7] = '''Altitude, in meters AMSL''' -MAV_CMD_USER_1 = 31010 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31010] = EnumEntry('MAV_CMD_USER_1', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31010].param[1] = '''User defined''' -enums['MAV_CMD'][31010].param[2] = '''User defined''' -enums['MAV_CMD'][31010].param[3] = '''User defined''' -enums['MAV_CMD'][31010].param[4] = '''User defined''' -enums['MAV_CMD'][31010].param[5] = '''User defined''' -enums['MAV_CMD'][31010].param[6] = '''User defined''' -enums['MAV_CMD'][31010].param[7] = '''User defined''' -MAV_CMD_USER_2 = 31011 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31011] = EnumEntry('MAV_CMD_USER_2', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31011].param[1] = '''User defined''' -enums['MAV_CMD'][31011].param[2] = '''User defined''' -enums['MAV_CMD'][31011].param[3] = '''User defined''' -enums['MAV_CMD'][31011].param[4] = '''User defined''' -enums['MAV_CMD'][31011].param[5] = '''User defined''' -enums['MAV_CMD'][31011].param[6] = '''User defined''' -enums['MAV_CMD'][31011].param[7] = '''User defined''' -MAV_CMD_USER_3 = 31012 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31012] = EnumEntry('MAV_CMD_USER_3', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31012].param[1] = '''User defined''' -enums['MAV_CMD'][31012].param[2] = '''User defined''' -enums['MAV_CMD'][31012].param[3] = '''User defined''' -enums['MAV_CMD'][31012].param[4] = '''User defined''' -enums['MAV_CMD'][31012].param[5] = '''User defined''' -enums['MAV_CMD'][31012].param[6] = '''User defined''' -enums['MAV_CMD'][31012].param[7] = '''User defined''' -MAV_CMD_USER_4 = 31013 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31013] = EnumEntry('MAV_CMD_USER_4', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31013].param[1] = '''User defined''' -enums['MAV_CMD'][31013].param[2] = '''User defined''' -enums['MAV_CMD'][31013].param[3] = '''User defined''' -enums['MAV_CMD'][31013].param[4] = '''User defined''' -enums['MAV_CMD'][31013].param[5] = '''User defined''' -enums['MAV_CMD'][31013].param[6] = '''User defined''' -enums['MAV_CMD'][31013].param[7] = '''User defined''' -MAV_CMD_USER_5 = 31014 # User defined command. Ground Station will not show the Vehicle as - # flying through this item. Example: - # MAV_CMD_DO_SET_PARAMETER item. -enums['MAV_CMD'][31014] = EnumEntry('MAV_CMD_USER_5', '''User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item.''') -enums['MAV_CMD'][31014].param[1] = '''User defined''' -enums['MAV_CMD'][31014].param[2] = '''User defined''' -enums['MAV_CMD'][31014].param[3] = '''User defined''' -enums['MAV_CMD'][31014].param[4] = '''User defined''' -enums['MAV_CMD'][31014].param[5] = '''User defined''' -enums['MAV_CMD'][31014].param[6] = '''User defined''' -enums['MAV_CMD'][31014].param[7] = '''User defined''' -MAV_CMD_ENUM_END = 31015 # -enums['MAV_CMD'][31015] = EnumEntry('MAV_CMD_ENUM_END', '''''') - -# MAV_DATA_STREAM -enums['MAV_DATA_STREAM'] = {} -MAV_DATA_STREAM_ALL = 0 # Enable all data streams -enums['MAV_DATA_STREAM'][0] = EnumEntry('MAV_DATA_STREAM_ALL', '''Enable all data streams''') -MAV_DATA_STREAM_RAW_SENSORS = 1 # Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. -enums['MAV_DATA_STREAM'][1] = EnumEntry('MAV_DATA_STREAM_RAW_SENSORS', '''Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.''') -MAV_DATA_STREAM_EXTENDED_STATUS = 2 # Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS -enums['MAV_DATA_STREAM'][2] = EnumEntry('MAV_DATA_STREAM_EXTENDED_STATUS', '''Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS''') -MAV_DATA_STREAM_RC_CHANNELS = 3 # Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW -enums['MAV_DATA_STREAM'][3] = EnumEntry('MAV_DATA_STREAM_RC_CHANNELS', '''Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW''') -MAV_DATA_STREAM_RAW_CONTROLLER = 4 # Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, - # NAV_CONTROLLER_OUTPUT. -enums['MAV_DATA_STREAM'][4] = EnumEntry('MAV_DATA_STREAM_RAW_CONTROLLER', '''Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT.''') -MAV_DATA_STREAM_POSITION = 6 # Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. -enums['MAV_DATA_STREAM'][6] = EnumEntry('MAV_DATA_STREAM_POSITION', '''Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.''') -MAV_DATA_STREAM_EXTRA1 = 10 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][10] = EnumEntry('MAV_DATA_STREAM_EXTRA1', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA2 = 11 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][11] = EnumEntry('MAV_DATA_STREAM_EXTRA2', '''Dependent on the autopilot''') -MAV_DATA_STREAM_EXTRA3 = 12 # Dependent on the autopilot -enums['MAV_DATA_STREAM'][12] = EnumEntry('MAV_DATA_STREAM_EXTRA3', '''Dependent on the autopilot''') -MAV_DATA_STREAM_ENUM_END = 13 # -enums['MAV_DATA_STREAM'][13] = EnumEntry('MAV_DATA_STREAM_ENUM_END', '''''') - -# MAV_ROI -enums['MAV_ROI'] = {} -MAV_ROI_NONE = 0 # No region of interest. -enums['MAV_ROI'][0] = EnumEntry('MAV_ROI_NONE', '''No region of interest.''') -MAV_ROI_WPNEXT = 1 # Point toward next MISSION. -enums['MAV_ROI'][1] = EnumEntry('MAV_ROI_WPNEXT', '''Point toward next MISSION.''') -MAV_ROI_WPINDEX = 2 # Point toward given MISSION. -enums['MAV_ROI'][2] = EnumEntry('MAV_ROI_WPINDEX', '''Point toward given MISSION.''') -MAV_ROI_LOCATION = 3 # Point toward fixed location. -enums['MAV_ROI'][3] = EnumEntry('MAV_ROI_LOCATION', '''Point toward fixed location.''') -MAV_ROI_TARGET = 4 # Point toward of given id. -enums['MAV_ROI'][4] = EnumEntry('MAV_ROI_TARGET', '''Point toward of given id.''') -MAV_ROI_ENUM_END = 5 # -enums['MAV_ROI'][5] = EnumEntry('MAV_ROI_ENUM_END', '''''') - -# MAV_CMD_ACK -enums['MAV_CMD_ACK'] = {} -MAV_CMD_ACK_OK = 1 # Command / mission item is ok. -enums['MAV_CMD_ACK'][1] = EnumEntry('MAV_CMD_ACK_OK', '''Command / mission item is ok.''') -MAV_CMD_ACK_ERR_FAIL = 2 # Generic error message if none of the other reasons fails or if no - # detailed error reporting is implemented. -enums['MAV_CMD_ACK'][2] = EnumEntry('MAV_CMD_ACK_ERR_FAIL', '''Generic error message if none of the other reasons fails or if no detailed error reporting is implemented.''') -MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 # The system is refusing to accept this command from this source / - # communication partner. -enums['MAV_CMD_ACK'][3] = EnumEntry('MAV_CMD_ACK_ERR_ACCESS_DENIED', '''The system is refusing to accept this command from this source / communication partner.''') -MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 # Command or mission item is not supported, other commands would be - # accepted. -enums['MAV_CMD_ACK'][4] = EnumEntry('MAV_CMD_ACK_ERR_NOT_SUPPORTED', '''Command or mission item is not supported, other commands would be accepted.''') -MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 # The coordinate frame of this command / mission item is not supported. -enums['MAV_CMD_ACK'][5] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED', '''The coordinate frame of this command / mission item is not supported.''') -MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 # The coordinate frame of this command is ok, but he coordinate values - # exceed the safety limits of this system. - # This is a generic error, please use the more - # specific error messages below if possible. -enums['MAV_CMD_ACK'][6] = EnumEntry('MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE', '''The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible.''') -MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 # The X or latitude value is out of range. -enums['MAV_CMD_ACK'][7] = EnumEntry('MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE', '''The X or latitude value is out of range.''') -MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 # The Y or longitude value is out of range. -enums['MAV_CMD_ACK'][8] = EnumEntry('MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE', '''The Y or longitude value is out of range.''') -MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 # The Z or altitude value is out of range. -enums['MAV_CMD_ACK'][9] = EnumEntry('MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE', '''The Z or altitude value is out of range.''') -MAV_CMD_ACK_ENUM_END = 10 # -enums['MAV_CMD_ACK'][10] = EnumEntry('MAV_CMD_ACK_ENUM_END', '''''') - -# MAV_PARAM_TYPE -enums['MAV_PARAM_TYPE'] = {} -MAV_PARAM_TYPE_UINT8 = 1 # 8-bit unsigned integer -enums['MAV_PARAM_TYPE'][1] = EnumEntry('MAV_PARAM_TYPE_UINT8', '''8-bit unsigned integer''') -MAV_PARAM_TYPE_INT8 = 2 # 8-bit signed integer -enums['MAV_PARAM_TYPE'][2] = EnumEntry('MAV_PARAM_TYPE_INT8', '''8-bit signed integer''') -MAV_PARAM_TYPE_UINT16 = 3 # 16-bit unsigned integer -enums['MAV_PARAM_TYPE'][3] = EnumEntry('MAV_PARAM_TYPE_UINT16', '''16-bit unsigned integer''') -MAV_PARAM_TYPE_INT16 = 4 # 16-bit signed integer -enums['MAV_PARAM_TYPE'][4] = EnumEntry('MAV_PARAM_TYPE_INT16', '''16-bit signed integer''') -MAV_PARAM_TYPE_UINT32 = 5 # 32-bit unsigned integer -enums['MAV_PARAM_TYPE'][5] = EnumEntry('MAV_PARAM_TYPE_UINT32', '''32-bit unsigned integer''') -MAV_PARAM_TYPE_INT32 = 6 # 32-bit signed integer -enums['MAV_PARAM_TYPE'][6] = EnumEntry('MAV_PARAM_TYPE_INT32', '''32-bit signed integer''') -MAV_PARAM_TYPE_UINT64 = 7 # 64-bit unsigned integer -enums['MAV_PARAM_TYPE'][7] = EnumEntry('MAV_PARAM_TYPE_UINT64', '''64-bit unsigned integer''') -MAV_PARAM_TYPE_INT64 = 8 # 64-bit signed integer -enums['MAV_PARAM_TYPE'][8] = EnumEntry('MAV_PARAM_TYPE_INT64', '''64-bit signed integer''') -MAV_PARAM_TYPE_REAL32 = 9 # 32-bit floating-point -enums['MAV_PARAM_TYPE'][9] = EnumEntry('MAV_PARAM_TYPE_REAL32', '''32-bit floating-point''') -MAV_PARAM_TYPE_REAL64 = 10 # 64-bit floating-point -enums['MAV_PARAM_TYPE'][10] = EnumEntry('MAV_PARAM_TYPE_REAL64', '''64-bit floating-point''') -MAV_PARAM_TYPE_ENUM_END = 11 # -enums['MAV_PARAM_TYPE'][11] = EnumEntry('MAV_PARAM_TYPE_ENUM_END', '''''') - -# MAV_RESULT -enums['MAV_RESULT'] = {} -MAV_RESULT_ACCEPTED = 0 # Command ACCEPTED and EXECUTED -enums['MAV_RESULT'][0] = EnumEntry('MAV_RESULT_ACCEPTED', '''Command ACCEPTED and EXECUTED''') -MAV_RESULT_TEMPORARILY_REJECTED = 1 # Command TEMPORARY REJECTED/DENIED -enums['MAV_RESULT'][1] = EnumEntry('MAV_RESULT_TEMPORARILY_REJECTED', '''Command TEMPORARY REJECTED/DENIED''') -MAV_RESULT_DENIED = 2 # Command PERMANENTLY DENIED -enums['MAV_RESULT'][2] = EnumEntry('MAV_RESULT_DENIED', '''Command PERMANENTLY DENIED''') -MAV_RESULT_UNSUPPORTED = 3 # Command UNKNOWN/UNSUPPORTED -enums['MAV_RESULT'][3] = EnumEntry('MAV_RESULT_UNSUPPORTED', '''Command UNKNOWN/UNSUPPORTED''') -MAV_RESULT_FAILED = 4 # Command executed, but failed -enums['MAV_RESULT'][4] = EnumEntry('MAV_RESULT_FAILED', '''Command executed, but failed''') -MAV_RESULT_ENUM_END = 5 # -enums['MAV_RESULT'][5] = EnumEntry('MAV_RESULT_ENUM_END', '''''') - -# MAV_MISSION_RESULT -enums['MAV_MISSION_RESULT'] = {} -MAV_MISSION_ACCEPTED = 0 # mission accepted OK -enums['MAV_MISSION_RESULT'][0] = EnumEntry('MAV_MISSION_ACCEPTED', '''mission accepted OK''') -MAV_MISSION_ERROR = 1 # generic error / not accepting mission commands at all right now -enums['MAV_MISSION_RESULT'][1] = EnumEntry('MAV_MISSION_ERROR', '''generic error / not accepting mission commands at all right now''') -MAV_MISSION_UNSUPPORTED_FRAME = 2 # coordinate frame is not supported -enums['MAV_MISSION_RESULT'][2] = EnumEntry('MAV_MISSION_UNSUPPORTED_FRAME', '''coordinate frame is not supported''') -MAV_MISSION_UNSUPPORTED = 3 # command is not supported -enums['MAV_MISSION_RESULT'][3] = EnumEntry('MAV_MISSION_UNSUPPORTED', '''command is not supported''') -MAV_MISSION_NO_SPACE = 4 # mission item exceeds storage space -enums['MAV_MISSION_RESULT'][4] = EnumEntry('MAV_MISSION_NO_SPACE', '''mission item exceeds storage space''') -MAV_MISSION_INVALID = 5 # one of the parameters has an invalid value -enums['MAV_MISSION_RESULT'][5] = EnumEntry('MAV_MISSION_INVALID', '''one of the parameters has an invalid value''') -MAV_MISSION_INVALID_PARAM1 = 6 # param1 has an invalid value -enums['MAV_MISSION_RESULT'][6] = EnumEntry('MAV_MISSION_INVALID_PARAM1', '''param1 has an invalid value''') -MAV_MISSION_INVALID_PARAM2 = 7 # param2 has an invalid value -enums['MAV_MISSION_RESULT'][7] = EnumEntry('MAV_MISSION_INVALID_PARAM2', '''param2 has an invalid value''') -MAV_MISSION_INVALID_PARAM3 = 8 # param3 has an invalid value -enums['MAV_MISSION_RESULT'][8] = EnumEntry('MAV_MISSION_INVALID_PARAM3', '''param3 has an invalid value''') -MAV_MISSION_INVALID_PARAM4 = 9 # param4 has an invalid value -enums['MAV_MISSION_RESULT'][9] = EnumEntry('MAV_MISSION_INVALID_PARAM4', '''param4 has an invalid value''') -MAV_MISSION_INVALID_PARAM5_X = 10 # x/param5 has an invalid value -enums['MAV_MISSION_RESULT'][10] = EnumEntry('MAV_MISSION_INVALID_PARAM5_X', '''x/param5 has an invalid value''') -MAV_MISSION_INVALID_PARAM6_Y = 11 # y/param6 has an invalid value -enums['MAV_MISSION_RESULT'][11] = EnumEntry('MAV_MISSION_INVALID_PARAM6_Y', '''y/param6 has an invalid value''') -MAV_MISSION_INVALID_PARAM7 = 12 # param7 has an invalid value -enums['MAV_MISSION_RESULT'][12] = EnumEntry('MAV_MISSION_INVALID_PARAM7', '''param7 has an invalid value''') -MAV_MISSION_INVALID_SEQUENCE = 13 # received waypoint out of sequence -enums['MAV_MISSION_RESULT'][13] = EnumEntry('MAV_MISSION_INVALID_SEQUENCE', '''received waypoint out of sequence''') -MAV_MISSION_DENIED = 14 # not accepting any mission commands from this communication partner -enums['MAV_MISSION_RESULT'][14] = EnumEntry('MAV_MISSION_DENIED', '''not accepting any mission commands from this communication partner''') -MAV_MISSION_RESULT_ENUM_END = 15 # -enums['MAV_MISSION_RESULT'][15] = EnumEntry('MAV_MISSION_RESULT_ENUM_END', '''''') - -# MAV_SEVERITY -enums['MAV_SEVERITY'] = {} -MAV_SEVERITY_EMERGENCY = 0 # System is unusable. This is a "panic" condition. -enums['MAV_SEVERITY'][0] = EnumEntry('MAV_SEVERITY_EMERGENCY', '''System is unusable. This is a "panic" condition.''') -MAV_SEVERITY_ALERT = 1 # Action should be taken immediately. Indicates error in non-critical - # systems. -enums['MAV_SEVERITY'][1] = EnumEntry('MAV_SEVERITY_ALERT', '''Action should be taken immediately. Indicates error in non-critical systems.''') -MAV_SEVERITY_CRITICAL = 2 # Action must be taken immediately. Indicates failure in a primary - # system. -enums['MAV_SEVERITY'][2] = EnumEntry('MAV_SEVERITY_CRITICAL', '''Action must be taken immediately. Indicates failure in a primary system.''') -MAV_SEVERITY_ERROR = 3 # Indicates an error in secondary/redundant systems. -enums['MAV_SEVERITY'][3] = EnumEntry('MAV_SEVERITY_ERROR', '''Indicates an error in secondary/redundant systems.''') -MAV_SEVERITY_WARNING = 4 # Indicates about a possible future error if this is not resolved within - # a given timeframe. Example would be a low - # battery warning. -enums['MAV_SEVERITY'][4] = EnumEntry('MAV_SEVERITY_WARNING', '''Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning.''') -MAV_SEVERITY_NOTICE = 5 # An unusual event has occured, though not an error condition. This - # should be investigated for the root cause. -enums['MAV_SEVERITY'][5] = EnumEntry('MAV_SEVERITY_NOTICE', '''An unusual event has occured, though not an error condition. This should be investigated for the root cause.''') -MAV_SEVERITY_INFO = 6 # Normal operational messages. Useful for logging. No action is required - # for these messages. -enums['MAV_SEVERITY'][6] = EnumEntry('MAV_SEVERITY_INFO', '''Normal operational messages. Useful for logging. No action is required for these messages.''') -MAV_SEVERITY_DEBUG = 7 # Useful non-operational messages that can assist in debugging. These - # should not occur during normal operation. -enums['MAV_SEVERITY'][7] = EnumEntry('MAV_SEVERITY_DEBUG', '''Useful non-operational messages that can assist in debugging. These should not occur during normal operation.''') -MAV_SEVERITY_ENUM_END = 8 # -enums['MAV_SEVERITY'][8] = EnumEntry('MAV_SEVERITY_ENUM_END', '''''') - -# MAV_POWER_STATUS -enums['MAV_POWER_STATUS'] = {} -MAV_POWER_STATUS_BRICK_VALID = 1 # main brick power supply valid -enums['MAV_POWER_STATUS'][1] = EnumEntry('MAV_POWER_STATUS_BRICK_VALID', '''main brick power supply valid''') -MAV_POWER_STATUS_SERVO_VALID = 2 # main servo power supply valid for FMU -enums['MAV_POWER_STATUS'][2] = EnumEntry('MAV_POWER_STATUS_SERVO_VALID', '''main servo power supply valid for FMU''') -MAV_POWER_STATUS_USB_CONNECTED = 4 # USB power is connected -enums['MAV_POWER_STATUS'][4] = EnumEntry('MAV_POWER_STATUS_USB_CONNECTED', '''USB power is connected''') -MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 # peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][8] = EnumEntry('MAV_POWER_STATUS_PERIPH_OVERCURRENT', '''peripheral supply is in over-current state''') -MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 # hi-power peripheral supply is in over-current state -enums['MAV_POWER_STATUS'][16] = EnumEntry('MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT', '''hi-power peripheral supply is in over-current state''') -MAV_POWER_STATUS_CHANGED = 32 # Power status has changed since boot -enums['MAV_POWER_STATUS'][32] = EnumEntry('MAV_POWER_STATUS_CHANGED', '''Power status has changed since boot''') -MAV_POWER_STATUS_ENUM_END = 33 # -enums['MAV_POWER_STATUS'][33] = EnumEntry('MAV_POWER_STATUS_ENUM_END', '''''') - -# SERIAL_CONTROL_DEV -enums['SERIAL_CONTROL_DEV'] = {} -SERIAL_CONTROL_DEV_TELEM1 = 0 # First telemetry port -enums['SERIAL_CONTROL_DEV'][0] = EnumEntry('SERIAL_CONTROL_DEV_TELEM1', '''First telemetry port''') -SERIAL_CONTROL_DEV_TELEM2 = 1 # Second telemetry port -enums['SERIAL_CONTROL_DEV'][1] = EnumEntry('SERIAL_CONTROL_DEV_TELEM2', '''Second telemetry port''') -SERIAL_CONTROL_DEV_GPS1 = 2 # First GPS port -enums['SERIAL_CONTROL_DEV'][2] = EnumEntry('SERIAL_CONTROL_DEV_GPS1', '''First GPS port''') -SERIAL_CONTROL_DEV_GPS2 = 3 # Second GPS port -enums['SERIAL_CONTROL_DEV'][3] = EnumEntry('SERIAL_CONTROL_DEV_GPS2', '''Second GPS port''') -SERIAL_CONTROL_DEV_SHELL = 10 # system shell -enums['SERIAL_CONTROL_DEV'][10] = EnumEntry('SERIAL_CONTROL_DEV_SHELL', '''system shell''') -SERIAL_CONTROL_DEV_ENUM_END = 11 # -enums['SERIAL_CONTROL_DEV'][11] = EnumEntry('SERIAL_CONTROL_DEV_ENUM_END', '''''') - -# SERIAL_CONTROL_FLAG -enums['SERIAL_CONTROL_FLAG'] = {} -SERIAL_CONTROL_FLAG_REPLY = 1 # Set if this is a reply -enums['SERIAL_CONTROL_FLAG'][1] = EnumEntry('SERIAL_CONTROL_FLAG_REPLY', '''Set if this is a reply''') -SERIAL_CONTROL_FLAG_RESPOND = 2 # Set if the sender wants the receiver to send a response as another - # SERIAL_CONTROL message -enums['SERIAL_CONTROL_FLAG'][2] = EnumEntry('SERIAL_CONTROL_FLAG_RESPOND', '''Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message''') -SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 # Set if access to the serial port should be removed from whatever - # driver is currently using it, giving - # exclusive access to the SERIAL_CONTROL - # protocol. The port can be handed back by - # sending a request without this flag set -enums['SERIAL_CONTROL_FLAG'][4] = EnumEntry('SERIAL_CONTROL_FLAG_EXCLUSIVE', '''Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set''') -SERIAL_CONTROL_FLAG_BLOCKING = 8 # Block on writes to the serial port -enums['SERIAL_CONTROL_FLAG'][8] = EnumEntry('SERIAL_CONTROL_FLAG_BLOCKING', '''Block on writes to the serial port''') -SERIAL_CONTROL_FLAG_MULTI = 16 # Send multiple replies until port is drained -enums['SERIAL_CONTROL_FLAG'][16] = EnumEntry('SERIAL_CONTROL_FLAG_MULTI', '''Send multiple replies until port is drained''') -SERIAL_CONTROL_FLAG_ENUM_END = 17 # -enums['SERIAL_CONTROL_FLAG'][17] = EnumEntry('SERIAL_CONTROL_FLAG_ENUM_END', '''''') - -# MAV_DISTANCE_SENSOR -enums['MAV_DISTANCE_SENSOR'] = {} -MAV_DISTANCE_SENSOR_LASER = 0 # Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units -enums['MAV_DISTANCE_SENSOR'][0] = EnumEntry('MAV_DISTANCE_SENSOR_LASER', '''Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units''') -MAV_DISTANCE_SENSOR_ULTRASOUND = 1 # Ultrasound rangefinder, e.g. MaxBotix units -enums['MAV_DISTANCE_SENSOR'][1] = EnumEntry('MAV_DISTANCE_SENSOR_ULTRASOUND', '''Ultrasound rangefinder, e.g. MaxBotix units''') -MAV_DISTANCE_SENSOR_INFRARED = 2 # Infrared rangefinder, e.g. Sharp units -enums['MAV_DISTANCE_SENSOR'][2] = EnumEntry('MAV_DISTANCE_SENSOR_INFRARED', '''Infrared rangefinder, e.g. Sharp units''') -MAV_DISTANCE_SENSOR_ENUM_END = 3 # -enums['MAV_DISTANCE_SENSOR'][3] = EnumEntry('MAV_DISTANCE_SENSOR_ENUM_END', '''''') - -# MAV_SENSOR_ORIENTATION -enums['MAV_SENSOR_ORIENTATION'] = {} -MAV_SENSOR_ROTATION_NONE = 0 # Roll: 0, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][0] = EnumEntry('MAV_SENSOR_ROTATION_NONE', '''Roll: 0, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_YAW_45 = 1 # Roll: 0, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][1] = EnumEntry('MAV_SENSOR_ROTATION_YAW_45', '''Roll: 0, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_YAW_90 = 2 # Roll: 0, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][2] = EnumEntry('MAV_SENSOR_ROTATION_YAW_90', '''Roll: 0, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_YAW_135 = 3 # Roll: 0, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][3] = EnumEntry('MAV_SENSOR_ROTATION_YAW_135', '''Roll: 0, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_YAW_180 = 4 # Roll: 0, Pitch: 0, Yaw: 180 -enums['MAV_SENSOR_ORIENTATION'][4] = EnumEntry('MAV_SENSOR_ROTATION_YAW_180', '''Roll: 0, Pitch: 0, Yaw: 180''') -MAV_SENSOR_ROTATION_YAW_225 = 5 # Roll: 0, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][5] = EnumEntry('MAV_SENSOR_ROTATION_YAW_225', '''Roll: 0, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_YAW_270 = 6 # Roll: 0, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][6] = EnumEntry('MAV_SENSOR_ROTATION_YAW_270', '''Roll: 0, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_YAW_315 = 7 # Roll: 0, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][7] = EnumEntry('MAV_SENSOR_ROTATION_YAW_315', '''Roll: 0, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_180 = 8 # Roll: 180, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][8] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180', '''Roll: 180, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 # Roll: 180, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][9] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_45', '''Roll: 180, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 # Roll: 180, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][10] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_90', '''Roll: 180, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 # Roll: 180, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][11] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_135', '''Roll: 180, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_180 = 12 # Roll: 0, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][12] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180', '''Roll: 0, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 # Roll: 180, Pitch: 0, Yaw: 225 -enums['MAV_SENSOR_ORIENTATION'][13] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_225', '''Roll: 180, Pitch: 0, Yaw: 225''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 # Roll: 180, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][14] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_270', '''Roll: 180, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 # Roll: 180, Pitch: 0, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][15] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_YAW_315', '''Roll: 180, Pitch: 0, Yaw: 315''') -MAV_SENSOR_ROTATION_ROLL_90 = 16 # Roll: 90, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][16] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90', '''Roll: 90, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 # Roll: 90, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][17] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_45', '''Roll: 90, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 # Roll: 90, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][18] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_90', '''Roll: 90, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 # Roll: 90, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][19] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_135', '''Roll: 90, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_ROLL_270 = 20 # Roll: 270, Pitch: 0, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][20] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270', '''Roll: 270, Pitch: 0, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 # Roll: 270, Pitch: 0, Yaw: 45 -enums['MAV_SENSOR_ORIENTATION'][21] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_45', '''Roll: 270, Pitch: 0, Yaw: 45''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 # Roll: 270, Pitch: 0, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][22] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_90', '''Roll: 270, Pitch: 0, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 # Roll: 270, Pitch: 0, Yaw: 135 -enums['MAV_SENSOR_ORIENTATION'][23] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_YAW_135', '''Roll: 270, Pitch: 0, Yaw: 135''') -MAV_SENSOR_ROTATION_PITCH_90 = 24 # Roll: 0, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][24] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_90', '''Roll: 0, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_270 = 25 # Roll: 0, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][25] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_270', '''Roll: 0, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 # Roll: 0, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][26] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_90', '''Roll: 0, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 # Roll: 0, Pitch: 180, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][27] = EnumEntry('MAV_SENSOR_ROTATION_PITCH_180_YAW_270', '''Roll: 0, Pitch: 180, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 # Roll: 90, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][28] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_90', '''Roll: 90, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 # Roll: 180, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][29] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_90', '''Roll: 180, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 # Roll: 270, Pitch: 90, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][30] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_90', '''Roll: 270, Pitch: 90, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 # Roll: 90, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][31] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180', '''Roll: 90, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 # Roll: 270, Pitch: 180, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][32] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_180', '''Roll: 270, Pitch: 180, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 # Roll: 90, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][33] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_270', '''Roll: 90, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 # Roll: 180, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][34] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_180_PITCH_270', '''Roll: 180, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 # Roll: 270, Pitch: 270, Yaw: 0 -enums['MAV_SENSOR_ORIENTATION'][35] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_270_PITCH_270', '''Roll: 270, Pitch: 270, Yaw: 0''') -MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 # Roll: 90, Pitch: 180, Yaw: 90 -enums['MAV_SENSOR_ORIENTATION'][36] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90', '''Roll: 90, Pitch: 180, Yaw: 90''') -MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 # Roll: 90, Pitch: 0, Yaw: 270 -enums['MAV_SENSOR_ORIENTATION'][37] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_90_YAW_270', '''Roll: 90, Pitch: 0, Yaw: 270''') -MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315 = 38 # Roll: 315, Pitch: 315, Yaw: 315 -enums['MAV_SENSOR_ORIENTATION'][38] = EnumEntry('MAV_SENSOR_ROTATION_ROLL_315_PITCH_315_YAW_315', '''Roll: 315, Pitch: 315, Yaw: 315''') -MAV_SENSOR_ORIENTATION_ENUM_END = 39 # -enums['MAV_SENSOR_ORIENTATION'][39] = EnumEntry('MAV_SENSOR_ORIENTATION_ENUM_END', '''''') - -# MAV_PROTOCOL_CAPABILITY -enums['MAV_PROTOCOL_CAPABILITY'] = {} -MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 # Autopilot supports MISSION float message type. -enums['MAV_PROTOCOL_CAPABILITY'][1] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT', '''Autopilot supports MISSION float message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 # Autopilot supports the new param float message type. -enums['MAV_PROTOCOL_CAPABILITY'][2] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT', '''Autopilot supports the new param float message type.''') -MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 # Autopilot supports MISSION_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][4] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MISSION_INT', '''Autopilot supports MISSION_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 # Autopilot supports COMMAND_INT scaled integer message type. -enums['MAV_PROTOCOL_CAPABILITY'][8] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMMAND_INT', '''Autopilot supports COMMAND_INT scaled integer message type.''') -MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 # Autopilot supports the new param union message type. -enums['MAV_PROTOCOL_CAPABILITY'][16] = EnumEntry('MAV_PROTOCOL_CAPABILITY_PARAM_UNION', '''Autopilot supports the new param union message type.''') -MAV_PROTOCOL_CAPABILITY_FTP = 32 # Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. -enums['MAV_PROTOCOL_CAPABILITY'][32] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FTP', '''Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.''') -MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 # Autopilot supports commanding attitude offboard. -enums['MAV_PROTOCOL_CAPABILITY'][64] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET', '''Autopilot supports commanding attitude offboard.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 # Autopilot supports commanding position and velocity targets in local - # NED frame. -enums['MAV_PROTOCOL_CAPABILITY'][128] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED', '''Autopilot supports commanding position and velocity targets in local NED frame.''') -MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 # Autopilot supports commanding position and velocity targets in global - # scaled integers. -enums['MAV_PROTOCOL_CAPABILITY'][256] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT', '''Autopilot supports commanding position and velocity targets in global scaled integers.''') -MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 # Autopilot supports terrain protocol / data handling. -enums['MAV_PROTOCOL_CAPABILITY'][512] = EnumEntry('MAV_PROTOCOL_CAPABILITY_TERRAIN', '''Autopilot supports terrain protocol / data handling.''') -MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 # Autopilot supports direct actuator control. -enums['MAV_PROTOCOL_CAPABILITY'][1024] = EnumEntry('MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET', '''Autopilot supports direct actuator control.''') -MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 # Autopilot supports the flight termination command. -enums['MAV_PROTOCOL_CAPABILITY'][2048] = EnumEntry('MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION', '''Autopilot supports the flight termination command.''') -MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 # Autopilot supports onboard compass calibration. -enums['MAV_PROTOCOL_CAPABILITY'][4096] = EnumEntry('MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION', '''Autopilot supports onboard compass calibration.''') -MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 # Autopilot supports mavlink version 2. -enums['MAV_PROTOCOL_CAPABILITY'][8192] = EnumEntry('MAV_PROTOCOL_CAPABILITY_MAVLINK2', '''Autopilot supports mavlink version 2.''') -MAV_PROTOCOL_CAPABILITY_ENUM_END = 8193 # -enums['MAV_PROTOCOL_CAPABILITY'][8193] = EnumEntry('MAV_PROTOCOL_CAPABILITY_ENUM_END', '''''') - -# MAV_ESTIMATOR_TYPE -enums['MAV_ESTIMATOR_TYPE'] = {} -MAV_ESTIMATOR_TYPE_NAIVE = 1 # This is a naive estimator without any real covariance feedback. -enums['MAV_ESTIMATOR_TYPE'][1] = EnumEntry('MAV_ESTIMATOR_TYPE_NAIVE', '''This is a naive estimator without any real covariance feedback.''') -MAV_ESTIMATOR_TYPE_VISION = 2 # Computer vision based estimate. Might be up to scale. -enums['MAV_ESTIMATOR_TYPE'][2] = EnumEntry('MAV_ESTIMATOR_TYPE_VISION', '''Computer vision based estimate. Might be up to scale.''') -MAV_ESTIMATOR_TYPE_VIO = 3 # Visual-inertial estimate. -enums['MAV_ESTIMATOR_TYPE'][3] = EnumEntry('MAV_ESTIMATOR_TYPE_VIO', '''Visual-inertial estimate.''') -MAV_ESTIMATOR_TYPE_GPS = 4 # Plain GPS estimate. -enums['MAV_ESTIMATOR_TYPE'][4] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS', '''Plain GPS estimate.''') -MAV_ESTIMATOR_TYPE_GPS_INS = 5 # Estimator integrating GPS and inertial sensing. -enums['MAV_ESTIMATOR_TYPE'][5] = EnumEntry('MAV_ESTIMATOR_TYPE_GPS_INS', '''Estimator integrating GPS and inertial sensing.''') -MAV_ESTIMATOR_TYPE_ENUM_END = 6 # -enums['MAV_ESTIMATOR_TYPE'][6] = EnumEntry('MAV_ESTIMATOR_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_TYPE -enums['MAV_BATTERY_TYPE'] = {} -MAV_BATTERY_TYPE_UNKNOWN = 0 # Not specified. -enums['MAV_BATTERY_TYPE'][0] = EnumEntry('MAV_BATTERY_TYPE_UNKNOWN', '''Not specified.''') -MAV_BATTERY_TYPE_LIPO = 1 # Lithium polymer battery -enums['MAV_BATTERY_TYPE'][1] = EnumEntry('MAV_BATTERY_TYPE_LIPO', '''Lithium polymer battery''') -MAV_BATTERY_TYPE_LIFE = 2 # Lithium-iron-phosphate battery -enums['MAV_BATTERY_TYPE'][2] = EnumEntry('MAV_BATTERY_TYPE_LIFE', '''Lithium-iron-phosphate battery''') -MAV_BATTERY_TYPE_LION = 3 # Lithium-ION battery -enums['MAV_BATTERY_TYPE'][3] = EnumEntry('MAV_BATTERY_TYPE_LION', '''Lithium-ION battery''') -MAV_BATTERY_TYPE_NIMH = 4 # Nickel metal hydride battery -enums['MAV_BATTERY_TYPE'][4] = EnumEntry('MAV_BATTERY_TYPE_NIMH', '''Nickel metal hydride battery''') -MAV_BATTERY_TYPE_ENUM_END = 5 # -enums['MAV_BATTERY_TYPE'][5] = EnumEntry('MAV_BATTERY_TYPE_ENUM_END', '''''') - -# MAV_BATTERY_FUNCTION -enums['MAV_BATTERY_FUNCTION'] = {} -MAV_BATTERY_FUNCTION_UNKNOWN = 0 # Battery function is unknown -enums['MAV_BATTERY_FUNCTION'][0] = EnumEntry('MAV_BATTERY_FUNCTION_UNKNOWN', '''Battery function is unknown''') -MAV_BATTERY_FUNCTION_ALL = 1 # Battery supports all flight systems -enums['MAV_BATTERY_FUNCTION'][1] = EnumEntry('MAV_BATTERY_FUNCTION_ALL', '''Battery supports all flight systems''') -MAV_BATTERY_FUNCTION_PROPULSION = 2 # Battery for the propulsion system -enums['MAV_BATTERY_FUNCTION'][2] = EnumEntry('MAV_BATTERY_FUNCTION_PROPULSION', '''Battery for the propulsion system''') -MAV_BATTERY_FUNCTION_AVIONICS = 3 # Avionics battery -enums['MAV_BATTERY_FUNCTION'][3] = EnumEntry('MAV_BATTERY_FUNCTION_AVIONICS', '''Avionics battery''') -MAV_BATTERY_TYPE_PAYLOAD = 4 # Payload battery -enums['MAV_BATTERY_FUNCTION'][4] = EnumEntry('MAV_BATTERY_TYPE_PAYLOAD', '''Payload battery''') -MAV_BATTERY_FUNCTION_ENUM_END = 5 # -enums['MAV_BATTERY_FUNCTION'][5] = EnumEntry('MAV_BATTERY_FUNCTION_ENUM_END', '''''') - -# MAV_VTOL_STATE -enums['MAV_VTOL_STATE'] = {} -MAV_VTOL_STATE_UNDEFINED = 0 # MAV is not configured as VTOL -enums['MAV_VTOL_STATE'][0] = EnumEntry('MAV_VTOL_STATE_UNDEFINED', '''MAV is not configured as VTOL''') -MAV_VTOL_STATE_TRANSITION_TO_FW = 1 # VTOL is in transition from multicopter to fixed-wing -enums['MAV_VTOL_STATE'][1] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_FW', '''VTOL is in transition from multicopter to fixed-wing''') -MAV_VTOL_STATE_TRANSITION_TO_MC = 2 # VTOL is in transition from fixed-wing to multicopter -enums['MAV_VTOL_STATE'][2] = EnumEntry('MAV_VTOL_STATE_TRANSITION_TO_MC', '''VTOL is in transition from fixed-wing to multicopter''') -MAV_VTOL_STATE_MC = 3 # VTOL is in multicopter state -enums['MAV_VTOL_STATE'][3] = EnumEntry('MAV_VTOL_STATE_MC', '''VTOL is in multicopter state''') -MAV_VTOL_STATE_FW = 4 # VTOL is in fixed-wing state -enums['MAV_VTOL_STATE'][4] = EnumEntry('MAV_VTOL_STATE_FW', '''VTOL is in fixed-wing state''') -MAV_VTOL_STATE_ENUM_END = 5 # -enums['MAV_VTOL_STATE'][5] = EnumEntry('MAV_VTOL_STATE_ENUM_END', '''''') - -# MAV_LANDED_STATE -enums['MAV_LANDED_STATE'] = {} -MAV_LANDED_STATE_UNDEFINED = 0 # MAV landed state is unknown -enums['MAV_LANDED_STATE'][0] = EnumEntry('MAV_LANDED_STATE_UNDEFINED', '''MAV landed state is unknown''') -MAV_LANDED_STATE_ON_GROUND = 1 # MAV is landed (on ground) -enums['MAV_LANDED_STATE'][1] = EnumEntry('MAV_LANDED_STATE_ON_GROUND', '''MAV is landed (on ground)''') -MAV_LANDED_STATE_IN_AIR = 2 # MAV is in air -enums['MAV_LANDED_STATE'][2] = EnumEntry('MAV_LANDED_STATE_IN_AIR', '''MAV is in air''') -MAV_LANDED_STATE_ENUM_END = 3 # -enums['MAV_LANDED_STATE'][3] = EnumEntry('MAV_LANDED_STATE_ENUM_END', '''''') - -# ADSB_ALTITUDE_TYPE -enums['ADSB_ALTITUDE_TYPE'] = {} -ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 # Altitude reported from a Baro source using QNH reference -enums['ADSB_ALTITUDE_TYPE'][0] = EnumEntry('ADSB_ALTITUDE_TYPE_PRESSURE_QNH', '''Altitude reported from a Baro source using QNH reference''') -ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 # Altitude reported from a GNSS source -enums['ADSB_ALTITUDE_TYPE'][1] = EnumEntry('ADSB_ALTITUDE_TYPE_GEOMETRIC', '''Altitude reported from a GNSS source''') -ADSB_ALTITUDE_TYPE_ENUM_END = 2 # -enums['ADSB_ALTITUDE_TYPE'][2] = EnumEntry('ADSB_ALTITUDE_TYPE_ENUM_END', '''''') - -# ADSB_EMITTER_TYPE -enums['ADSB_EMITTER_TYPE'] = {} -ADSB_EMITTER_TYPE_NO_INFO = 0 # -enums['ADSB_EMITTER_TYPE'][0] = EnumEntry('ADSB_EMITTER_TYPE_NO_INFO', '''''') -ADSB_EMITTER_TYPE_LIGHT = 1 # -enums['ADSB_EMITTER_TYPE'][1] = EnumEntry('ADSB_EMITTER_TYPE_LIGHT', '''''') -ADSB_EMITTER_TYPE_SMALL = 2 # -enums['ADSB_EMITTER_TYPE'][2] = EnumEntry('ADSB_EMITTER_TYPE_SMALL', '''''') -ADSB_EMITTER_TYPE_LARGE = 3 # -enums['ADSB_EMITTER_TYPE'][3] = EnumEntry('ADSB_EMITTER_TYPE_LARGE', '''''') -ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 # -enums['ADSB_EMITTER_TYPE'][4] = EnumEntry('ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE', '''''') -ADSB_EMITTER_TYPE_HEAVY = 5 # -enums['ADSB_EMITTER_TYPE'][5] = EnumEntry('ADSB_EMITTER_TYPE_HEAVY', '''''') -ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 # -enums['ADSB_EMITTER_TYPE'][6] = EnumEntry('ADSB_EMITTER_TYPE_HIGHLY_MANUV', '''''') -ADSB_EMITTER_TYPE_ROTOCRAFT = 7 # -enums['ADSB_EMITTER_TYPE'][7] = EnumEntry('ADSB_EMITTER_TYPE_ROTOCRAFT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED = 8 # -enums['ADSB_EMITTER_TYPE'][8] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED', '''''') -ADSB_EMITTER_TYPE_GLIDER = 9 # -enums['ADSB_EMITTER_TYPE'][9] = EnumEntry('ADSB_EMITTER_TYPE_GLIDER', '''''') -ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 # -enums['ADSB_EMITTER_TYPE'][10] = EnumEntry('ADSB_EMITTER_TYPE_LIGHTER_AIR', '''''') -ADSB_EMITTER_TYPE_PARACHUTE = 11 # -enums['ADSB_EMITTER_TYPE'][11] = EnumEntry('ADSB_EMITTER_TYPE_PARACHUTE', '''''') -ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 # -enums['ADSB_EMITTER_TYPE'][12] = EnumEntry('ADSB_EMITTER_TYPE_ULTRA_LIGHT', '''''') -ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 # -enums['ADSB_EMITTER_TYPE'][13] = EnumEntry('ADSB_EMITTER_TYPE_UNASSIGNED2', '''''') -ADSB_EMITTER_TYPE_UAV = 14 # -enums['ADSB_EMITTER_TYPE'][14] = EnumEntry('ADSB_EMITTER_TYPE_UAV', '''''') -ADSB_EMITTER_TYPE_SPACE = 15 # -enums['ADSB_EMITTER_TYPE'][15] = EnumEntry('ADSB_EMITTER_TYPE_SPACE', '''''') -ADSB_EMITTER_TYPE_UNASSGINED3 = 16 # -enums['ADSB_EMITTER_TYPE'][16] = EnumEntry('ADSB_EMITTER_TYPE_UNASSGINED3', '''''') -ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 # -enums['ADSB_EMITTER_TYPE'][17] = EnumEntry('ADSB_EMITTER_TYPE_EMERGENCY_SURFACE', '''''') -ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 # -enums['ADSB_EMITTER_TYPE'][18] = EnumEntry('ADSB_EMITTER_TYPE_SERVICE_SURFACE', '''''') -ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 # -enums['ADSB_EMITTER_TYPE'][19] = EnumEntry('ADSB_EMITTER_TYPE_POINT_OBSTACLE', '''''') -ADSB_EMITTER_TYPE_ENUM_END = 20 # -enums['ADSB_EMITTER_TYPE'][20] = EnumEntry('ADSB_EMITTER_TYPE_ENUM_END', '''''') - -# ADSB_FLAGS -enums['ADSB_FLAGS'] = {} -ADSB_FLAGS_VALID_COORDS = 1 # -enums['ADSB_FLAGS'][1] = EnumEntry('ADSB_FLAGS_VALID_COORDS', '''''') -ADSB_FLAGS_VALID_ALTITUDE = 2 # -enums['ADSB_FLAGS'][2] = EnumEntry('ADSB_FLAGS_VALID_ALTITUDE', '''''') -ADSB_FLAGS_VALID_HEADING = 4 # -enums['ADSB_FLAGS'][4] = EnumEntry('ADSB_FLAGS_VALID_HEADING', '''''') -ADSB_FLAGS_VALID_VELOCITY = 8 # -enums['ADSB_FLAGS'][8] = EnumEntry('ADSB_FLAGS_VALID_VELOCITY', '''''') -ADSB_FLAGS_VALID_CALLSIGN = 16 # -enums['ADSB_FLAGS'][16] = EnumEntry('ADSB_FLAGS_VALID_CALLSIGN', '''''') -ADSB_FLAGS_VALID_SQUAWK = 32 # -enums['ADSB_FLAGS'][32] = EnumEntry('ADSB_FLAGS_VALID_SQUAWK', '''''') -ADSB_FLAGS_SIMULATED = 64 # -enums['ADSB_FLAGS'][64] = EnumEntry('ADSB_FLAGS_SIMULATED', '''''') -ADSB_FLAGS_ENUM_END = 65 # -enums['ADSB_FLAGS'][65] = EnumEntry('ADSB_FLAGS_ENUM_END', '''''') - -# MAV_DO_REPOSITION_FLAGS -enums['MAV_DO_REPOSITION_FLAGS'] = {} -MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 # The aircraft should immediately transition into guided. This should - # not be set for follow me applications -enums['MAV_DO_REPOSITION_FLAGS'][1] = EnumEntry('MAV_DO_REPOSITION_FLAGS_CHANGE_MODE', '''The aircraft should immediately transition into guided. This should not be set for follow me applications''') -MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 # -enums['MAV_DO_REPOSITION_FLAGS'][2] = EnumEntry('MAV_DO_REPOSITION_FLAGS_ENUM_END', '''''') - -# ESTIMATOR_STATUS_FLAGS -enums['ESTIMATOR_STATUS_FLAGS'] = {} -ESTIMATOR_ATTITUDE = 1 # True if the attitude estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][1] = EnumEntry('ESTIMATOR_ATTITUDE', '''True if the attitude estimate is good''') -ESTIMATOR_VELOCITY_HORIZ = 2 # True if the horizontal velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][2] = EnumEntry('ESTIMATOR_VELOCITY_HORIZ', '''True if the horizontal velocity estimate is good''') -ESTIMATOR_VELOCITY_VERT = 4 # True if the vertical velocity estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][4] = EnumEntry('ESTIMATOR_VELOCITY_VERT', '''True if the vertical velocity estimate is good''') -ESTIMATOR_POS_HORIZ_REL = 8 # True if the horizontal position (relative) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][8] = EnumEntry('ESTIMATOR_POS_HORIZ_REL', '''True if the horizontal position (relative) estimate is good''') -ESTIMATOR_POS_HORIZ_ABS = 16 # True if the horizontal position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][16] = EnumEntry('ESTIMATOR_POS_HORIZ_ABS', '''True if the horizontal position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_ABS = 32 # True if the vertical position (absolute) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][32] = EnumEntry('ESTIMATOR_POS_VERT_ABS', '''True if the vertical position (absolute) estimate is good''') -ESTIMATOR_POS_VERT_AGL = 64 # True if the vertical position (above ground) estimate is good -enums['ESTIMATOR_STATUS_FLAGS'][64] = EnumEntry('ESTIMATOR_POS_VERT_AGL', '''True if the vertical position (above ground) estimate is good''') -ESTIMATOR_CONST_POS_MODE = 128 # True if the EKF is in a constant position mode and is not using - # external measurements (eg GPS or optical - # flow) -enums['ESTIMATOR_STATUS_FLAGS'][128] = EnumEntry('ESTIMATOR_CONST_POS_MODE', '''True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow)''') -ESTIMATOR_PRED_POS_HORIZ_REL = 256 # True if the EKF has sufficient data to enter a mode that will provide - # a (relative) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][256] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_REL', '''True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate''') -ESTIMATOR_PRED_POS_HORIZ_ABS = 512 # True if the EKF has sufficient data to enter a mode that will provide - # a (absolute) position estimate -enums['ESTIMATOR_STATUS_FLAGS'][512] = EnumEntry('ESTIMATOR_PRED_POS_HORIZ_ABS', '''True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate''') -ESTIMATOR_GPS_GLITCH = 1024 # True if the EKF has detected a GPS glitch -enums['ESTIMATOR_STATUS_FLAGS'][1024] = EnumEntry('ESTIMATOR_GPS_GLITCH', '''True if the EKF has detected a GPS glitch''') -ESTIMATOR_STATUS_FLAGS_ENUM_END = 1025 # -enums['ESTIMATOR_STATUS_FLAGS'][1025] = EnumEntry('ESTIMATOR_STATUS_FLAGS_ENUM_END', '''''') - -# MOTOR_TEST_THROTTLE_TYPE -enums['MOTOR_TEST_THROTTLE_TYPE'] = {} -MOTOR_TEST_THROTTLE_PERCENT = 0 # throttle as a percentage from 0 ~ 100 -enums['MOTOR_TEST_THROTTLE_TYPE'][0] = EnumEntry('MOTOR_TEST_THROTTLE_PERCENT', '''throttle as a percentage from 0 ~ 100''') -MOTOR_TEST_THROTTLE_PWM = 1 # throttle as an absolute PWM value (normally in range of 1000~2000) -enums['MOTOR_TEST_THROTTLE_TYPE'][1] = EnumEntry('MOTOR_TEST_THROTTLE_PWM', '''throttle as an absolute PWM value (normally in range of 1000~2000)''') -MOTOR_TEST_THROTTLE_PILOT = 2 # throttle pass-through from pilot's transmitter -enums['MOTOR_TEST_THROTTLE_TYPE'][2] = EnumEntry('MOTOR_TEST_THROTTLE_PILOT', '''throttle pass-through from pilot's transmitter''') -MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 3 # -enums['MOTOR_TEST_THROTTLE_TYPE'][3] = EnumEntry('MOTOR_TEST_THROTTLE_TYPE_ENUM_END', '''''') - -# GPS_INPUT_IGNORE_FLAGS -enums['GPS_INPUT_IGNORE_FLAGS'] = {} -GPS_INPUT_IGNORE_FLAG_ALT = 1 # ignore altitude field -enums['GPS_INPUT_IGNORE_FLAGS'][1] = EnumEntry('GPS_INPUT_IGNORE_FLAG_ALT', '''ignore altitude field''') -GPS_INPUT_IGNORE_FLAG_HDOP = 2 # ignore hdop field -enums['GPS_INPUT_IGNORE_FLAGS'][2] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HDOP', '''ignore hdop field''') -GPS_INPUT_IGNORE_FLAG_VDOP = 4 # ignore vdop field -enums['GPS_INPUT_IGNORE_FLAGS'][4] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VDOP', '''ignore vdop field''') -GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 # ignore horizontal velocity field (vn and ve) -enums['GPS_INPUT_IGNORE_FLAGS'][8] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_HORIZ', '''ignore horizontal velocity field (vn and ve)''') -GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 # ignore vertical velocity field (vd) -enums['GPS_INPUT_IGNORE_FLAGS'][16] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VEL_VERT', '''ignore vertical velocity field (vd)''') -GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 # ignore speed accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][32] = EnumEntry('GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY', '''ignore speed accuracy field''') -GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 # ignore horizontal accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][64] = EnumEntry('GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY', '''ignore horizontal accuracy field''') -GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 # ignore vertical accuracy field -enums['GPS_INPUT_IGNORE_FLAGS'][128] = EnumEntry('GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY', '''ignore vertical accuracy field''') -GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 # -enums['GPS_INPUT_IGNORE_FLAGS'][129] = EnumEntry('GPS_INPUT_IGNORE_FLAGS_ENUM_END', '''''') - -# MAV_COLLISION_ACTION -enums['MAV_COLLISION_ACTION'] = {} -MAV_COLLISION_ACTION_NONE = 0 # Ignore any potential collisions -enums['MAV_COLLISION_ACTION'][0] = EnumEntry('MAV_COLLISION_ACTION_NONE', '''Ignore any potential collisions''') -MAV_COLLISION_ACTION_REPORT = 1 # Report potential collision -enums['MAV_COLLISION_ACTION'][1] = EnumEntry('MAV_COLLISION_ACTION_REPORT', '''Report potential collision''') -MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][2] = EnumEntry('MAV_COLLISION_ACTION_ASCEND_OR_DESCEND', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 # Ascend or Descend to avoid thread -enums['MAV_COLLISION_ACTION'][3] = EnumEntry('MAV_COLLISION_ACTION_MOVE_HORIZONTALLY', '''Ascend or Descend to avoid thread''') -MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 # Aircraft to move perpendicular to the collision's velocity vector -enums['MAV_COLLISION_ACTION'][4] = EnumEntry('MAV_COLLISION_ACTION_MOVE_PERPENDICULAR', '''Aircraft to move perpendicular to the collision's velocity vector''') -MAV_COLLISION_ACTION_RTL = 5 # Aircraft to fly directly back to its launch point -enums['MAV_COLLISION_ACTION'][5] = EnumEntry('MAV_COLLISION_ACTION_RTL', '''Aircraft to fly directly back to its launch point''') -MAV_COLLISION_ACTION_HOVER = 6 # Aircraft to stop in place -enums['MAV_COLLISION_ACTION'][6] = EnumEntry('MAV_COLLISION_ACTION_HOVER', '''Aircraft to stop in place''') -MAV_COLLISION_ACTION_ENUM_END = 7 # -enums['MAV_COLLISION_ACTION'][7] = EnumEntry('MAV_COLLISION_ACTION_ENUM_END', '''''') - -# MAV_COLLISION_THREAT_LEVEL -enums['MAV_COLLISION_THREAT_LEVEL'] = {} -MAV_COLLISION_THREAT_LEVEL_NONE = 0 # Not a threat -enums['MAV_COLLISION_THREAT_LEVEL'][0] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_NONE', '''Not a threat''') -MAV_COLLISION_THREAT_LEVEL_LOW = 1 # Craft is mildly concerned about this threat -enums['MAV_COLLISION_THREAT_LEVEL'][1] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_LOW', '''Craft is mildly concerned about this threat''') -MAV_COLLISION_THREAT_LEVEL_HIGH = 2 # Craft is panicing, and may take actions to avoid threat -enums['MAV_COLLISION_THREAT_LEVEL'][2] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_HIGH', '''Craft is panicing, and may take actions to avoid threat''') -MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 # -enums['MAV_COLLISION_THREAT_LEVEL'][3] = EnumEntry('MAV_COLLISION_THREAT_LEVEL_ENUM_END', '''''') - -# MAV_COLLISION_SRC -enums['MAV_COLLISION_SRC'] = {} -MAV_COLLISION_SRC_ADSB = 0 # ID field references ADSB_VEHICLE packets -enums['MAV_COLLISION_SRC'][0] = EnumEntry('MAV_COLLISION_SRC_ADSB', '''ID field references ADSB_VEHICLE packets''') -MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 # ID field references MAVLink SRC ID -enums['MAV_COLLISION_SRC'][1] = EnumEntry('MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT', '''ID field references MAVLink SRC ID''') -MAV_COLLISION_SRC_ENUM_END = 2 # -enums['MAV_COLLISION_SRC'][2] = EnumEntry('MAV_COLLISION_SRC_ENUM_END', '''''') - -# GPS_FIX_TYPE -enums['GPS_FIX_TYPE'] = {} -GPS_FIX_TYPE_NO_GPS = 0 # No GPS connected -enums['GPS_FIX_TYPE'][0] = EnumEntry('GPS_FIX_TYPE_NO_GPS', '''No GPS connected''') -GPS_FIX_TYPE_NO_FIX = 1 # No position information, GPS is connected -enums['GPS_FIX_TYPE'][1] = EnumEntry('GPS_FIX_TYPE_NO_FIX', '''No position information, GPS is connected''') -GPS_FIX_TYPE_2D_FIX = 2 # 2D position -enums['GPS_FIX_TYPE'][2] = EnumEntry('GPS_FIX_TYPE_2D_FIX', '''2D position''') -GPS_FIX_TYPE_3D_FIX = 3 # 3D position -enums['GPS_FIX_TYPE'][3] = EnumEntry('GPS_FIX_TYPE_3D_FIX', '''3D position''') -GPS_FIX_TYPE_DGPS = 4 # DGPS/SBAS aided 3D position -enums['GPS_FIX_TYPE'][4] = EnumEntry('GPS_FIX_TYPE_DGPS', '''DGPS/SBAS aided 3D position''') -GPS_FIX_TYPE_RTK_FLOAT = 5 # RTK float, 3D position -enums['GPS_FIX_TYPE'][5] = EnumEntry('GPS_FIX_TYPE_RTK_FLOAT', '''RTK float, 3D position''') -GPS_FIX_TYPE_RTK_FIXED = 6 # RTK Fixed, 3D position -enums['GPS_FIX_TYPE'][6] = EnumEntry('GPS_FIX_TYPE_RTK_FIXED', '''RTK Fixed, 3D position''') -GPS_FIX_TYPE_STATIC = 7 # Static fixed, typically used for base stations -enums['GPS_FIX_TYPE'][7] = EnumEntry('GPS_FIX_TYPE_STATIC', '''Static fixed, typically used for base stations''') -GPS_FIX_TYPE_ENUM_END = 8 # -enums['GPS_FIX_TYPE'][8] = EnumEntry('GPS_FIX_TYPE_ENUM_END', '''''') - -# message IDs -MAVLINK_MSG_ID_BAD_DATA = -1 -MAVLINK_MSG_ID_NAV_FILTER_BIAS = 220 -MAVLINK_MSG_ID_RADIO_CALIBRATION = 221 -MAVLINK_MSG_ID_UALBERTA_SYS_STATUS = 222 -MAVLINK_MSG_ID_HEARTBEAT = 0 -MAVLINK_MSG_ID_SYS_STATUS = 1 -MAVLINK_MSG_ID_SYSTEM_TIME = 2 -MAVLINK_MSG_ID_PING = 4 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5 -MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6 -MAVLINK_MSG_ID_AUTH_KEY = 7 -MAVLINK_MSG_ID_SET_MODE = 11 -MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20 -MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21 -MAVLINK_MSG_ID_PARAM_VALUE = 22 -MAVLINK_MSG_ID_PARAM_SET = 23 -MAVLINK_MSG_ID_GPS_RAW_INT = 24 -MAVLINK_MSG_ID_GPS_STATUS = 25 -MAVLINK_MSG_ID_SCALED_IMU = 26 -MAVLINK_MSG_ID_RAW_IMU = 27 -MAVLINK_MSG_ID_RAW_PRESSURE = 28 -MAVLINK_MSG_ID_SCALED_PRESSURE = 29 -MAVLINK_MSG_ID_ATTITUDE = 30 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31 -MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33 -MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34 -MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35 -MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36 -MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37 -MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38 -MAVLINK_MSG_ID_MISSION_ITEM = 39 -MAVLINK_MSG_ID_MISSION_REQUEST = 40 -MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41 -MAVLINK_MSG_ID_MISSION_CURRENT = 42 -MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43 -MAVLINK_MSG_ID_MISSION_COUNT = 44 -MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45 -MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46 -MAVLINK_MSG_ID_MISSION_ACK = 47 -MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48 -MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49 -MAVLINK_MSG_ID_PARAM_MAP_RC = 50 -MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51 -MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54 -MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55 -MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61 -MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62 -MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64 -MAVLINK_MSG_ID_RC_CHANNELS = 65 -MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66 -MAVLINK_MSG_ID_DATA_STREAM = 67 -MAVLINK_MSG_ID_MANUAL_CONTROL = 69 -MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70 -MAVLINK_MSG_ID_MISSION_ITEM_INT = 73 -MAVLINK_MSG_ID_VFR_HUD = 74 -MAVLINK_MSG_ID_COMMAND_INT = 75 -MAVLINK_MSG_ID_COMMAND_LONG = 76 -MAVLINK_MSG_ID_COMMAND_ACK = 77 -MAVLINK_MSG_ID_MANUAL_SETPOINT = 81 -MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82 -MAVLINK_MSG_ID_ATTITUDE_TARGET = 83 -MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84 -MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85 -MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86 -MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87 -MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89 -MAVLINK_MSG_ID_HIL_STATE = 90 -MAVLINK_MSG_ID_HIL_CONTROLS = 91 -MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92 -MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93 -MAVLINK_MSG_ID_OPTICAL_FLOW = 100 -MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101 -MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102 -MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103 -MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104 -MAVLINK_MSG_ID_HIGHRES_IMU = 105 -MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106 -MAVLINK_MSG_ID_HIL_SENSOR = 107 -MAVLINK_MSG_ID_SIM_STATE = 108 -MAVLINK_MSG_ID_RADIO_STATUS = 109 -MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110 -MAVLINK_MSG_ID_TIMESYNC = 111 -MAVLINK_MSG_ID_CAMERA_TRIGGER = 112 -MAVLINK_MSG_ID_HIL_GPS = 113 -MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114 -MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115 -MAVLINK_MSG_ID_SCALED_IMU2 = 116 -MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117 -MAVLINK_MSG_ID_LOG_ENTRY = 118 -MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119 -MAVLINK_MSG_ID_LOG_DATA = 120 -MAVLINK_MSG_ID_LOG_ERASE = 121 -MAVLINK_MSG_ID_LOG_REQUEST_END = 122 -MAVLINK_MSG_ID_GPS_INJECT_DATA = 123 -MAVLINK_MSG_ID_GPS2_RAW = 124 -MAVLINK_MSG_ID_POWER_STATUS = 125 -MAVLINK_MSG_ID_SERIAL_CONTROL = 126 -MAVLINK_MSG_ID_GPS_RTK = 127 -MAVLINK_MSG_ID_GPS2_RTK = 128 -MAVLINK_MSG_ID_SCALED_IMU3 = 129 -MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130 -MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131 -MAVLINK_MSG_ID_DISTANCE_SENSOR = 132 -MAVLINK_MSG_ID_TERRAIN_REQUEST = 133 -MAVLINK_MSG_ID_TERRAIN_DATA = 134 -MAVLINK_MSG_ID_TERRAIN_CHECK = 135 -MAVLINK_MSG_ID_TERRAIN_REPORT = 136 -MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137 -MAVLINK_MSG_ID_ATT_POS_MOCAP = 138 -MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139 -MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140 -MAVLINK_MSG_ID_ALTITUDE = 141 -MAVLINK_MSG_ID_RESOURCE_REQUEST = 142 -MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143 -MAVLINK_MSG_ID_FOLLOW_TARGET = 144 -MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146 -MAVLINK_MSG_ID_BATTERY_STATUS = 147 -MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148 -MAVLINK_MSG_ID_LANDING_TARGET = 149 -MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230 -MAVLINK_MSG_ID_WIND_COV = 231 -MAVLINK_MSG_ID_GPS_INPUT = 232 -MAVLINK_MSG_ID_GPS_RTCM_DATA = 233 -MAVLINK_MSG_ID_VIBRATION = 241 -MAVLINK_MSG_ID_HOME_POSITION = 242 -MAVLINK_MSG_ID_SET_HOME_POSITION = 243 -MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244 -MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245 -MAVLINK_MSG_ID_ADSB_VEHICLE = 246 -MAVLINK_MSG_ID_COLLISION = 247 -MAVLINK_MSG_ID_V2_EXTENSION = 248 -MAVLINK_MSG_ID_MEMORY_VECT = 249 -MAVLINK_MSG_ID_DEBUG_VECT = 250 -MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251 -MAVLINK_MSG_ID_NAMED_VALUE_INT = 252 -MAVLINK_MSG_ID_STATUSTEXT = 253 -MAVLINK_MSG_ID_DEBUG = 254 -MAVLINK_MSG_ID_SETUP_SIGNING = 256 -MAVLINK_MSG_ID_BUTTON_CHANGE = 257 -MAVLINK_MSG_ID_PLAY_TUNE = 258 - -class MAVLink_nav_filter_bias_message(MAVLink_message): - ''' - Accelerometer and Gyro biases from the navigation filter - ''' - id = MAVLINK_MSG_ID_NAV_FILTER_BIAS - name = 'NAV_FILTER_BIAS' - fieldnames = ['usec', 'accel_0', 'accel_1', 'accel_2', 'gyro_0', 'gyro_1', 'gyro_2'] - ordered_fieldnames = [ 'usec', 'accel_0', 'accel_1', 'accel_2', 'gyro_0', 'gyro_1', 'gyro_2' ] - format = ' - value[float]. This allows to send a parameter to any other - component (such as the GCS) without the need of previous - knowledge of possible parameter names. Thus the same GCS can - store different parameters for different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a full - documentation of QGroundControl and IMU code. - ''' - id = MAVLINK_MSG_ID_PARAM_REQUEST_READ - name = 'PARAM_REQUEST_READ' - fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'] - ordered_fieldnames = [ 'param_index', 'target_system', 'target_component', 'param_id' ] - format = '= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return MAVLink_param_request_read_message(target_system, target_component, param_id, param_index) - - def param_request_read_send(self, target_system, target_component, param_id, param_index, force_mavlink1=False): - ''' - Request to read the onboard parameter with the param_id string id. - Onboard parameters are stored as key[const char*] -> - value[float]. This allows to send a parameter to any - other component (such as the GCS) without the need of - previous knowledge of possible parameter names. Thus - the same GCS can store different parameters for - different autopilots. See also - http://qgroundcontrol.org/parameter_interface for a - full documentation of QGroundControl and IMU code. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t) - - ''' - return self.send(self.param_request_read_encode(target_system, target_component, param_id, param_index), force_mavlink1=force_mavlink1) - - def param_request_list_encode(self, target_system, target_component): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_param_request_list_message(target_system, target_component) - - def param_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request all parameters of this component. After this request, all - parameters are emitted. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.param_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def param_value_encode(self, param_id, param_value, param_type, param_count, param_index): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return MAVLink_param_value_message(param_id, param_value, param_type, param_count, param_index) - - def param_value_send(self, param_id, param_value, param_type, param_count, param_index, force_mavlink1=False): - ''' - Emit the value of a onboard parameter. The inclusion of param_count - and param_index in the message allows the recipient to - keep track of received parameters and allows him to - re-request missing parameters after a loss or timeout. - - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - param_count : Total number of onboard parameters (uint16_t) - param_index : Index of this onboard parameter (uint16_t) - - ''' - return self.send(self.param_value_encode(param_id, param_value, param_type, param_count, param_index), force_mavlink1=force_mavlink1) - - def param_set_encode(self, target_system, target_component, param_id, param_value, param_type): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return MAVLink_param_set_message(target_system, target_component, param_id, param_value, param_type) - - def param_set_send(self, target_system, target_component, param_id, param_value, param_type, force_mavlink1=False): - ''' - Set a parameter value TEMPORARILY to RAM. It will be reset to default - on system reboot. Send the ACTION - MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM - contents to EEPROM. IMPORTANT: The receiving component - should acknowledge the new parameter value by sending - a param_value message to all communication partners. - This will also ensure that multiple GCS all have an - up-to-date list of all parameters. If the sending GCS - did not receive a PARAM_VALUE message within its - timeout time, it should re-send the PARAM_SET message. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_value : Onboard parameter value (float) - param_type : Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. (uint8_t) - - ''' - return self.send(self.param_set_encode(target_system, target_component, param_id, param_value, param_type), force_mavlink1=force_mavlink1) - - def gps_raw_int_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_gps_raw_int_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) - - def gps_raw_int_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global position - estimate of the system, but rather a RAW sensor value. - See message GLOBAL_POSITION for the global position - estimate. Coordinate frame is right-handed, Z-axis up - (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t) - eph : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.gps_raw_int_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_status_encode(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return MAVLink_gps_status_message(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) - - def gps_status_send(self, satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr, force_mavlink1=False): - ''' - The positioning status, as reported by GPS. This message is intended - to display status information about each satellite - visible to the receiver. See message GLOBAL_POSITION - for the global position estimate. This message can - contain information for up to 20 satellites. - - satellites_visible : Number of satellites visible (uint8_t) - satellite_prn : Global satellite ID (uint8_t) - satellite_used : 0: Satellite not used, 1: used for localization (uint8_t) - satellite_elevation : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t) - satellite_azimuth : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t) - satellite_snr : Signal to noise ratio of satellite (uint8_t) - - ''' - return self.send(self.gps_status_encode(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr), force_mavlink1=force_mavlink1) - - def scaled_imu_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return MAVLink_raw_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def raw_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for the usual 9DOF sensor setup. This message - should always contain the true raw values without any - scaling to allow data capture and system debugging. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - xacc : X acceleration (raw) (int16_t) - yacc : Y acceleration (raw) (int16_t) - zacc : Z acceleration (raw) (int16_t) - xgyro : Angular speed around X axis (raw) (int16_t) - ygyro : Angular speed around Y axis (raw) (int16_t) - zgyro : Angular speed around Z axis (raw) (int16_t) - xmag : X Magnetic field (raw) (int16_t) - ymag : Y Magnetic field (raw) (int16_t) - zmag : Z Magnetic field (raw) (int16_t) - - ''' - return self.send(self.raw_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def raw_pressure_encode(self, time_usec, press_abs, press_diff1, press_diff2, temperature): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return MAVLink_raw_pressure_message(time_usec, press_abs, press_diff1, press_diff2, temperature) - - def raw_pressure_send(self, time_usec, press_abs, press_diff1, press_diff2, temperature, force_mavlink1=False): - ''' - The RAW pressure readings for the typical setup of one absolute - pressure and one differential pressure sensor. The - sensor values should be the raw, UNSCALED ADC values. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - press_abs : Absolute pressure (raw) (int16_t) - press_diff1 : Differential pressure 1 (raw, 0 if nonexistant) (int16_t) - press_diff2 : Differential pressure 2 (raw, 0 if nonexistant) (int16_t) - temperature : Raw Temperature measurement (raw) (int16_t) - - ''' - return self.send(self.raw_pressure_encode(time_usec, press_abs, press_diff1, press_diff2, temperature), force_mavlink1=force_mavlink1) - - def scaled_pressure_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - The pressure readings for the typical setup of one absolute and - differential pressure sensor. The units are as - specified in each field. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def attitude_encode(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_message(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) - - def attitude_send(self, time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - roll : Roll angle (rad, -pi..+pi) (float) - pitch : Pitch angle (rad, -pi..+pi) (float) - yaw : Yaw angle (rad, -pi..+pi) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_encode(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def attitude_quaternion_encode(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return MAVLink_attitude_quaternion_message(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) - - def attitude_quaternion_send(self, time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q1 : Quaternion component 1, w (1 in null-rotation) (float) - q2 : Quaternion component 2, x (0 in null-rotation) (float) - q3 : Quaternion component 3, y (0 in null-rotation) (float) - q4 : Quaternion component 4, z (0 in null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - - ''' - return self.send(self.attitude_quaternion_encode(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed), force_mavlink1=force_mavlink1) - - def local_position_ned_encode(self, time_boot_ms, x, y, z, vx, vy, vz): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return MAVLink_local_position_ned_message(time_boot_ms, x, y, z, vx, vy, vz) - - def local_position_ned_send(self, time_boot_ms, x, y, z, vx, vy, vz, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (float) - vy : Y Speed (float) - vz : Z Speed (float) - - ''' - return self.send(self.local_position_ned_encode(time_boot_ms, x, y, z, vx, vy, vz), force_mavlink1=force_mavlink1) - - def global_position_int_encode(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return MAVLink_global_position_int_message(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) - - def global_position_int_send(self, time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the - resolution of float is not sufficient. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude, positive north), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude, positive east), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude, positive down), expressed as m/s * 100 (int16_t) - hdg : Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - - ''' - return self.send(self.global_position_int_encode(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg), force_mavlink1=force_mavlink1) - - def rc_channels_scaled_encode(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_scaled_message(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) - - def rc_channels_scaled_send(self, time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi, force_mavlink1=False): - ''' - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, - (100%) 10000. Channels that are inactive should be set - to UINT16_MAX. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_scaled : RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan2_scaled : RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan3_scaled : RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan4_scaled : RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan5_scaled : RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan6_scaled : RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan7_scaled : RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - chan8_scaled : RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. (int16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_scaled_encode(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi), force_mavlink1=force_mavlink1) - - def rc_channels_raw_encode(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_raw_message(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) - - def rc_channels_raw_send(self, time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi, force_mavlink1=False): - ''' - The RAW values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_raw_encode(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi), force_mavlink1=force_mavlink1) - - def servo_output_raw_encode(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return MAVLink_servo_output_raw_message(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw) - - def servo_output_raw_send(self, time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw, force_mavlink1=False): - ''' - The RAW values of the servo outputs (for RC input from the remote, use - the RC_CHANNELS messages). The standard PPM modulation - is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. - - time_usec : Timestamp (microseconds since system boot) (uint32_t) - port : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t) - servo1_raw : Servo output 1 value, in microseconds (uint16_t) - servo2_raw : Servo output 2 value, in microseconds (uint16_t) - servo3_raw : Servo output 3 value, in microseconds (uint16_t) - servo4_raw : Servo output 4 value, in microseconds (uint16_t) - servo5_raw : Servo output 5 value, in microseconds (uint16_t) - servo6_raw : Servo output 6 value, in microseconds (uint16_t) - servo7_raw : Servo output 7 value, in microseconds (uint16_t) - servo8_raw : Servo output 8 value, in microseconds (uint16_t) - servo9_raw : Servo output 9 value, in microseconds (uint16_t) - servo10_raw : Servo output 10 value, in microseconds (uint16_t) - servo11_raw : Servo output 11 value, in microseconds (uint16_t) - servo12_raw : Servo output 12 value, in microseconds (uint16_t) - servo13_raw : Servo output 13 value, in microseconds (uint16_t) - servo14_raw : Servo output 14 value, in microseconds (uint16_t) - servo15_raw : Servo output 15 value, in microseconds (uint16_t) - servo16_raw : Servo output 16 value, in microseconds (uint16_t) - - ''' - return self.send(self.servo_output_raw_encode(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw, servo9_raw, servo10_raw, servo11_raw, servo12_raw, servo13_raw, servo14_raw, servo15_raw, servo16_raw), force_mavlink1=force_mavlink1) - - def mission_request_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return MAVLink_mission_request_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_request_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - Request a partial list of mission items from the system/component. - http://qgroundcontrol.org/mavlink/waypoint_protocol. - If start and end index are the same, just send one - waypoint. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default (int16_t) - end_index : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t) - - ''' - return self.send(self.mission_request_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_write_partial_list_encode(self, target_system, target_component, start_index, end_index): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return MAVLink_mission_write_partial_list_message(target_system, target_component, start_index, end_index) - - def mission_write_partial_list_send(self, target_system, target_component, start_index, end_index, force_mavlink1=False): - ''' - This message is sent to the MAV to write a partial list. If start - index == end index, only one item will be transmitted - / updated. If the start index is NOT 0 and above the - current list size, this request should be REJECTED! - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start_index : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t) - end_index : End index, equal or greater than start index. (int16_t) - - ''' - return self.send(self.mission_write_partial_list_encode(target_system, target_component, start_index, end_index), force_mavlink1=force_mavlink1) - - def mission_item_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See also - http://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position, global: latitude (float) - y : PARAM6 / y position: global: longitude (float) - z : PARAM7 / z position: global: altitude (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def mission_request_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_message(target_system, target_component, seq) - - def mission_request_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_set_current_encode(self, target_system, target_component, seq): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_set_current_message(target_system, target_component, seq) - - def mission_set_current_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Set the mission item with sequence number seq as current item. This - means that the MAV will continue to this mission item - on the shortest path (not following the mission items - in-between). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_set_current_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def mission_current_encode(self, seq): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_current_message(seq) - - def mission_current_send(self, seq, force_mavlink1=False): - ''' - Message that announces the sequence number of the current active - mission item. The MAV will fly towards this mission - item. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_current_encode(seq), force_mavlink1=force_mavlink1) - - def mission_request_list_encode(self, target_system, target_component): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_request_list_message(target_system, target_component) - - def mission_request_list_send(self, target_system, target_component, force_mavlink1=False): - ''' - Request the overall list of mission items from the system/component. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_request_list_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_count_encode(self, target_system, target_component, count): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return MAVLink_mission_count_message(target_system, target_component, count) - - def mission_count_send(self, target_system, target_component, count, force_mavlink1=False): - ''' - This message is emitted as response to MISSION_REQUEST_LIST by the MAV - and to initiate a write transaction. The GCS can then - request the individual mission item based on the - knowledge of the total number of MISSIONs. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - count : Number of mission items in the sequence (uint16_t) - - ''' - return self.send(self.mission_count_encode(target_system, target_component, count), force_mavlink1=force_mavlink1) - - def mission_clear_all_encode(self, target_system, target_component): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_mission_clear_all_message(target_system, target_component) - - def mission_clear_all_send(self, target_system, target_component, force_mavlink1=False): - ''' - Delete all mission items at once. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.mission_clear_all_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def mission_item_reached_encode(self, seq): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_item_reached_message(seq) - - def mission_item_reached_send(self, seq, force_mavlink1=False): - ''' - A certain mission item has been reached. The system will either hold - this position (or circle on the orbit) or (if the - autocontinue on the WP was set) continue to the next - MISSION. - - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_item_reached_encode(seq), force_mavlink1=force_mavlink1) - - def mission_ack_encode(self, target_system, target_component, type): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return MAVLink_mission_ack_message(target_system, target_component, type) - - def mission_ack_send(self, target_system, target_component, type, force_mavlink1=False): - ''' - Ack message during MISSION handling. The type field states if this - message is a positive ack (type=0) or if an error - happened (type=non-zero). - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type : See MAV_MISSION_RESULT enum (uint8_t) - - ''' - return self.send(self.mission_ack_encode(target_system, target_component, type), force_mavlink1=force_mavlink1) - - def set_gps_global_origin_encode(self, target_system, latitude, longitude, altitude): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_set_gps_global_origin_message(target_system, latitude, longitude, altitude) - - def set_gps_global_origin_send(self, target_system, latitude, longitude, altitude, force_mavlink1=False): - ''' - As local waypoints exist, the global MISSION reference allows to - transform between the local coordinate frame and the - global (GPS) coordinate frame. This can be necessary - when e.g. in- and outdoor settings are connected and - the MAV should move from in- to outdoor. - - target_system : System ID (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.set_gps_global_origin_encode(target_system, latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def gps_global_origin_encode(self, latitude, longitude, altitude): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return MAVLink_gps_global_origin_message(latitude, longitude, altitude) - - def gps_global_origin_send(self, latitude, longitude, altitude, force_mavlink1=False): - ''' - Once the MAV sets a new GPS-Local correspondence, this message - announces the origin (0,0,0) position - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84), in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - - ''' - return self.send(self.gps_global_origin_encode(latitude, longitude, altitude), force_mavlink1=force_mavlink1) - - def param_map_rc_encode(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return MAVLink_param_map_rc_message(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) - - def param_map_rc_send(self, target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max, force_mavlink1=False): - ''' - Bind a RC channel to a parameter. The parameter should change accoding - to the RC channel value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - param_id : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char) - param_index : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t) - parameter_rc_channel_index : Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. (uint8_t) - param_value0 : Initial parameter value (float) - scale : Scale, maps the RC range [-1, 1] to a parameter value (float) - param_value_min : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float) - param_value_max : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float) - - ''' - return self.send(self.param_map_rc_encode(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max), force_mavlink1=force_mavlink1) - - def mission_request_int_encode(self, target_system, target_component, seq): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return MAVLink_mission_request_int_message(target_system, target_component, seq) - - def mission_request_int_send(self, target_system, target_component, seq, force_mavlink1=False): - ''' - Request the information of the mission item with the sequence number - seq. The response of the system to this message should - be a MISSION_ITEM_INT message. - http://qgroundcontrol.org/mavlink/waypoint_protocol - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Sequence (uint16_t) - - ''' - return self.send(self.mission_request_int_encode(target_system, target_component, seq), force_mavlink1=force_mavlink1) - - def safety_set_allowed_area_encode(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_set_allowed_area_message(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_set_allowed_area_send(self, target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Set a safety zone (volume), which is defined by two corners of a cube. - This message can be used to tell the MAV which - setpoints/MISSIONs to accept and which to reject. - Safety areas are often enforced by national or - competition regulations. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_set_allowed_area_encode(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def safety_allowed_area_encode(self, frame, p1x, p1y, p1z, p2x, p2y, p2z): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return MAVLink_safety_allowed_area_message(frame, p1x, p1y, p1z, p2x, p2y, p2z) - - def safety_allowed_area_send(self, frame, p1x, p1y, p1z, p2x, p2y, p2z, force_mavlink1=False): - ''' - Read out the safety zone the MAV currently assumes. - - frame : Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t) - p1x : x position 1 / Latitude 1 (float) - p1y : y position 1 / Longitude 1 (float) - p1z : z position 1 / Altitude 1 (float) - p2x : x position 2 / Latitude 2 (float) - p2y : y position 2 / Longitude 2 (float) - p2z : z position 2 / Altitude 2 (float) - - ''' - return self.send(self.safety_allowed_area_encode(frame, p1x, p1y, p1z, p2x, p2y, p2z), force_mavlink1=force_mavlink1) - - def attitude_quaternion_cov_encode(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return MAVLink_attitude_quaternion_cov_message(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance) - - def attitude_quaternion_cov_send(self, time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance, force_mavlink1=False): - ''' - The attitude in the aeronautical frame (right-handed, Z-down, X-front, - Y-right), expressed as quaternion. Quaternion order is - w, x, y, z and a zero rotation would be expressed as - (1 0 0 0). - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - q : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float) - rollspeed : Roll angular speed (rad/s) (float) - pitchspeed : Pitch angular speed (rad/s) (float) - yawspeed : Yaw angular speed (rad/s) (float) - covariance : Attitude covariance (float) - - ''' - return self.send(self.attitude_quaternion_cov_encode(time_boot_ms, q, rollspeed, pitchspeed, yawspeed, covariance), force_mavlink1=force_mavlink1) - - def nav_controller_output_encode(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return MAVLink_nav_controller_output_message(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) - - def nav_controller_output_send(self, nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error, force_mavlink1=False): - ''' - The state of the fixed wing navigation and position controller. - - nav_roll : Current desired roll in degrees (float) - nav_pitch : Current desired pitch in degrees (float) - nav_bearing : Current desired heading in degrees (int16_t) - target_bearing : Bearing to current MISSION/target in degrees (int16_t) - wp_dist : Distance to active MISSION in meters (uint16_t) - alt_error : Current altitude error in meters (float) - aspd_error : Current airspeed error in meters/second (float) - xtrack_error : Current crosstrack error on x-y plane in meters (float) - - ''' - return self.send(self.nav_controller_output_encode(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error), force_mavlink1=force_mavlink1) - - def global_position_int_cov_encode(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return MAVLink_global_position_int_cov_message(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) - - def global_position_int_cov_send(self, time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance, force_mavlink1=False): - ''' - The filtered global position (e.g. fused GPS and accelerometers). The - position is in GPS-frame (right-handed, Z-up). It is - designed as scaled integer message since the - resolution of float is not sufficient. NOTE: This - message is intended for onboard networks / companion - computers and higher-bandwidth links and optimized for - accuracy and completeness. Please use the - GLOBAL_POSITION_INT message for a minimal subset. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters), above MSL (int32_t) - relative_alt : Altitude above ground in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s (float) - vy : Ground Y Speed (Longitude), expressed as m/s (float) - vz : Ground Z Speed (Altitude), expressed as m/s (float) - covariance : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float) - - ''' - return self.send(self.global_position_int_cov_encode(time_boot_ms, time_utc, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance), force_mavlink1=force_mavlink1) - - def local_position_ned_cov_encode(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return MAVLink_local_position_ned_cov_message(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) - - def local_position_ned_cov_send(self, time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance, force_mavlink1=False): - ''' - The filtered local position (e.g. fused computer vision and - accelerometers). Coordinate frame is right-handed, - Z-axis down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp (uint32_t) - time_utc : Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. (uint64_t) - estimator_type : Class id of the estimator this estimate originated from. (uint8_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - vx : X Speed (m/s) (float) - vy : Y Speed (m/s) (float) - vz : Z Speed (m/s) (float) - ax : X Acceleration (m/s^2) (float) - ay : Y Acceleration (m/s^2) (float) - az : Z Acceleration (m/s^2) (float) - covariance : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float) - - ''' - return self.send(self.local_position_ned_cov_encode(time_boot_ms, time_utc, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance), force_mavlink1=force_mavlink1) - - def rc_channels_encode(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return MAVLink_rc_channels_message(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) - - def rc_channels_send(self, time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi, force_mavlink1=False): - ''' - The PPM values of the RC channels received. The standard PPM - modulation is as follows: 1000 microseconds: 0%, 2000 - microseconds: 100%. Individual receivers/transmitters - might violate this specification. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - chancount : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan9_raw : RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan10_raw : RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan11_raw : RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan12_raw : RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan13_raw : RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan14_raw : RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan15_raw : RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan16_raw : RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan17_raw : RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - chan18_raw : RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. (uint8_t) - - ''' - return self.send(self.rc_channels_encode(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi), force_mavlink1=force_mavlink1) - - def request_data_stream_encode(self, target_system, target_component, req_stream_id, req_message_rate, start_stop): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return MAVLink_request_data_stream_message(target_system, target_component, req_stream_id, req_message_rate, start_stop) - - def request_data_stream_send(self, target_system, target_component, req_stream_id, req_message_rate, start_stop, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - - target_system : The target requested to send the message stream. (uint8_t) - target_component : The target requested to send the message stream. (uint8_t) - req_stream_id : The ID of the requested data stream (uint8_t) - req_message_rate : The requested message rate (uint16_t) - start_stop : 1 to start sending, 0 to stop sending. (uint8_t) - - ''' - return self.send(self.request_data_stream_encode(target_system, target_component, req_stream_id, req_message_rate, start_stop), force_mavlink1=force_mavlink1) - - def data_stream_encode(self, stream_id, message_rate, on_off): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return MAVLink_data_stream_message(stream_id, message_rate, on_off) - - def data_stream_send(self, stream_id, message_rate, on_off, force_mavlink1=False): - ''' - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - - stream_id : The ID of the requested data stream (uint8_t) - message_rate : The message rate (uint16_t) - on_off : 1 stream is enabled, 0 stream is stopped. (uint8_t) - - ''' - return self.send(self.data_stream_encode(stream_id, message_rate, on_off), force_mavlink1=force_mavlink1) - - def manual_control_encode(self, target, x, y, z, r, buttons): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return MAVLink_manual_control_message(target, x, y, z, r, buttons) - - def manual_control_send(self, target, x, y, z, r, buttons, force_mavlink1=False): - ''' - This message provides an API for manually controlling the vehicle - using standard joystick axes nomenclature, along with - a joystick-like input device. Unused axes can be - disabled an buttons are also transmit as boolean - values of their - - target : The system to be controlled. (uint8_t) - x : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t) - y : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t) - z : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t) - r : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t) - buttons : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t) - - ''' - return self.send(self.manual_control_encode(target, x, y, z, r, buttons), force_mavlink1=force_mavlink1) - - def rc_channels_override_encode(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return MAVLink_rc_channels_override_message(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) - - def rc_channels_override_send(self, target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, force_mavlink1=False): - ''' - The RAW values of the RC channels sent to the MAV to override info - received from the RC radio. A value of UINT16_MAX - means no change to that channel. A value of 0 means - control of that channel should be released back to the - RC radio. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - chan1_raw : RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan2_raw : RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan3_raw : RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan4_raw : RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan5_raw : RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan6_raw : RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan7_raw : RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - chan8_raw : RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. (uint16_t) - - ''' - return self.send(self.rc_channels_override_encode(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw), force_mavlink1=force_mavlink1) - - def mission_item_int_encode(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_mission_item_int_message(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def mission_item_int_send(self, target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission - item on the system. The mission item can be either in - x, y, z meters (type: LOCAL) or x:lat, y:lon, - z:altitude. Local frame is Z-down, right handed (NED), - global frame is Z-up, right handed (ENU). See alsohttp - ://qgroundcontrol.org/mavlink/waypoint_protocol. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - seq : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t) - frame : The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.mission_item_int_encode(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def vfr_hud_encode(self, airspeed, groundspeed, heading, throttle, alt, climb): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return MAVLink_vfr_hud_message(airspeed, groundspeed, heading, throttle, alt, climb) - - def vfr_hud_send(self, airspeed, groundspeed, heading, throttle, alt, climb, force_mavlink1=False): - ''' - Metrics typically displayed on a HUD for fixed wing aircraft - - airspeed : Current airspeed in m/s (float) - groundspeed : Current ground speed in m/s (float) - heading : Current heading in degrees, in compass units (0..360, 0=north) (int16_t) - throttle : Current throttle setting in integer percent, 0 to 100 (uint16_t) - alt : Current altitude (MSL), in meters (float) - climb : Current climb rate in meters/second (float) - - ''' - return self.send(self.vfr_hud_encode(airspeed, groundspeed, heading, throttle, alt, climb), force_mavlink1=force_mavlink1) - - def command_int_encode(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return MAVLink_command_int_message(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) - - def command_int_send(self, target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z, force_mavlink1=False): - ''' - Message encoding a command with parameters as scaled integers. Scaling - depends on the actual command value. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - frame : The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h (uint8_t) - command : The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs (uint16_t) - current : false:0, true:1 (uint8_t) - autocontinue : autocontinue to next wp (uint8_t) - param1 : PARAM1, see MAV_CMD enum (float) - param2 : PARAM2, see MAV_CMD enum (float) - param3 : PARAM3, see MAV_CMD enum (float) - param4 : PARAM4, see MAV_CMD enum (float) - x : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t) - y : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t) - z : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float) - - ''' - return self.send(self.command_int_encode(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z), force_mavlink1=force_mavlink1) - - def command_long_encode(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return MAVLink_command_long_message(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) - - def command_long_send(self, target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7, force_mavlink1=False): - ''' - Send a command with up to seven parameters to the MAV - - target_system : System which should execute the command (uint8_t) - target_component : Component which should execute the command, 0 for all components (uint8_t) - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - confirmation : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t) - param1 : Parameter 1, as defined by MAV_CMD enum. (float) - param2 : Parameter 2, as defined by MAV_CMD enum. (float) - param3 : Parameter 3, as defined by MAV_CMD enum. (float) - param4 : Parameter 4, as defined by MAV_CMD enum. (float) - param5 : Parameter 5, as defined by MAV_CMD enum. (float) - param6 : Parameter 6, as defined by MAV_CMD enum. (float) - param7 : Parameter 7, as defined by MAV_CMD enum. (float) - - ''' - return self.send(self.command_long_encode(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7), force_mavlink1=force_mavlink1) - - def command_ack_encode(self, command, result): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return MAVLink_command_ack_message(command, result) - - def command_ack_send(self, command, result, force_mavlink1=False): - ''' - Report status of a command. Includes feedback wether the command was - executed. - - command : Command ID, as defined by MAV_CMD enum. (uint16_t) - result : See MAV_RESULT enum (uint8_t) - - ''' - return self.send(self.command_ack_encode(command, result), force_mavlink1=force_mavlink1) - - def manual_setpoint_encode(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return MAVLink_manual_setpoint_message(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) - - def manual_setpoint_send(self, time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch, force_mavlink1=False): - ''' - Setpoint in roll, pitch, yaw and thrust from the operator - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - roll : Desired roll rate in radians per second (float) - pitch : Desired pitch rate in radians per second (float) - yaw : Desired yaw rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (float) - mode_switch : Flight mode switch position, 0.. 255 (uint8_t) - manual_override_switch : Override mode switch position, 0.. 255 (uint8_t) - - ''' - return self.send(self.manual_setpoint_encode(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch), force_mavlink1=force_mavlink1) - - def set_attitude_target_encode(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_set_attitude_target_message(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def set_attitude_target_send(self, time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Sets a desired vehicle attitude. Used by an external controller to - command the vehicle (manual controller or other - system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.set_attitude_target_encode(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def attitude_target_encode(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return MAVLink_attitude_target_message(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) - - def attitude_target_send(self, time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust, force_mavlink1=False): - ''' - Reports the current commanded attitude of the vehicle as specified by - the autopilot. This should match the commands sent in - a SET_ATTITUDE_TARGET message if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - type_mask : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - body_roll_rate : Body roll rate in radians per second (float) - body_pitch_rate : Body roll rate in radians per second (float) - body_yaw_rate : Body roll rate in radians per second (float) - thrust : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float) - - ''' - return self.send(self.attitude_target_encode(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust), force_mavlink1=force_mavlink1) - - def set_position_target_local_ned_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_local_ned_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_local_ned_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position in a local north-east-down coordinate - frame. Used by an external controller to command the - vehicle (manual controller or other system). - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_local_ned_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_local_ned_encode(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_local_ned_message(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_local_ned_send(self, time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_LOCAL_NED if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - x : X Position in NED frame in meters (float) - y : Y Position in NED frame in meters (float) - z : Z Position in NED frame in meters (note, altitude is negative in NED) (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_local_ned_encode(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def set_position_target_global_int_encode(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_set_position_target_global_int_message(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def set_position_target_global_int_send(self, time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Sets a desired vehicle position, velocity, and/or acceleration in a - global coordinate system (WGS84). Used by an external - controller to command the vehicle (manual controller - or other system). - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.set_position_target_global_int_encode(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def position_target_global_int_encode(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return MAVLink_position_target_global_int_message(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) - - def position_target_global_int_send(self, time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate, force_mavlink1=False): - ''' - Reports the current commanded vehicle position, velocity, and - acceleration as specified by the autopilot. This - should match the commands sent in - SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being - controlled this way. - - time_boot_ms : Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t) - coordinate_frame : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t) - type_mask : Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t) - lat_int : X Position in WGS84 frame in 1e7 * meters (int32_t) - lon_int : Y Position in WGS84 frame in 1e7 * meters (int32_t) - alt : Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float) - vx : X velocity in NED frame in meter / s (float) - vy : Y velocity in NED frame in meter / s (float) - vz : Z velocity in NED frame in meter / s (float) - afx : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afy : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - afz : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float) - yaw : yaw setpoint in rad (float) - yaw_rate : yaw rate setpoint in rad/s (float) - - ''' - return self.send(self.position_target_global_int_encode(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate), force_mavlink1=force_mavlink1) - - def local_position_ned_system_global_offset_encode(self, time_boot_ms, x, y, z, roll, pitch, yaw): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return MAVLink_local_position_ned_system_global_offset_message(time_boot_ms, x, y, z, roll, pitch, yaw) - - def local_position_ned_system_global_offset_send(self, time_boot_ms, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages - of MAV X and the global coordinate frame in NED - coordinates. Coordinate frame is right-handed, Z-axis - down (aeronautical frame, NED / north-east-down - convention) - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - x : X Position (float) - y : Y Position (float) - z : Z Position (float) - roll : Roll (float) - pitch : Pitch (float) - yaw : Yaw (float) - - ''' - return self.send(self.local_position_ned_system_global_offset_encode(time_boot_ms, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def hil_state_encode(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_message(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) - - def hil_state_send(self, time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc, force_mavlink1=False): - ''' - DEPRECATED PACKET! Suffers from missing airspeed fields and - singularities due to Euler angles. Please use - HIL_STATE_QUATERNION instead. Sent from simulation to - autopilot. This packet is useful for high throughput - applications such as hardware in the loop simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll : Roll angle (rad) (float) - pitch : Pitch angle (rad) (float) - yaw : Yaw angle (rad) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_encode(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def hil_controls_encode(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return MAVLink_hil_controls_message(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) - - def hil_controls_send(self, time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - roll_ailerons : Control output -1 .. 1 (float) - pitch_elevator : Control output -1 .. 1 (float) - yaw_rudder : Control output -1 .. 1 (float) - throttle : Throttle 0 .. 1 (float) - aux1 : Aux 1, -1 .. 1 (float) - aux2 : Aux 2, -1 .. 1 (float) - aux3 : Aux 3, -1 .. 1 (float) - aux4 : Aux 4, -1 .. 1 (float) - mode : System mode (MAV_MODE) (uint8_t) - nav_mode : Navigation mode (MAV_NAV_MODE) (uint8_t) - - ''' - return self.send(self.hil_controls_encode(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode), force_mavlink1=force_mavlink1) - - def hil_rc_inputs_raw_encode(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return MAVLink_hil_rc_inputs_raw_message(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) - - def hil_rc_inputs_raw_send(self, time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi, force_mavlink1=False): - ''' - Sent from simulation to autopilot. The RAW values of the RC channels - received. The standard PPM modulation is as follows: - 1000 microseconds: 0%, 2000 microseconds: 100%. - Individual receivers/transmitters might violate this - specification. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - chan1_raw : RC channel 1 value, in microseconds (uint16_t) - chan2_raw : RC channel 2 value, in microseconds (uint16_t) - chan3_raw : RC channel 3 value, in microseconds (uint16_t) - chan4_raw : RC channel 4 value, in microseconds (uint16_t) - chan5_raw : RC channel 5 value, in microseconds (uint16_t) - chan6_raw : RC channel 6 value, in microseconds (uint16_t) - chan7_raw : RC channel 7 value, in microseconds (uint16_t) - chan8_raw : RC channel 8 value, in microseconds (uint16_t) - chan9_raw : RC channel 9 value, in microseconds (uint16_t) - chan10_raw : RC channel 10 value, in microseconds (uint16_t) - chan11_raw : RC channel 11 value, in microseconds (uint16_t) - chan12_raw : RC channel 12 value, in microseconds (uint16_t) - rssi : Receive signal strength indicator, 0: 0%, 255: 100% (uint8_t) - - ''' - return self.send(self.hil_rc_inputs_raw_encode(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi), force_mavlink1=force_mavlink1) - - def hil_actuator_controls_encode(self, time_usec, controls, mode, flags): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return MAVLink_hil_actuator_controls_message(time_usec, controls, mode, flags) - - def hil_actuator_controls_send(self, time_usec, controls, mode, flags, force_mavlink1=False): - ''' - Sent from autopilot to simulation. Hardware in the loop control - outputs (replacement for HIL_CONTROLS) - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - controls : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float) - mode : System mode (MAV_MODE), includes arming state. (uint8_t) - flags : Flags as bitfield, reserved for future use. (uint64_t) - - ''' - return self.send(self.hil_actuator_controls_encode(time_usec, controls, mode, flags), force_mavlink1=force_mavlink1) - - def optical_flow_encode(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return MAVLink_optical_flow_message(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) - - def optical_flow_send(self, time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance, force_mavlink1=False): - ''' - Optical flow from a flow sensor (e.g. optical mouse sensor) - - time_usec : Timestamp (UNIX) (uint64_t) - sensor_id : Sensor ID (uint8_t) - flow_x : Flow in pixels * 10 in x-sensor direction (dezi-pixels) (int16_t) - flow_y : Flow in pixels * 10 in y-sensor direction (dezi-pixels) (int16_t) - flow_comp_m_x : Flow in meters in x-sensor direction, angular-speed compensated (float) - flow_comp_m_y : Flow in meters in y-sensor direction, angular-speed compensated (float) - quality : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t) - ground_distance : Ground distance in meters. Positive value: distance known. Negative value: Unknown distance (float) - - ''' - return self.send(self.optical_flow_encode(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance), force_mavlink1=force_mavlink1) - - def global_vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_global_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def global_vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.global_vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vision_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vision_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vision_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def vision_speed_estimate_encode(self, usec, x, y, z): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return MAVLink_vision_speed_estimate_message(usec, x, y, z) - - def vision_speed_estimate_send(self, usec, x, y, z, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X speed (float) - y : Global Y speed (float) - z : Global Z speed (float) - - ''' - return self.send(self.vision_speed_estimate_encode(usec, x, y, z), force_mavlink1=force_mavlink1) - - def vicon_position_estimate_encode(self, usec, x, y, z, roll, pitch, yaw): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return MAVLink_vicon_position_estimate_message(usec, x, y, z, roll, pitch, yaw) - - def vicon_position_estimate_send(self, usec, x, y, z, roll, pitch, yaw, force_mavlink1=False): - ''' - - - usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - x : Global X position (float) - y : Global Y position (float) - z : Global Z position (float) - roll : Roll angle in rad (float) - pitch : Pitch angle in rad (float) - yaw : Yaw angle in rad (float) - - ''' - return self.send(self.vicon_position_estimate_encode(usec, x, y, z, roll, pitch, yaw), force_mavlink1=force_mavlink1) - - def highres_imu_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return MAVLink_highres_imu_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def highres_imu_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis (rad / sec) (float) - ygyro : Angular speed around Y axis (rad / sec) (float) - zgyro : Angular speed around Z axis (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t) - - ''' - return self.send(self.highres_imu_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def optical_flow_rad_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_optical_flow_rad_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def optical_flow_rad_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse - sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.optical_flow_rad_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_sensor_encode(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return MAVLink_hil_sensor_message(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) - - def hil_sensor_send(self, time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated, force_mavlink1=False): - ''' - The IMU readings in SI units in NED body frame - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - xacc : X acceleration (m/s^2) (float) - yacc : Y acceleration (m/s^2) (float) - zacc : Z acceleration (m/s^2) (float) - xgyro : Angular speed around X axis in body frame (rad / sec) (float) - ygyro : Angular speed around Y axis in body frame (rad / sec) (float) - zgyro : Angular speed around Z axis in body frame (rad / sec) (float) - xmag : X Magnetic field (Gauss) (float) - ymag : Y Magnetic field (Gauss) (float) - zmag : Z Magnetic field (Gauss) (float) - abs_pressure : Absolute pressure in millibar (float) - diff_pressure : Differential pressure (airspeed) in millibar (float) - pressure_alt : Altitude calculated from pressure (float) - temperature : Temperature in degrees celsius (float) - fields_updated : Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t) - - ''' - return self.send(self.hil_sensor_encode(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated), force_mavlink1=force_mavlink1) - - def sim_state_encode(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return MAVLink_sim_state_message(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) - - def sim_state_send(self, q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd, force_mavlink1=False): - ''' - Status of simulation environment, if used - - q1 : True attitude quaternion component 1, w (1 in null-rotation) (float) - q2 : True attitude quaternion component 2, x (0 in null-rotation) (float) - q3 : True attitude quaternion component 3, y (0 in null-rotation) (float) - q4 : True attitude quaternion component 4, z (0 in null-rotation) (float) - roll : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float) - pitch : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float) - yaw : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float) - xacc : X acceleration m/s/s (float) - yacc : Y acceleration m/s/s (float) - zacc : Z acceleration m/s/s (float) - xgyro : Angular speed around X axis rad/s (float) - ygyro : Angular speed around Y axis rad/s (float) - zgyro : Angular speed around Z axis rad/s (float) - lat : Latitude in degrees (float) - lon : Longitude in degrees (float) - alt : Altitude in meters (float) - std_dev_horz : Horizontal position standard deviation (float) - std_dev_vert : Vertical position standard deviation (float) - vn : True velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : True velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : True velocity in m/s in DOWN direction in earth-fixed NED frame (float) - - ''' - return self.send(self.sim_state_encode(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd), force_mavlink1=force_mavlink1) - - def radio_status_encode(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return MAVLink_radio_status_message(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) - - def radio_status_send(self, rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed, force_mavlink1=False): - ''' - Status generated by radio and injected into MAVLink stream. - - rssi : Local signal strength (uint8_t) - remrssi : Remote signal strength (uint8_t) - txbuf : Remaining free buffer space in percent. (uint8_t) - noise : Background noise level (uint8_t) - remnoise : Remote background noise level (uint8_t) - rxerrors : Receive errors (uint16_t) - fixed : Count of error corrected packets (uint16_t) - - ''' - return self.send(self.radio_status_encode(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed), force_mavlink1=force_mavlink1) - - def file_transfer_protocol_encode(self, target_network, target_system, target_component, payload): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_file_transfer_protocol_message(target_network, target_system, target_component, payload) - - def file_transfer_protocol_send(self, target_network, target_system, target_component, payload, force_mavlink1=False): - ''' - File transfer message - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.file_transfer_protocol_encode(target_network, target_system, target_component, payload), force_mavlink1=force_mavlink1) - - def timesync_encode(self, tc1, ts1): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return MAVLink_timesync_message(tc1, ts1) - - def timesync_send(self, tc1, ts1, force_mavlink1=False): - ''' - Time synchronization message. - - tc1 : Time sync timestamp 1 (int64_t) - ts1 : Time sync timestamp 2 (int64_t) - - ''' - return self.send(self.timesync_encode(tc1, ts1), force_mavlink1=force_mavlink1) - - def camera_trigger_encode(self, time_usec, seq): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return MAVLink_camera_trigger_message(time_usec, seq) - - def camera_trigger_send(self, time_usec, seq, force_mavlink1=False): - ''' - Camera-IMU triggering and synchronisation message. - - time_usec : Timestamp for the image frame in microseconds (uint64_t) - seq : Image frame sequence (uint32_t) - - ''' - return self.send(self.camera_trigger_encode(time_usec, seq), force_mavlink1=force_mavlink1) - - def hil_gps_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return MAVLink_hil_gps_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) - - def hil_gps_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible, force_mavlink1=False): - ''' - The global position, as returned by the Global Positioning System - (GPS). This is NOT the global - position estimate of the sytem, but rather a RAW - sensor value. See message GLOBAL_POSITION for the - global position estimate. Coordinate frame is right- - handed, Z-axis up (GPS frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: 65535 (uint16_t) - vn : GPS velocity in cm/s in NORTH direction in earth-fixed NED frame (int16_t) - ve : GPS velocity in cm/s in EAST direction in earth-fixed NED frame (int16_t) - vd : GPS velocity in cm/s in DOWN direction in earth-fixed NED frame (int16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - - ''' - return self.send(self.hil_gps_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible), force_mavlink1=force_mavlink1) - - def hil_optical_flow_encode(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return MAVLink_hil_optical_flow_message(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) - - def hil_optical_flow_send(self, time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance, force_mavlink1=False): - ''' - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical - mouse sensor) - - time_usec : Timestamp (microseconds, synced to UNIX time or since system boot) (uint64_t) - sensor_id : Sensor ID (uint8_t) - integration_time_us : Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t) - integrated_x : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float) - integrated_y : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float) - integrated_xgyro : RH rotation around X axis (rad) (float) - integrated_ygyro : RH rotation around Y axis (rad) (float) - integrated_zgyro : RH rotation around Z axis (rad) (float) - temperature : Temperature * 100 in centi-degrees Celsius (int16_t) - quality : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t) - time_delta_distance_us : Time in microseconds since the distance was sampled. (uint32_t) - distance : Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. (float) - - ''' - return self.send(self.hil_optical_flow_encode(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance), force_mavlink1=force_mavlink1) - - def hil_state_quaternion_encode(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return MAVLink_hil_state_quaternion_message(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) - - def hil_state_quaternion_send(self, time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc, force_mavlink1=False): - ''' - Sent from simulation to autopilot, avoids in contrast to HIL_STATE - singularities. This packet is useful for high - throughput applications such as hardware in the loop - simulations. - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - attitude_quaternion : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float) - rollspeed : Body frame roll / phi angular speed (rad/s) (float) - pitchspeed : Body frame pitch / theta angular speed (rad/s) (float) - yawspeed : Body frame yaw / psi angular speed (rad/s) (float) - lat : Latitude, expressed as * 1E7 (int32_t) - lon : Longitude, expressed as * 1E7 (int32_t) - alt : Altitude in meters, expressed as * 1000 (millimeters) (int32_t) - vx : Ground X Speed (Latitude), expressed as m/s * 100 (int16_t) - vy : Ground Y Speed (Longitude), expressed as m/s * 100 (int16_t) - vz : Ground Z Speed (Altitude), expressed as m/s * 100 (int16_t) - ind_airspeed : Indicated airspeed, expressed as m/s * 100 (uint16_t) - true_airspeed : True airspeed, expressed as m/s * 100 (uint16_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - - ''' - return self.send(self.hil_state_quaternion_encode(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc), force_mavlink1=force_mavlink1) - - def scaled_imu2_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu2_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu2_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for secondary 9DOF sensor setup. This message - should contain the scaled values to the described - units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu2_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def log_request_list_encode(self, target_system, target_component, start, end): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return MAVLink_log_request_list_message(target_system, target_component, start, end) - - def log_request_list_send(self, target_system, target_component, start, end, force_mavlink1=False): - ''' - Request a list of available logs. On some systems calling this may - stop on-board logging until LOG_REQUEST_END is called. - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - start : First log id (0 for first available) (uint16_t) - end : Last log id (0xffff for last available) (uint16_t) - - ''' - return self.send(self.log_request_list_encode(target_system, target_component, start, end), force_mavlink1=force_mavlink1) - - def log_entry_encode(self, id, num_logs, last_log_num, time_utc, size): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return MAVLink_log_entry_message(id, num_logs, last_log_num, time_utc, size) - - def log_entry_send(self, id, num_logs, last_log_num, time_utc, size, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_LIST - - id : Log id (uint16_t) - num_logs : Total number of logs (uint16_t) - last_log_num : High log number (uint16_t) - time_utc : UTC timestamp of log in seconds since 1970, or 0 if not available (uint32_t) - size : Size of the log (may be approximate) in bytes (uint32_t) - - ''' - return self.send(self.log_entry_encode(id, num_logs, last_log_num, time_utc, size), force_mavlink1=force_mavlink1) - - def log_request_data_encode(self, target_system, target_component, id, ofs, count): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return MAVLink_log_request_data_message(target_system, target_component, id, ofs, count) - - def log_request_data_send(self, target_system, target_component, id, ofs, count, force_mavlink1=False): - ''' - Request a chunk of a log - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (uint32_t) - - ''' - return self.send(self.log_request_data_encode(target_system, target_component, id, ofs, count), force_mavlink1=force_mavlink1) - - def log_data_encode(self, id, ofs, count, data): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return MAVLink_log_data_message(id, ofs, count, data) - - def log_data_send(self, id, ofs, count, data, force_mavlink1=False): - ''' - Reply to LOG_REQUEST_DATA - - id : Log id (from LOG_ENTRY reply) (uint16_t) - ofs : Offset into the log (uint32_t) - count : Number of bytes (zero for end of log) (uint8_t) - data : log data (uint8_t) - - ''' - return self.send(self.log_data_encode(id, ofs, count, data), force_mavlink1=force_mavlink1) - - def log_erase_encode(self, target_system, target_component): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_erase_message(target_system, target_component) - - def log_erase_send(self, target_system, target_component, force_mavlink1=False): - ''' - Erase all logs - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_erase_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def log_request_end_encode(self, target_system, target_component): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return MAVLink_log_request_end_message(target_system, target_component) - - def log_request_end_send(self, target_system, target_component, force_mavlink1=False): - ''' - Stop log transfer and resume normal logging - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - - ''' - return self.send(self.log_request_end_encode(target_system, target_component), force_mavlink1=force_mavlink1) - - def gps_inject_data_encode(self, target_system, target_component, len, data): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return MAVLink_gps_inject_data_message(target_system, target_component, len, data) - - def gps_inject_data_send(self, target_system, target_component, len, data, force_mavlink1=False): - ''' - data for injecting into the onboard GPS (used for DGPS) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - len : data length (uint8_t) - data : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t) - - ''' - return self.send(self.gps_inject_data_encode(target_system, target_component, len, data), force_mavlink1=force_mavlink1) - - def gps2_raw_encode(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return MAVLink_gps2_raw_message(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) - - def gps2_raw_send(self, time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age, force_mavlink1=False): - ''' - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS - frame). - - time_usec : Timestamp (microseconds since UNIX epoch or microseconds since system boot) (uint64_t) - fix_type : See the GPS_FIX_TYPE enum. (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) (int32_t) - eph : GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - epv : GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX (uint16_t) - vel : GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX (uint16_t) - cog : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t) - satellites_visible : Number of satellites visible. If unknown, set to 255 (uint8_t) - dgps_numch : Number of DGPS satellites (uint8_t) - dgps_age : Age of DGPS info (uint32_t) - - ''' - return self.send(self.gps2_raw_encode(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age), force_mavlink1=force_mavlink1) - - def power_status_encode(self, Vcc, Vservo, flags): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return MAVLink_power_status_message(Vcc, Vservo, flags) - - def power_status_send(self, Vcc, Vservo, flags, force_mavlink1=False): - ''' - Power supply status - - Vcc : 5V rail voltage in millivolts (uint16_t) - Vservo : servo rail voltage in millivolts (uint16_t) - flags : power supply status flags (see MAV_POWER_STATUS enum) (uint16_t) - - ''' - return self.send(self.power_status_encode(Vcc, Vservo, flags), force_mavlink1=force_mavlink1) - - def serial_control_encode(self, device, flags, timeout, baudrate, count, data): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return MAVLink_serial_control_message(device, flags, timeout, baudrate, count, data) - - def serial_control_send(self, device, flags, timeout, baudrate, count, data, force_mavlink1=False): - ''' - Control a serial port. This can be used for raw access to an onboard - serial peripheral such as a GPS or telemetry radio. It - is designed to make it possible to update the devices - firmware via MAVLink messages or change the devices - settings. A message with zero bytes can be used to - change just the baudrate. - - device : See SERIAL_CONTROL_DEV enum (uint8_t) - flags : See SERIAL_CONTROL_FLAG enum (uint8_t) - timeout : Timeout for reply data in milliseconds (uint16_t) - baudrate : Baudrate of transfer. Zero means no change. (uint32_t) - count : how many bytes in this transfer (uint8_t) - data : serial data (uint8_t) - - ''' - return self.send(self.serial_control_encode(device, flags, timeout, baudrate, count, data), force_mavlink1=force_mavlink1) - - def gps_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def gps2_rtk_encode(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return MAVLink_gps2_rtk_message(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) - - def gps2_rtk_send(self, time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses, force_mavlink1=False): - ''' - RTK GPS data. Gives information on the relative baseline calculation - the GPS is reporting - - time_last_baseline_ms : Time since boot of last baseline message received in ms. (uint32_t) - rtk_receiver_id : Identification of connected RTK receiver. (uint8_t) - wn : GPS Week Number of last baseline (uint16_t) - tow : GPS Time of Week of last baseline (uint32_t) - rtk_health : GPS-specific health report for RTK data. (uint8_t) - rtk_rate : Rate of baseline messages being received by GPS, in HZ (uint8_t) - nsats : Current number of sats used for RTK calculation. (uint8_t) - baseline_coords_type : Coordinate system of baseline. 0 == ECEF, 1 == NED (uint8_t) - baseline_a_mm : Current baseline in ECEF x or NED north component in mm. (int32_t) - baseline_b_mm : Current baseline in ECEF y or NED east component in mm. (int32_t) - baseline_c_mm : Current baseline in ECEF z or NED down component in mm. (int32_t) - accuracy : Current estimate of baseline accuracy. (uint32_t) - iar_num_hypotheses : Current number of integer ambiguity hypotheses. (int32_t) - - ''' - return self.send(self.gps2_rtk_encode(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses), force_mavlink1=force_mavlink1) - - def scaled_imu3_encode(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return MAVLink_scaled_imu3_message(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) - - def scaled_imu3_send(self, time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, force_mavlink1=False): - ''' - The RAW IMU readings for 3rd 9DOF sensor setup. This message should - contain the scaled values to the described units - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - xacc : X acceleration (mg) (int16_t) - yacc : Y acceleration (mg) (int16_t) - zacc : Z acceleration (mg) (int16_t) - xgyro : Angular speed around X axis (millirad /sec) (int16_t) - ygyro : Angular speed around Y axis (millirad /sec) (int16_t) - zgyro : Angular speed around Z axis (millirad /sec) (int16_t) - xmag : X Magnetic field (milli tesla) (int16_t) - ymag : Y Magnetic field (milli tesla) (int16_t) - zmag : Z Magnetic field (milli tesla) (int16_t) - - ''' - return self.send(self.scaled_imu3_encode(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag), force_mavlink1=force_mavlink1) - - def data_transmission_handshake_encode(self, type, size, width, height, packets, payload, jpg_quality): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return MAVLink_data_transmission_handshake_message(type, size, width, height, packets, payload, jpg_quality) - - def data_transmission_handshake_send(self, type, size, width, height, packets, payload, jpg_quality, force_mavlink1=False): - ''' - - - type : type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) (uint8_t) - size : total data size in bytes (set on ACK only) (uint32_t) - width : Width of a matrix or image (uint16_t) - height : Height of a matrix or image (uint16_t) - packets : number of packets beeing sent (set on ACK only) (uint16_t) - payload : payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) (uint8_t) - jpg_quality : JPEG quality out of [1,100] (uint8_t) - - ''' - return self.send(self.data_transmission_handshake_encode(type, size, width, height, packets, payload, jpg_quality), force_mavlink1=force_mavlink1) - - def encapsulated_data_encode(self, seqnr, data): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return MAVLink_encapsulated_data_message(seqnr, data) - - def encapsulated_data_send(self, seqnr, data, force_mavlink1=False): - ''' - - - seqnr : sequence number (starting with 0 on every transmission) (uint16_t) - data : image data bytes (uint8_t) - - ''' - return self.send(self.encapsulated_data_encode(seqnr, data), force_mavlink1=force_mavlink1) - - def distance_sensor_encode(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return MAVLink_distance_sensor_message(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) - - def distance_sensor_send(self, time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance, force_mavlink1=False): - ''' - - - time_boot_ms : Time since system boot (uint32_t) - min_distance : Minimum distance the sensor can measure in centimeters (uint16_t) - max_distance : Maximum distance the sensor can measure in centimeters (uint16_t) - current_distance : Current distance reading (uint16_t) - type : Type from MAV_DISTANCE_SENSOR enum. (uint8_t) - id : Onboard ID of the sensor (uint8_t) - orientation : Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. (uint8_t) - covariance : Measurement covariance in centimeters, 0 for unknown / invalid readings (uint8_t) - - ''' - return self.send(self.distance_sensor_encode(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance), force_mavlink1=force_mavlink1) - - def terrain_request_encode(self, lat, lon, grid_spacing, mask): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return MAVLink_terrain_request_message(lat, lon, grid_spacing, mask) - - def terrain_request_send(self, lat, lon, grid_spacing, mask, force_mavlink1=False): - ''' - Request for terrain data and terrain status - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - mask : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t) - - ''' - return self.send(self.terrain_request_encode(lat, lon, grid_spacing, mask), force_mavlink1=force_mavlink1) - - def terrain_data_encode(self, lat, lon, grid_spacing, gridbit, data): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return MAVLink_terrain_data_message(lat, lon, grid_spacing, gridbit, data) - - def terrain_data_send(self, lat, lon, grid_spacing, gridbit, data, force_mavlink1=False): - ''' - Terrain data sent from GCS. The lat/lon and grid_spacing must be the - same as a lat/lon from a TERRAIN_REQUEST - - lat : Latitude of SW corner of first grid (degrees *10^7) (int32_t) - lon : Longitude of SW corner of first grid (in degrees *10^7) (int32_t) - grid_spacing : Grid spacing in meters (uint16_t) - gridbit : bit within the terrain request mask (uint8_t) - data : Terrain data in meters AMSL (int16_t) - - ''' - return self.send(self.terrain_data_encode(lat, lon, grid_spacing, gridbit, data), force_mavlink1=force_mavlink1) - - def terrain_check_encode(self, lat, lon): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return MAVLink_terrain_check_message(lat, lon) - - def terrain_check_send(self, lat, lon, force_mavlink1=False): - ''' - Request that the vehicle report terrain height at the given location. - Used by GCS to check if vehicle has all terrain data - needed for a mission. - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - - ''' - return self.send(self.terrain_check_encode(lat, lon), force_mavlink1=force_mavlink1) - - def terrain_report_encode(self, lat, lon, spacing, terrain_height, current_height, pending, loaded): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return MAVLink_terrain_report_message(lat, lon, spacing, terrain_height, current_height, pending, loaded) - - def terrain_report_send(self, lat, lon, spacing, terrain_height, current_height, pending, loaded, force_mavlink1=False): - ''' - Response from a TERRAIN_CHECK request - - lat : Latitude (degrees *10^7) (int32_t) - lon : Longitude (degrees *10^7) (int32_t) - spacing : grid spacing (zero if terrain at this location unavailable) (uint16_t) - terrain_height : Terrain height in meters AMSL (float) - current_height : Current vehicle height above lat/lon terrain height (meters) (float) - pending : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t) - loaded : Number of 4x4 terrain blocks in memory (uint16_t) - - ''' - return self.send(self.terrain_report_encode(lat, lon, spacing, terrain_height, current_height, pending, loaded), force_mavlink1=force_mavlink1) - - def scaled_pressure2_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure2_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure2_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 2nd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure2_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def att_pos_mocap_encode(self, time_usec, q, x, y, z): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return MAVLink_att_pos_mocap_message(time_usec, q, x, y, z) - - def att_pos_mocap_send(self, time_usec, q, x, y, z, force_mavlink1=False): - ''' - Motion capture attitude and position - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - q : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float) - x : X position in meters (NED) (float) - y : Y position in meters (NED) (float) - z : Z position in meters (NED) (float) - - ''' - return self.send(self.att_pos_mocap_encode(time_usec, q, x, y, z), force_mavlink1=force_mavlink1) - - def set_actuator_control_target_encode(self, time_usec, group_mlx, target_system, target_component, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_set_actuator_control_target_message(time_usec, group_mlx, target_system, target_component, controls) - - def set_actuator_control_target_send(self, time_usec, group_mlx, target_system, target_component, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.set_actuator_control_target_encode(time_usec, group_mlx, target_system, target_component, controls), force_mavlink1=force_mavlink1) - - def actuator_control_target_encode(self, time_usec, group_mlx, controls): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return MAVLink_actuator_control_target_message(time_usec, group_mlx, controls) - - def actuator_control_target_send(self, time_usec, group_mlx, controls, force_mavlink1=False): - ''' - Set the vehicle attitude and body angular rates. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - group_mlx : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t) - controls : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float) - - ''' - return self.send(self.actuator_control_target_encode(time_usec, group_mlx, controls), force_mavlink1=force_mavlink1) - - def altitude_encode(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return MAVLink_altitude_message(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) - - def altitude_send(self, time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance, force_mavlink1=False): - ''' - The current system altitude. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - altitude_monotonic : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float) - altitude_amsl : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float) - altitude_local : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float) - altitude_relative : This is the altitude above the home position. It resets on each change of the current home position. (float) - altitude_terrain : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float) - bottom_clearance : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float) - - ''' - return self.send(self.altitude_encode(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance), force_mavlink1=force_mavlink1) - - def resource_request_encode(self, request_id, uri_type, uri, transfer_type, storage): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return MAVLink_resource_request_message(request_id, uri_type, uri, transfer_type, storage) - - def resource_request_send(self, request_id, uri_type, uri, transfer_type, storage, force_mavlink1=False): - ''' - The autopilot is requesting a resource (file, binary, other type of - data) - - request_id : Request ID. This ID should be re-used when sending back URI contents (uint8_t) - uri_type : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t) - uri : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t) - transfer_type : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t) - storage : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t) - - ''' - return self.send(self.resource_request_encode(request_id, uri_type, uri, transfer_type, storage), force_mavlink1=force_mavlink1) - - def scaled_pressure3_encode(self, time_boot_ms, press_abs, press_diff, temperature): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return MAVLink_scaled_pressure3_message(time_boot_ms, press_abs, press_diff, temperature) - - def scaled_pressure3_send(self, time_boot_ms, press_abs, press_diff, temperature, force_mavlink1=False): - ''' - Barometer readings for 3rd barometer - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - press_abs : Absolute pressure (hectopascal) (float) - press_diff : Differential pressure 1 (hectopascal) (float) - temperature : Temperature measurement (0.01 degrees celsius) (int16_t) - - ''' - return self.send(self.scaled_pressure3_encode(time_boot_ms, press_abs, press_diff, temperature), force_mavlink1=force_mavlink1) - - def follow_target_encode(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return MAVLink_follow_target_message(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) - - def follow_target_send(self, timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state, force_mavlink1=False): - ''' - current motion information from a designated system - - timestamp : Timestamp in milliseconds since system boot (uint64_t) - est_capabilities : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : AMSL, in meters (float) - vel : target velocity (0,0,0) for unknown (float) - acc : linear target acceleration (0,0,0) for unknown (float) - attitude_q : (1 0 0 0 for unknown) (float) - rates : (0 0 0 for unknown) (float) - position_cov : eph epv (float) - custom_state : button states or switches of a tracker device (uint64_t) - - ''' - return self.send(self.follow_target_encode(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state), force_mavlink1=force_mavlink1) - - def control_system_state_encode(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return MAVLink_control_system_state_message(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) - - def control_system_state_send(self, time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate, force_mavlink1=False): - ''' - The smoothed, monotonic system state used to feed the control loops of - the system. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - x_acc : X acceleration in body frame (float) - y_acc : Y acceleration in body frame (float) - z_acc : Z acceleration in body frame (float) - x_vel : X velocity in body frame (float) - y_vel : Y velocity in body frame (float) - z_vel : Z velocity in body frame (float) - x_pos : X position in local frame (float) - y_pos : Y position in local frame (float) - z_pos : Z position in local frame (float) - airspeed : Airspeed, set to -1 if unknown (float) - vel_variance : Variance of body velocity estimate (float) - pos_variance : Variance in local position (float) - q : The attitude, represented as Quaternion (float) - roll_rate : Angular rate in roll axis (float) - pitch_rate : Angular rate in pitch axis (float) - yaw_rate : Angular rate in yaw axis (float) - - ''' - return self.send(self.control_system_state_encode(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate), force_mavlink1=force_mavlink1) - - def battery_status_encode(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return MAVLink_battery_status_message(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) - - def battery_status_send(self, id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining, force_mavlink1=False): - ''' - Battery information - - id : Battery ID (uint8_t) - battery_function : Function of the battery (uint8_t) - type : Type (chemistry) of the battery (uint8_t) - temperature : Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. (int16_t) - voltages : Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t) - current_battery : Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current (int16_t) - current_consumed : Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate (int32_t) - energy_consumed : Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate (int32_t) - battery_remaining : Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery (int8_t) - - ''' - return self.send(self.battery_status_encode(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining), force_mavlink1=force_mavlink1) - - def autopilot_version_encode(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return MAVLink_autopilot_version_message(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) - - def autopilot_version_send(self, capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid, force_mavlink1=False): - ''' - Version and capability of autopilot software - - capabilities : bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) (uint64_t) - flight_sw_version : Firmware version number (uint32_t) - middleware_sw_version : Middleware version number (uint32_t) - os_sw_version : Operating system version number (uint32_t) - board_version : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t) - flight_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - middleware_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - os_custom_version : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t) - vendor_id : ID of the board vendor (uint16_t) - product_id : ID of the product (uint16_t) - uid : UID if provided by hardware (uint64_t) - - ''' - return self.send(self.autopilot_version_encode(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid), force_mavlink1=force_mavlink1) - - def landing_target_encode(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return MAVLink_landing_target_message(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) - - def landing_target_send(self, time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y, force_mavlink1=False): - ''' - The location of a landing area captured from a downward facing camera - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - target_num : The ID of the target if multiple targets are present (uint8_t) - frame : MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. (uint8_t) - angle_x : X-axis angular offset (in radians) of the target from the center of the image (float) - angle_y : Y-axis angular offset (in radians) of the target from the center of the image (float) - distance : Distance to the target from the vehicle in meters (float) - size_x : Size in radians of target along x-axis (float) - size_y : Size in radians of target along y-axis (float) - - ''' - return self.send(self.landing_target_encode(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y), force_mavlink1=force_mavlink1) - - def estimator_status_encode(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return MAVLink_estimator_status_message(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) - - def estimator_status_send(self, time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy, force_mavlink1=False): - ''' - Estimator status message including flags, innovation test ratios and - estimated accuracies. The flags message is an integer - bitmask containing information on which EKF outputs - are valid. See the ESTIMATOR_STATUS_FLAGS enum - definition for further information. The innovaton test - ratios show the magnitude of the sensor innovation - divided by the innovation check threshold. Under - normal operation the innovaton test ratios should be - below 0.5 with occasional values up to 1.0. Values - greater than 1.0 should be rare under normal operation - and indicate that a measurement has been rejected by - the filter. The user should be notified if an - innovation test ratio greater than 1.0 is recorded. - Notifications for values in the range between 0.5 and - 1.0 should be optional and controllable by the user. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - flags : Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. (uint16_t) - vel_ratio : Velocity innovation test ratio (float) - pos_horiz_ratio : Horizontal position innovation test ratio (float) - pos_vert_ratio : Vertical position innovation test ratio (float) - mag_ratio : Magnetometer innovation test ratio (float) - hagl_ratio : Height above terrain innovation test ratio (float) - tas_ratio : True airspeed innovation test ratio (float) - pos_horiz_accuracy : Horizontal position 1-STD accuracy relative to the EKF local origin (m) (float) - pos_vert_accuracy : Vertical position 1-STD accuracy relative to the EKF local origin (m) (float) - - ''' - return self.send(self.estimator_status_encode(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy), force_mavlink1=force_mavlink1) - - def wind_cov_encode(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return MAVLink_wind_cov_message(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) - - def wind_cov_send(self, time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy, force_mavlink1=False): - ''' - - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - wind_x : Wind in X (NED) direction in m/s (float) - wind_y : Wind in Y (NED) direction in m/s (float) - wind_z : Wind in Z (NED) direction in m/s (float) - var_horiz : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float) - var_vert : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float) - wind_alt : AMSL altitude (m) this measurement was taken at (float) - horiz_accuracy : Horizontal speed 1-STD accuracy (float) - vert_accuracy : Vertical speed 1-STD accuracy (float) - - ''' - return self.send(self.wind_cov_encode(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy), force_mavlink1=force_mavlink1) - - def gps_input_encode(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return MAVLink_gps_input_message(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) - - def gps_input_send(self, time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible, force_mavlink1=False): - ''' - GPS sensor input message. This is a raw sensor value sent by the GPS. - This is NOT the global position estimate of the sytem. - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - gps_id : ID of the GPS for multiple GPS inputs (uint8_t) - ignore_flags : Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. (uint16_t) - time_week_ms : GPS time (milliseconds from start of GPS week) (uint32_t) - time_week : GPS week number (uint16_t) - fix_type : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t) - lat : Latitude (WGS84), in degrees * 1E7 (int32_t) - lon : Longitude (WGS84), in degrees * 1E7 (int32_t) - alt : Altitude (AMSL, not WGS84), in m (positive for up) (float) - hdop : GPS HDOP horizontal dilution of position in m (float) - vdop : GPS VDOP vertical dilution of position in m (float) - vn : GPS velocity in m/s in NORTH direction in earth-fixed NED frame (float) - ve : GPS velocity in m/s in EAST direction in earth-fixed NED frame (float) - vd : GPS velocity in m/s in DOWN direction in earth-fixed NED frame (float) - speed_accuracy : GPS speed accuracy in m/s (float) - horiz_accuracy : GPS horizontal accuracy in m (float) - vert_accuracy : GPS vertical accuracy in m (float) - satellites_visible : Number of satellites visible. (uint8_t) - - ''' - return self.send(self.gps_input_encode(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible), force_mavlink1=force_mavlink1) - - def gps_rtcm_data_encode(self, flags, len, data): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return MAVLink_gps_rtcm_data_message(flags, len, data) - - def gps_rtcm_data_send(self, flags, len, data, force_mavlink1=False): - ''' - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS - (used for DGPS) - - flags : LSB: 1 means message is fragmented (uint8_t) - len : data length (uint8_t) - data : RTCM message (may be fragmented) (uint8_t) - - ''' - return self.send(self.gps_rtcm_data_encode(flags, len, data), force_mavlink1=force_mavlink1) - - def vibration_encode(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return MAVLink_vibration_message(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) - - def vibration_send(self, time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2, force_mavlink1=False): - ''' - Vibration levels and accelerometer clipping - - time_usec : Timestamp (micros since boot or Unix epoch) (uint64_t) - vibration_x : Vibration levels on X-axis (float) - vibration_y : Vibration levels on Y-axis (float) - vibration_z : Vibration levels on Z-axis (float) - clipping_0 : first accelerometer clipping count (uint32_t) - clipping_1 : second accelerometer clipping count (uint32_t) - clipping_2 : third accelerometer clipping count (uint32_t) - - ''' - return self.send(self.vibration_encode(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2), force_mavlink1=force_mavlink1) - - def home_position_encode(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_home_position_message(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def home_position_send(self, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION - command. The position the system will return to and - land on. The position is set automatically by the - system during the takeoff in case it was not - explicitely set by the operator before or after. The - position the system will return to and land on. The - global and local positions encode the position in the - respective coordinate frames, while the q parameter - encodes the orientation of the surface. Under normal - conditions it describes the heading and terrain slope, - which can be used by the aircraft to adjust the - approach. The approach 3D vector describes the point - to which the system should fly in normal flight mode - and then perform a landing sequence along the vector. - - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.home_position_encode(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def set_home_position_encode(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return MAVLink_set_home_position_message(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) - - def set_home_position_send(self, target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z, force_mavlink1=False): - ''' - The position the system will return to and land on. The position is - set automatically by the system during the takeoff in - case it was not explicitely set by the operator before - or after. The global and local positions encode the - position in the respective coordinate frames, while - the q parameter encodes the orientation of the - surface. Under normal conditions it describes the - heading and terrain slope, which can be used by the - aircraft to adjust the approach. The approach 3D - vector describes the point to which the system should - fly in normal flight mode and then perform a landing - sequence along the vector. - - target_system : System ID. (uint8_t) - latitude : Latitude (WGS84), in degrees * 1E7 (int32_t) - longitude : Longitude (WGS84, in degrees * 1E7 (int32_t) - altitude : Altitude (AMSL), in meters * 1000 (positive for up) (int32_t) - x : Local X position of this position in the local coordinate frame (float) - y : Local Y position of this position in the local coordinate frame (float) - z : Local Z position of this position in the local coordinate frame (float) - q : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float) - approach_x : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_y : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - approach_z : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float) - - ''' - return self.send(self.set_home_position_encode(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z), force_mavlink1=force_mavlink1) - - def message_interval_encode(self, message_id, interval_us): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return MAVLink_message_interval_message(message_id, interval_us) - - def message_interval_send(self, message_id, interval_us, force_mavlink1=False): - ''' - This interface replaces DATA_STREAM - - message_id : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t) - interval_us : The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t) - - ''' - return self.send(self.message_interval_encode(message_id, interval_us), force_mavlink1=force_mavlink1) - - def extended_sys_state_encode(self, vtol_state, landed_state): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return MAVLink_extended_sys_state_message(vtol_state, landed_state) - - def extended_sys_state_send(self, vtol_state, landed_state, force_mavlink1=False): - ''' - Provides state for additional features - - vtol_state : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t) - landed_state : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t) - - ''' - return self.send(self.extended_sys_state_encode(vtol_state, landed_state), force_mavlink1=force_mavlink1) - - def adsb_vehicle_encode(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return MAVLink_adsb_vehicle_message(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) - - def adsb_vehicle_send(self, ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk, force_mavlink1=False): - ''' - The location and information of an ADSB vehicle - - ICAO_address : ICAO address (uint32_t) - lat : Latitude, expressed as degrees * 1E7 (int32_t) - lon : Longitude, expressed as degrees * 1E7 (int32_t) - altitude_type : Type from ADSB_ALTITUDE_TYPE enum (uint8_t) - altitude : Altitude(ASL) in millimeters (int32_t) - heading : Course over ground in centidegrees (uint16_t) - hor_velocity : The horizontal velocity in centimeters/second (uint16_t) - ver_velocity : The vertical velocity in centimeters/second, positive is up (int16_t) - callsign : The callsign, 8+null (char) - emitter_type : Type from ADSB_EMITTER_TYPE enum (uint8_t) - tslc : Time since last communication in seconds (uint8_t) - flags : Flags to indicate various statuses including valid data fields (uint16_t) - squawk : Squawk code (uint16_t) - - ''' - return self.send(self.adsb_vehicle_encode(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk), force_mavlink1=force_mavlink1) - - def collision_encode(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return MAVLink_collision_message(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) - - def collision_send(self, src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta, force_mavlink1=False): - ''' - Information about a potential collision - - src : Collision data source (uint8_t) - id : Unique identifier, domain based on src field (uint32_t) - action : Action that is being taken to avoid this collision (uint8_t) - threat_level : How concerned the aircraft is about this collision (uint8_t) - time_to_minimum_delta : Estimated time until collision occurs (seconds) (float) - altitude_minimum_delta : Closest vertical distance in meters between vehicle and object (float) - horizontal_minimum_delta : Closest horizontal distance in meteres between vehicle and object (float) - - ''' - return self.send(self.collision_encode(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta), force_mavlink1=force_mavlink1) - - def v2_extension_encode(self, target_network, target_system, target_component, message_type, payload): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return MAVLink_v2_extension_message(target_network, target_system, target_component, message_type, payload) - - def v2_extension_send(self, target_network, target_system, target_component, message_type, payload, force_mavlink1=False): - ''' - Message implementing parts of the V2 payload specs in V1 frames for - transitional support. - - target_network : Network ID (0 for broadcast) (uint8_t) - target_system : System ID (0 for broadcast) (uint8_t) - target_component : Component ID (0 for broadcast) (uint8_t) - message_type : A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t) - payload : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t) - - ''' - return self.send(self.v2_extension_encode(target_network, target_system, target_component, message_type, payload), force_mavlink1=force_mavlink1) - - def memory_vect_encode(self, address, ver, type, value): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return MAVLink_memory_vect_message(address, ver, type, value) - - def memory_vect_send(self, address, ver, type, value, force_mavlink1=False): - ''' - Send raw controller memory. The use of this message is discouraged for - normal packets, but a quite efficient way for testing - new messages and getting experimental debug output. - - address : Starting address of the debug variables (uint16_t) - ver : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t) - type : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t) - value : Memory contents at specified address (int8_t) - - ''' - return self.send(self.memory_vect_encode(address, ver, type, value), force_mavlink1=force_mavlink1) - - def debug_vect_encode(self, name, time_usec, x, y, z): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return MAVLink_debug_vect_message(name, time_usec, x, y, z) - - def debug_vect_send(self, name, time_usec, x, y, z, force_mavlink1=False): - ''' - - - name : Name (char) - time_usec : Timestamp (uint64_t) - x : x (float) - y : y (float) - z : z (float) - - ''' - return self.send(self.debug_vect_encode(name, time_usec, x, y, z), force_mavlink1=force_mavlink1) - - def named_value_float_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return MAVLink_named_value_float_message(time_boot_ms, name, value) - - def named_value_float_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as float. The use of this message is discouraged - for normal packets, but a quite efficient way for - testing new messages and getting experimental debug - output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Floating point value (float) - - ''' - return self.send(self.named_value_float_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def named_value_int_encode(self, time_boot_ms, name, value): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return MAVLink_named_value_int_message(time_boot_ms, name, value) - - def named_value_int_send(self, time_boot_ms, name, value, force_mavlink1=False): - ''' - Send a key-value pair as integer. The use of this message is - discouraged for normal packets, but a quite efficient - way for testing new messages and getting experimental - debug output. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - name : Name of the debug variable (char) - value : Signed integer value (int32_t) - - ''' - return self.send(self.named_value_int_encode(time_boot_ms, name, value), force_mavlink1=force_mavlink1) - - def statustext_encode(self, severity, text): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return MAVLink_statustext_message(severity, text) - - def statustext_send(self, severity, text, force_mavlink1=False): - ''' - Status text message. These messages are printed in yellow in the COMM - console of QGroundControl. WARNING: They consume quite - some bandwidth, so use only for important status and - error messages. If implemented wisely, these messages - are buffered on the MCU and sent only at a limited - rate (e.g. 10 Hz). - - severity : Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. (uint8_t) - text : Status text message, without null termination character (char) - - ''' - return self.send(self.statustext_encode(severity, text), force_mavlink1=force_mavlink1) - - def debug_encode(self, time_boot_ms, ind, value): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return MAVLink_debug_message(time_boot_ms, ind, value) - - def debug_send(self, time_boot_ms, ind, value, force_mavlink1=False): - ''' - Send a debug value. The index is used to discriminate between values. - These values show up in the plot of QGroundControl as - DEBUG N. - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - ind : index of debug variable (uint8_t) - value : DEBUG value (float) - - ''' - return self.send(self.debug_encode(time_boot_ms, ind, value), force_mavlink1=force_mavlink1) - - def setup_signing_encode(self, target_system, target_component, secret_key, initial_timestamp): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return MAVLink_setup_signing_message(target_system, target_component, secret_key, initial_timestamp) - - def setup_signing_send(self, target_system, target_component, secret_key, initial_timestamp, force_mavlink1=False): - ''' - Setup a MAVLink2 signing key. If called with secret_key of all zero - and zero initial_timestamp will disable signing - - target_system : system id of the target (uint8_t) - target_component : component ID of the target (uint8_t) - secret_key : signing key (uint8_t) - initial_timestamp : initial timestamp (uint64_t) - - ''' - return self.send(self.setup_signing_encode(target_system, target_component, secret_key, initial_timestamp), force_mavlink1=force_mavlink1) - - def button_change_encode(self, time_boot_ms, last_change_ms, state): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return MAVLink_button_change_message(time_boot_ms, last_change_ms, state) - - def button_change_send(self, time_boot_ms, last_change_ms, state, force_mavlink1=False): - ''' - Report button state change - - time_boot_ms : Timestamp (milliseconds since system boot) (uint32_t) - last_change_ms : Time of last change of button state (uint32_t) - state : Bitmap state of buttons (uint8_t) - - ''' - return self.send(self.button_change_encode(time_boot_ms, last_change_ms, state), force_mavlink1=force_mavlink1) - - def play_tune_encode(self, target_system, target_component, tune): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return MAVLink_play_tune_message(target_system, target_component, tune) - - def play_tune_send(self, target_system, target_component, tune, force_mavlink1=False): - ''' - Control vehicle tone generation (buzzer) - - target_system : System ID (uint8_t) - target_component : Component ID (uint8_t) - tune : tune in board specific format (char) - - ''' - return self.send(self.play_tune_encode(target_system, target_component, tune), force_mavlink1=force_mavlink1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.xml deleted file mode 100644 index bb57e8435..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/dialects/v20/ualberta.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - common.xml - - - Available autopilot modes for ualberta uav - - Raw input pulse widts sent to output - - - Inputs are normalized using calibration, the converted back to raw pulse widths for output - - - dfsdfs - - - dfsfds - - - dfsdfsdfs - - - - Navigation filter mode - - - AHRS mode - - - INS/GPS initialization mode - - - INS/GPS mode - - - - Mode currently commanded by pilot - - sdf - - - dfs - - - Rotomotion mode - - - - - - Accelerometer and Gyro biases from the navigation filter - Timestamp (microseconds) - b_f[0] - b_f[1] - b_f[2] - b_f[0] - b_f[1] - b_f[2] - - - Complete set of calibration parameters for the radio - Aileron setpoints: left, center, right - Elevator setpoints: nose down, center, nose up - Rudder setpoints: nose left, center, nose right - Tail gyro mode/gain setpoints: heading hold, rate mode - Pitch curve setpoints (every 25%) - Throttle curve setpoints (every 25%) - - - System status specific to ualberta uav - System mode, see UALBERTA_AUTOPILOT_MODE ENUM - Navigation mode, see UALBERTA_NAV_MODE ENUM - Pilot mode, see UALBERTA_PILOT_MODE - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/fgFDM.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/fgFDM.py deleted file mode 100644 index d381afa04..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/fgFDM.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/env python -# parse and construct FlightGear NET FDM packets -# Andrew Tridgell, November 2011 -# released under GNU GPL version 2 or later - -import struct, math - -class fgFDMError(Exception): - '''fgFDM error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - self.message = 'fgFDMError: ' + msg - -class fgFDMVariable(object): - '''represent a single fgFDM variable''' - def __init__(self, index, arraylength, units): - self.index = index - self.arraylength = arraylength - self.units = units - -class fgFDMVariableList(object): - '''represent a list of fgFDM variable''' - def __init__(self): - self.vars = {} - self._nextidx = 0 - - def add(self, varname, arraylength=1, units=None): - self.vars[varname] = fgFDMVariable(self._nextidx, arraylength, units=units) - self._nextidx += arraylength - -class fgFDM(object): - '''a flightgear native FDM parser/generator''' - def __init__(self): - '''init a fgFDM object''' - self.FG_NET_FDM_VERSION = 24 - self.pack_string = '>I 4x 3d 6f 11f 3f 2f I 4I 4f 4f 4f 4f 4f 4f 4f 4f 4f I 4f I 3I 3f 3f 3f I i f 10f' - self.values = [0]*98 - - self.FG_MAX_ENGINES = 4 - self.FG_MAX_WHEELS = 3 - self.FG_MAX_TANKS = 4 - - # supported unit mappings - self.unitmap = { - ('radians', 'degrees') : math.degrees(1), - ('rps', 'dps') : math.degrees(1), - ('feet', 'meters') : 0.3048, - ('fps', 'mps') : 0.3048, - ('knots', 'mps') : 0.514444444, - ('knots', 'fps') : 0.514444444/0.3048, - ('fpss', 'mpss') : 0.3048, - ('seconds', 'minutes') : 60, - ('seconds', 'hours') : 3600, - } - - # build a mapping between variable name and index in the values array - # note that the order of this initialisation is critical - it must - # match the wire structure - self.mapping = fgFDMVariableList() - self.mapping.add('version') - - # position - self.mapping.add('longitude', units='radians') # geodetic (radians) - self.mapping.add('latitude', units='radians') # geodetic (radians) - self.mapping.add('altitude', units='meters') # above sea level (meters) - self.mapping.add('agl', units='meters') # above ground level (meters) - - # attitude - self.mapping.add('phi', units='radians') # roll (radians) - self.mapping.add('theta', units='radians') # pitch (radians) - self.mapping.add('psi', units='radians') # yaw or true heading (radians) - self.mapping.add('alpha', units='radians') # angle of attack (radians) - self.mapping.add('beta', units='radians') # side slip angle (radians) - - # Velocities - self.mapping.add('phidot', units='rps') # roll rate (radians/sec) - self.mapping.add('thetadot', units='rps') # pitch rate (radians/sec) - self.mapping.add('psidot', units='rps') # yaw rate (radians/sec) - self.mapping.add('vcas', units='fps') # calibrated airspeed - self.mapping.add('climb_rate', units='fps') # feet per second - self.mapping.add('v_north', units='fps') # north velocity in local/body frame, fps - self.mapping.add('v_east', units='fps') # east velocity in local/body frame, fps - self.mapping.add('v_down', units='fps') # down/vertical velocity in local/body frame, fps - self.mapping.add('v_wind_body_north', units='fps') # north velocity in local/body frame - self.mapping.add('v_wind_body_east', units='fps') # east velocity in local/body frame - self.mapping.add('v_wind_body_down', units='fps') # down/vertical velocity in local/body - - # Accelerations - self.mapping.add('A_X_pilot', units='fpss') # X accel in body frame ft/sec^2 - self.mapping.add('A_Y_pilot', units='fpss') # Y accel in body frame ft/sec^2 - self.mapping.add('A_Z_pilot', units='fpss') # Z accel in body frame ft/sec^2 - - # Stall - self.mapping.add('stall_warning') # 0.0 - 1.0 indicating the amount of stall - self.mapping.add('slip_deg', units='degrees') # slip ball deflection - - # Engine status - self.mapping.add('num_engines') # Number of valid engines - self.mapping.add('eng_state', self.FG_MAX_ENGINES) # Engine state (off, cranking, running) - self.mapping.add('rpm', self.FG_MAX_ENGINES) # Engine RPM rev/min - self.mapping.add('fuel_flow', self.FG_MAX_ENGINES) # Fuel flow gallons/hr - self.mapping.add('fuel_px', self.FG_MAX_ENGINES) # Fuel pressure psi - self.mapping.add('egt', self.FG_MAX_ENGINES) # Exhuast gas temp deg F - self.mapping.add('cht', self.FG_MAX_ENGINES) # Cylinder head temp deg F - self.mapping.add('mp_osi', self.FG_MAX_ENGINES) # Manifold pressure - self.mapping.add('tit', self.FG_MAX_ENGINES) # Turbine Inlet Temperature - self.mapping.add('oil_temp', self.FG_MAX_ENGINES) # Oil temp deg F - self.mapping.add('oil_px', self.FG_MAX_ENGINES) # Oil pressure psi - - # Consumables - self.mapping.add('num_tanks') # Max number of fuel tanks - self.mapping.add('fuel_quantity', self.FG_MAX_TANKS) - - # Gear status - self.mapping.add('num_wheels') - self.mapping.add('wow', self.FG_MAX_WHEELS) - self.mapping.add('gear_pos', self.FG_MAX_WHEELS) - self.mapping.add('gear_steer', self.FG_MAX_WHEELS) - self.mapping.add('gear_compression', self.FG_MAX_WHEELS) - - # Environment - self.mapping.add('cur_time', units='seconds') # current unix time - self.mapping.add('warp', units='seconds') # offset in seconds to unix time - self.mapping.add('visibility', units='meters') # visibility in meters (for env. effects) - - # Control surface positions (normalized values) - self.mapping.add('elevator') - self.mapping.add('elevator_trim_tab') - self.mapping.add('left_flap') - self.mapping.add('right_flap') - self.mapping.add('left_aileron') - self.mapping.add('right_aileron') - self.mapping.add('rudder') - self.mapping.add('nose_wheel') - self.mapping.add('speedbrake') - self.mapping.add('spoilers') - - self._packet_size = struct.calcsize(self.pack_string) - - self.set('version', self.FG_NET_FDM_VERSION) - - if len(self.values) != self.mapping._nextidx: - raise fgFDMError('Invalid variable list in initialisation') - - def packet_size(self): - '''return expected size of FG FDM packets''' - return self._packet_size - - def convert(self, value, fromunits, tounits): - '''convert a value from one set of units to another''' - if fromunits == tounits: - return value - if (fromunits,tounits) in self.unitmap: - return value * self.unitmap[(fromunits,tounits)] - if (tounits,fromunits) in self.unitmap: - return value / self.unitmap[(tounits,fromunits)] - raise fgFDMError("unknown unit mapping (%s,%s)" % (fromunits, tounits)) - - - def units(self, varname): - '''return the default units of a variable''' - if not varname in self.mapping.vars: - raise fgFDMError('Unknown variable %s' % varname) - return self.mapping.vars[varname].units - - - def variables(self): - '''return a list of available variables''' - return sorted(list(self.mapping.vars.keys()), - key = lambda v : self.mapping.vars[v].index) - - - def get(self, varname, idx=0, units=None): - '''get a variable value''' - if not varname in self.mapping.vars: - raise fgFDMError('Unknown variable %s' % varname) - if idx >= self.mapping.vars[varname].arraylength: - raise fgFDMError('index of %s beyond end of array idx=%u arraylength=%u' % ( - varname, idx, self.mapping.vars[varname].arraylength)) - value = self.values[self.mapping.vars[varname].index + idx] - if units: - value = self.convert(value, self.mapping.vars[varname].units, units) - return value - - def set(self, varname, value, idx=0, units=None): - '''set a variable value''' - if not varname in self.mapping.vars: - raise fgFDMError('Unknown variable %s' % varname) - if idx >= self.mapping.vars[varname].arraylength: - raise fgFDMError('index of %s beyond end of array idx=%u arraylength=%u' % ( - varname, idx, self.mapping.vars[varname].arraylength)) - if units: - value = self.convert(value, units, self.mapping.vars[varname].units) - # avoid range errors when packing into 4 byte floats - if math.isinf(value) or math.isnan(value) or math.fabs(value) > 3.4e38: - value = 0 - self.values[self.mapping.vars[varname].index + idx] = value - - def parse(self, buf): - '''parse a FD FDM buffer''' - try: - t = struct.unpack(self.pack_string, buf) - except struct.error as msg: - raise fgFDMError('unable to parse - %s' % msg) - self.values = list(t) - - def pack(self): - '''pack a FD FDM buffer from current values''' - for i in range(len(self.values)): - if math.isnan(self.values[i]): - self.values[i] = 0 - return struct.pack(self.pack_string, *self.values) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/checksum.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/checksum.h deleted file mode 100644 index 0f30b659f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/checksum.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _CHECKSUM_H_ -#define _CHECKSUM_H_ - -// Visual Studio versions before 2010 don't have stdint.h, so we just error out. -#if (defined _MSC_VER) && (_MSC_VER < 1600) -#error "The C-MAVLink implementation requires Visual Studio 2010 or greater" -#endif - -#include - -/** - * - * CALCULATE THE CHECKSUM - * - */ - -#define X25_INIT_CRC 0xffff -#define X25_VALIDATE_CRC 0xf0b8 - -#ifndef HAVE_CRC_ACCUMULATE -/** - * @brief Accumulate the X.25 CRC by adding one char at a time. - * - * The checksum function adds the hash of one char at a time to the - * 16 bit checksum (uint16_t). - * - * @param data new char to hash - * @param crcAccum the already accumulated checksum - **/ -static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum) -{ - /*Accumulate one byte of data into the CRC*/ - uint8_t tmp; - - tmp = data ^ (uint8_t)(*crcAccum &0xff); - tmp ^= (tmp<<4); - *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4); -} -#endif - - -/** - * @brief Initiliaze the buffer for the X.25 CRC - * - * @param crcAccum the 16 bit X.25 CRC - */ -static inline void crc_init(uint16_t* crcAccum) -{ - *crcAccum = X25_INIT_CRC; -} - - -/** - * @brief Calculates the X.25 checksum on a byte buffer - * - * @param pBuffer buffer containing the byte array to hash - * @param length length of the byte array - * @return the checksum over the buffer bytes - **/ -static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length) -{ - uint16_t crcTmp; - crc_init(&crcTmp); - while (length--) { - crc_accumulate(*pBuffer++, &crcTmp); - } - return crcTmp; -} - - -/** - * @brief Accumulate the X.25 CRC by adding an array of bytes - * - * The checksum function adds the hash of one char at a time to the - * 16 bit checksum (uint16_t). - * - * @param data new bytes to hash - * @param crcAccum the already accumulated checksum - **/ -static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint16_t length) -{ - const uint8_t *p = (const uint8_t *)pBuffer; - while (length--) { - crc_accumulate(*p++, crcAccum); - } -} - -#endif /* _CHECKSUM_H_ */ - -#ifdef __cplusplus -} -#endif diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_conversions.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_conversions.h deleted file mode 100644 index 63bcfa39f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_conversions.h +++ /dev/null @@ -1,211 +0,0 @@ -#ifndef _MAVLINK_CONVERSIONS_H_ -#define _MAVLINK_CONVERSIONS_H_ - -/* enable math defines on Windows */ -#ifdef _MSC_VER -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES -#endif -#endif -#include - -#ifndef M_PI_2 - #define M_PI_2 ((float)asin(1)) -#endif - -/** - * @file mavlink_conversions.h - * - * These conversion functions follow the NASA rotation standards definition file - * available online. - * - * Their intent is to lower the barrier for MAVLink adopters to use gimbal-lock free - * (both rotation matrices, sometimes called DCM, and quaternions are gimbal-lock free) - * rotation representations. Euler angles (roll, pitch, yaw) will be phased out of the - * protocol as widely as possible. - * - * @author James Goppert - * @author Thomas Gubler - */ - - -/** - * Converts a quaternion to a rotation matrix - * - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - * @param dcm a 3x3 rotation matrix - */ -MAVLINK_HELPER void mavlink_quaternion_to_dcm(const float quaternion[4], float dcm[3][3]) -{ - double a = quaternion[0]; - double b = quaternion[1]; - double c = quaternion[2]; - double d = quaternion[3]; - double aSq = a * a; - double bSq = b * b; - double cSq = c * c; - double dSq = d * d; - dcm[0][0] = aSq + bSq - cSq - dSq; - dcm[0][1] = 2 * (b * c - a * d); - dcm[0][2] = 2 * (a * c + b * d); - dcm[1][0] = 2 * (b * c + a * d); - dcm[1][1] = aSq - bSq + cSq - dSq; - dcm[1][2] = 2 * (c * d - a * b); - dcm[2][0] = 2 * (b * d - a * c); - dcm[2][1] = 2 * (a * b + c * d); - dcm[2][2] = aSq - bSq - cSq + dSq; -} - - -/** - * Converts a rotation matrix to euler angles - * - * @param dcm a 3x3 rotation matrix - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - */ -MAVLINK_HELPER void mavlink_dcm_to_euler(const float dcm[3][3], float* roll, float* pitch, float* yaw) -{ - float phi, theta, psi; - theta = asin(-dcm[2][0]); - - if (fabsf(theta - (float)M_PI_2) < 1.0e-3f) { - phi = 0.0f; - psi = (atan2f(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1]) + phi); - - } else if (fabsf(theta + (float)M_PI_2) < 1.0e-3f) { - phi = 0.0f; - psi = atan2f(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1] - phi); - - } else { - phi = atan2f(dcm[2][1], dcm[2][2]); - psi = atan2f(dcm[1][0], dcm[0][0]); - } - - *roll = phi; - *pitch = theta; - *yaw = psi; -} - - -/** - * Converts a quaternion to euler angles - * - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - */ -MAVLINK_HELPER void mavlink_quaternion_to_euler(const float quaternion[4], float* roll, float* pitch, float* yaw) -{ - float dcm[3][3]; - mavlink_quaternion_to_dcm(quaternion, dcm); - mavlink_dcm_to_euler((const float(*)[3])dcm, roll, pitch, yaw); -} - - -/** - * Converts euler angles to a quaternion - * - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - */ -MAVLINK_HELPER void mavlink_euler_to_quaternion(float roll, float pitch, float yaw, float quaternion[4]) -{ - float cosPhi_2 = cosf(roll / 2); - float sinPhi_2 = sinf(roll / 2); - float cosTheta_2 = cosf(pitch / 2); - float sinTheta_2 = sinf(pitch / 2); - float cosPsi_2 = cosf(yaw / 2); - float sinPsi_2 = sinf(yaw / 2); - quaternion[0] = (cosPhi_2 * cosTheta_2 * cosPsi_2 + - sinPhi_2 * sinTheta_2 * sinPsi_2); - quaternion[1] = (sinPhi_2 * cosTheta_2 * cosPsi_2 - - cosPhi_2 * sinTheta_2 * sinPsi_2); - quaternion[2] = (cosPhi_2 * sinTheta_2 * cosPsi_2 + - sinPhi_2 * cosTheta_2 * sinPsi_2); - quaternion[3] = (cosPhi_2 * cosTheta_2 * sinPsi_2 - - sinPhi_2 * sinTheta_2 * cosPsi_2); -} - - -/** - * Converts a rotation matrix to a quaternion - * Reference: - * - Shoemake, Quaternions, - * http://www.cs.ucr.edu/~vbz/resources/quatut.pdf - * - * @param dcm a 3x3 rotation matrix - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - */ -MAVLINK_HELPER void mavlink_dcm_to_quaternion(const float dcm[3][3], float quaternion[4]) -{ - float tr = dcm[0][0] + dcm[1][1] + dcm[2][2]; - if (tr > 0.0f) { - float s = sqrtf(tr + 1.0f); - quaternion[0] = s * 0.5f; - s = 0.5f / s; - quaternion[1] = (dcm[2][1] - dcm[1][2]) * s; - quaternion[2] = (dcm[0][2] - dcm[2][0]) * s; - quaternion[3] = (dcm[1][0] - dcm[0][1]) * s; - } else { - /* Find maximum diagonal element in dcm - * store index in dcm_i */ - int dcm_i = 0; - int i; - for (i = 1; i < 3; i++) { - if (dcm[i][i] > dcm[dcm_i][dcm_i]) { - dcm_i = i; - } - } - - int dcm_j = (dcm_i + 1) % 3; - int dcm_k = (dcm_i + 2) % 3; - - float s = sqrtf((dcm[dcm_i][dcm_i] - dcm[dcm_j][dcm_j] - - dcm[dcm_k][dcm_k]) + 1.0f); - quaternion[dcm_i + 1] = s * 0.5f; - s = 0.5f / s; - quaternion[dcm_j + 1] = (dcm[dcm_i][dcm_j] + dcm[dcm_j][dcm_i]) * s; - quaternion[dcm_k + 1] = (dcm[dcm_k][dcm_i] + dcm[dcm_i][dcm_k]) * s; - quaternion[0] = (dcm[dcm_k][dcm_j] - dcm[dcm_j][dcm_k]) * s; - } -} - - -/** - * Converts euler angles to a rotation matrix - * - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - * @param dcm a 3x3 rotation matrix - */ -MAVLINK_HELPER void mavlink_euler_to_dcm(float roll, float pitch, float yaw, float dcm[3][3]) -{ - float cosPhi = cosf(roll); - float sinPhi = sinf(roll); - float cosThe = cosf(pitch); - float sinThe = sinf(pitch); - float cosPsi = cosf(yaw); - float sinPsi = sinf(yaw); - - dcm[0][0] = cosThe * cosPsi; - dcm[0][1] = -cosPhi * sinPsi + sinPhi * sinThe * cosPsi; - dcm[0][2] = sinPhi * sinPsi + cosPhi * sinThe * cosPsi; - - dcm[1][0] = cosThe * sinPsi; - dcm[1][1] = cosPhi * cosPsi + sinPhi * sinThe * sinPsi; - dcm[1][2] = -sinPhi * cosPsi + cosPhi * sinThe * sinPsi; - - dcm[2][0] = -sinThe; - dcm[2][1] = sinPhi * cosThe; - dcm[2][2] = cosPhi * cosThe; -} - -#endif diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_helpers.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_helpers.h deleted file mode 100644 index 2587cdf32..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_helpers.h +++ /dev/null @@ -1,678 +0,0 @@ -#ifndef _MAVLINK_HELPERS_H_ -#define _MAVLINK_HELPERS_H_ - -#include "string.h" -#include "checksum.h" -#include "mavlink_types.h" -#include "mavlink_conversions.h" - -#ifndef MAVLINK_HELPER -#define MAVLINK_HELPER -#endif - -/* - * Internal function to give access to the channel status for each channel - */ -#ifndef MAVLINK_GET_CHANNEL_STATUS -MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan) -{ -#ifdef MAVLINK_EXTERNAL_RX_STATUS - // No m_mavlink_status array defined in function, - // has to be defined externally -#else - static mavlink_status_t m_mavlink_status[MAVLINK_COMM_NUM_BUFFERS]; -#endif - return &m_mavlink_status[chan]; -} -#endif - -/* - * Internal function to give access to the channel buffer for each channel - */ -#ifndef MAVLINK_GET_CHANNEL_BUFFER -MAVLINK_HELPER mavlink_message_t* mavlink_get_channel_buffer(uint8_t chan) -{ - -#ifdef MAVLINK_EXTERNAL_RX_BUFFER - // No m_mavlink_buffer array defined in function, - // has to be defined externally -#else - static mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS]; -#endif - return &m_mavlink_buffer[chan]; -} -#endif - -/** - * @brief Reset the status of a channel. - */ -MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan) -{ - mavlink_status_t *status = mavlink_get_channel_status(chan); - status->parse_state = MAVLINK_PARSE_STATE_IDLE; -} - -/** - * @brief Finalize a MAVLink message with channel assignment - * - * This function calculates the checksum and sets length and aircraft id correctly. - * It assumes that the message id and the payload are already correctly set. This function - * can also be used if the message header has already been written before (as in mavlink_msg_xxx_pack - * instead of mavlink_msg_xxx_pack_headerless), it just introduces little extra overhead. - * - * @param msg Message to finalize - * @param system_id Id of the sending (this) system, 1-127 - * @param length Message length - */ -#if MAVLINK_CRC_EXTRA -MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra) -#else -MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t length) -#endif -{ - // This is only used for the v2 protocol and we silence it here - (void)min_length; - // This code part is the same for all messages; - msg->magic = MAVLINK_STX; - msg->len = length; - msg->sysid = system_id; - msg->compid = component_id; - // One sequence number per channel - msg->seq = mavlink_get_channel_status(chan)->current_tx_seq; - mavlink_get_channel_status(chan)->current_tx_seq = mavlink_get_channel_status(chan)->current_tx_seq+1; - msg->checksum = crc_calculate(((const uint8_t*)(msg)) + 3, MAVLINK_CORE_HEADER_LEN); - crc_accumulate_buffer(&msg->checksum, _MAV_PAYLOAD(msg), msg->len); -#if MAVLINK_CRC_EXTRA - crc_accumulate(crc_extra, &msg->checksum); -#endif - mavlink_ck_a(msg) = (uint8_t)(msg->checksum & 0xFF); - mavlink_ck_b(msg) = (uint8_t)(msg->checksum >> 8); - - return length + MAVLINK_NUM_NON_PAYLOAD_BYTES; -} - - -/** - * @brief Finalize a MAVLink message with MAVLINK_COMM_0 as default channel - */ -#if MAVLINK_CRC_EXTRA -MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t min_length, uint8_t length, uint8_t crc_extra) -{ - return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, min_length, length, crc_extra); -} -#else -MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t length) -{ - return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, length); -} -#endif - -#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS -MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); - -/** - * @brief Finalize a MAVLink message with channel assignment and send - */ -#if MAVLINK_CRC_EXTRA -MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, - uint8_t min_length, uint8_t length, uint8_t crc_extra) -#else -MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length) -#endif -{ - uint16_t checksum; - uint8_t buf[MAVLINK_NUM_HEADER_BYTES]; - uint8_t ck[2]; - mavlink_status_t *status = mavlink_get_channel_status(chan); - buf[0] = MAVLINK_STX; - buf[1] = length; - buf[2] = status->current_tx_seq; - buf[3] = mavlink_system.sysid; - buf[4] = mavlink_system.compid; - buf[5] = msgid; - status->current_tx_seq++; - checksum = crc_calculate((const uint8_t*)&buf[1], MAVLINK_CORE_HEADER_LEN); - crc_accumulate_buffer(&checksum, packet, length); -#if MAVLINK_CRC_EXTRA - crc_accumulate(crc_extra, &checksum); -#endif - ck[0] = (uint8_t)(checksum & 0xFF); - ck[1] = (uint8_t)(checksum >> 8); - - MAVLINK_START_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length); - _mavlink_send_uart(chan, (const char *)buf, MAVLINK_NUM_HEADER_BYTES); - _mavlink_send_uart(chan, packet, length); - _mavlink_send_uart(chan, (const char *)ck, 2); - MAVLINK_END_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)length); -} - -/** - * @brief re-send a message over a uart channel - * this is more stack efficient than re-marshalling the message - */ -MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg) -{ - uint8_t ck[2]; - - ck[0] = (uint8_t)(msg->checksum & 0xFF); - ck[1] = (uint8_t)(msg->checksum >> 8); - // XXX use the right sequence here - - MAVLINK_START_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + msg->len); - _mavlink_send_uart(chan, (const char *)&msg->magic, MAVLINK_NUM_HEADER_BYTES); - _mavlink_send_uart(chan, _MAV_PAYLOAD(msg), msg->len); - _mavlink_send_uart(chan, (const char *)ck, 2); - MAVLINK_END_UART_SEND(chan, MAVLINK_NUM_NON_PAYLOAD_BYTES + msg->len); -} -#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS - -/** - * @brief Pack a message to send it over a serial byte stream - */ -MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg) -{ - memcpy(buffer, (const uint8_t *)&msg->magic, MAVLINK_NUM_HEADER_BYTES + (uint16_t)msg->len); - - uint8_t *ck = buffer + (MAVLINK_NUM_HEADER_BYTES + (uint16_t)msg->len); - - ck[0] = (uint8_t)(msg->checksum & 0xFF); - ck[1] = (uint8_t)(msg->checksum >> 8); - - return MAVLINK_NUM_NON_PAYLOAD_BYTES + (uint16_t)msg->len; -} - -union __mavlink_bitfield { - uint8_t uint8; - int8_t int8; - uint16_t uint16; - int16_t int16; - uint32_t uint32; - int32_t int32; -}; - - -MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg) -{ - crc_init(&msg->checksum); -} - -MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c) -{ - crc_accumulate(c, &msg->checksum); -} - -/** - * This is a varient of mavlink_frame_char() but with caller supplied - * parsing buffers. It is useful when you want to create a MAVLink - * parser in a library that doesn't use any global variables - * - * @param rxmsg parsing message buffer - * @param status parsing starus buffer - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_frame_char(chan, byte, &msg) != MAVLINK_FRAMING_INCOMPLETE) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, - mavlink_status_t* status, - uint8_t c, - mavlink_message_t* r_message, - mavlink_status_t* r_mavlink_status) -{ - /* - default message crc function. You can override this per-system to - put this data in a different memory segment - */ -#if MAVLINK_CRC_EXTRA -#ifndef MAVLINK_MESSAGE_CRC - static const uint8_t mavlink_message_crcs[256] = MAVLINK_MESSAGE_CRCS; -#define MAVLINK_MESSAGE_CRC(msgid) mavlink_message_crcs[msgid] -#endif -#endif - - /* Enable this option to check the length of each message. - This allows invalid messages to be caught much sooner. Use if the transmission - medium is prone to missing (or extra) characters (e.g. a radio that fades in - and out). Only use if the channel will only contain messages types listed in - the headers. - */ -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH -#ifndef MAVLINK_MESSAGE_LENGTH - static const uint8_t mavlink_message_lengths[256] = MAVLINK_MESSAGE_LENGTHS; -#define MAVLINK_MESSAGE_LENGTH(msgid) mavlink_message_lengths[msgid] -#endif -#endif - - int bufferIndex = 0; - - status->msg_received = MAVLINK_FRAMING_INCOMPLETE; - - switch (status->parse_state) - { - case MAVLINK_PARSE_STATE_UNINIT: - case MAVLINK_PARSE_STATE_IDLE: - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - rxmsg->magic = c; - mavlink_start_checksum(rxmsg); - } - break; - - case MAVLINK_PARSE_STATE_GOT_STX: - if (status->msg_received -/* Support shorter buffers than the - default maximum packet size */ -#if (MAVLINK_MAX_PAYLOAD_LEN < 255) - || c > MAVLINK_MAX_PAYLOAD_LEN -#endif - ) - { - status->buffer_overrun++; - status->parse_error++; - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - } - else - { - // NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2 - rxmsg->len = c; - status->packet_idx = 0; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH; - } - break; - - case MAVLINK_PARSE_STATE_GOT_LENGTH: - rxmsg->seq = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ; - break; - - case MAVLINK_PARSE_STATE_GOT_SEQ: - rxmsg->sysid = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID; - break; - - case MAVLINK_PARSE_STATE_GOT_SYSID: - rxmsg->compid = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID; - break; - - case MAVLINK_PARSE_STATE_GOT_COMPID: -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH - if (rxmsg->len != MAVLINK_MESSAGE_LENGTH(c)) - { - status->parse_error++; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - break; - } -#endif - rxmsg->msgid = c; - mavlink_update_checksum(rxmsg, c); - if (rxmsg->len == 0) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - else - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID; - } - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID: - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c; - mavlink_update_checksum(rxmsg, c); - if (status->packet_idx == rxmsg->len) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - break; - - case MAVLINK_PARSE_STATE_GOT_PAYLOAD: -#if MAVLINK_CRC_EXTRA - mavlink_update_checksum(rxmsg, MAVLINK_MESSAGE_CRC(rxmsg->msgid)); -#endif - if (c != (rxmsg->checksum & 0xFF)) { - status->parse_state = MAVLINK_PARSE_STATE_GOT_BAD_CRC1; - } else { - status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1; - } - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx] = (char)c; - break; - - case MAVLINK_PARSE_STATE_GOT_CRC1: - case MAVLINK_PARSE_STATE_GOT_BAD_CRC1: - if (status->parse_state == MAVLINK_PARSE_STATE_GOT_BAD_CRC1 || c != (rxmsg->checksum >> 8)) { - // got a bad CRC message - status->msg_received = MAVLINK_FRAMING_BAD_CRC; - } else { - // Successfully got message - status->msg_received = MAVLINK_FRAMING_OK; - } - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx+1] = (char)c; - memcpy(r_message, rxmsg, sizeof(mavlink_message_t)); - break; - } - - bufferIndex++; - // If a message has been sucessfully decoded, check index - if (status->msg_received == MAVLINK_FRAMING_OK) - { - //while(status->current_seq != rxmsg->seq) - //{ - // status->packet_rx_drop_count++; - // status->current_seq++; - //} - status->current_rx_seq = rxmsg->seq; - // Initial condition: If no packet has been received so far, drop count is undefined - if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0; - // Count this packet as received - status->packet_rx_success_count++; - } - - r_message->len = rxmsg->len; // Provide visibility on how far we are into current msg - r_mavlink_status->parse_state = status->parse_state; - r_mavlink_status->packet_idx = status->packet_idx; - r_mavlink_status->current_rx_seq = status->current_rx_seq+1; - r_mavlink_status->packet_rx_success_count = status->packet_rx_success_count; - r_mavlink_status->packet_rx_drop_count = status->parse_error; - status->parse_error = 0; - - if (status->msg_received == MAVLINK_FRAMING_BAD_CRC) { - /* - the CRC came out wrong. We now need to overwrite the - msg CRC with the one on the wire so that if the - caller decides to forward the message anyway that - mavlink_msg_to_send_buffer() won't overwrite the - checksum - */ - r_message->checksum = _MAV_PAYLOAD(rxmsg)[status->packet_idx] | (_MAV_PAYLOAD(rxmsg)[status->packet_idx+1]<<8); - } - - return status->msg_received; -} - -/** - * This is a convenience function which handles the complete MAVLink parsing. - * the function will parse one byte at a time and return the complete packet once - * it could be successfully decoded. This function will return 0, 1 or - * 2 (MAVLINK_FRAMING_INCOMPLETE, MAVLINK_FRAMING_OK or MAVLINK_FRAMING_BAD_CRC) - * - * Messages are parsed into an internal buffer (one for each channel). When a complete - * message is received it is copies into *returnMsg and the channel's status is - * copied into *returnStats. - * - * @param chan ID of the current channel. This allows to parse different channels with this function. - * a channel is not a physical message channel like a serial port, but a logic partition of - * the communication streams in this case. COMM_NB is the limit for the number of channels - * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_frame_char(chan, byte, &msg) != MAVLINK_FRAMING_INCOMPLETE) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) -{ - return mavlink_frame_char_buffer(mavlink_get_channel_buffer(chan), - mavlink_get_channel_status(chan), - c, - r_message, - r_mavlink_status); -} - - -/** - * This is a convenience function which handles the complete MAVLink parsing. - * the function will parse one byte at a time and return the complete packet once - * it could be successfully decoded. This function will return 0 or 1. - * - * Messages are parsed into an internal buffer (one for each channel). When a complete - * message is received it is copies into *returnMsg and the channel's status is - * copied into *returnStats. - * - * @param chan ID of the current channel. This allows to parse different channels with this function. - * a channel is not a physical message channel like a serial port, but a logic partition of - * the communication streams in this case. COMM_NB is the limit for the number of channels - * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded or bad CRC, 1 on good message and CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_parse_char(chan, byte, &msg)) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) -{ - uint8_t msg_received = mavlink_frame_char(chan, c, r_message, r_mavlink_status); - if (msg_received == MAVLINK_FRAMING_BAD_CRC) { - // we got a bad CRC. Treat as a parse failure - mavlink_message_t* rxmsg = mavlink_get_channel_buffer(chan); - mavlink_status_t* status = mavlink_get_channel_status(chan); - status->parse_error++; - status->msg_received = MAVLINK_FRAMING_INCOMPLETE; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - mavlink_start_checksum(rxmsg); - } - return 0; - } - return msg_received; -} - -/** - * @brief Put a bitfield of length 1-32 bit into the buffer - * - * @param b the value to add, will be encoded in the bitfield - * @param bits number of bits to use to encode b, e.g. 1 for boolean, 2, 3, etc. - * @param packet_index the position in the packet (the index of the first byte to use) - * @param bit_index the position in the byte (the index of the first bit to use) - * @param buffer packet buffer to write into - * @return new position of the last used byte in the buffer - */ -MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, uint8_t* r_bit_index, uint8_t* buffer) -{ - uint16_t bits_remain = bits; - // Transform number into network order - int32_t v; - uint8_t i_bit_index, i_byte_index, curr_bits_n; -#if MAVLINK_NEED_BYTE_SWAP - union { - int32_t i; - uint8_t b[4]; - } bin, bout; - bin.i = b; - bout.b[0] = bin.b[3]; - bout.b[1] = bin.b[2]; - bout.b[2] = bin.b[1]; - bout.b[3] = bin.b[0]; - v = bout.i; -#else - v = b; -#endif - - // buffer in - // 01100000 01000000 00000000 11110001 - // buffer out - // 11110001 00000000 01000000 01100000 - - // Existing partly filled byte (four free slots) - // 0111xxxx - - // Mask n free bits - // 00001111 = 2^0 + 2^1 + 2^2 + 2^3 = 2^n - 1 - // = ((uint32_t)(1 << n)) - 1; // = 2^n - 1 - - // Shift n bits into the right position - // out = in >> n; - - // Mask and shift bytes - i_bit_index = bit_index; - i_byte_index = packet_index; - if (bit_index > 0) - { - // If bits were available at start, they were available - // in the byte before the current index - i_byte_index--; - } - - // While bits have not been packed yet - while (bits_remain > 0) - { - // Bits still have to be packed - // there can be more than 8 bits, so - // we might have to pack them into more than one byte - - // First pack everything we can into the current 'open' byte - //curr_bits_n = bits_remain << 3; // Equals bits_remain mod 8 - //FIXME - if (bits_remain <= (uint8_t)(8 - i_bit_index)) - { - // Enough space - curr_bits_n = (uint8_t)bits_remain; - } - else - { - curr_bits_n = (8 - i_bit_index); - } - - // Pack these n bits into the current byte - // Mask out whatever was at that position with ones (xxx11111) - buffer[i_byte_index] &= (0xFF >> (8 - curr_bits_n)); - // Put content to this position, by masking out the non-used part - buffer[i_byte_index] |= ((0x00 << curr_bits_n) & v); - - // Increment the bit index - i_bit_index += curr_bits_n; - - // Now proceed to the next byte, if necessary - bits_remain -= curr_bits_n; - if (bits_remain > 0) - { - // Offer another 8 bits / one byte - i_byte_index++; - i_bit_index = 0; - } - } - - *r_bit_index = i_bit_index; - // If a partly filled byte is present, mark this as consumed - if (i_bit_index != 7) i_byte_index++; - return i_byte_index - packet_index; -} - -#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - -// To make MAVLink work on your MCU, define comm_send_ch() if you wish -// to send 1 byte at a time, or MAVLINK_SEND_UART_BYTES() to send a -// whole packet at a time - -/* - -#include "mavlink_types.h" - -void comm_send_ch(mavlink_channel_t chan, uint8_t ch) -{ - if (chan == MAVLINK_COMM_0) - { - uart0_transmit(ch); - } - if (chan == MAVLINK_COMM_1) - { - uart1_transmit(ch); - } -} - */ - -MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len) -{ -#ifdef MAVLINK_SEND_UART_BYTES - /* this is the more efficient approach, if the platform - defines it */ - MAVLINK_SEND_UART_BYTES(chan, (const uint8_t *)buf, len); -#else - /* fallback to one byte at a time */ - uint16_t i; - for (i = 0; i < len; i++) { - comm_send_ch(chan, (uint8_t)buf[i]); - } -#endif -} -#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS - -#endif /* _MAVLINK_HELPERS_H_ */ diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_types.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_types.h deleted file mode 100644 index 0a98ccc08..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/mavlink_types.h +++ /dev/null @@ -1,228 +0,0 @@ -#ifndef MAVLINK_TYPES_H_ -#define MAVLINK_TYPES_H_ - -// Visual Studio versions before 2010 don't have stdint.h, so we just error out. -#if (defined _MSC_VER) && (_MSC_VER < 1600) -#error "The C-MAVLink implementation requires Visual Studio 2010 or greater" -#endif - -#include - -// Macro to define packed structures -#ifdef __GNUC__ - #define MAVPACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) -#else - #define MAVPACKED( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) ) -#endif - -#ifndef MAVLINK_MAX_PAYLOAD_LEN -// it is possible to override this, but be careful! -#define MAVLINK_MAX_PAYLOAD_LEN 255 ///< Maximum payload length -#endif - -#define MAVLINK_CORE_HEADER_LEN 5 ///< Length of core header (of the comm. layer): message length (1 byte) + message sequence (1 byte) + message system id (1 byte) + message component id (1 byte) + message type id (1 byte) -#define MAVLINK_NUM_HEADER_BYTES (MAVLINK_CORE_HEADER_LEN + 1) ///< Length of all header bytes, including core and checksum -#define MAVLINK_NUM_CHECKSUM_BYTES 2 -#define MAVLINK_NUM_NON_PAYLOAD_BYTES (MAVLINK_NUM_HEADER_BYTES + MAVLINK_NUM_CHECKSUM_BYTES) - -#define MAVLINK_MAX_PACKET_LEN (MAVLINK_MAX_PAYLOAD_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES) ///< Maximum packet length - -#define MAVLINK_MSG_ID_EXTENDED_MESSAGE 255 -#define MAVLINK_EXTENDED_HEADER_LEN 14 - -#if (defined _MSC_VER) || ((defined __APPLE__) && (defined __MACH__)) || (defined __linux__) - /* full fledged 32bit++ OS */ - #define MAVLINK_MAX_EXTENDED_PACKET_LEN 65507 -#else - /* small microcontrollers */ - #define MAVLINK_MAX_EXTENDED_PACKET_LEN 2048 -#endif - -#define MAVLINK_MAX_EXTENDED_PAYLOAD_LEN (MAVLINK_MAX_EXTENDED_PACKET_LEN - MAVLINK_EXTENDED_HEADER_LEN - MAVLINK_NUM_NON_PAYLOAD_BYTES) - - -/** - * Old-style 4 byte param union - * - * This struct is the data format to be used when sending - * parameters. The parameter should be copied to the native - * type (without type conversion) - * and re-instanted on the receiving side using the - * native type as well. - */ -MAVPACKED( -typedef struct param_union { - union { - float param_float; - int32_t param_int32; - uint32_t param_uint32; - int16_t param_int16; - uint16_t param_uint16; - int8_t param_int8; - uint8_t param_uint8; - uint8_t bytes[4]; - }; - uint8_t type; -}) mavlink_param_union_t; - - -/** - * New-style 8 byte param union - * mavlink_param_union_double_t will be 8 bytes long, and treated as needing 8 byte alignment for the purposes of MAVLink 1.0 field ordering. - * The mavlink_param_union_double_t will be treated as a little-endian structure. - * - * If is_double is 1 then the type is a double, and the remaining 63 bits are the double, with the lowest bit of the mantissa zero. - * The intention is that by replacing the is_double bit with 0 the type can be directly used as a double (as the is_double bit corresponds to the - * lowest mantissa bit of a double). If is_double is 0 then mavlink_type gives the type in the union. - * The mavlink_types.h header will also need to have shifts/masks to define the bit boundaries in the above, - * as bitfield ordering isn’t consistent between platforms. The above is intended to be for gcc on x86, - * which should be the same as gcc on little-endian arm. When using shifts/masks the value will be treated as a 64 bit unsigned number, - * and the bits pulled out using the shifts/masks. -*/ -MAVPACKED( -typedef struct param_union_extended { - union { - struct { - uint8_t is_double:1; - uint8_t mavlink_type:7; - union { - char c; - uint8_t uint8; - int8_t int8; - uint16_t uint16; - int16_t int16; - uint32_t uint32; - int32_t int32; - float f; - uint8_t align[7]; - }; - }; - uint8_t data[8]; - }; -}) mavlink_param_union_double_t; - -/** - * This structure is required to make the mavlink_send_xxx convenience functions - * work, as it tells the library what the current system and component ID are. - */ -MAVPACKED( -typedef struct __mavlink_system { - uint8_t sysid; ///< Used by the MAVLink message_xx_send() convenience function - uint8_t compid; ///< Used by the MAVLink message_xx_send() convenience function -}) mavlink_system_t; - -MAVPACKED( -typedef struct __mavlink_message { - uint16_t checksum; ///< sent at end of packet - uint8_t magic; ///< protocol magic marker - uint8_t len; ///< Length of payload - uint8_t seq; ///< Sequence of packet - uint8_t sysid; ///< ID of message sender system/aircraft - uint8_t compid; ///< ID of the message sender component - uint8_t msgid; ///< ID of message in payload - uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8]; -}) mavlink_message_t; - -MAVPACKED( -typedef struct __mavlink_extended_message { - mavlink_message_t base_msg; - int32_t extended_payload_len; ///< Length of extended payload if any - uint8_t extended_payload[MAVLINK_MAX_EXTENDED_PAYLOAD_LEN]; -}) mavlink_extended_message_t; - -typedef enum { - MAVLINK_TYPE_CHAR = 0, - MAVLINK_TYPE_UINT8_T = 1, - MAVLINK_TYPE_INT8_T = 2, - MAVLINK_TYPE_UINT16_T = 3, - MAVLINK_TYPE_INT16_T = 4, - MAVLINK_TYPE_UINT32_T = 5, - MAVLINK_TYPE_INT32_T = 6, - MAVLINK_TYPE_UINT64_T = 7, - MAVLINK_TYPE_INT64_T = 8, - MAVLINK_TYPE_FLOAT = 9, - MAVLINK_TYPE_DOUBLE = 10 -} mavlink_message_type_t; - -#define MAVLINK_MAX_FIELDS 64 - -typedef struct __mavlink_field_info { - const char *name; // name of this field - const char *print_format; // printing format hint, or NULL - mavlink_message_type_t type; // type of this field - unsigned int array_length; // if non-zero, field is an array - unsigned int wire_offset; // offset of each field in the payload - unsigned int structure_offset; // offset in a C structure -} mavlink_field_info_t; - -// note that in this structure the order of fields is the order -// in the XML file, not necessary the wire order -typedef struct __mavlink_message_info { - const char *name; // name of the message - unsigned num_fields; // how many fields in this message - mavlink_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information -} mavlink_message_info_t; - -#define _MAV_PAYLOAD(msg) ((const char *)(&((msg)->payload64[0]))) -#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)(&((msg)->payload64[0]))) - -// checksum is immediately after the payload bytes -#define mavlink_ck_a(msg) *((msg)->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) -#define mavlink_ck_b(msg) *(((msg)->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) - -typedef enum { - MAVLINK_COMM_0, - MAVLINK_COMM_1, - MAVLINK_COMM_2, - MAVLINK_COMM_3 -} mavlink_channel_t; - -/* - * applications can set MAVLINK_COMM_NUM_BUFFERS to the maximum number - * of buffers they will use. If more are used, then the result will be - * a stack overrun - */ -#ifndef MAVLINK_COMM_NUM_BUFFERS -#if (defined linux) | (defined __linux) | (defined __MACH__) | (defined _WIN32) -# define MAVLINK_COMM_NUM_BUFFERS 16 -#else -# define MAVLINK_COMM_NUM_BUFFERS 4 -#endif -#endif - -typedef enum { - MAVLINK_PARSE_STATE_UNINIT=0, - MAVLINK_PARSE_STATE_IDLE, - MAVLINK_PARSE_STATE_GOT_STX, - MAVLINK_PARSE_STATE_GOT_SEQ, - MAVLINK_PARSE_STATE_GOT_LENGTH, - MAVLINK_PARSE_STATE_GOT_SYSID, - MAVLINK_PARSE_STATE_GOT_COMPID, - MAVLINK_PARSE_STATE_GOT_MSGID, - MAVLINK_PARSE_STATE_GOT_PAYLOAD, - MAVLINK_PARSE_STATE_GOT_CRC1, - MAVLINK_PARSE_STATE_GOT_BAD_CRC1 -} mavlink_parse_state_t; ///< The state machine for the comm parser - -typedef enum { - MAVLINK_FRAMING_INCOMPLETE=0, - MAVLINK_FRAMING_OK=1, - MAVLINK_FRAMING_BAD_CRC=2 -} mavlink_framing_t; - -typedef struct __mavlink_status { - uint8_t msg_received; ///< Number of received messages - uint8_t buffer_overrun; ///< Number of buffer overruns - uint8_t parse_error; ///< Number of parse errors - mavlink_parse_state_t parse_state; ///< Parsing state machine - uint8_t packet_idx; ///< Index in current packet - uint8_t current_rx_seq; ///< Sequence number of last packet received - uint8_t current_tx_seq; ///< Sequence number of last packet sent - uint16_t packet_rx_success_count; ///< Received packets - uint16_t packet_rx_drop_count; ///< Number of packet drops -} mavlink_status_t; - -#define MAVLINK_BIG_ENDIAN 0 -#define MAVLINK_LITTLE_ENDIAN 1 - -#endif /* MAVLINK_TYPES_H_ */ diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/protocol.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/protocol.h deleted file mode 100644 index 731bd3a58..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v1.0/protocol.h +++ /dev/null @@ -1,339 +0,0 @@ -#ifndef _MAVLINK_PROTOCOL_H_ -#define _MAVLINK_PROTOCOL_H_ - -#include "string.h" -#include "mavlink_types.h" - -/* - If you want MAVLink on a system that is native big-endian, - you need to define NATIVE_BIG_ENDIAN -*/ -#ifdef NATIVE_BIG_ENDIAN -# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN) -#else -# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN != MAVLINK_LITTLE_ENDIAN) -#endif - -#ifndef MAVLINK_STACK_BUFFER -#define MAVLINK_STACK_BUFFER 0 -#endif - -#ifndef MAVLINK_AVOID_GCC_STACK_BUG -# define MAVLINK_AVOID_GCC_STACK_BUG defined(__GNUC__) -#endif - -#ifndef MAVLINK_ASSERT -#define MAVLINK_ASSERT(x) -#endif - -#ifndef MAVLINK_START_UART_SEND -#define MAVLINK_START_UART_SEND(chan, length) -#endif - -#ifndef MAVLINK_END_UART_SEND -#define MAVLINK_END_UART_SEND(chan, length) -#endif - -/* option to provide alternative implementation of mavlink_helpers.h */ -#ifdef MAVLINK_SEPARATE_HELPERS - - #define MAVLINK_HELPER - - /* decls in sync with those in mavlink_helpers.h */ - #ifndef MAVLINK_GET_CHANNEL_STATUS - MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan); - #endif - MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan); - #if MAVLINK_CRC_EXTRA - MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra); - MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t min_length, uint8_t length, uint8_t crc_extra); - #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, - uint8_t min_length, uint8_t length, uint8_t crc_extra); - #endif - #else - MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t length); - MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t length); - #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint8_t msgid, const char *packet, uint8_t length); - #endif - #endif // MAVLINK_CRC_EXTRA - MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg); - MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg); - MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c); - MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, - mavlink_status_t* status, - uint8_t c, - mavlink_message_t* r_message, - mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, - uint8_t* r_bit_index, uint8_t* buffer); - #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); - MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg); - #endif - -#else - - #define MAVLINK_HELPER static inline - #include "mavlink_helpers.h" - -#endif // MAVLINK_SEPARATE_HELPERS - -/** - * @brief Get the required buffer size for this message - */ -static inline uint16_t mavlink_msg_get_send_buffer_length(const mavlink_message_t* msg) -{ - return msg->len + MAVLINK_NUM_NON_PAYLOAD_BYTES; -} - -#if MAVLINK_NEED_BYTE_SWAP -static inline void byte_swap_2(char *dst, const char *src) -{ - dst[0] = src[1]; - dst[1] = src[0]; -} -static inline void byte_swap_4(char *dst, const char *src) -{ - dst[0] = src[3]; - dst[1] = src[2]; - dst[2] = src[1]; - dst[3] = src[0]; -} -static inline void byte_swap_8(char *dst, const char *src) -{ - dst[0] = src[7]; - dst[1] = src[6]; - dst[2] = src[5]; - dst[3] = src[4]; - dst[4] = src[3]; - dst[5] = src[2]; - dst[6] = src[1]; - dst[7] = src[0]; -} -#elif !MAVLINK_ALIGNED_FIELDS -static inline void byte_copy_2(char *dst, const char *src) -{ - dst[0] = src[0]; - dst[1] = src[1]; -} -static inline void byte_copy_4(char *dst, const char *src) -{ - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; - dst[3] = src[3]; -} -static inline void byte_copy_8(char *dst, const char *src) -{ - memcpy(dst, src, 8); -} -#endif - -#define _mav_put_uint8_t(buf, wire_offset, b) buf[wire_offset] = (uint8_t)b -#define _mav_put_int8_t(buf, wire_offset, b) buf[wire_offset] = (int8_t)b -#define _mav_put_char(buf, wire_offset, b) buf[wire_offset] = b - -#if MAVLINK_NEED_BYTE_SWAP -#define _mav_put_uint16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_int16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_int32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_int64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_float(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_double(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#elif !MAVLINK_ALIGNED_FIELDS -#define _mav_put_uint16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_int16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_int32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_int64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_float(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_double(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#else -#define _mav_put_uint16_t(buf, wire_offset, b) *(uint16_t *)&buf[wire_offset] = b -#define _mav_put_int16_t(buf, wire_offset, b) *(int16_t *)&buf[wire_offset] = b -#define _mav_put_uint32_t(buf, wire_offset, b) *(uint32_t *)&buf[wire_offset] = b -#define _mav_put_int32_t(buf, wire_offset, b) *(int32_t *)&buf[wire_offset] = b -#define _mav_put_uint64_t(buf, wire_offset, b) *(uint64_t *)&buf[wire_offset] = b -#define _mav_put_int64_t(buf, wire_offset, b) *(int64_t *)&buf[wire_offset] = b -#define _mav_put_float(buf, wire_offset, b) *(float *)&buf[wire_offset] = b -#define _mav_put_double(buf, wire_offset, b) *(double *)&buf[wire_offset] = b -#endif - -/* - like memcpy(), but if src is NULL, do a memset to zero -*/ -static inline void mav_array_memcpy(void *dest, const void *src, size_t n) -{ - if (src == NULL) { - memset(dest, 0, n); - } else { - memcpy(dest, src, n); - } -} - -/* - * Place a char array into a buffer - */ -static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -/* - * Place a uint8_t array into a buffer - */ -static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -/* - * Place a int8_t array into a buffer - */ -static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -#if MAVLINK_NEED_BYTE_SWAP -#define _MAV_PUT_ARRAY(TYPE, V) \ -static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \ -{ \ - if (b == NULL) { \ - memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \ - } else { \ - uint16_t i; \ - for (i=0; i - -/** - * - * CALCULATE THE CHECKSUM - * - */ - -#define X25_INIT_CRC 0xffff -#define X25_VALIDATE_CRC 0xf0b8 - -#ifndef HAVE_CRC_ACCUMULATE -/** - * @brief Accumulate the X.25 CRC by adding one char at a time. - * - * The checksum function adds the hash of one char at a time to the - * 16 bit checksum (uint16_t). - * - * @param data new char to hash - * @param crcAccum the already accumulated checksum - **/ -static inline void crc_accumulate(uint8_t data, uint16_t *crcAccum) -{ - /*Accumulate one byte of data into the CRC*/ - uint8_t tmp; - - tmp = data ^ (uint8_t)(*crcAccum &0xff); - tmp ^= (tmp<<4); - *crcAccum = (*crcAccum>>8) ^ (tmp<<8) ^ (tmp <<3) ^ (tmp>>4); -} -#endif - - -/** - * @brief Initiliaze the buffer for the X.25 CRC - * - * @param crcAccum the 16 bit X.25 CRC - */ -static inline void crc_init(uint16_t* crcAccum) -{ - *crcAccum = X25_INIT_CRC; -} - - -/** - * @brief Calculates the X.25 checksum on a byte buffer - * - * @param pBuffer buffer containing the byte array to hash - * @param length length of the byte array - * @return the checksum over the buffer bytes - **/ -static inline uint16_t crc_calculate(const uint8_t* pBuffer, uint16_t length) -{ - uint16_t crcTmp; - crc_init(&crcTmp); - while (length--) { - crc_accumulate(*pBuffer++, &crcTmp); - } - return crcTmp; -} - - -/** - * @brief Accumulate the X.25 CRC by adding an array of bytes - * - * The checksum function adds the hash of one char at a time to the - * 16 bit checksum (uint16_t). - * - * @param data new bytes to hash - * @param crcAccum the already accumulated checksum - **/ -static inline void crc_accumulate_buffer(uint16_t *crcAccum, const char *pBuffer, uint16_t length) -{ - const uint8_t *p = (const uint8_t *)pBuffer; - while (length--) { - crc_accumulate(*p++, crcAccum); - } -} - -#ifdef __cplusplus -} -#endif diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_conversions.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_conversions.h deleted file mode 100644 index 740b35c31..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_conversions.h +++ /dev/null @@ -1,209 +0,0 @@ -#pragma once - -/* enable math defines on Windows */ -#ifdef _MSC_VER -#ifndef _USE_MATH_DEFINES -#define _USE_MATH_DEFINES -#endif -#endif -#include - -#ifndef M_PI_2 - #define M_PI_2 ((float)asin(1)) -#endif - -/** - * @file mavlink_conversions.h - * - * These conversion functions follow the NASA rotation standards definition file - * available online. - * - * Their intent is to lower the barrier for MAVLink adopters to use gimbal-lock free - * (both rotation matrices, sometimes called DCM, and quaternions are gimbal-lock free) - * rotation representations. Euler angles (roll, pitch, yaw) will be phased out of the - * protocol as widely as possible. - * - * @author James Goppert - * @author Thomas Gubler - */ - - -/** - * Converts a quaternion to a rotation matrix - * - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - * @param dcm a 3x3 rotation matrix - */ -MAVLINK_HELPER void mavlink_quaternion_to_dcm(const float quaternion[4], float dcm[3][3]) -{ - double a = quaternion[0]; - double b = quaternion[1]; - double c = quaternion[2]; - double d = quaternion[3]; - double aSq = a * a; - double bSq = b * b; - double cSq = c * c; - double dSq = d * d; - dcm[0][0] = aSq + bSq - cSq - dSq; - dcm[0][1] = 2 * (b * c - a * d); - dcm[0][2] = 2 * (a * c + b * d); - dcm[1][0] = 2 * (b * c + a * d); - dcm[1][1] = aSq - bSq + cSq - dSq; - dcm[1][2] = 2 * (c * d - a * b); - dcm[2][0] = 2 * (b * d - a * c); - dcm[2][1] = 2 * (a * b + c * d); - dcm[2][2] = aSq - bSq - cSq + dSq; -} - - -/** - * Converts a rotation matrix to euler angles - * - * @param dcm a 3x3 rotation matrix - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - */ -MAVLINK_HELPER void mavlink_dcm_to_euler(const float dcm[3][3], float* roll, float* pitch, float* yaw) -{ - float phi, theta, psi; - theta = asin(-dcm[2][0]); - - if (fabsf(theta - (float)M_PI_2) < 1.0e-3f) { - phi = 0.0f; - psi = (atan2f(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1]) + phi); - - } else if (fabsf(theta + (float)M_PI_2) < 1.0e-3f) { - phi = 0.0f; - psi = atan2f(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1] - phi); - - } else { - phi = atan2f(dcm[2][1], dcm[2][2]); - psi = atan2f(dcm[1][0], dcm[0][0]); - } - - *roll = phi; - *pitch = theta; - *yaw = psi; -} - - -/** - * Converts a quaternion to euler angles - * - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - */ -MAVLINK_HELPER void mavlink_quaternion_to_euler(const float quaternion[4], float* roll, float* pitch, float* yaw) -{ - float dcm[3][3]; - mavlink_quaternion_to_dcm(quaternion, dcm); - mavlink_dcm_to_euler((const float(*)[3])dcm, roll, pitch, yaw); -} - - -/** - * Converts euler angles to a quaternion - * - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - */ -MAVLINK_HELPER void mavlink_euler_to_quaternion(float roll, float pitch, float yaw, float quaternion[4]) -{ - float cosPhi_2 = cosf(roll / 2); - float sinPhi_2 = sinf(roll / 2); - float cosTheta_2 = cosf(pitch / 2); - float sinTheta_2 = sinf(pitch / 2); - float cosPsi_2 = cosf(yaw / 2); - float sinPsi_2 = sinf(yaw / 2); - quaternion[0] = (cosPhi_2 * cosTheta_2 * cosPsi_2 + - sinPhi_2 * sinTheta_2 * sinPsi_2); - quaternion[1] = (sinPhi_2 * cosTheta_2 * cosPsi_2 - - cosPhi_2 * sinTheta_2 * sinPsi_2); - quaternion[2] = (cosPhi_2 * sinTheta_2 * cosPsi_2 + - sinPhi_2 * cosTheta_2 * sinPsi_2); - quaternion[3] = (cosPhi_2 * cosTheta_2 * sinPsi_2 - - sinPhi_2 * sinTheta_2 * cosPsi_2); -} - - -/** - * Converts a rotation matrix to a quaternion - * Reference: - * - Shoemake, Quaternions, - * http://www.cs.ucr.edu/~vbz/resources/quatut.pdf - * - * @param dcm a 3x3 rotation matrix - * @param quaternion a [w, x, y, z] ordered quaternion (null-rotation being 1 0 0 0) - */ -MAVLINK_HELPER void mavlink_dcm_to_quaternion(const float dcm[3][3], float quaternion[4]) -{ - float tr = dcm[0][0] + dcm[1][1] + dcm[2][2]; - if (tr > 0.0f) { - float s = sqrtf(tr + 1.0f); - quaternion[0] = s * 0.5f; - s = 0.5f / s; - quaternion[1] = (dcm[2][1] - dcm[1][2]) * s; - quaternion[2] = (dcm[0][2] - dcm[2][0]) * s; - quaternion[3] = (dcm[1][0] - dcm[0][1]) * s; - } else { - /* Find maximum diagonal element in dcm - * store index in dcm_i */ - int dcm_i = 0; - int i; - for (i = 1; i < 3; i++) { - if (dcm[i][i] > dcm[dcm_i][dcm_i]) { - dcm_i = i; - } - } - - int dcm_j = (dcm_i + 1) % 3; - int dcm_k = (dcm_i + 2) % 3; - - float s = sqrtf((dcm[dcm_i][dcm_i] - dcm[dcm_j][dcm_j] - - dcm[dcm_k][dcm_k]) + 1.0f); - quaternion[dcm_i + 1] = s * 0.5f; - s = 0.5f / s; - quaternion[dcm_j + 1] = (dcm[dcm_i][dcm_j] + dcm[dcm_j][dcm_i]) * s; - quaternion[dcm_k + 1] = (dcm[dcm_k][dcm_i] + dcm[dcm_i][dcm_k]) * s; - quaternion[0] = (dcm[dcm_k][dcm_j] - dcm[dcm_j][dcm_k]) * s; - } -} - - -/** - * Converts euler angles to a rotation matrix - * - * @param roll the roll angle in radians - * @param pitch the pitch angle in radians - * @param yaw the yaw angle in radians - * @param dcm a 3x3 rotation matrix - */ -MAVLINK_HELPER void mavlink_euler_to_dcm(float roll, float pitch, float yaw, float dcm[3][3]) -{ - float cosPhi = cosf(roll); - float sinPhi = sinf(roll); - float cosThe = cosf(pitch); - float sinThe = sinf(pitch); - float cosPsi = cosf(yaw); - float sinPsi = sinf(yaw); - - dcm[0][0] = cosThe * cosPsi; - dcm[0][1] = -cosPhi * sinPsi + sinPhi * sinThe * cosPsi; - dcm[0][2] = sinPhi * sinPsi + cosPhi * sinThe * cosPsi; - - dcm[1][0] = cosThe * sinPsi; - dcm[1][1] = cosPhi * cosPsi + sinPhi * sinThe * sinPsi; - dcm[1][2] = -sinPhi * cosPsi + cosPhi * sinThe * sinPsi; - - dcm[2][0] = -sinThe; - dcm[2][1] = sinPhi * cosThe; - dcm[2][2] = cosPhi * cosThe; -} - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_get_info.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_get_info.h deleted file mode 100644 index b07e13014..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_get_info.h +++ /dev/null @@ -1,37 +0,0 @@ -#pragma once - -#ifdef MAVLINK_USE_MESSAGE_INFO -#define MAVLINK_HAVE_GET_MESSAGE_INFO -/* - return the message_info struct for a message -*/ -MAVLINK_HELPER const mavlink_message_info_t *mavlink_get_message_info(const mavlink_message_t *msg) -{ - static const mavlink_message_info_t mavlink_message_info[] = MAVLINK_MESSAGE_INFO; - /* - use a bisection search to find the right entry. A perfect hash may be better - Note that this assumes the table is sorted with primary key msgid - */ - uint32_t msgid = msg->msgid; - uint32_t low=0, high=sizeof(mavlink_message_info)/sizeof(mavlink_message_info[0]); - while (low < high) { - uint32_t mid = (low+1+high)/2; - if (msgid < mavlink_message_info[mid].msgid) { - high = mid-1; - continue; - } - if (msgid > mavlink_message_info[mid].msgid) { - low = mid; - continue; - } - low = mid; - break; - } - if (mavlink_message_info[low].msgid == msgid) { - return &mavlink_message_info[low]; - } - return NULL; -} -#endif // MAVLINK_USE_MESSAGE_INFO - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_helpers.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_helpers.h deleted file mode 100644 index 5c9babed5..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_helpers.h +++ /dev/null @@ -1,1098 +0,0 @@ -#pragma once - -#include "string.h" -#include "checksum.h" -#include "mavlink_types.h" -#include "mavlink_conversions.h" -#include - -#ifndef MAVLINK_HELPER -#define MAVLINK_HELPER -#endif - -#include "mavlink_sha256.h" - -/* - * Internal function to give access to the channel status for each channel - */ -#ifndef MAVLINK_GET_CHANNEL_STATUS -MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan) -{ -#ifdef MAVLINK_EXTERNAL_RX_STATUS - // No m_mavlink_status array defined in function, - // has to be defined externally -#else - static mavlink_status_t m_mavlink_status[MAVLINK_COMM_NUM_BUFFERS]; -#endif - return &m_mavlink_status[chan]; -} -#endif - -/* - * Internal function to give access to the channel buffer for each channel - */ -#ifndef MAVLINK_GET_CHANNEL_BUFFER -MAVLINK_HELPER mavlink_message_t* mavlink_get_channel_buffer(uint8_t chan) -{ - -#ifdef MAVLINK_EXTERNAL_RX_BUFFER - // No m_mavlink_buffer array defined in function, - // has to be defined externally -#else - static mavlink_message_t m_mavlink_buffer[MAVLINK_COMM_NUM_BUFFERS]; -#endif - return &m_mavlink_buffer[chan]; -} -#endif // MAVLINK_GET_CHANNEL_BUFFER - -/** - * @brief Reset the status of a channel. - */ -MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan) -{ - mavlink_status_t *status = mavlink_get_channel_status(chan); - status->parse_state = MAVLINK_PARSE_STATE_IDLE; -} - -/** - * @brief create a signature block for a packet - */ -MAVLINK_HELPER uint8_t mavlink_sign_packet(mavlink_signing_t *signing, - uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN], - const uint8_t *header, uint8_t header_len, - const uint8_t *packet, uint8_t packet_len, - const uint8_t crc[2]) -{ - mavlink_sha256_ctx ctx; - union { - uint64_t t64; - uint8_t t8[8]; - } tstamp; - if (signing == NULL || !(signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING)) { - return 0; - } - signature[0] = signing->link_id; - tstamp.t64 = signing->timestamp; - memcpy(&signature[1], tstamp.t8, 6); - signing->timestamp++; - - mavlink_sha256_init(&ctx); - mavlink_sha256_update(&ctx, signing->secret_key, sizeof(signing->secret_key)); - mavlink_sha256_update(&ctx, header, header_len); - mavlink_sha256_update(&ctx, packet, packet_len); - mavlink_sha256_update(&ctx, crc, 2); - mavlink_sha256_update(&ctx, signature, 7); - mavlink_sha256_final_48(&ctx, &signature[7]); - - return MAVLINK_SIGNATURE_BLOCK_LEN; -} - -/** - * return new packet length for trimming payload of any trailing zero - * bytes. Used in MAVLink2 to give simple support for variable length - * arrays. - */ -MAVLINK_HELPER uint8_t _mav_trim_payload(const char *payload, uint8_t length) -{ - while (length > 1 && payload[length-1] == 0) { - length--; - } - return length; -} - -/** - * @brief check a signature block for a packet - */ -MAVLINK_HELPER bool mavlink_signature_check(mavlink_signing_t *signing, - mavlink_signing_streams_t *signing_streams, - const mavlink_message_t *msg) -{ - if (signing == NULL) { - return true; - } - const uint8_t *p = (const uint8_t *)&msg->magic; - const uint8_t *psig = msg->signature; - const uint8_t *incoming_signature = psig+7; - mavlink_sha256_ctx ctx; - uint8_t signature[6]; - uint16_t i; - - mavlink_sha256_init(&ctx); - mavlink_sha256_update(&ctx, signing->secret_key, sizeof(signing->secret_key)); - mavlink_sha256_update(&ctx, p, MAVLINK_CORE_HEADER_LEN+1+msg->len); - mavlink_sha256_update(&ctx, msg->ck, 2); - mavlink_sha256_update(&ctx, psig, 1+6); - mavlink_sha256_final_48(&ctx, signature); - if (memcmp(signature, incoming_signature, 6) != 0) { - return false; - } - - // now check timestamp - union tstamp { - uint64_t t64; - uint8_t t8[8]; - } tstamp; - uint8_t link_id = psig[0]; - tstamp.t64 = 0; - memcpy(tstamp.t8, psig+1, 6); - - if (signing_streams == NULL) { - return false; - } - - // find stream - for (i=0; inum_signing_streams; i++) { - if (msg->sysid == signing_streams->stream[i].sysid && - msg->compid == signing_streams->stream[i].compid && - link_id == signing_streams->stream[i].link_id) { - break; - } - } - if (i == signing_streams->num_signing_streams) { - if (signing_streams->num_signing_streams >= MAVLINK_MAX_SIGNING_STREAMS) { - // over max number of streams - return false; - } - // new stream. Only accept if timestamp is not more than 1 minute old - if (tstamp.t64 + 6000*1000UL < signing->timestamp) { - return false; - } - // add new stream - signing_streams->stream[i].sysid = msg->sysid; - signing_streams->stream[i].compid = msg->compid; - signing_streams->stream[i].link_id = link_id; - signing_streams->num_signing_streams++; - } else { - union tstamp last_tstamp; - last_tstamp.t64 = 0; - memcpy(last_tstamp.t8, signing_streams->stream[i].timestamp_bytes, 6); - if (tstamp.t64 <= last_tstamp.t64) { - // repeating old timestamp - return false; - } - } - - // remember last timestamp - memcpy(signing_streams->stream[i].timestamp_bytes, psig+1, 6); - - // our next timestamp must be at least this timestamp - if (tstamp.t64 > signing->timestamp) { - signing->timestamp = tstamp.t64; - } - return true; -} - - -/** - * @brief Finalize a MAVLink message with channel assignment - * - * This function calculates the checksum and sets length and aircraft id correctly. - * It assumes that the message id and the payload are already correctly set. This function - * can also be used if the message header has already been written before (as in mavlink_msg_xxx_pack - * instead of mavlink_msg_xxx_pack_headerless), it just introduces little extra overhead. - * - * @param msg Message to finalize - * @param system_id Id of the sending (this) system, 1-127 - * @param length Message length - */ -MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra) -{ - mavlink_status_t *status = mavlink_get_channel_status(chan); - bool mavlink1 = (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) != 0; - bool signing = (!mavlink1) && status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING); - uint8_t signature_len = signing? MAVLINK_SIGNATURE_BLOCK_LEN : 0; - uint8_t header_len = MAVLINK_CORE_HEADER_LEN+1; - uint8_t buf[MAVLINK_CORE_HEADER_LEN+1]; - if (mavlink1) { - msg->magic = MAVLINK_STX_MAVLINK1; - header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN+1; - } else { - msg->magic = MAVLINK_STX; - } - msg->len = mavlink1?min_length:_mav_trim_payload(_MAV_PAYLOAD(msg), length); - msg->sysid = system_id; - msg->compid = component_id; - msg->incompat_flags = 0; - if (signing) { - msg->incompat_flags |= MAVLINK_IFLAG_SIGNED; - } - msg->compat_flags = 0; - msg->seq = status->current_tx_seq; - status->current_tx_seq = status->current_tx_seq + 1; - - // form the header as a byte array for the crc - buf[0] = msg->magic; - buf[1] = msg->len; - if (mavlink1) { - buf[2] = msg->seq; - buf[3] = msg->sysid; - buf[4] = msg->compid; - buf[5] = msg->msgid & 0xFF; - } else { - buf[2] = msg->incompat_flags; - buf[3] = msg->compat_flags; - buf[4] = msg->seq; - buf[5] = msg->sysid; - buf[6] = msg->compid; - buf[7] = msg->msgid & 0xFF; - buf[8] = (msg->msgid >> 8) & 0xFF; - buf[9] = (msg->msgid >> 16) & 0xFF; - } - - msg->checksum = crc_calculate(&buf[1], header_len-1); - crc_accumulate_buffer(&msg->checksum, _MAV_PAYLOAD(msg), msg->len); - crc_accumulate(crc_extra, &msg->checksum); - mavlink_ck_a(msg) = (uint8_t)(msg->checksum & 0xFF); - mavlink_ck_b(msg) = (uint8_t)(msg->checksum >> 8); - - if (signing) { - mavlink_sign_packet(status->signing, - msg->signature, - (const uint8_t *)buf, header_len, - (const uint8_t *)_MAV_PAYLOAD(msg), msg->len, - (const uint8_t *)_MAV_PAYLOAD(msg)+(uint16_t)msg->len); - } - - return msg->len + header_len + 2 + signature_len; -} - - -/** - * @brief Finalize a MAVLink message with MAVLINK_COMM_0 as default channel - */ -MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t min_length, uint8_t length, uint8_t crc_extra) -{ - return mavlink_finalize_message_chan(msg, system_id, component_id, MAVLINK_COMM_0, min_length, length, crc_extra); -} - -static inline void _mav_parse_error(mavlink_status_t *status) -{ - status->parse_error++; -} - -#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS -MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); - -/** - * @brief Finalize a MAVLink message with channel assignment and send - */ -MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint32_t msgid, - const char *packet, - uint8_t min_length, uint8_t length, uint8_t crc_extra) -{ - uint16_t checksum; - uint8_t buf[MAVLINK_NUM_HEADER_BYTES]; - uint8_t ck[2]; - mavlink_status_t *status = mavlink_get_channel_status(chan); - uint8_t header_len = MAVLINK_CORE_HEADER_LEN; - uint8_t signature_len = 0; - uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN]; - bool mavlink1 = (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) != 0; - bool signing = (!mavlink1) && status->signing && (status->signing->flags & MAVLINK_SIGNING_FLAG_SIGN_OUTGOING); - - if (mavlink1) { - length = min_length; - if (msgid > 255) { - // can't send 16 bit messages - _mav_parse_error(status); - return; - } - header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN; - buf[0] = MAVLINK_STX_MAVLINK1; - buf[1] = length; - buf[2] = status->current_tx_seq; - buf[3] = mavlink_system.sysid; - buf[4] = mavlink_system.compid; - buf[5] = msgid & 0xFF; - } else { - uint8_t incompat_flags = 0; - if (signing) { - incompat_flags |= MAVLINK_IFLAG_SIGNED; - } - length = _mav_trim_payload(packet, length); - buf[0] = MAVLINK_STX; - buf[1] = length; - buf[2] = incompat_flags; - buf[3] = 0; // compat_flags - buf[4] = status->current_tx_seq; - buf[5] = mavlink_system.sysid; - buf[6] = mavlink_system.compid; - buf[7] = msgid & 0xFF; - buf[8] = (msgid >> 8) & 0xFF; - buf[9] = (msgid >> 16) & 0xFF; - } - status->current_tx_seq++; - checksum = crc_calculate((const uint8_t*)&buf[1], header_len); - crc_accumulate_buffer(&checksum, packet, length); - crc_accumulate(crc_extra, &checksum); - ck[0] = (uint8_t)(checksum & 0xFF); - ck[1] = (uint8_t)(checksum >> 8); - - if (signing) { - // possibly add a signature - signature_len = mavlink_sign_packet(status->signing, signature, buf, header_len+1, - (const uint8_t *)packet, length, ck); - } - - MAVLINK_START_UART_SEND(chan, header_len + 3 + (uint16_t)length + (uint16_t)signature_len); - _mavlink_send_uart(chan, (const char *)buf, header_len+1); - _mavlink_send_uart(chan, packet, length); - _mavlink_send_uart(chan, (const char *)ck, 2); - if (signature_len != 0) { - _mavlink_send_uart(chan, (const char *)signature, signature_len); - } - MAVLINK_END_UART_SEND(chan, header_len + 3 + (uint16_t)length + (uint16_t)signature_len); -} - -/** - * @brief re-send a message over a uart channel - * this is more stack efficient than re-marshalling the message - * If the message is signed then the original signature is also sent - */ -MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg) -{ - uint8_t ck[2]; - - ck[0] = (uint8_t)(msg->checksum & 0xFF); - ck[1] = (uint8_t)(msg->checksum >> 8); - // XXX use the right sequence here - - uint8_t header_len; - uint8_t signature_len; - - if (msg->magic == MAVLINK_STX_MAVLINK1) { - header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN + 1; - signature_len = 0; - MAVLINK_START_UART_SEND(chan, header_len + msg->len + 2 + signature_len); - // we can't send the structure directly as it has extra mavlink2 elements in it - uint8_t buf[header_len]; - buf[0] = msg->magic; - buf[1] = msg->len; - buf[2] = msg->seq; - buf[3] = msg->sysid; - buf[4] = msg->compid; - buf[5] = msg->msgid & 0xFF; - _mavlink_send_uart(chan, (const char*)buf, header_len); - } else { - header_len = MAVLINK_CORE_HEADER_LEN + 1; - signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; - MAVLINK_START_UART_SEND(chan, header_len + msg->len + 2 + signature_len); - uint8_t buf[header_len]; - buf[0] = msg->magic; - buf[1] = msg->len; - buf[2] = msg->incompat_flags; - buf[3] = msg->compat_flags; - buf[4] = msg->seq; - buf[5] = msg->sysid; - buf[6] = msg->compid; - buf[7] = msg->msgid & 0xFF; - buf[8] = (msg->msgid >> 8) & 0xFF; - buf[9] = (msg->msgid >> 16) & 0xFF; - _mavlink_send_uart(chan, (const char *)buf, header_len); - } - _mavlink_send_uart(chan, _MAV_PAYLOAD(msg), msg->len); - _mavlink_send_uart(chan, (const char *)ck, 2); - if (signature_len != 0) { - _mavlink_send_uart(chan, (const char *)msg->signature, MAVLINK_SIGNATURE_BLOCK_LEN); - } - MAVLINK_END_UART_SEND(chan, header_len + msg->len + 2 + signature_len); -} -#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS - -/** - * @brief Pack a message to send it over a serial byte stream - */ -MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buf, const mavlink_message_t *msg) -{ - uint8_t signature_len, header_len; - uint8_t *ck; - uint8_t length = msg->len; - - if (msg->magic == MAVLINK_STX_MAVLINK1) { - signature_len = 0; - header_len = MAVLINK_CORE_HEADER_MAVLINK1_LEN; - buf[0] = msg->magic; - buf[1] = length; - buf[2] = msg->seq; - buf[3] = msg->sysid; - buf[4] = msg->compid; - buf[5] = msg->msgid & 0xFF; - memcpy(&buf[6], _MAV_PAYLOAD(msg), msg->len); - ck = buf + header_len + 1 + (uint16_t)msg->len; - } else { - length = _mav_trim_payload(_MAV_PAYLOAD(msg), length); - header_len = MAVLINK_CORE_HEADER_LEN; - buf[0] = msg->magic; - buf[1] = length; - buf[2] = msg->incompat_flags; - buf[3] = msg->compat_flags; - buf[4] = msg->seq; - buf[5] = msg->sysid; - buf[6] = msg->compid; - buf[7] = msg->msgid & 0xFF; - buf[8] = (msg->msgid >> 8) & 0xFF; - buf[9] = (msg->msgid >> 16) & 0xFF; - memcpy(&buf[10], _MAV_PAYLOAD(msg), length); - ck = buf + header_len + 1 + (uint16_t)length; - signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; - } - ck[0] = (uint8_t)(msg->checksum & 0xFF); - ck[1] = (uint8_t)(msg->checksum >> 8); - if (signature_len > 0) { - memcpy(&ck[2], msg->signature, signature_len); - } - - return header_len + 1 + 2 + (uint16_t)length + (uint16_t)signature_len; -} - -union __mavlink_bitfield { - uint8_t uint8; - int8_t int8; - uint16_t uint16; - int16_t int16; - uint32_t uint32; - int32_t int32; -}; - - -MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg) -{ - crc_init(&msg->checksum); -} - -MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c) -{ - crc_accumulate(c, &msg->checksum); -} - -/* - return the crc_entry value for a msgid -*/ -MAVLINK_HELPER const mavlink_msg_entry_t *mavlink_get_msg_entry(uint32_t msgid) -{ - static const mavlink_msg_entry_t mavlink_message_crcs[] = MAVLINK_MESSAGE_CRCS; - /* - use a bisection search to find the right entry. A perfect hash may be better - Note that this assumes the table is sorted by msgid - */ - uint32_t low=0, high=sizeof(mavlink_message_crcs)/sizeof(mavlink_message_crcs[0]); - while (low < high) { - uint32_t mid = (low+1+high)/2; - if (msgid < mavlink_message_crcs[mid].msgid) { - high = mid-1; - continue; - } - if (msgid > mavlink_message_crcs[mid].msgid) { - low = mid; - continue; - } - low = mid; - break; - } - if (mavlink_message_crcs[low].msgid != msgid) { - // msgid is not in the table - return NULL; - } - return &mavlink_message_crcs[low]; -} - -/* - return the crc_extra value for a message -*/ -MAVLINK_HELPER uint8_t mavlink_get_crc_extra(const mavlink_message_t *msg) -{ - const mavlink_msg_entry_t *e = mavlink_get_msg_entry(msg->msgid); - return e?e->crc_extra:0; -} - -/* - return the expected message length -*/ -#define MAVLINK_HAVE_EXPECTED_MESSAGE_LENGTH -MAVLINK_HELPER uint8_t mavlink_expected_message_length(const mavlink_message_t *msg) -{ - const mavlink_msg_entry_t *e = mavlink_get_msg_entry(msg->msgid); - return e?e->msg_len:0; -} - -/** - * This is a varient of mavlink_frame_char() but with caller supplied - * parsing buffers. It is useful when you want to create a MAVLink - * parser in a library that doesn't use any global variables - * - * @param rxmsg parsing message buffer - * @param status parsing starus buffer - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_frame_char(chan, byte, &msg) != MAVLINK_FRAMING_INCOMPLETE) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, - mavlink_status_t* status, - uint8_t c, - mavlink_message_t* r_message, - mavlink_status_t* r_mavlink_status) -{ - /* Enable this option to check the length of each message. - This allows invalid messages to be caught much sooner. Use if the transmission - medium is prone to missing (or extra) characters (e.g. a radio that fades in - and out). Only use if the channel will only contain messages types listed in - the headers. - */ -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH -#ifndef MAVLINK_MESSAGE_LENGTH - static const uint8_t mavlink_message_lengths[256] = MAVLINK_MESSAGE_LENGTHS; -#define MAVLINK_MESSAGE_LENGTH(msgid) mavlink_message_lengths[msgid] -#endif -#endif - - int bufferIndex = 0; - - status->msg_received = MAVLINK_FRAMING_INCOMPLETE; - - switch (status->parse_state) - { - case MAVLINK_PARSE_STATE_UNINIT: - case MAVLINK_PARSE_STATE_IDLE: - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - rxmsg->magic = c; - status->flags &= ~MAVLINK_STATUS_FLAG_IN_MAVLINK1; - mavlink_start_checksum(rxmsg); - } else if (c == MAVLINK_STX_MAVLINK1) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - rxmsg->magic = c; - status->flags |= MAVLINK_STATUS_FLAG_IN_MAVLINK1; - mavlink_start_checksum(rxmsg); - } - break; - - case MAVLINK_PARSE_STATE_GOT_STX: - if (status->msg_received -/* Support shorter buffers than the - default maximum packet size */ -#if (MAVLINK_MAX_PAYLOAD_LEN < 255) - || c > MAVLINK_MAX_PAYLOAD_LEN -#endif - ) - { - status->buffer_overrun++; - _mav_parse_error(status); - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - } - else - { - // NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2 - rxmsg->len = c; - status->packet_idx = 0; - mavlink_update_checksum(rxmsg, c); - if (status->flags & MAVLINK_STATUS_FLAG_IN_MAVLINK1) { - rxmsg->incompat_flags = 0; - rxmsg->compat_flags = 0; - status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS; - } else { - status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH; - } - } - break; - - case MAVLINK_PARSE_STATE_GOT_LENGTH: - rxmsg->incompat_flags = c; - if ((rxmsg->incompat_flags & ~MAVLINK_IFLAG_MASK) != 0) { - // message includes an incompatible feature flag - _mav_parse_error(status); - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - break; - } - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS; - break; - - case MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS: - rxmsg->compat_flags = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS; - break; - - case MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS: - rxmsg->seq = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ; - break; - - case MAVLINK_PARSE_STATE_GOT_SEQ: - rxmsg->sysid = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID; - break; - - case MAVLINK_PARSE_STATE_GOT_SYSID: - rxmsg->compid = c; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID; - break; - - case MAVLINK_PARSE_STATE_GOT_COMPID: - rxmsg->msgid = c; - mavlink_update_checksum(rxmsg, c); - if (status->flags & MAVLINK_STATUS_FLAG_IN_MAVLINK1) { - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID3; -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH - if (rxmsg->len != MAVLINK_MESSAGE_LENGTH(rxmsg->msgid)) - { - _mav_parse_error(status); - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - break; - } -#endif - } else { - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID1; - } - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID1: - rxmsg->msgid |= c<<8; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID2; - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID2: - rxmsg->msgid |= c<<16; - mavlink_update_checksum(rxmsg, c); - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID3; -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH - if (rxmsg->len != MAVLINK_MESSAGE_LENGTH(rxmsg->msgid)) - { - _mav_parse_error(status); - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - break; - } -#endif - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID3: - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c; - mavlink_update_checksum(rxmsg, c); - if (status->packet_idx == rxmsg->len) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - break; - - case MAVLINK_PARSE_STATE_GOT_PAYLOAD: { - const mavlink_msg_entry_t *e = mavlink_get_msg_entry(rxmsg->msgid); - uint8_t crc_extra = e?e->crc_extra:0; - mavlink_update_checksum(rxmsg, crc_extra); - if (c != (rxmsg->checksum & 0xFF)) { - status->parse_state = MAVLINK_PARSE_STATE_GOT_BAD_CRC1; - } else { - status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1; - } - rxmsg->ck[0] = c; - - // zero-fill the packet to cope with short incoming packets - if (e && status->packet_idx < e->msg_len) { - memset(&_MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx], 0, e->msg_len - status->packet_idx); - } - break; - } - - case MAVLINK_PARSE_STATE_GOT_CRC1: - case MAVLINK_PARSE_STATE_GOT_BAD_CRC1: - if (status->parse_state == MAVLINK_PARSE_STATE_GOT_BAD_CRC1 || c != (rxmsg->checksum >> 8)) { - // got a bad CRC message - status->msg_received = MAVLINK_FRAMING_BAD_CRC; - } else { - // Successfully got message - status->msg_received = MAVLINK_FRAMING_OK; - } - rxmsg->ck[1] = c; - if (rxmsg->incompat_flags & MAVLINK_IFLAG_SIGNED) { - status->parse_state = MAVLINK_PARSE_STATE_SIGNATURE_WAIT; - status->signature_wait = MAVLINK_SIGNATURE_BLOCK_LEN; - status->msg_received = MAVLINK_FRAMING_INCOMPLETE; - } else { - if (status->signing && - (status->signing->accept_unsigned_callback == NULL || - !status->signing->accept_unsigned_callback(status, rxmsg->msgid))) { - // don't accept this unsigned packet - status->msg_received = MAVLINK_FRAMING_BAD_SIGNATURE; - } - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - memcpy(r_message, rxmsg, sizeof(mavlink_message_t)); - } - break; - case MAVLINK_PARSE_STATE_SIGNATURE_WAIT: - rxmsg->signature[MAVLINK_SIGNATURE_BLOCK_LEN-status->signature_wait] = c; - status->signature_wait--; - if (status->signature_wait == 0) { - // we have the whole signature, check it is OK - bool sig_ok = mavlink_signature_check(status->signing, status->signing_streams, rxmsg); - if (!sig_ok && - (status->signing->accept_unsigned_callback && - status->signing->accept_unsigned_callback(status, rxmsg->msgid))) { - // accepted via application level override - sig_ok = true; - } - if (sig_ok) { - status->msg_received = MAVLINK_FRAMING_OK; - } else { - status->msg_received = MAVLINK_FRAMING_BAD_SIGNATURE; - } - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - memcpy(r_message, rxmsg, sizeof(mavlink_message_t)); - } - break; - } - - bufferIndex++; - // If a message has been sucessfully decoded, check index - if (status->msg_received == MAVLINK_FRAMING_OK) - { - //while(status->current_seq != rxmsg->seq) - //{ - // status->packet_rx_drop_count++; - // status->current_seq++; - //} - status->current_rx_seq = rxmsg->seq; - // Initial condition: If no packet has been received so far, drop count is undefined - if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0; - // Count this packet as received - status->packet_rx_success_count++; - } - - r_message->len = rxmsg->len; // Provide visibility on how far we are into current msg - r_mavlink_status->parse_state = status->parse_state; - r_mavlink_status->packet_idx = status->packet_idx; - r_mavlink_status->current_rx_seq = status->current_rx_seq+1; - r_mavlink_status->packet_rx_success_count = status->packet_rx_success_count; - r_mavlink_status->packet_rx_drop_count = status->parse_error; - r_mavlink_status->flags = status->flags; - status->parse_error = 0; - - if (status->msg_received == MAVLINK_FRAMING_BAD_CRC) { - /* - the CRC came out wrong. We now need to overwrite the - msg CRC with the one on the wire so that if the - caller decides to forward the message anyway that - mavlink_msg_to_send_buffer() won't overwrite the - checksum - */ - r_message->checksum = rxmsg->ck[0] | (rxmsg->ck[1]<<8); - } - - return status->msg_received; -} - -/** - * This is a convenience function which handles the complete MAVLink parsing. - * the function will parse one byte at a time and return the complete packet once - * it could be successfully decoded. This function will return 0, 1 or - * 2 (MAVLINK_FRAMING_INCOMPLETE, MAVLINK_FRAMING_OK or MAVLINK_FRAMING_BAD_CRC) - * - * Messages are parsed into an internal buffer (one for each channel). When a complete - * message is received it is copies into *returnMsg and the channel's status is - * copied into *returnStats. - * - * @param chan ID of the current channel. This allows to parse different channels with this function. - * a channel is not a physical message channel like a serial port, but a logic partition of - * the communication streams in this case. COMM_NB is the limit for the number of channels - * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded, 1 on good message and CRC, 2 on bad CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_frame_char(chan, byte, &msg) != MAVLINK_FRAMING_INCOMPLETE) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) -{ - return mavlink_frame_char_buffer(mavlink_get_channel_buffer(chan), - mavlink_get_channel_status(chan), - c, - r_message, - r_mavlink_status); -} - -/** - * Set the protocol version - */ -MAVLINK_HELPER void mavlink_set_proto_version(uint8_t chan, unsigned int version) -{ - mavlink_status_t *status = mavlink_get_channel_status(chan); - if (version > 1) { - status->flags &= ~(MAVLINK_STATUS_FLAG_OUT_MAVLINK1); - } else { - status->flags |= MAVLINK_STATUS_FLAG_OUT_MAVLINK1; - } -} - -/** - * Get the protocol version - * - * @return 1 for v1, 2 for v2 - */ -MAVLINK_HELPER unsigned int mavlink_get_proto_version(uint8_t chan) -{ - mavlink_status_t *status = mavlink_get_channel_status(chan); - if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) > 0) { - return 1; - } else { - return 2; - } -} - -/** - * This is a convenience function which handles the complete MAVLink parsing. - * the function will parse one byte at a time and return the complete packet once - * it could be successfully decoded. This function will return 0 or 1. - * - * Messages are parsed into an internal buffer (one for each channel). When a complete - * message is received it is copies into *returnMsg and the channel's status is - * copied into *returnStats. - * - * @param chan ID of the current channel. This allows to parse different channels with this function. - * a channel is not a physical message channel like a serial port, but a logic partition of - * the communication streams in this case. COMM_NB is the limit for the number of channels - * on MCU (e.g. ARM7), while COMM_NB_HIGH is the limit for the number of channels in Linux/Windows - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded or bad CRC, 1 on good message and CRC - * - * A typical use scenario of this function call is: - * - * @code - * #include - * - * mavlink_message_t msg; - * int chan = 0; - * - * - * while(serial.bytesAvailable > 0) - * { - * uint8_t byte = serial.getNextByte(); - * if (mavlink_parse_char(chan, byte, &msg)) - * { - * printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid); - * } - * } - * - * - * @endcode - */ -MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status) -{ - uint8_t msg_received = mavlink_frame_char(chan, c, r_message, r_mavlink_status); - if (msg_received == MAVLINK_FRAMING_BAD_CRC || - msg_received == MAVLINK_FRAMING_BAD_SIGNATURE) { - // we got a bad CRC. Treat as a parse failure - mavlink_message_t* rxmsg = mavlink_get_channel_buffer(chan); - mavlink_status_t* status = mavlink_get_channel_status(chan); - _mav_parse_error(status); - status->msg_received = MAVLINK_FRAMING_INCOMPLETE; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - mavlink_start_checksum(rxmsg); - } - return 0; - } - return msg_received; -} - -/** - * @brief Put a bitfield of length 1-32 bit into the buffer - * - * @param b the value to add, will be encoded in the bitfield - * @param bits number of bits to use to encode b, e.g. 1 for boolean, 2, 3, etc. - * @param packet_index the position in the packet (the index of the first byte to use) - * @param bit_index the position in the byte (the index of the first bit to use) - * @param buffer packet buffer to write into - * @return new position of the last used byte in the buffer - */ -MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, uint8_t* r_bit_index, uint8_t* buffer) -{ - uint16_t bits_remain = bits; - // Transform number into network order - int32_t v; - uint8_t i_bit_index, i_byte_index, curr_bits_n; -#if MAVLINK_NEED_BYTE_SWAP - union { - int32_t i; - uint8_t b[4]; - } bin, bout; - bin.i = b; - bout.b[0] = bin.b[3]; - bout.b[1] = bin.b[2]; - bout.b[2] = bin.b[1]; - bout.b[3] = bin.b[0]; - v = bout.i; -#else - v = b; -#endif - - // buffer in - // 01100000 01000000 00000000 11110001 - // buffer out - // 11110001 00000000 01000000 01100000 - - // Existing partly filled byte (four free slots) - // 0111xxxx - - // Mask n free bits - // 00001111 = 2^0 + 2^1 + 2^2 + 2^3 = 2^n - 1 - // = ((uint32_t)(1 << n)) - 1; // = 2^n - 1 - - // Shift n bits into the right position - // out = in >> n; - - // Mask and shift bytes - i_bit_index = bit_index; - i_byte_index = packet_index; - if (bit_index > 0) - { - // If bits were available at start, they were available - // in the byte before the current index - i_byte_index--; - } - - // While bits have not been packed yet - while (bits_remain > 0) - { - // Bits still have to be packed - // there can be more than 8 bits, so - // we might have to pack them into more than one byte - - // First pack everything we can into the current 'open' byte - //curr_bits_n = bits_remain << 3; // Equals bits_remain mod 8 - //FIXME - if (bits_remain <= (uint8_t)(8 - i_bit_index)) - { - // Enough space - curr_bits_n = (uint8_t)bits_remain; - } - else - { - curr_bits_n = (8 - i_bit_index); - } - - // Pack these n bits into the current byte - // Mask out whatever was at that position with ones (xxx11111) - buffer[i_byte_index] &= (0xFF >> (8 - curr_bits_n)); - // Put content to this position, by masking out the non-used part - buffer[i_byte_index] |= ((0x00 << curr_bits_n) & v); - - // Increment the bit index - i_bit_index += curr_bits_n; - - // Now proceed to the next byte, if necessary - bits_remain -= curr_bits_n; - if (bits_remain > 0) - { - // Offer another 8 bits / one byte - i_byte_index++; - i_bit_index = 0; - } - } - - *r_bit_index = i_bit_index; - // If a partly filled byte is present, mark this as consumed - if (i_bit_index != 7) i_byte_index++; - return i_byte_index - packet_index; -} - -#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - -// To make MAVLink work on your MCU, define comm_send_ch() if you wish -// to send 1 byte at a time, or MAVLINK_SEND_UART_BYTES() to send a -// whole packet at a time - -/* - -#include "mavlink_types.h" - -void comm_send_ch(mavlink_channel_t chan, uint8_t ch) -{ - if (chan == MAVLINK_COMM_0) - { - uart0_transmit(ch); - } - if (chan == MAVLINK_COMM_1) - { - uart1_transmit(ch); - } -} - */ - -MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len) -{ -#ifdef MAVLINK_SEND_UART_BYTES - /* this is the more efficient approach, if the platform - defines it */ - MAVLINK_SEND_UART_BYTES(chan, (const uint8_t *)buf, len); -#else - /* fallback to one byte at a time */ - uint16_t i; - for (i = 0; i < len; i++) { - comm_send_ch(chan, (uint8_t)buf[i]); - } -#endif -} -#endif // MAVLINK_USE_CONVENIENCE_FUNCTIONS - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_sha256.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_sha256.h deleted file mode 100644 index 0cfdfc747..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_sha256.h +++ /dev/null @@ -1,244 +0,0 @@ -#pragma once - -/* - sha-256 implementation for MAVLink based on Heimdal sources, with - modifications to suit mavlink headers - */ -/* - * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan - * (Royal Institute of Technology, Stockholm, Sweden). - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -/* - allow implementation to provide their own sha256 with the same API -*/ -#ifndef HAVE_MAVLINK_SHA256 - -#ifndef MAVLINK_HELPER -#define MAVLINK_HELPER -#endif - -typedef struct { - unsigned int sz[2]; - uint32_t counter[8]; - union { - unsigned char save_bytes[64]; - uint32_t save_u32[16]; - } u; -} mavlink_sha256_ctx; - -#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) -#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) - -#define ROTR(x,n) (((x)>>(n)) | ((x) << (32 - (n)))) - -#define Sigma0(x) (ROTR(x,2) ^ ROTR(x,13) ^ ROTR(x,22)) -#define Sigma1(x) (ROTR(x,6) ^ ROTR(x,11) ^ ROTR(x,25)) -#define sigma0(x) (ROTR(x,7) ^ ROTR(x,18) ^ ((x)>>3)) -#define sigma1(x) (ROTR(x,17) ^ ROTR(x,19) ^ ((x)>>10)) - -#define A m->counter[0] -#define B m->counter[1] -#define C m->counter[2] -#define D m->counter[3] -#define E m->counter[4] -#define F m->counter[5] -#define G m->counter[6] -#define H m->counter[7] - -static const uint32_t mavlink_sha256_constant_256[64] = { - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -}; - -MAVLINK_HELPER void mavlink_sha256_init(mavlink_sha256_ctx *m) -{ - m->sz[0] = 0; - m->sz[1] = 0; - A = 0x6a09e667; - B = 0xbb67ae85; - C = 0x3c6ef372; - D = 0xa54ff53a; - E = 0x510e527f; - F = 0x9b05688c; - G = 0x1f83d9ab; - H = 0x5be0cd19; -} - -static inline void mavlink_sha256_calc(mavlink_sha256_ctx *m, uint32_t *in) -{ - uint32_t AA, BB, CC, DD, EE, FF, GG, HH; - uint32_t data[64]; - int i; - - AA = A; - BB = B; - CC = C; - DD = D; - EE = E; - FF = F; - GG = G; - HH = H; - - for (i = 0; i < 16; ++i) - data[i] = in[i]; - for (i = 16; i < 64; ++i) - data[i] = sigma1(data[i-2]) + data[i-7] + - sigma0(data[i-15]) + data[i - 16]; - - for (i = 0; i < 64; i++) { - uint32_t T1, T2; - - T1 = HH + Sigma1(EE) + Ch(EE, FF, GG) + mavlink_sha256_constant_256[i] + data[i]; - T2 = Sigma0(AA) + Maj(AA,BB,CC); - - HH = GG; - GG = FF; - FF = EE; - EE = DD + T1; - DD = CC; - CC = BB; - BB = AA; - AA = T1 + T2; - } - - A += AA; - B += BB; - C += CC; - D += DD; - E += EE; - F += FF; - G += GG; - H += HH; -} - -MAVLINK_HELPER void mavlink_sha256_update(mavlink_sha256_ctx *m, const void *v, uint32_t len) -{ - const unsigned char *p = (const unsigned char *)v; - uint32_t old_sz = m->sz[0]; - uint32_t offset; - - m->sz[0] += len * 8; - if (m->sz[0] < old_sz) - ++m->sz[1]; - offset = (old_sz / 8) % 64; - while(len > 0){ - uint32_t l = 64 - offset; - if (len < l) { - l = len; - } - memcpy(m->u.save_bytes + offset, p, l); - offset += l; - p += l; - len -= l; - if(offset == 64){ - int i; - uint32_t current[16]; - const uint32_t *u = m->u.save_u32; - for (i = 0; i < 16; i++){ - const uint8_t *p1 = (const uint8_t *)&u[i]; - uint8_t *p2 = (uint8_t *)¤t[i]; - p2[0] = p1[3]; - p2[1] = p1[2]; - p2[2] = p1[1]; - p2[3] = p1[0]; - } - mavlink_sha256_calc(m, current); - offset = 0; - } - } -} - -/* - get first 48 bits of final sha256 hash - */ -MAVLINK_HELPER void mavlink_sha256_final_48(mavlink_sha256_ctx *m, uint8_t result[6]) -{ - unsigned char zeros[72]; - unsigned offset = (m->sz[0] / 8) % 64; - unsigned int dstart = (120 - offset - 1) % 64 + 1; - uint8_t *p = (uint8_t *)&m->counter[0]; - - *zeros = 0x80; - memset (zeros + 1, 0, sizeof(zeros) - 1); - zeros[dstart+7] = (m->sz[0] >> 0) & 0xff; - zeros[dstart+6] = (m->sz[0] >> 8) & 0xff; - zeros[dstart+5] = (m->sz[0] >> 16) & 0xff; - zeros[dstart+4] = (m->sz[0] >> 24) & 0xff; - zeros[dstart+3] = (m->sz[1] >> 0) & 0xff; - zeros[dstart+2] = (m->sz[1] >> 8) & 0xff; - zeros[dstart+1] = (m->sz[1] >> 16) & 0xff; - zeros[dstart+0] = (m->sz[1] >> 24) & 0xff; - - mavlink_sha256_update(m, zeros, dstart + 8); - - // this ordering makes the result consistent with taking the first - // 6 bytes of more conventional sha256 functions. It assumes - // little-endian ordering of m->counter - result[0] = p[3]; - result[1] = p[2]; - result[2] = p[1]; - result[3] = p[0]; - result[4] = p[7]; - result[5] = p[6]; -} - -// prevent conflicts with users of the header -#undef A -#undef B -#undef C -#undef D -#undef E -#undef F -#undef G -#undef H -#undef Ch -#undef ROTR -#undef Sigma0 -#undef Sigma1 -#undef sigma0 -#undef sigma1 - -#endif // HAVE_MAVLINK_SHA256 diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_types.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_types.h deleted file mode 100644 index 1ac4029b1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/mavlink_types.h +++ /dev/null @@ -1,291 +0,0 @@ -#pragma once - -// Visual Studio versions before 2010 don't have stdint.h, so we just error out. -#if (defined _MSC_VER) && (_MSC_VER < 1600) -#error "The C-MAVLink implementation requires Visual Studio 2010 or greater" -#endif - -#include - -// Macro to define packed structures -#ifdef __GNUC__ - #define MAVPACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) -#else - #define MAVPACKED( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) ) -#endif - -#ifndef MAVLINK_MAX_PAYLOAD_LEN -// it is possible to override this, but be careful! -#define MAVLINK_MAX_PAYLOAD_LEN 255 ///< Maximum payload length -#endif - -#define MAVLINK_CORE_HEADER_LEN 9 ///< Length of core header (of the comm. layer) -#define MAVLINK_CORE_HEADER_MAVLINK1_LEN 5 ///< Length of MAVLink1 core header (of the comm. layer) -#define MAVLINK_NUM_HEADER_BYTES (MAVLINK_CORE_HEADER_LEN + 1) ///< Length of all header bytes, including core and stx -#define MAVLINK_NUM_CHECKSUM_BYTES 2 -#define MAVLINK_NUM_NON_PAYLOAD_BYTES (MAVLINK_NUM_HEADER_BYTES + MAVLINK_NUM_CHECKSUM_BYTES) - -#define MAVLINK_SIGNATURE_BLOCK_LEN 13 - -#define MAVLINK_MAX_PACKET_LEN (MAVLINK_MAX_PAYLOAD_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES + MAVLINK_SIGNATURE_BLOCK_LEN) ///< Maximum packet length - -/** - * Old-style 4 byte param union - * - * This struct is the data format to be used when sending - * parameters. The parameter should be copied to the native - * type (without type conversion) - * and re-instanted on the receiving side using the - * native type as well. - */ -MAVPACKED( -typedef struct param_union { - union { - float param_float; - int32_t param_int32; - uint32_t param_uint32; - int16_t param_int16; - uint16_t param_uint16; - int8_t param_int8; - uint8_t param_uint8; - uint8_t bytes[4]; - }; - uint8_t type; -}) mavlink_param_union_t; - - -/** - * New-style 8 byte param union - * mavlink_param_union_double_t will be 8 bytes long, and treated as needing 8 byte alignment for the purposes of MAVLink 1.0 field ordering. - * The mavlink_param_union_double_t will be treated as a little-endian structure. - * - * If is_double is 1 then the type is a double, and the remaining 63 bits are the double, with the lowest bit of the mantissa zero. - * The intention is that by replacing the is_double bit with 0 the type can be directly used as a double (as the is_double bit corresponds to the - * lowest mantissa bit of a double). If is_double is 0 then mavlink_type gives the type in the union. - * The mavlink_types.h header will also need to have shifts/masks to define the bit boundaries in the above, - * as bitfield ordering isn’t consistent between platforms. The above is intended to be for gcc on x86, - * which should be the same as gcc on little-endian arm. When using shifts/masks the value will be treated as a 64 bit unsigned number, - * and the bits pulled out using the shifts/masks. -*/ -MAVPACKED( -typedef struct param_union_extended { - union { - struct { - uint8_t is_double:1; - uint8_t mavlink_type:7; - union { - char c; - uint8_t uint8; - int8_t int8; - uint16_t uint16; - int16_t int16; - uint32_t uint32; - int32_t int32; - float f; - uint8_t align[7]; - }; - }; - uint8_t data[8]; - }; -}) mavlink_param_union_double_t; - -/** - * This structure is required to make the mavlink_send_xxx convenience functions - * work, as it tells the library what the current system and component ID are. - */ -MAVPACKED( -typedef struct __mavlink_system { - uint8_t sysid; ///< Used by the MAVLink message_xx_send() convenience function - uint8_t compid; ///< Used by the MAVLink message_xx_send() convenience function -}) mavlink_system_t; - -MAVPACKED( -typedef struct __mavlink_message { - uint16_t checksum; ///< sent at end of packet - uint8_t magic; ///< protocol magic marker - uint8_t len; ///< Length of payload - uint8_t incompat_flags; ///< flags that must be understood - uint8_t compat_flags; ///< flags that can be ignored if not understood - uint8_t seq; ///< Sequence of packet - uint8_t sysid; ///< ID of message sender system/aircraft - uint8_t compid; ///< ID of the message sender component - uint32_t msgid:24; ///< ID of message in payload - uint64_t payload64[(MAVLINK_MAX_PAYLOAD_LEN+MAVLINK_NUM_CHECKSUM_BYTES+7)/8]; - uint8_t ck[2]; ///< incoming checksum bytes - uint8_t signature[MAVLINK_SIGNATURE_BLOCK_LEN]; -}) mavlink_message_t; - -typedef enum { - MAVLINK_TYPE_CHAR = 0, - MAVLINK_TYPE_UINT8_T = 1, - MAVLINK_TYPE_INT8_T = 2, - MAVLINK_TYPE_UINT16_T = 3, - MAVLINK_TYPE_INT16_T = 4, - MAVLINK_TYPE_UINT32_T = 5, - MAVLINK_TYPE_INT32_T = 6, - MAVLINK_TYPE_UINT64_T = 7, - MAVLINK_TYPE_INT64_T = 8, - MAVLINK_TYPE_FLOAT = 9, - MAVLINK_TYPE_DOUBLE = 10 -} mavlink_message_type_t; - -#define MAVLINK_MAX_FIELDS 64 - -typedef struct __mavlink_field_info { - const char *name; // name of this field - const char *print_format; // printing format hint, or NULL - mavlink_message_type_t type; // type of this field - unsigned int array_length; // if non-zero, field is an array - unsigned int wire_offset; // offset of each field in the payload - unsigned int structure_offset; // offset in a C structure -} mavlink_field_info_t; - -// note that in this structure the order of fields is the order -// in the XML file, not necessary the wire order -typedef struct __mavlink_message_info { - uint32_t msgid; // message ID - const char *name; // name of the message - unsigned num_fields; // how many fields in this message - mavlink_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information -} mavlink_message_info_t; - -#define _MAV_PAYLOAD(msg) ((const char *)(&((msg)->payload64[0]))) -#define _MAV_PAYLOAD_NON_CONST(msg) ((char *)(&((msg)->payload64[0]))) - -// checksum is immediately after the payload bytes -#define mavlink_ck_a(msg) *((msg)->len + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) -#define mavlink_ck_b(msg) *(((msg)->len+(uint16_t)1) + (uint8_t *)_MAV_PAYLOAD_NON_CONST(msg)) - -typedef enum { - MAVLINK_COMM_0, - MAVLINK_COMM_1, - MAVLINK_COMM_2, - MAVLINK_COMM_3 -} mavlink_channel_t; - -/* - * applications can set MAVLINK_COMM_NUM_BUFFERS to the maximum number - * of buffers they will use. If more are used, then the result will be - * a stack overrun - */ -#ifndef MAVLINK_COMM_NUM_BUFFERS -#if (defined linux) | (defined __linux) | (defined __MACH__) | (defined _WIN32) -# define MAVLINK_COMM_NUM_BUFFERS 16 -#else -# define MAVLINK_COMM_NUM_BUFFERS 4 -#endif -#endif - -typedef enum { - MAVLINK_PARSE_STATE_UNINIT=0, - MAVLINK_PARSE_STATE_IDLE, - MAVLINK_PARSE_STATE_GOT_STX, - MAVLINK_PARSE_STATE_GOT_LENGTH, - MAVLINK_PARSE_STATE_GOT_INCOMPAT_FLAGS, - MAVLINK_PARSE_STATE_GOT_COMPAT_FLAGS, - MAVLINK_PARSE_STATE_GOT_SEQ, - MAVLINK_PARSE_STATE_GOT_SYSID, - MAVLINK_PARSE_STATE_GOT_COMPID, - MAVLINK_PARSE_STATE_GOT_MSGID1, - MAVLINK_PARSE_STATE_GOT_MSGID2, - MAVLINK_PARSE_STATE_GOT_MSGID3, - MAVLINK_PARSE_STATE_GOT_PAYLOAD, - MAVLINK_PARSE_STATE_GOT_CRC1, - MAVLINK_PARSE_STATE_GOT_BAD_CRC1, - MAVLINK_PARSE_STATE_SIGNATURE_WAIT -} mavlink_parse_state_t; ///< The state machine for the comm parser - -typedef enum { - MAVLINK_FRAMING_INCOMPLETE=0, - MAVLINK_FRAMING_OK=1, - MAVLINK_FRAMING_BAD_CRC=2, - MAVLINK_FRAMING_BAD_SIGNATURE=3 -} mavlink_framing_t; - -#define MAVLINK_STATUS_FLAG_IN_MAVLINK1 1 // last incoming packet was MAVLink1 -#define MAVLINK_STATUS_FLAG_OUT_MAVLINK1 2 // generate MAVLink1 by default -#define MAVLINK_STATUS_FLAG_IN_SIGNED 4 // last incoming packet was signed and validated -#define MAVLINK_STATUS_FLAG_IN_BADSIG 8 // last incoming packet had a bad signature - -#define MAVLINK_STX_MAVLINK1 0xFE // marker for old protocol - -typedef struct __mavlink_status { - uint8_t msg_received; ///< Number of received messages - uint8_t buffer_overrun; ///< Number of buffer overruns - uint8_t parse_error; ///< Number of parse errors - mavlink_parse_state_t parse_state; ///< Parsing state machine - uint8_t packet_idx; ///< Index in current packet - uint8_t current_rx_seq; ///< Sequence number of last packet received - uint8_t current_tx_seq; ///< Sequence number of last packet sent - uint16_t packet_rx_success_count; ///< Received packets - uint16_t packet_rx_drop_count; ///< Number of packet drops - uint8_t flags; ///< MAVLINK_STATUS_FLAG_* - uint8_t signature_wait; ///< number of signature bytes left to receive - struct __mavlink_signing *signing; ///< optional signing state - struct __mavlink_signing_streams *signing_streams; ///< global record of stream timestamps -} mavlink_status_t; - -/* - a callback function to allow for accepting unsigned packets - */ -typedef bool (*mavlink_accept_unsigned_t)(const mavlink_status_t *status, uint32_t msgid); - -/* - flags controlling signing - */ -#define MAVLINK_SIGNING_FLAG_SIGN_OUTGOING 1 - -/* - state of MAVLink signing for this channel - */ -typedef struct __mavlink_signing { - uint8_t flags; ///< MAVLINK_SIGNING_FLAG_* - uint8_t link_id; - uint64_t timestamp; - uint8_t secret_key[32]; - mavlink_accept_unsigned_t accept_unsigned_callback; -} mavlink_signing_t; - -/* - timestamp state of each logical signing stream. This needs to be the same structure for all - connections in order to be secure - */ -#ifndef MAVLINK_MAX_SIGNING_STREAMS -#define MAVLINK_MAX_SIGNING_STREAMS 16 -#endif -typedef struct __mavlink_signing_streams { - uint16_t num_signing_streams; - struct __mavlink_signing_stream { - uint8_t link_id; - uint8_t sysid; - uint8_t compid; - uint8_t timestamp_bytes[6]; - } stream[MAVLINK_MAX_SIGNING_STREAMS]; -} mavlink_signing_streams_t; - - -#define MAVLINK_BIG_ENDIAN 0 -#define MAVLINK_LITTLE_ENDIAN 1 - -#define MAV_MSG_ENTRY_FLAG_HAVE_TARGET_SYSTEM 1 -#define MAV_MSG_ENTRY_FLAG_HAVE_TARGET_COMPONENT 2 - -/* - entry in table of information about each message type - */ -typedef struct __mavlink_msg_entry { - uint32_t msgid; - uint8_t crc_extra; - uint8_t msg_len; - uint8_t flags; // MAV_MSG_ENTRY_FLAG_* - uint8_t target_system_ofs; // payload offset to target_system, or 0 - uint8_t target_component_ofs; // payload offset to target_component, or 0 -} mavlink_msg_entry_t; - -/* - incompat_flags bits - */ -#define MAVLINK_IFLAG_SIGNED 0x01 -#define MAVLINK_IFLAG_MASK 0x01 // mask of all understood bits - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/protocol.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/protocol.h deleted file mode 100644 index 20d218f24..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/C/include_v2.0/protocol.h +++ /dev/null @@ -1,334 +0,0 @@ -#pragma once - -#include "string.h" -#include "mavlink_types.h" - -/* - If you want MAVLink on a system that is native big-endian, - you need to define NATIVE_BIG_ENDIAN -*/ -#ifdef NATIVE_BIG_ENDIAN -# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN == MAVLINK_LITTLE_ENDIAN) -#else -# define MAVLINK_NEED_BYTE_SWAP (MAVLINK_ENDIAN != MAVLINK_LITTLE_ENDIAN) -#endif - -#ifndef MAVLINK_STACK_BUFFER -#define MAVLINK_STACK_BUFFER 0 -#endif - -#ifndef MAVLINK_AVOID_GCC_STACK_BUG -# define MAVLINK_AVOID_GCC_STACK_BUG defined(__GNUC__) -#endif - -#ifndef MAVLINK_ASSERT -#define MAVLINK_ASSERT(x) -#endif - -#ifndef MAVLINK_START_UART_SEND -#define MAVLINK_START_UART_SEND(chan, length) -#endif - -#ifndef MAVLINK_END_UART_SEND -#define MAVLINK_END_UART_SEND(chan, length) -#endif - -/* option to provide alternative implementation of mavlink_helpers.h */ -#ifdef MAVLINK_SEPARATE_HELPERS - - #define MAVLINK_HELPER - - /* decls in sync with those in mavlink_helpers.h */ - #ifndef MAVLINK_GET_CHANNEL_STATUS - MAVLINK_HELPER mavlink_status_t* mavlink_get_channel_status(uint8_t chan); - #endif - MAVLINK_HELPER void mavlink_reset_channel_status(uint8_t chan); - MAVLINK_HELPER uint16_t mavlink_finalize_message_chan(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t chan, uint8_t min_length, uint8_t length, uint8_t crc_extra); - MAVLINK_HELPER uint16_t mavlink_finalize_message(mavlink_message_t* msg, uint8_t system_id, uint8_t component_id, - uint8_t min_length, uint8_t length, uint8_t crc_extra); - #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - MAVLINK_HELPER void _mav_finalize_message_chan_send(mavlink_channel_t chan, uint32_t msgid, const char *packet, - uint8_t min_length, uint8_t length, uint8_t crc_extra); - #endif - MAVLINK_HELPER uint16_t mavlink_msg_to_send_buffer(uint8_t *buffer, const mavlink_message_t *msg); - MAVLINK_HELPER void mavlink_start_checksum(mavlink_message_t* msg); - MAVLINK_HELPER void mavlink_update_checksum(mavlink_message_t* msg, uint8_t c); - MAVLINK_HELPER uint8_t mavlink_frame_char_buffer(mavlink_message_t* rxmsg, - mavlink_status_t* status, - uint8_t c, - mavlink_message_t* r_message, - mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t mavlink_frame_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t mavlink_parse_char(uint8_t chan, uint8_t c, mavlink_message_t* r_message, mavlink_status_t* r_mavlink_status); - MAVLINK_HELPER uint8_t put_bitfield_n_by_index(int32_t b, uint8_t bits, uint8_t packet_index, uint8_t bit_index, - uint8_t* r_bit_index, uint8_t* buffer); - MAVLINK_HELPER const mavlink_msg_entry_t *mavlink_get_msg_entry(uint32_t msgid); - #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - MAVLINK_HELPER void _mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len); - MAVLINK_HELPER void _mavlink_resend_uart(mavlink_channel_t chan, const mavlink_message_t *msg); - #endif - -#else - - #define MAVLINK_HELPER static inline - #include "mavlink_helpers.h" - -#endif // MAVLINK_SEPARATE_HELPERS - - -/** - * @brief Get the required buffer size for this message - */ -static inline uint16_t mavlink_msg_get_send_buffer_length(const mavlink_message_t* msg) -{ - if (msg->magic == MAVLINK_STX_MAVLINK1) { - return msg->len + MAVLINK_CORE_HEADER_MAVLINK1_LEN+1 + 2; - } - uint16_t signature_len = (msg->incompat_flags & MAVLINK_IFLAG_SIGNED)?MAVLINK_SIGNATURE_BLOCK_LEN:0; - return msg->len + MAVLINK_NUM_NON_PAYLOAD_BYTES + signature_len; -} - -#if MAVLINK_NEED_BYTE_SWAP -static inline void byte_swap_2(char *dst, const char *src) -{ - dst[0] = src[1]; - dst[1] = src[0]; -} -static inline void byte_swap_4(char *dst, const char *src) -{ - dst[0] = src[3]; - dst[1] = src[2]; - dst[2] = src[1]; - dst[3] = src[0]; -} -static inline void byte_swap_8(char *dst, const char *src) -{ - dst[0] = src[7]; - dst[1] = src[6]; - dst[2] = src[5]; - dst[3] = src[4]; - dst[4] = src[3]; - dst[5] = src[2]; - dst[6] = src[1]; - dst[7] = src[0]; -} -#elif !MAVLINK_ALIGNED_FIELDS -static inline void byte_copy_2(char *dst, const char *src) -{ - dst[0] = src[0]; - dst[1] = src[1]; -} -static inline void byte_copy_4(char *dst, const char *src) -{ - dst[0] = src[0]; - dst[1] = src[1]; - dst[2] = src[2]; - dst[3] = src[3]; -} -static inline void byte_copy_8(char *dst, const char *src) -{ - memcpy(dst, src, 8); -} -#endif - -#define _mav_put_uint8_t(buf, wire_offset, b) buf[wire_offset] = (uint8_t)b -#define _mav_put_int8_t(buf, wire_offset, b) buf[wire_offset] = (int8_t)b -#define _mav_put_char(buf, wire_offset, b) buf[wire_offset] = b - -#if MAVLINK_NEED_BYTE_SWAP -#define _mav_put_uint16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_int16_t(buf, wire_offset, b) byte_swap_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_int32_t(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_int64_t(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_float(buf, wire_offset, b) byte_swap_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_double(buf, wire_offset, b) byte_swap_8(&buf[wire_offset], (const char *)&b) -#elif !MAVLINK_ALIGNED_FIELDS -#define _mav_put_uint16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_int16_t(buf, wire_offset, b) byte_copy_2(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_int32_t(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_uint64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_int64_t(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#define _mav_put_float(buf, wire_offset, b) byte_copy_4(&buf[wire_offset], (const char *)&b) -#define _mav_put_double(buf, wire_offset, b) byte_copy_8(&buf[wire_offset], (const char *)&b) -#else -#define _mav_put_uint16_t(buf, wire_offset, b) *(uint16_t *)&buf[wire_offset] = b -#define _mav_put_int16_t(buf, wire_offset, b) *(int16_t *)&buf[wire_offset] = b -#define _mav_put_uint32_t(buf, wire_offset, b) *(uint32_t *)&buf[wire_offset] = b -#define _mav_put_int32_t(buf, wire_offset, b) *(int32_t *)&buf[wire_offset] = b -#define _mav_put_uint64_t(buf, wire_offset, b) *(uint64_t *)&buf[wire_offset] = b -#define _mav_put_int64_t(buf, wire_offset, b) *(int64_t *)&buf[wire_offset] = b -#define _mav_put_float(buf, wire_offset, b) *(float *)&buf[wire_offset] = b -#define _mav_put_double(buf, wire_offset, b) *(double *)&buf[wire_offset] = b -#endif - -/* - like memcpy(), but if src is NULL, do a memset to zero -*/ -static inline void mav_array_memcpy(void *dest, const void *src, size_t n) -{ - if (src == NULL) { - memset(dest, 0, n); - } else { - memcpy(dest, src, n); - } -} - -/* - * Place a char array into a buffer - */ -static inline void _mav_put_char_array(char *buf, uint8_t wire_offset, const char *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -/* - * Place a uint8_t array into a buffer - */ -static inline void _mav_put_uint8_t_array(char *buf, uint8_t wire_offset, const uint8_t *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -/* - * Place a int8_t array into a buffer - */ -static inline void _mav_put_int8_t_array(char *buf, uint8_t wire_offset, const int8_t *b, uint8_t array_length) -{ - mav_array_memcpy(&buf[wire_offset], b, array_length); - -} - -#if MAVLINK_NEED_BYTE_SWAP -#define _MAV_PUT_ARRAY(TYPE, V) \ -static inline void _mav_put_ ## TYPE ##_array(char *buf, uint8_t wire_offset, const TYPE *b, uint8_t array_length) \ -{ \ - if (b == NULL) { \ - memset(&buf[wire_offset], 0, array_length*sizeof(TYPE)); \ - } else { \ - uint16_t i; \ - for (i=0; i MAX_PAYLOAD_SIZE) { - payload = ByteBuffer.allocate(MAX_PAYLOAD_SIZE); - } else { - payload = ByteBuffer.allocate(payloadSize); - } - } - - public ByteBuffer getData() { - return payload; - } - - public int size() { - return payload.position(); - } - - public void add(byte c) { - payload.put(c); - } - - public void resetIndex() { - index = 0; - } - - public byte getByte() { - byte result = 0; - result |= (payload.get(index + 0) & 0xFF); - index += 1; - return result; - } - - public short getUnsignedByte(){ - short result = 0; - result |= payload.get(index + 0) & 0xFF; - index+= 1; - return result; - } - - public short getShort() { - short result = 0; - result |= (payload.get(index + 1) & 0xFF) << 8; - result |= (payload.get(index + 0) & 0xFF); - index += 2; - return result; - } - - public int getUnsignedShort(){ - int result = 0; - result |= (payload.get(index + 1) & 0xFF) << 8; - result |= (payload.get(index + 0) & 0xFF); - index += 2; - return result; - } - - public int getInt() { - int result = 0; - result |= (payload.get(index + 3) & 0xFF) << 24; - result |= (payload.get(index + 2) & 0xFF) << 16; - result |= (payload.get(index + 1) & 0xFF) << 8; - result |= (payload.get(index + 0) & 0xFF); - index += 4; - return result; - } - - public long getUnsignedInt(){ - long result = 0; - result |= (payload.get(index + 3) & 0xFFL) << 24; - result |= (payload.get(index + 2) & 0xFFL) << 16; - result |= (payload.get(index + 1) & 0xFFL) << 8; - result |= (payload.get(index + 0) & 0xFFL); - index += 4; - return result; - } - - public long getLong() { - long result = 0; - result |= (payload.get(index + 7) & 0xFFL) << 56; - result |= (payload.get(index + 6) & 0xFFL) << 48; - result |= (payload.get(index + 5) & 0xFFL) << 40; - result |= (payload.get(index + 4) & 0xFFL) << 32; - result |= (payload.get(index + 3) & 0xFFL) << 24; - result |= (payload.get(index + 2) & 0xFFL) << 16; - result |= (payload.get(index + 1) & 0xFFL) << 8; - result |= (payload.get(index + 0) & 0xFFL); - index += 8; - return result; - } - - public long getUnsignedLong(){ - return getLong(); - } - - public long getLongReverse() { - long result = 0; - result |= (payload.get(index + 0) & 0xFFL) << 56; - result |= (payload.get(index + 1) & 0xFFL) << 48; - result |= (payload.get(index + 2) & 0xFFL) << 40; - result |= (payload.get(index + 3) & 0xFFL) << 32; - result |= (payload.get(index + 4) & 0xFFL) << 24; - result |= (payload.get(index + 5) & 0xFFL) << 16; - result |= (payload.get(index + 6) & 0xFFL) << 8; - result |= (payload.get(index + 7) & 0xFFL); - index += 8; - return result; - } - - public float getFloat() { - return Float.intBitsToFloat(getInt()); - } - - public void putByte(byte data) { - add(data); - } - - public void putUnsignedByte(short data){ - if(data < UNSIGNED_BYTE_MIN_VALUE || data > UNSIGNED_BYTE_MAX_VALUE){ - throw new IllegalArgumentException("Value is outside of the range of an unsigned byte: " + data); - } - - putByte((byte) data); - } - - public void putShort(short data) { - add((byte) (data >> 0)); - add((byte) (data >> 8)); - } - - public void putUnsignedShort(int data){ - if(data < UNSIGNED_SHORT_MIN_VALUE || data > UNSIGNED_SHORT_MAX_VALUE){ - throw new IllegalArgumentException("Value is outside of the range of an unsigned short: " + data); - } - - putShort((short) data); - } - - public void putInt(int data) { - add((byte) (data >> 0)); - add((byte) (data >> 8)); - add((byte) (data >> 16)); - add((byte) (data >> 24)); - } - - public void putUnsignedInt(long data){ - if(data < UNSIGNED_INT_MIN_VALUE || data > UNSIGNED_INT_MAX_VALUE){ - throw new IllegalArgumentException("Value is outside of the range of an unsigned int: " + data); - } - - putInt((int) data); - } - - public void putLong(long data) { - add((byte) (data >> 0)); - add((byte) (data >> 8)); - add((byte) (data >> 16)); - add((byte) (data >> 24)); - add((byte) (data >> 32)); - add((byte) (data >> 40)); - add((byte) (data >> 48)); - add((byte) (data >> 56)); - } - - public void putUnsignedLong(long data){ - if(data < UNSIGNED_LONG_MIN_VALUE){ - throw new IllegalArgumentException("Value is outside of the range of an unsigned long: " + data); - } - - putLong(data); - } - - public void putFloat(float data) { - putInt(Float.floatToIntBits(data)); - } - -} diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkStats.java b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkStats.java deleted file mode 100644 index 7655a5b3b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Messages/MAVLinkStats.java +++ /dev/null @@ -1,151 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -package com.MAVLink.Messages; - -import com.MAVLink.MAVLinkPacket; -import com.MAVLink.common.msg_radio_status; - -/** - * Storage for MAVLink Packet and Error statistics - * - */ -public class MAVLinkStats /* implements Serializable */{ - - public int receivedPacketCount; // total recieved packet count for all sources - - public int crcErrorCount; - - public int lostPacketCount; // total lost packet count for all sources - - public boolean ignoreRadioPackets; - - // stats are nil for a system id until a packet has been received from a system - public SystemStat[] systemStats; // stats for each system that is known - - public MAVLinkStats() { - this(false); - } - - public MAVLinkStats(boolean ignoreRadioPackets) { - this.ignoreRadioPackets = ignoreRadioPackets; - resetStats(); - } - - /** - * Check the new received packet to see if has lost someone between this and - * the last packet - * - * @param packet - * Packet that should be checked - */ - public void newPacket(MAVLinkPacket packet) { - if (ignoreRadioPackets && packet.msgid == msg_radio_status.MAVLINK_MSG_ID_RADIO_STATUS) { - return; - } - - if (systemStats[packet.sysid] == null) { - // only allocate stats for systems that exsist on the network - systemStats[packet.sysid] = new SystemStat(); - } - lostPacketCount += systemStats[packet.sysid].newPacket(packet); - receivedPacketCount++; - } - - /** - * Called when a CRC error happens on the parser - */ - public void crcError() { - crcErrorCount++; - } - - public void resetStats() { - crcErrorCount = 0; - lostPacketCount = 0; - receivedPacketCount = 0; - systemStats = new SystemStat[256]; - } - - // stat structure for every system id - private class SystemStat { - public int lostPacketCount; // the lost count for this source - public int receivedPacketCount; - - // stats are nil for a component id until a packet has been received from a system - public ComponentStat[] componentStats; // stats for each component that is known - - public SystemStat() { - resetStats(); - } - - public int newPacket(MAVLinkPacket packet) { - int newLostPackets = 0; - if (componentStats[packet.compid] == null) { - // only allocate stats for systems that exsist on the network - componentStats[packet.compid] = new ComponentStat(); - } - newLostPackets = componentStats[packet.compid].newPacket(packet); - lostPacketCount += newLostPackets; - receivedPacketCount++; - return newLostPackets; - } - - public void resetStats() { - lostPacketCount = 0; - receivedPacketCount = 0; - componentStats = new ComponentStat[256]; - } - } - - // stat structure for every system id - private class ComponentStat { - public int lastPacketSeq; - public int lostPacketCount; // the lost count for this source - public int receivedPacketCount; - - public ComponentStat() { - resetStats(); - } - - public int newPacket(MAVLinkPacket packet) { - int newLostPackets = 0; - if (hasLostPackets(packet)) { - newLostPackets = updateLostPacketCount(packet); - } - lastPacketSeq = packet.seq; - advanceLastPacketSequence(packet.seq); - receivedPacketCount++; - return newLostPackets; - } - - public void resetStats() { - lastPacketSeq = -1; - lostPacketCount = 0; - receivedPacketCount = 0; - } - - private int updateLostPacketCount(MAVLinkPacket packet) { - int lostPackets; - if (packet.seq - lastPacketSeq < 0) { - lostPackets = (packet.seq - lastPacketSeq) + 255; - } else { - lostPackets = (packet.seq - lastPacketSeq); - } - lostPacketCount += lostPackets; - return lostPackets; - } - - private void advanceLastPacketSequence(int lastSeq) { - // wrap from 255 to 0 if necessary - lastPacketSeq = (lastSeq + 1) & 0xFF; - } - - private boolean hasLostPackets(MAVLinkPacket packet) { - return lastPacketSeq >= 0 && packet.seq != lastPacketSeq; - } - } - -} diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Parser.java b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Parser.java deleted file mode 100644 index 68c4cdb75..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/java/lib/Parser.java +++ /dev/null @@ -1,140 +0,0 @@ -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -package com.MAVLink; - -import com.MAVLink.MAVLinkPacket; -import com.MAVLink.Messages.MAVLinkStats; - -public class Parser { - - /** - * States from the parsing state machine - */ - enum MAV_states { - MAVLINK_PARSE_STATE_UNINIT, MAVLINK_PARSE_STATE_IDLE, MAVLINK_PARSE_STATE_GOT_STX, MAVLINK_PARSE_STATE_GOT_LENGTH, MAVLINK_PARSE_STATE_GOT_SEQ, MAVLINK_PARSE_STATE_GOT_SYSID, MAVLINK_PARSE_STATE_GOT_COMPID, MAVLINK_PARSE_STATE_GOT_MSGID, MAVLINK_PARSE_STATE_GOT_CRC1, MAVLINK_PARSE_STATE_GOT_PAYLOAD - } - - MAV_states state = MAV_states.MAVLINK_PARSE_STATE_UNINIT; - - static boolean msg_received; - - public MAVLinkStats stats; - private MAVLinkPacket m; - - public Parser() { - this(false); - } - - public Parser(boolean ignoreRadioPacketStats) { - stats = new MAVLinkStats(ignoreRadioPacketStats); - } - - /** - * This is a convenience function which handles the complete MAVLink - * parsing. the function will parse one byte at a time and return the - * complete packet once it could be successfully decoded. Checksum and other - * failures will be silently ignored. - * - * @param c - * The char to parse - */ - public MAVLinkPacket mavlink_parse_char(int c) { - msg_received = false; - - switch (state) { - case MAVLINK_PARSE_STATE_UNINIT: - case MAVLINK_PARSE_STATE_IDLE: - - if (c == MAVLinkPacket.MAVLINK_STX) { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_STX; - } - break; - - case MAVLINK_PARSE_STATE_GOT_STX: - if (msg_received) { - msg_received = false; - state = MAV_states.MAVLINK_PARSE_STATE_IDLE; - } else { - m = new MAVLinkPacket(c); - state = MAV_states.MAVLINK_PARSE_STATE_GOT_LENGTH; - } - break; - - case MAVLINK_PARSE_STATE_GOT_LENGTH: - m.seq = c; - state = MAV_states.MAVLINK_PARSE_STATE_GOT_SEQ; - break; - - case MAVLINK_PARSE_STATE_GOT_SEQ: - m.sysid = c; - state = MAV_states.MAVLINK_PARSE_STATE_GOT_SYSID; - break; - - case MAVLINK_PARSE_STATE_GOT_SYSID: - m.compid = c; - state = MAV_states.MAVLINK_PARSE_STATE_GOT_COMPID; - break; - - case MAVLINK_PARSE_STATE_GOT_COMPID: - m.msgid = c; - if (m.len == 0) { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } else { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_MSGID; - } - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID: - m.payload.add((byte) c); - if (m.payloadIsFilled()) { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - break; - - case MAVLINK_PARSE_STATE_GOT_PAYLOAD: - m.generateCRC(); - // Check first checksum byte - if (c != m.crc.getLSB()) { - msg_received = false; - state = MAV_states.MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLinkPacket.MAVLINK_STX) { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_STX; - m.crc.start_checksum(); - } - stats.crcError(); - } else { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_CRC1; - } - break; - - case MAVLINK_PARSE_STATE_GOT_CRC1: - // Check second checksum byte - if (c != m.crc.getMSB()) { - msg_received = false; - state = MAV_states.MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLinkPacket.MAVLINK_STX) { - state = MAV_states.MAVLINK_PARSE_STATE_GOT_STX; - m.crc.start_checksum(); - } - stats.crcError(); - } else { // Successfully received the message - stats.newPacket(m); - msg_received = true; - state = MAV_states.MAVLINK_PARSE_STATE_IDLE; - } - - break; - - } - if (msg_received) { - return m; - } else { - return null; - } - } - -} diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavcrc.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavcrc.py deleted file mode 100644 index 3458f09cc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavcrc.py +++ /dev/null @@ -1,29 +0,0 @@ -'''MAVLink X25 CRC code''' - - -class x25crc(object): - '''x25 CRC - based on checksum.h from mavlink library''' - def __init__(self, buf=None): - self.crc = 0xffff - if buf is not None: - if isinstance(buf, str): - self.accumulate_str(buf) - else: - self.accumulate(buf) - - def accumulate(self, buf): - '''add in some more bytes''' - accum = self.crc - for b in buf: - tmp = b ^ (accum & 0xff) - tmp = (tmp ^ (tmp<<4)) & 0xFF - accum = (accum>>8) ^ (tmp<<8) ^ (tmp<<3) ^ (tmp>>4) - self.crc = accum - - def accumulate_str(self, buf): - '''add in some more bytes''' - accum = self.crc - import array - bytes = array.array('B') - bytes.fromstring(buf) - self.accumulate(bytes) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen.py deleted file mode 100755 index 97ae2099e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen.py +++ /dev/null @@ -1,207 +0,0 @@ -#!/usr/bin/env python - -''' -parse a MAVLink protocol XML file and generate a python implementation - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later - -''' - -from __future__ import print_function -import sys, textwrap, os, copy -import re -from . import mavparse - -# XSD schema file -schemaFile = os.path.join(os.path.dirname(os.path.realpath(__file__)), "mavschema.xsd") - -# Set defaults for generating MAVLink code -DEFAULT_WIRE_PROTOCOL = mavparse.PROTOCOL_1_0 -DEFAULT_LANGUAGE = 'Python' -DEFAULT_ERROR_LIMIT = 200 -DEFAULT_VALIDATE = True - -# List the supported languages. This is done globally because it's used by the GUI wrapper too -supportedLanguages = ["C", "CS", "JavaScript", "Python", "WLua", "ObjC", "Swift", "Java"] - - -def mavgen(opts, args): - """Generate mavlink message formatters and parsers (C and Python ) using options - and args where args are a list of xml files. This function allows python - scripts under Windows to control mavgen using the same interface as - shell scripts under Unix""" - - xml = [] - - # Enable validation by default, disabling it if explicitly requested - if opts.validate: - try: - from lxml import etree - with open(schemaFile, 'r') as f: - xmlschema_root = etree.parse(f) - xmlschema = etree.XMLSchema(xmlschema_root) - except: - print("WARNING: Unable to load XML validator libraries. XML validation will not be performed", file=sys.stderr) - opts.validate = False - - def mavgen_validate(xmlfile): - """Uses lxml to validate an XML file. We define mavgen_validate - here because it relies on the XML libs that were loaded in mavgen(), so it can't be called standalone""" - xmlvalid = True - try: - with open(xmlfile, 'r') as f: - xmldocument = etree.parse(f) - xmlschema.assertValid(xmldocument) - forbidden_names_re = re.compile("^(break$|case$|class$|catch$|const$|continue$|debugger$|default$|delete$|do$|else$|\ - export$|extends$|finally$|for$|function$|if$|import$|in$|instanceof$|let$|new$|\ - return$|super$|switch$|this$|throw$|try$|typeof$|var$|void$|while$|with$|yield$|\ - enum$|await$|implements$|package$|protected$|static$|interface$|private$|public$|\ - abstract$|boolean$|byte$|char$|double$|final$|float$|goto$|int$|long$|native$|\ - short$|synchronized$|transient$|volatile$).*", re.IGNORECASE) - for element in xmldocument.iter('enum', 'entry', 'message', 'field'): - if forbidden_names_re.search(element.get('name')): - print("Validation error:", file=sys.stderr) - print("Element : %s at line : %s contains forbidden word" % (element.tag, element.sourceline), file=sys.stderr) - xmlvalid = False - - return xmlvalid - except etree.XMLSchemaError: - return False - - # Process all XML files, validating them as necessary. - for fname in args: - if opts.validate: - print("Validating %s" % fname) - if not mavgen_validate(fname): - return False - else: - print("Validation skipped for %s." % fname) - - print("Parsing %s" % fname) - xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) - - # expand includes - for x in xml[:]: - for i in x.include: - fname = os.path.join(os.path.dirname(x.filename), i) - - # Validate XML file with XSD file if possible. - if opts.validate: - print("Validating %s" % fname) - if not mavgen_validate(fname): - return False - else: - print("Validation skipped for %s." % fname) - - # Parsing - print("Parsing %s" % fname) - xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) - - # include message lengths and CRCs too - x.message_crcs.update(xml[-1].message_crcs) - x.message_lengths.update(xml[-1].message_lengths) - x.message_min_lengths.update(xml[-1].message_min_lengths) - x.message_flags.update(xml[-1].message_flags) - x.message_target_system_ofs.update(xml[-1].message_target_system_ofs) - x.message_target_component_ofs.update(xml[-1].message_target_component_ofs) - x.message_names.update(xml[-1].message_names) - x.largest_payload = max(x.largest_payload, xml[-1].largest_payload) - - # work out max payload size across all includes - largest_payload = 0 - for x in xml: - if x.largest_payload > largest_payload: - largest_payload = x.largest_payload - for x in xml: - x.largest_payload = largest_payload - - if mavparse.check_duplicates(xml): - sys.exit(1) - - print("Found %u MAVLink message types in %u XML files" % ( - mavparse.total_msgs(xml), len(xml))) - - # Convert language option to lowercase and validate - opts.language = opts.language.lower() - if opts.language == 'python': - from . import mavgen_python - mavgen_python.generate(opts.output, xml) - elif opts.language == 'c': - from . import mavgen_c - mavgen_c.generate(opts.output, xml) - elif opts.language == 'wlua': - from . import mavgen_wlua - mavgen_wlua.generate(opts.output, xml) - elif opts.language == 'cs': - from . import mavgen_cs - mavgen_cs.generate(opts.output, xml) - elif opts.language == 'javascript': - from . import mavgen_javascript - mavgen_javascript.generate(opts.output, xml) - elif opts.language == 'objc': - from . import mavgen_objc - mavgen_objc.generate(opts.output, xml) - elif opts.language == 'swift': - from . import mavgen_swift - mavgen_swift.generate(opts.output, xml) - elif opts.language == 'java': - from . import mavgen_java - mavgen_java.generate(opts.output, xml) - else: - print("Unsupported language %s" % opts.language) - - return True - -# build all the dialects in the dialects subpackage -class Opts: - def __init__(self, output, wire_protocol=DEFAULT_WIRE_PROTOCOL, language=DEFAULT_LANGUAGE, validate=DEFAULT_VALIDATE, error_limit=DEFAULT_ERROR_LIMIT): - self.wire_protocol = wire_protocol - self.error_limit = error_limit - self.language = language - self.output = output - self.validate = validate - -def mavgen_python_dialect(dialect, wire_protocol): - '''generate the python code on the fly for a MAVLink dialect''' - dialects = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'dialects') - mdef = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', '..', 'message_definitions') - if wire_protocol == mavparse.PROTOCOL_0_9: - py = os.path.join(dialects, 'v09', dialect + '.py') - xml = os.path.join(dialects, 'v09', dialect + '.xml') - if not os.path.exists(xml): - xml = os.path.join(mdef, 'v0.9', dialect + '.xml') - elif wire_protocol == mavparse.PROTOCOL_1_0: - py = os.path.join(dialects, 'v10', dialect + '.py') - xml = os.path.join(dialects, 'v10', dialect + '.xml') - if not os.path.exists(xml): - xml = os.path.join(mdef, 'v1.0', dialect + '.xml') - else: - py = os.path.join(dialects, 'v20', dialect + '.py') - xml = os.path.join(dialects, 'v20', dialect + '.xml') - if not os.path.exists(xml): - xml = os.path.join(mdef, 'v1.0', dialect + '.xml') - opts = Opts(py, wire_protocol) - - # Python 2 to 3 compatibility - try: - import StringIO as io - except ImportError: - import io - - # throw away stdout while generating - stdout_saved = sys.stdout - sys.stdout = io.StringIO() - try: - xml = os.path.relpath(xml) - if not mavgen(opts, [xml]): - sys.stdout = stdout_saved - return False - except Exception: - sys.stdout = stdout_saved - raise - sys.stdout = stdout_saved - return True - -if __name__ == "__main__": - raise DeprecationWarning("Executable was moved to pymavlink.tools.mavgen") diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_c.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_c.py deleted file mode 100644 index 638726c5c..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_c.py +++ /dev/null @@ -1,696 +0,0 @@ -#!/usr/bin/env python -''' -parse a MAVLink protocol XML file and generate a C implementation - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import sys, textwrap, os, time -from . import mavparse, mavtemplate - -t = mavtemplate.MAVTemplate() - -def generate_version_h(directory, xml): - '''generate version.h''' - f = open(os.path.join(directory, "version.h"), mode='w') - t.write(f,''' -/** @file - * @brief MAVLink comm protocol built from ${basename}.xml - * @see http://mavlink.org - */ -#pragma once - -#ifndef MAVLINK_VERSION_H -#define MAVLINK_VERSION_H - -#define MAVLINK_BUILD_DATE "${parse_time}" -#define MAVLINK_WIRE_PROTOCOL_VERSION "${wire_protocol_version}" -#define MAVLINK_MAX_DIALECT_PAYLOAD_SIZE ${largest_payload} - -#endif // MAVLINK_VERSION_H -''', xml) - f.close() - -def generate_mavlink_h(directory, xml): - '''generate mavlink.h''' - f = open(os.path.join(directory, "mavlink.h"), mode='w') - t.write(f,''' -/** @file - * @brief MAVLink comm protocol built from ${basename}.xml - * @see http://mavlink.org - */ -#pragma once -#ifndef MAVLINK_H -#define MAVLINK_H - -#define MAVLINK_PRIMARY_XML_IDX ${xml_idx} - -#ifndef MAVLINK_STX -#define MAVLINK_STX ${protocol_marker} -#endif - -#ifndef MAVLINK_ENDIAN -#define MAVLINK_ENDIAN ${mavlink_endian} -#endif - -#ifndef MAVLINK_ALIGNED_FIELDS -#define MAVLINK_ALIGNED_FIELDS ${aligned_fields_define} -#endif - -#ifndef MAVLINK_CRC_EXTRA -#define MAVLINK_CRC_EXTRA ${crc_extra_define} -#endif - -#ifndef MAVLINK_COMMAND_24BIT -#define MAVLINK_COMMAND_24BIT ${command_24bit_define} -#endif - -#include "version.h" -#include "${basename}.h" - -#endif // MAVLINK_H -''', xml) - f.close() - -def generate_main_h(directory, xml): - '''generate main header per XML file''' - f = open(os.path.join(directory, xml.basename + ".h"), mode='w') - t.write(f, ''' -/** @file - * @brief MAVLink comm protocol generated from ${basename}.xml - * @see http://mavlink.org - */ -#pragma once -#ifndef MAVLINK_${basename_upper}_H -#define MAVLINK_${basename_upper}_H - -#ifndef MAVLINK_H - #error Wrong include order: MAVLINK_${basename_upper}.H MUST NOT BE DIRECTLY USED. Include mavlink.h from the same directory instead or set ALL AND EVERY defines from MAVLINK.H manually accordingly, including the #define MAVLINK_H call. -#endif - -#undef MAVLINK_THIS_XML_IDX -#define MAVLINK_THIS_XML_IDX ${xml_idx} - -#ifdef __cplusplus -extern "C" { -#endif - -// MESSAGE LENGTHS AND CRCS - -#ifndef MAVLINK_MESSAGE_LENGTHS -#define MAVLINK_MESSAGE_LENGTHS {${message_lengths_array}} -#endif - -#ifndef MAVLINK_MESSAGE_CRCS -#define MAVLINK_MESSAGE_CRCS {${message_crcs_array}} -#endif - -#include "../protocol.h" - -#define MAVLINK_ENABLED_${basename_upper} - -// ENUM DEFINITIONS - -${{enum: -/** @brief ${description} */ -#ifndef HAVE_ENUM_${name} -#define HAVE_ENUM_${name} -typedef enum ${name} -{ -${{entry: ${name}=${value}, /* ${description} |${{param:${description}| }} */ -}} -} ${name}; -#endif -}} - -// MAVLINK VERSION - -#ifndef MAVLINK_VERSION -#define MAVLINK_VERSION ${version} -#endif - -#if (MAVLINK_VERSION == 0) -#undef MAVLINK_VERSION -#define MAVLINK_VERSION ${version} -#endif - -// MESSAGE DEFINITIONS -${{message:#include "./mavlink_msg_${name_lower}.h" -}} - -// base include -${{include_list:#include "../${base}/${base}.h" -}} - -#undef MAVLINK_THIS_XML_IDX -#define MAVLINK_THIS_XML_IDX ${xml_idx} - -#if MAVLINK_THIS_XML_IDX == MAVLINK_PRIMARY_XML_IDX -# define MAVLINK_MESSAGE_INFO {${message_info_array}} -# if MAVLINK_COMMAND_24BIT -# include "../mavlink_get_info.h" -# endif -#endif - -#ifdef __cplusplus -} -#endif // __cplusplus -#endif // MAVLINK_${basename_upper}_H -''', xml) - - f.close() - - -def generate_message_h(directory, m): - '''generate per-message header for a XML file''' - f = open(os.path.join(directory, 'mavlink_msg_%s.h' % m.name_lower), mode='w') - t.write(f, ''' -#pragma once -// MESSAGE ${name} PACKING - -#define MAVLINK_MSG_ID_${name} ${id} - -MAVPACKED( -typedef struct __mavlink_${name_lower}_t { -${{ordered_fields: ${type} ${name}${array_suffix}; /*< ${description}*/ -}} -}) mavlink_${name_lower}_t; - -#define MAVLINK_MSG_ID_${name}_LEN ${wire_length} -#define MAVLINK_MSG_ID_${name}_MIN_LEN ${wire_min_length} -#define MAVLINK_MSG_ID_${id}_LEN ${wire_length} -#define MAVLINK_MSG_ID_${id}_MIN_LEN ${wire_min_length} - -#define MAVLINK_MSG_ID_${name}_CRC ${crc_extra} -#define MAVLINK_MSG_ID_${id}_CRC ${crc_extra} - -${{array_fields:#define MAVLINK_MSG_${msg_name}_FIELD_${name_upper}_LEN ${array_length} -}} - -#if MAVLINK_COMMAND_24BIT -#define MAVLINK_MESSAGE_INFO_${name} { \\ - ${id}, \\ - "${name}", \\ - ${num_fields}, \\ - { ${{ordered_fields: { "${name}", ${c_print_format}, MAVLINK_TYPE_${type_upper}, ${array_length}, ${wire_offset}, offsetof(mavlink_${name_lower}_t, ${name}) }, \\ - }} } \\ -} -#else -#define MAVLINK_MESSAGE_INFO_${name} { \\ - "${name}", \\ - ${num_fields}, \\ - { ${{ordered_fields: { "${name}", ${c_print_format}, MAVLINK_TYPE_${type_upper}, ${array_length}, ${wire_offset}, offsetof(mavlink_${name_lower}_t, ${name}) }, \\ - }} } \\ -} -#endif - -/** - * @brief Pack a ${name_lower} message - * @param system_id ID of this system - * @param component_id ID of this component (e.g. 200 for IMU) - * @param msg The MAVLink message to compress the data into - * -${{arg_fields: * @param ${name} ${description} -}} - * @return length of the message in bytes (excluding serial stream start sign) - */ -static inline uint16_t mavlink_msg_${name_lower}_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, - ${{arg_fields: ${array_const}${type} ${array_prefix}${name},}}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS - char buf[MAVLINK_MSG_ID_${name}_LEN]; -${{scalar_fields: _mav_put_${type}(buf, ${wire_offset}, ${putname}); -}} -${{array_fields: _mav_put_${type}_array(buf, ${wire_offset}, ${name}, ${array_length}); -}} - memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_${name}_LEN); -#else - mavlink_${name_lower}_t packet; -${{scalar_fields: packet.${name} = ${putname}; -}} -${{array_fields: mav_array_memcpy(packet.${name}, ${name}, sizeof(${type})*${array_length}); -}} - memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_${name}_LEN); -#endif - - msg->msgid = MAVLINK_MSG_ID_${name}; - return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -} - -/** - * @brief Pack a ${name_lower} message on a channel - * @param system_id ID of this system - * @param component_id ID of this component (e.g. 200 for IMU) - * @param chan The MAVLink channel this message will be sent over - * @param msg The MAVLink message to compress the data into -${{arg_fields: * @param ${name} ${description} -}} - * @return length of the message in bytes (excluding serial stream start sign) - */ -static inline uint16_t mavlink_msg_${name_lower}_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, - mavlink_message_t* msg, - ${{arg_fields:${array_const}${type} ${array_prefix}${name},}}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS - char buf[MAVLINK_MSG_ID_${name}_LEN]; -${{scalar_fields: _mav_put_${type}(buf, ${wire_offset}, ${putname}); -}} -${{array_fields: _mav_put_${type}_array(buf, ${wire_offset}, ${name}, ${array_length}); -}} - memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_${name}_LEN); -#else - mavlink_${name_lower}_t packet; -${{scalar_fields: packet.${name} = ${putname}; -}} -${{array_fields: mav_array_memcpy(packet.${name}, ${name}, sizeof(${type})*${array_length}); -}} - memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_${name}_LEN); -#endif - - msg->msgid = MAVLINK_MSG_ID_${name}; - return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -} - -/** - * @brief Encode a ${name_lower} struct - * - * @param system_id ID of this system - * @param component_id ID of this component (e.g. 200 for IMU) - * @param msg The MAVLink message to compress the data into - * @param ${name_lower} C-struct to read the message contents from - */ -static inline uint16_t mavlink_msg_${name_lower}_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_${name_lower}_t* ${name_lower}) -{ - return mavlink_msg_${name_lower}_pack(system_id, component_id, msg,${{arg_fields: ${name_lower}->${name},}}); -} - -/** - * @brief Encode a ${name_lower} struct on a channel - * - * @param system_id ID of this system - * @param component_id ID of this component (e.g. 200 for IMU) - * @param chan The MAVLink channel this message will be sent over - * @param msg The MAVLink message to compress the data into - * @param ${name_lower} C-struct to read the message contents from - */ -static inline uint16_t mavlink_msg_${name_lower}_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_${name_lower}_t* ${name_lower}) -{ - return mavlink_msg_${name_lower}_pack_chan(system_id, component_id, chan, msg,${{arg_fields: ${name_lower}->${name},}}); -} - -/** - * @brief Send a ${name_lower} message - * @param chan MAVLink channel to send the message - * -${{arg_fields: * @param ${name} ${description} -}} - */ -#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS - -static inline void mavlink_msg_${name_lower}_send(mavlink_channel_t chan,${{arg_fields: ${array_const}${type} ${array_prefix}${name},}}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS - char buf[MAVLINK_MSG_ID_${name}_LEN]; -${{scalar_fields: _mav_put_${type}(buf, ${wire_offset}, ${putname}); -}} -${{array_fields: _mav_put_${type}_array(buf, ${wire_offset}, ${name}, ${array_length}); -}} - _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_${name}, buf, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -#else - mavlink_${name_lower}_t packet; -${{scalar_fields: packet.${name} = ${putname}; -}} -${{array_fields: mav_array_memcpy(packet.${name}, ${name}, sizeof(${type})*${array_length}); -}} - _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_${name}, (const char *)&packet, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -#endif -} - -/** - * @brief Send a ${name_lower} message - * @param chan MAVLink channel to send the message - * @param struct The MAVLink struct to serialize - */ -static inline void mavlink_msg_${name_lower}_send_struct(mavlink_channel_t chan, const mavlink_${name_lower}_t* ${name_lower}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS - mavlink_msg_${name_lower}_send(chan,${{arg_fields: ${name_lower}->${name},}}); -#else - _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_${name}, (const char *)${name_lower}, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -#endif -} - -#if MAVLINK_MSG_ID_${name}_LEN <= MAVLINK_MAX_PAYLOAD_LEN -/* - This varient of _send() can be used to save stack space by re-using - memory from the receive buffer. The caller provides a - mavlink_message_t which is the size of a full mavlink message. This - is usually the receive buffer for the channel, and allows a reply to an - incoming message with minimum stack space usage. - */ -static inline void mavlink_msg_${name_lower}_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, ${{arg_fields: ${array_const}${type} ${array_prefix}${name},}}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS - char *buf = (char *)msgbuf; -${{scalar_fields: _mav_put_${type}(buf, ${wire_offset}, ${putname}); -}} -${{array_fields: _mav_put_${type}_array(buf, ${wire_offset}, ${name}, ${array_length}); -}} - _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_${name}, buf, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -#else - mavlink_${name_lower}_t *packet = (mavlink_${name_lower}_t *)msgbuf; -${{scalar_fields: packet->${name} = ${putname}; -}} -${{array_fields: mav_array_memcpy(packet->${name}, ${name}, sizeof(${type})*${array_length}); -}} - _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_${name}, (const char *)packet, MAVLINK_MSG_ID_${name}_MIN_LEN, MAVLINK_MSG_ID_${name}_LEN, MAVLINK_MSG_ID_${name}_CRC); -#endif -} -#endif - -#endif - -// MESSAGE ${name} UNPACKING - -${{fields: -/** - * @brief Get field ${name} from ${name_lower} message - * - * @return ${description} - */ -static inline ${return_type} mavlink_msg_${name_lower}_get_${name}(const mavlink_message_t* msg${get_arg}) -{ - return _MAV_RETURN_${type}${array_tag}(msg, ${array_return_arg} ${wire_offset}); -} -}} - -/** - * @brief Decode a ${name_lower} message into a struct - * - * @param msg The message to decode - * @param ${name_lower} C-struct to decode the message contents into - */ -static inline void mavlink_msg_${name_lower}_decode(const mavlink_message_t* msg, mavlink_${name_lower}_t* ${name_lower}) -{ -#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS -${{ordered_fields: ${decode_left}mavlink_msg_${name_lower}_get_${name}(msg${decode_right}); -}} -#else - uint8_t len = msg->len < MAVLINK_MSG_ID_${name}_LEN? msg->len : MAVLINK_MSG_ID_${name}_LEN; - memset(${name_lower}, 0, MAVLINK_MSG_ID_${name}_LEN); - memcpy(${name_lower}, _MAV_PAYLOAD(msg), len); -#endif -} -''', m) - f.close() - - -def generate_testsuite_h(directory, xml): - '''generate testsuite.h per XML file''' - f = open(os.path.join(directory, "testsuite.h"), mode='w') - t.write(f, ''' -/** @file - * @brief MAVLink comm protocol testsuite generated from ${basename}.xml - * @see http://qgroundcontrol.org/mavlink/ - */ -#pragma once -#ifndef ${basename_upper}_TESTSUITE_H -#define ${basename_upper}_TESTSUITE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef MAVLINK_TEST_ALL -#define MAVLINK_TEST_ALL -${{include_list:static void mavlink_test_${base}(uint8_t, uint8_t, mavlink_message_t *last_msg); -}} -static void mavlink_test_${basename}(uint8_t, uint8_t, mavlink_message_t *last_msg); - -static void mavlink_test_all(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg) -{ -${{include_list: mavlink_test_${base}(system_id, component_id, last_msg); -}} - mavlink_test_${basename}(system_id, component_id, last_msg); -} -#endif - -${{include_list:#include "../${base}/testsuite.h" -}} - -${{message: -static void mavlink_test_${name_lower}(uint8_t system_id, uint8_t component_id, mavlink_message_t *last_msg) -{ -#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 - mavlink_status_t *status = mavlink_get_channel_status(MAVLINK_COMM_0); - if ((status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) && MAVLINK_MSG_ID_${name} >= 256) { - return; - } -#endif - mavlink_message_t msg; - uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; - uint16_t i; - mavlink_${name_lower}_t packet_in = { - ${{ordered_fields:${c_test_value},}} - }; - mavlink_${name_lower}_t packet1, packet2; - memset(&packet1, 0, sizeof(packet1)); - ${{scalar_fields:packet1.${name} = packet_in.${name}; - }} - ${{array_fields:mav_array_memcpy(packet1.${name}, packet_in.${name}, sizeof(${type})*${array_length}); - }} -#ifdef MAVLINK_STATUS_FLAG_OUT_MAVLINK1 - if (status->flags & MAVLINK_STATUS_FLAG_OUT_MAVLINK1) { - // cope with extensions - memset(MAVLINK_MSG_ID_${name}_MIN_LEN + (char *)&packet1, 0, sizeof(packet1)-MAVLINK_MSG_ID_${name}_MIN_LEN); - } -#endif - memset(&packet2, 0, sizeof(packet2)); - mavlink_msg_${name_lower}_encode(system_id, component_id, &msg, &packet1); - mavlink_msg_${name_lower}_decode(&msg, &packet2); - MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); - - memset(&packet2, 0, sizeof(packet2)); - mavlink_msg_${name_lower}_pack(system_id, component_id, &msg ${{arg_fields:, packet1.${name} }}); - mavlink_msg_${name_lower}_decode(&msg, &packet2); - MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); - - memset(&packet2, 0, sizeof(packet2)); - mavlink_msg_${name_lower}_pack_chan(system_id, component_id, MAVLINK_COMM_0, &msg ${{arg_fields:, packet1.${name} }}); - mavlink_msg_${name_lower}_decode(&msg, &packet2); - MAVLINK_ASSERT(memcmp(&packet1, &packet2, sizeof(packet1)) == 0); - - memset(&packet2, 0, sizeof(packet2)); - mavlink_msg_to_send_buffer(buffer, &msg); - for (i=0; i\n" % indent) - outf.write("%s/// %s\n" % (indent, escapedText)) - outf.write("%s/// \n" % indent) - - -def generate_enums(outf, enums): - print("Generating enums") - outf.write("namespace MavLink\n{\n") - for e in enums: - #if len(e.description) > 0: - generate_xmlDocSummary(outf, e.description, 1) - outf.write("\tpublic enum %s : uint\n\t{\n" % e.name) - - for entry in e.entry: - if len(entry.description) > 0: - generate_xmlDocSummary(outf, entry.description, 2) - outf.write("\t\t%s = %u,\n" % (entry.name, entry.value)) - - outf.write("\n\t}\n\n") - outf.write("\n}\n") - -def generate_classes(outf, msgs): - print("Generating class definitions") - - outf.write(""" - - -namespace MavLink\n{ - - public abstract class MavlinkMessage - { - public abstract int Serialize(byte[] bytes, ref int offset); - } -""") - - for m in msgs: - if (len(m.description) >0): - generate_xmlDocSummary(outf, m.description, 1) - outf.write("""\tpublic class Msg_%s : MavlinkMessage - { -""" % m.name.lower()) - - for f in m.fields: - if (f.description.upper() != f.name.upper()): - generate_xmlDocSummary(outf, f.description, 2) - if (f.array_length): - outf.write("\t\tpublic %s[] %s; // Array size %s\n" % (map[f.type], mapFieldName.get(f.name, f.name), f.array_length)) - else: - outf.write("\t\tpublic %s %s;\n" % (map[f.type], mapFieldName.get(f.name, f.name))) - - outf.write(""" - public override int Serialize(byte[] bytes, ref int offset) - { - return MavLinkSerializer.Serialize_%s(this, bytes, ref offset); - } -""" % m.name.upper()) - - outf.write("\t}\n\n") - outf.write("}\n\n") - - - -def generate_Deserialization(outf, messages): - - # Create the deserialization funcs - for m in messages: - classname="Msg_%s" % m.name.lower() - outf.write("\n\t\tinternal static MavlinkMessage Deserialize_%s(byte[] bytes, int offset)\n\t\t{\n" % (m.name)) - offset = 0 - - outf.write("\t\t\treturn new %s\n" % classname) - outf.write("\t\t\t{\n") - - for f in m.ordered_fields: - if (f.array_length): - outf.write("\t\t\t\t%s = ByteArrayUtil.%s(bytes, offset + %s, %s),\n" % (mapFieldName.get(f.name, f.name), mapType[f.type][0], offset, f.array_length)) - offset += (f.array_length * mapType[f.type][1]) - continue - - # mapping 'char' to byte here since there is no real equivalent in the CLR - if (f.type == 'uint8_t' or f.type == 'char' ): - outf.write("\t\t\t\t%s = bytes[offset + %s],\n" % (mapFieldName.get(f.name, f.name),offset)) - offset+=1 - else: - outf.write("\t\t\t\t%s = bitconverter.%s(bytes, offset + %s),\n" % (mapFieldName.get(f.name, f.name), mapType[f.type][0] , offset)) - offset += mapType[f.type][1] - - outf.write("\t\t\t};\n") - outf.write("\t\t}\n") - - -def generate_Serialization(outf, messages): - - # Create the table of serialization delegates - for m in messages: - classname="Msg_%s" % m.name.lower() - - outf.write("\n\t\tinternal static int Serialize_%s(this %s msg, byte[] bytes, ref int offset)\n\t\t{\n" % (m.name, classname)) - offset=0 - - # Now (since Mavlink 1.0) we need to deal with ordering of fields - for f in m.ordered_fields: - - if (f.array_length): - outf.write("\t\t\tByteArrayUtil.ToByteArray(msg.%s, bytes, offset + %s, %s);\n" % (f.name, offset, f.array_length)) - offset += f.array_length * mapType[f.type][1] - continue - - if (f.type == 'uint8_t'): - outf.write("\t\t\tbytes[offset + %s] = msg.%s;\n" % (offset,mapFieldName.get(f.name, f.name))) - offset+=1 - elif (f.type == 'int8_t'): - outf.write("\t\t\tbytes[offset + %s] = unchecked((byte)msg.%s);\n" % (offset,mapFieldName.get(f.name, f.name))) - offset+=1 - elif (f.type == 'char'): - outf.write("\t\t\tbytes[offset + %s] = msg.%s; // todo: check int8_t and char are compatible\n" % (offset,mapFieldName.get(f.name, f.name))) - offset+=1 - else: - outf.write("\t\t\tbitconverter.GetBytes(msg.%s, bytes, offset + %s);\n" % (mapFieldName.get(f.name, f.name),offset)) - offset += mapType[f.type][1] - - outf.write("\t\t\toffset += %s;\n" % offset) - outf.write("\t\t\treturn %s;\n" % m.id) - outf.write("\t\t}\n") - - -def generate_CodecIndex(outf, messages, xml): - - outf.write(""" - -/* -MAVLink protocol implementation (auto-generated by mavgen.py) - -Note: this file has been auto-generated. DO NOT EDIT -*/ - -using System; -using System.Collections; -using System.Collections.Generic; - -namespace MavLink -{ - public static class MavlinkSettings - { -""") - outf.write('\t\tpublic const string WireProtocolVersion = "%s";' % xml[0].wire_protocol_version) - outf.write('\n\t\tpublic const byte ProtocolMarker = 0x%x;' % xml[0].protocol_marker) - outf.write('\n\t\tpublic const bool CrcExtra = %s;' % str(xml[0].crc_extra).lower()) - outf.write('\n\t\tpublic const bool IsLittleEndian = %s;' % str(xml[0].little_endian).lower()) - - outf.write(""" - } - - public delegate MavlinkMessage MavlinkPacketDeserializeFunc(byte[] bytes, int offset); - - //returns the message ID, offset is advanced by the number of bytes used to serialize - public delegate int MavlinkPacketSerializeFunc(byte[] bytes, ref int offset, object mavlinkPacket); - - public class MavPacketInfo - { - public MavlinkPacketDeserializeFunc Deserializer; - public int [] OrderMap; - public byte CrcExtra; - - public MavPacketInfo(MavlinkPacketDeserializeFunc deserializer, byte crcExtra) - { - this.Deserializer = deserializer; - this.CrcExtra = crcExtra; - } - } - - public static class MavLinkSerializer - { - public static void SetDataIsLittleEndian(bool isLittle) - { - bitconverter.SetDataIsLittleEndian(isLittle); - } - - private static readonly FrameworkBitConverter bitconverter = new FrameworkBitConverter(); - - public static Dictionary Lookup = new Dictionary - {""") - - for m in messages: - classname="Msg_%s" % m.name.lower() - outf.write("\n\t\t\t{%s, new MavPacketInfo(Deserialize_%s, %s)}," % (m.id, m.name, m.crc_extra)) - outf.write("\n\t\t};\n") - - -def generate(basename, xml): - '''generate complete MAVLink CSharp implemenation''' - structsfilename = basename + '.generated.cs' - - msgs = [] - enums = [] - filelist = [] - for x in xml: - msgs.extend(x.message) - enums.extend(x.enum) - filelist.append(os.path.basename(x.filename)) - - for m in msgs: - m.order_map = [ 0 ] * len(m.fieldnames) - for i in range(0, len(m.fieldnames)): - m.order_map[i] = m.ordered_fieldnames.index(m.fieldnames[i]) - - m.fields_in_order = [] - for i in range(0, len(m.fieldnames)): - m.order_map[i] = m.ordered_fieldnames.index(m.fieldnames[i]) - - print("Generating messages file: %s" % structsfilename) - dir = os.path.dirname(structsfilename) - if not os.path.exists(dir): - os.makedirs(dir) - outf = open(structsfilename, "w") - generate_preamble(outf, msgs, filelist, xml[0]) - - outf.write(""" - -using System.Reflection; - -[assembly: AssemblyTitle("Mavlink Classes")] -[assembly: AssemblyDescription("Generated Message Classes for Mavlink. See http://qgroundcontrol.org/mavlink/start")] -[assembly: AssemblyProduct("Mavlink")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] - - """) - - generate_enums(outf, enums) - generate_classes(outf, msgs) - outf.close() - - print("Generating the (De)Serializer classes") - serfilename = basename + '_codec.generated.cs' - outf = open(serfilename, "w") - generate_CodecIndex(outf, msgs, xml) - generate_Deserialization(outf, msgs) - generate_Serialization(outf, msgs) - - outf.write("\t}\n\n") - outf.write("}\n\n") - - outf.close() - - # Some build commands depend on the platform - eg MS .NET Windows Vs Mono on Linux - if platform.system() == "Windows": - winpath=os.environ['WinDir'] - cscCommand = winpath + "\\Microsoft.NET\\Framework\\v4.0.30319\\csc.exe" - - if (os.path.exists(cscCommand)==False): - print("\nError: CS compiler not found. .Net Assembly generation skipped") - return - else: - print("Error:.Net Assembly generation not yet supported on non Windows platforms") - return - cscCommand = "csc" - - print("Compiling Assembly for .Net Framework 4.0") - - generatedCsFiles = [ serfilename, structsfilename] - - includedCsFiles = [ 'CS/common/ByteArrayUtil.cs', 'CS/common/FrameworkBitConverter.cs', 'CS/common/Mavlink.cs' ] - - outputLibraryPath = os.path.normpath(dir + "/mavlink.dll") - - compileCommand = "%s %s" % (cscCommand, "/target:library /debug /out:" + outputLibraryPath) - compileCommand = compileCommand + " /doc:" + os.path.normpath(dir + "/mavlink.xml") - - for csFile in generatedCsFiles + includedCsFiles: - compileCommand = compileCommand + " " + os.path.normpath(csFile) - - #print("Cmd:" + compileCommand) - res = os.system (compileCommand) - - if res == '0': - print("Generated %s OK" % filename) - else: - print("Error") diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_java.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_java.py deleted file mode 100644 index e04db941c..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_java.py +++ /dev/null @@ -1,617 +0,0 @@ -#!/usr/bin/env python -''' - Parse a MAVLink protocol XML file and generate a Java implementation - - Copyright Andrew Tridgell 2011 - Released under GNU GPL version 3 or later - ''' - -import sys, textwrap, os, time -from . import mavparse, mavtemplate - -t = mavtemplate.MAVTemplate() - -def generate_enums(basename, xml): - '''generate main header per XML file''' - directory = os.path.join(basename, '''enums''') - mavparse.mkdir_p(directory) - for en in xml.enum: - f = open(os.path.join(directory, en.name+".java"), mode='w') - t.write(f, ''' -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -package com.MAVLink.enums; - -/** -* ${description} -*/ -public class ${name} { -${{entry: public static final int ${name} = ${value}; /* ${description} |${{param:${description}| }} */ -}} -} - ''', en) - f.close() - - - -def generate_CRC(directory, xml): - # and message CRCs array - xml.message_crcs_array = '' - for msgid in range(256): - crc = xml.message_crcs.get(msgid, 0) - xml.message_crcs_array += '%u, ' % crc - xml.message_crcs_array = xml.message_crcs_array[:-2] - - f = open(os.path.join(directory, "CRC.java"), mode='w') - t.write(f,''' -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -package com.MAVLink.${basename}; - -/** -* X.25 CRC calculation for MAVlink messages. The checksum must be initialized, -* updated with witch field of the message, and then finished with the message -* id. -* -*/ -public class CRC { - private static final int[] MAVLINK_MESSAGE_CRCS = {${message_crcs_array}}; - private static final int CRC_INIT_VALUE = 0xffff; - private int crcValue; - - /** - * Accumulate the X.25 CRC by adding one char at a time. - * - * The checksum function adds the hash of one char at a time to the 16 bit - * checksum (uint16_t). - * - * @param data - * new char to hash - **/ - public void update_checksum(int data) { - data = data & 0xff; //cast because we want an unsigned type - int tmp = data ^ (crcValue & 0xff); - tmp ^= (tmp << 4) & 0xff; - crcValue = ((crcValue >> 8) & 0xff) ^ (tmp << 8) ^ (tmp << 3) ^ ((tmp >> 4) & 0xf); - } - - /** - * Finish the CRC calculation of a message, by running the CRC with the - * Magic Byte. This Magic byte has been defined in MAVlink v1.0. - * - * @param msgid - * The message id number - */ - public void finish_checksum(int msgid) { - update_checksum(MAVLINK_MESSAGE_CRCS[msgid]); - } - - /** - * Initialize the buffer for the X.25 CRC - * - */ - public void start_checksum() { - crcValue = CRC_INIT_VALUE; - } - - public int getMSB() { - return ((crcValue >> 8) & 0xff); - } - - public int getLSB() { - return (crcValue & 0xff); - } - - public CRC() { - start_checksum(); - } - -} - ''',xml) - - f.close() - - -def generate_message_h(directory, m): - '''generate per-message header for a XML file''' - f = open(os.path.join(directory, 'msg_%s.java' % m.name_lower), mode='w') - - path=directory.split('/') - t.write(f, ''' -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -// MESSAGE ${name} PACKING -package com.MAVLink.%s; -import com.MAVLink.MAVLinkPacket; -import com.MAVLink.Messages.MAVLinkMessage; -import com.MAVLink.Messages.MAVLinkPayload; - -/** -* ${description} -*/ -public class msg_${name_lower} extends MAVLinkMessage{ - - public static final int MAVLINK_MSG_ID_${name} = ${id}; - public static final int MAVLINK_MSG_LENGTH = ${wire_length}; - private static final long serialVersionUID = MAVLINK_MSG_ID_${name}; - - - ${{ordered_fields: - /** - * ${description} - */ - public ${type} ${name}${array_suffix}; - }} - - /** - * Generates the payload for a mavlink message for a message of this type - * @return - */ - public MAVLinkPacket pack(){ - MAVLinkPacket packet = new MAVLinkPacket(MAVLINK_MSG_LENGTH); - packet.sysid = 255; - packet.compid = 190; - packet.msgid = MAVLINK_MSG_ID_${name}; - ${{ordered_fields: - ${packField} - }} - return packet; - } - - /** - * Decode a ${name_lower} message into this class fields - * - * @param payload The message to decode - */ - public void unpack(MAVLinkPayload payload) { - payload.resetIndex(); - ${{ordered_fields: - ${unpackField} - }} - } - - /** - * Constructor for a new message, just initializes the msgid - */ - public msg_${name_lower}(){ - msgid = MAVLINK_MSG_ID_${name}; - } - - /** - * Constructor for a new message, initializes the message with the payload - * from a mavlink packet - * - */ - public msg_${name_lower}(MAVLinkPacket mavLinkPacket){ - this.sysid = mavLinkPacket.sysid; - this.compid = mavLinkPacket.compid; - this.msgid = MAVLINK_MSG_ID_${name}; - unpack(mavLinkPacket.payload); - } - - ${{ordered_fields: ${getText} }} - /** - * Returns a string with the MSG name and data - */ - public String toString(){ - return "MAVLINK_MSG_ID_${name} -"+${{ordered_fields:" ${name}:"+${name}+}}""; - } -} - ''' % path[len(path)-1], m) - f.close() - - -def generate_MAVLinkMessage(directory, xml_list): - f = open(os.path.join(directory, "MAVLinkPacket.java"), mode='w') - t.write(f, ''' -/* AUTO-GENERATED FILE. DO NOT MODIFY. - * - * This class was automatically generated by the - * java mavlink generator tool. It should not be modified by hand. - */ - -package com.MAVLink; - -import java.io.Serializable; -import com.MAVLink.Messages.MAVLinkPayload; -import com.MAVLink.Messages.MAVLinkMessage; -import com.MAVLink.${basename}.CRC; -import com.MAVLink.common.*; -import com.MAVLink.${basename}.*; - -/** -* Common interface for all MAVLink Messages -* Packet Anatomy -* This is the anatomy of one packet. It is inspired by the CAN and SAE AS-4 standards. - -* Byte Index Content Value Explanation -* 0 Packet start sign v1.0: 0xFE Indicates the start of a new packet. (v0.9: 0x55) -* 1 Payload length 0 - 255 Indicates length of the following payload. -* 2 Packet sequence 0 - 255 Each component counts up his send sequence. Allows to detect packet loss -* 3 System ID 1 - 255 ID of the SENDING system. Allows to differentiate different MAVs on the same network. -* 4 Component ID 0 - 255 ID of the SENDING component. Allows to differentiate different components of the same system, e.g. the IMU and the autopilot. -* 5 Message ID 0 - 255 ID of the message - the id defines what the payload means and how it should be correctly decoded. -* 6 to (n+6) Payload 0 - 255 Data of the message, depends on the message id. -* (n+7)to(n+8) Checksum (low byte, high byte) ITU X.25/SAE AS-4 hash, excluding packet start sign, so bytes 1..(n+6) Note: The checksum also includes MAVLINK_CRC_EXTRA (Number computed from message fields. Protects the packet from decoding a different version of the same packet but with different variables). - -* The checksum is the same as used in ITU X.25 and SAE AS-4 standards (CRC-16-CCITT), documented in SAE AS5669A. Please see the MAVLink source code for a documented C-implementation of it. LINK TO CHECKSUM -* The minimum packet length is 8 bytes for acknowledgement packets without payload -* The maximum packet length is 263 bytes for full payload -* -*/ -public class MAVLinkPacket implements Serializable { - private static final long serialVersionUID = 2095947771227815314L; - - public static final int MAVLINK_STX = 254; - - /** - * Message length. NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2 - */ - public final int len; - - /** - * Message sequence - */ - public int seq; - - /** - * ID of the SENDING system. Allows to differentiate different MAVs on the - * same network. - */ - public int sysid; - - /** - * ID of the SENDING component. Allows to differentiate different components - * of the same system, e.g. the IMU and the autopilot. - */ - public int compid; - - /** - * ID of the message - the id defines what the payload means and how it - * should be correctly decoded. - */ - public int msgid; - - /** - * Data of the message, depends on the message id. - */ - public MAVLinkPayload payload; - - /** - * ITU X.25/SAE AS-4 hash, excluding packet start sign, so bytes 1..(n+6) - * Note: The checksum also includes MAVLINK_CRC_EXTRA (Number computed from - * message fields. Protects the packet from decoding a different version of - * the same packet but with different variables). - */ - public CRC crc; - - public MAVLinkPacket(int payloadLength){ - len = payloadLength; - payload = new MAVLinkPayload(payloadLength); - } - - /** - * Check if the size of the Payload is equal to the "len" byte - */ - public boolean payloadIsFilled() { - return payload.size() >= len; - } - - /** - * Update CRC for this packet. - */ - public void generateCRC(){ - if(crc == null){ - crc = new CRC(); - } - else{ - crc.start_checksum(); - } - - crc.update_checksum(len); - crc.update_checksum(seq); - crc.update_checksum(sysid); - crc.update_checksum(compid); - crc.update_checksum(msgid); - - payload.resetIndex(); - - final int payloadSize = payload.size(); - for (int i = 0; i < payloadSize; i++) { - crc.update_checksum(payload.getByte()); - } - crc.finish_checksum(msgid); - } - - /** - * Encode this packet for transmission. - * - * @return Array with bytes to be transmitted - */ - public byte[] encodePacket() { - byte[] buffer = new byte[6 + len + 2]; - - int i = 0; - buffer[i++] = (byte) MAVLINK_STX; - buffer[i++] = (byte) len; - buffer[i++] = (byte) seq; - buffer[i++] = (byte) sysid; - buffer[i++] = (byte) compid; - buffer[i++] = (byte) msgid; - - final int payloadSize = payload.size(); - for (int j = 0; j < payloadSize; j++) { - buffer[i++] = payload.payload.get(j); - } - - generateCRC(); - buffer[i++] = (byte) (crc.getLSB()); - buffer[i++] = (byte) (crc.getMSB()); - return buffer; - } - - /** - * Unpack the data in this packet and return a MAVLink message - * - * @return MAVLink message decoded from this packet - */ - public MAVLinkMessage unpack() { - switch (msgid) { - ''', xml_list[0]) - for xml in xml_list: - t.write(f, ''' - ${{message: - case msg_${name_lower}.MAVLINK_MSG_ID_${name}: - return new msg_${name_lower}(this); - }} - ''',xml) - f.write(''' - default: - return null; - } - } - -} - - ''') - - f.close() - -def copy_fixed_headers(directory, xml): - '''copy the fixed protocol headers to the target directory''' - import shutil - hlist = [ 'Parser.java', 'Messages/MAVLinkMessage.java', 'Messages/MAVLinkPayload.java', 'Messages/MAVLinkStats.java' ] - basepath = os.path.dirname(os.path.realpath(__file__)) - srcpath = os.path.join(basepath, 'java/lib') - print("Copying fixed headers") - for h in hlist: - src = os.path.realpath(os.path.join(srcpath, h)) - dest = os.path.realpath(os.path.join(directory, h)) - if src == dest: - continue - destdir = os.path.realpath(os.path.join(directory, 'Messages')) - try: - os.makedirs(destdir) - except: - print("Not re-creating Messages directory") - shutil.copy(src, dest) - -class mav_include(object): - def __init__(self, base): - self.base = base - - -def mavfmt(field, typeInfo=False): - '''work out the struct format for a type''' - map = { - 'float' : ('float', 'Float'), - 'double' : ('double', 'Double'), - 'char' : ('byte', 'Byte'), - 'int8_t' : ('byte', 'Byte'), - 'uint8_t' : ('short', 'UnsignedByte'), - 'uint8_t_mavlink_version' : ('short', 'UnsignedByte'), - 'int16_t' : ('short', 'Short'), - 'uint16_t' : ('int', 'UnsignedShort'), - 'int32_t' : ('int', 'Int'), - 'uint32_t' : ('long', 'UnsignedInt'), - 'int64_t' : ('long', 'Long'), - 'uint64_t' : ('long', 'UnsignedLong'), - } - - if typeInfo: - return map[field.type][1] - else: - return map[field.type][0] - -def generate_one(basename, xml): - '''generate headers for one XML file''' - - directory = os.path.join(basename, xml.basename) - - print("Generating Java implementation in directory %s" % directory) - mavparse.mkdir_p(directory) - - if xml.little_endian: - xml.mavlink_endian = "MAVLINK_LITTLE_ENDIAN" - else: - xml.mavlink_endian = "MAVLINK_BIG_ENDIAN" - - if xml.crc_extra: - xml.crc_extra_define = "1" - else: - xml.crc_extra_define = "0" - - if xml.sort_fields: - xml.aligned_fields_define = "1" - else: - xml.aligned_fields_define = "0" - - # work out the included headers - xml.include_list = [] - for i in xml.include: - base = i[:-4] - xml.include_list.append(mav_include(base)) - - # form message lengths array - xml.message_lengths_array = '' - for mlen in xml.message_lengths: - xml.message_lengths_array += '%u, ' % mlen - xml.message_lengths_array = xml.message_lengths_array[:-2] - - - - # form message info array - xml.message_info_array = '' - for name in xml.message_names: - if name is not None: - xml.message_info_array += 'MAVLINK_MESSAGE_INFO_%s, ' % name - else: - # Several C compilers don't accept {NULL} for - # multi-dimensional arrays and structs - # feed the compiler a "filled" empty message - xml.message_info_array += '{"EMPTY",0,{{"","",MAVLINK_TYPE_CHAR,0,0,0}}}, ' - xml.message_info_array = xml.message_info_array[:-2] - - # add some extra field attributes for convenience with arrays - for m in xml.message: - m.msg_name = m.name - if xml.crc_extra: - m.crc_extra_arg = ", %s" % m.crc_extra - else: - m.crc_extra_arg = "" - for f in m.fields: - if f.print_format is None: - f.c_print_format = 'NULL' - else: - f.c_print_format = '"%s"' % f.print_format - f.getText = '' - if f.array_length != 0: - f.array_suffix = '[] = new %s[%u]' % (mavfmt(f),f.array_length) - f.array_prefix = '*' - f.array_tag = '_array' - f.array_arg = ', %u' % f.array_length - f.array_return_arg = '%s, %u, ' % (f.name, f.array_length) - f.array_const = 'const ' - f.decode_left = '' - f.decode_right = 'm.%s' % (f.name) - - f.unpackField = ''' - for (int i = 0; i < this.%s.length; i++) { - this.%s[i] = payload.get%s(); - } - ''' % (f.name, f.name, mavfmt(f, True) ) - f.packField = ''' - for (int i = 0; i < %s.length; i++) { - packet.payload.put%s(%s[i]); - } - ''' % (f.name, mavfmt(f, True),f.name) - f.return_type = 'uint16_t' - f.get_arg = ', %s *%s' % (f.type, f.name) - if f.type == 'char': - f.c_test_value = '"%s"' % f.test_value - f.getText = ''' - /** - * Sets the buffer of this message with a string, adds the necessary padding - */ - public void set%s(String str) { - int len = Math.min(str.length(), %d); - for (int i=0; i> 8) ^ (tmp << 8) ^ (tmp << 3) ^ (tmp >> 4); - crc = crc & 0xffff; - }); - return crc; - -} - -mavlink.WIRE_PROTOCOL_VERSION = "${WIRE_PROTOCOL_VERSION}"; - -mavlink.MAVLINK_TYPE_CHAR = 0 -mavlink.MAVLINK_TYPE_UINT8_T = 1 -mavlink.MAVLINK_TYPE_INT8_T = 2 -mavlink.MAVLINK_TYPE_UINT16_T = 3 -mavlink.MAVLINK_TYPE_INT16_T = 4 -mavlink.MAVLINK_TYPE_UINT32_T = 5 -mavlink.MAVLINK_TYPE_INT32_T = 6 -mavlink.MAVLINK_TYPE_UINT64_T = 7 -mavlink.MAVLINK_TYPE_INT64_T = 8 -mavlink.MAVLINK_TYPE_FLOAT = 9 -mavlink.MAVLINK_TYPE_DOUBLE = 10 - -// Mavlink headers incorporate sequence, source system (platform) and source component. -mavlink.header = function(msgId, mlen, seq, srcSystem, srcComponent) { - - this.mlen = ( typeof mlen === 'undefined' ) ? 0 : mlen; - this.seq = ( typeof seq === 'undefined' ) ? 0 : seq; - this.srcSystem = ( typeof srcSystem === 'undefined' ) ? 0 : srcSystem; - this.srcComponent = ( typeof srcComponent === 'undefined' ) ? 0 : srcComponent; - this.msgId = msgId - -} - -mavlink.header.prototype.pack = function() { - return jspack.Pack('BBBBBB', [${PROTOCOL_MARKER}, this.mlen, this.seq, this.srcSystem, this.srcComponent, this.msgId]); -} - -// Base class declaration: mavlink.message will be the parent class for each -// concrete implementation in mavlink.messages. -mavlink.message = function() {}; - -// Convenience setter to facilitate turning the unpacked array of data into member properties -mavlink.message.prototype.set = function(args) { - _.each(this.fieldnames, function(e, i) { - this[e] = args[i]; - }, this); -}; - -// This pack function builds the header and produces a complete MAVLink message, -// including header and message CRC. -mavlink.message.prototype.pack = function(mav, crc_extra, payload) { - - this.payload = payload; - this.header = new mavlink.header(this.id, payload.length, mav.seq, mav.srcSystem, mav.srcComponent); - this.msgbuf = this.header.pack().concat(payload); - var crc = mavlink.x25Crc(this.msgbuf.slice(1)); - - // For now, assume always using crc_extra = True. TODO: check/fix this. - crc = mavlink.x25Crc([crc_extra], crc); - this.msgbuf = this.msgbuf.concat(jspack.Pack('= 1 && this.buf[0] != 254 ) { - - // Strip the offending initial byte and throw an error. - var badPrefix = this.buf[0]; - this.bufInError = this.buf.slice(0,1); - this.buf = this.buf.slice(1); - this.expected_length = 6; - - // TODO: enable subsequent prefix error suppression if robust_parsing is implemented - //if(!this.have_prefix_error) { - // this.have_prefix_error = true; - throw new Error("Bad prefix ("+badPrefix+")"); - //} - - } - //else if( this.buf.length >= 1 && this.buf[0] == 254 ) { - // this.have_prefix_error = false; - //} - -} - -// Determine the length. Leaves buffer untouched. -MAVLink.prototype.parseLength = function() { - - if( this.buf.length >= 2 ) { - var unpacked = jspack.Unpack('BB', this.buf.slice(0, 2)); - this.expected_length = unpacked[1] + 8; // length of message + header + CRC - } - -} - -// input some data bytes, possibly returning a new message -MAVLink.prototype.parseChar = function(c) { - - var m = null; - - try { - - this.pushBuffer(c); - this.parsePrefix(); - this.parseLength(); - m = this.parsePayload(); - - } catch(e) { - - this.log('error', e.message); - this.total_receive_errors += 1; - m = new mavlink.messages.bad_data(this.bufInError, e.message); - this.bufInError = new Buffer(0); - - } - - if(null != m) { - this.emit(m.name, m); - this.emit('message', m); - } - - return m; - -} - -MAVLink.prototype.parsePayload = function() { - - var m = null; - - // If we have enough bytes to try and read it, read it. - if( this.expected_length >= 8 && this.buf.length >= this.expected_length ) { - - // Slice off the expected packet length, reset expectation to be to find a header. - var mbuf = this.buf.slice(0, this.expected_length); - // TODO: slicing off the buffer should depend on the error produced by the decode() function - // - if a message we find a well formed message, cut-off the expected_length - // - if the message is not well formed (correct prefix by accident), cut-off 1 char only - this.buf = this.buf.slice(this.expected_length); - this.expected_length = 6; - - // w.info("Attempting to parse packet, message candidate buffer is ["+mbuf.toByteArray()+"]"); - - try { - m = this.decode(mbuf); - this.total_packets_received += 1; - } - catch(e) { - // Set buffer in question and re-throw to generic error handling - this.bufInError = mbuf; - throw e; - } - } - - return m; - -} - -// input some data bytes, possibly returning an array of new messages -MAVLink.prototype.parseBuffer = function(s) { - - // Get a message, if one is available in the stream. - var m = this.parseChar(s); - - // No messages available, bail. - if ( null === m ) { - return null; - } - - // While more valid messages can be read from the existing buffer, add - // them to the array of new messages and return them. - var ret = [m]; - while(true) { - m = this.parseChar(); - if ( null === m ) { - // No more messages left. - return ret; - } - ret.push(m); - } - return ret; - -} - -/* decode a buffer as a MAVLink message */ -MAVLink.prototype.decode = function(msgbuf) { - - var magic, mlen, seq, srcSystem, srcComponent, unpacked, msgId; - - // decode the header - try { - unpacked = jspack.Unpack('cBBBBB', msgbuf.slice(0, 6)); - magic = unpacked[0]; - mlen = unpacked[1]; - seq = unpacked[2]; - srcSystem = unpacked[3]; - srcComponent = unpacked[4]; - msgId = unpacked[5]; - } - catch(e) { - throw new Error('Unable to unpack MAVLink header: ' + e.message); - } - - if (magic.charCodeAt(0) != 254) { - throw new Error("Invalid MAVLink prefix ("+magic.charCodeAt(0)+")"); - } - - if( mlen != msgbuf.length - 8 ) { - throw new Error("Invalid MAVLink message length. Got " + (msgbuf.length - 8) + " expected " + mlen + ", msgId=" + msgId); - } - - if( false === _.has(mavlink.map, msgId) ) { - throw new Error("Unknown MAVLink message ID (" + msgId + ")"); - } - - // decode the payload - // refs: (fmt, type, order_map, crc_extra) = mavlink.map[msgId] - var decoder = mavlink.map[msgId]; - - // decode the checksum - try { - var receivedChecksum = jspack.Unpack(' - -/*! - Method called on the delegate when a full message has been received. Note that this may be called multiple times when parseData: is called, if the data passed to parseData: contains multiple messages. - - @param mavlink The MVMavlink object calling this method - @param message The id class containing the parsed message - */ -- (void)mavlink:(MVMavlink *)mavlink didGetMessage:(id)message; - -/*! - Method called on the delegate when data should be sent. - - @param mavlink The MVMavlink object calling this method - @param data NSData object containing the bytes to be sent - */ -- (BOOL)mavlink:(MVMavlink *)mavlink shouldWriteData:(NSData *)data; - -@end - -/*! - Class for parsing and sending instances of id - - @discussion MVMavlink receives a stream of bytes via the parseData: method and calls the delegate method mavlink:didGetMessage: each time a message is fully parsed. Users of MVMavlink can call parseData: anytime they get new data, even if that data does not contain a complete message. - */ -@interface MVMavlink : NSObject -@property (weak, nonatomic) id delegate; - -/*! - Parse byte data received from a MAVLink byte stream. - - @param data NSData containing the received bytes - */ -- (void)parseData:(NSData *)data; - -/*! - Compile MVMessage object into a bytes and pass to the delegate for sending. - - @param message Object conforming to the MVMessage protocol that represents the data to be sent - @return YES if message sending was successful - */ -- (BOOL)sendMessage:(id)message; - -@end -''', xml) - f.close() - f = open(os.path.join(directory, "MVMavlink.m"), mode='w') - t.write(f,''' -// -// MVMavlink.m -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -#import "MVMavlink.h" - -@implementation MVMavlink - -- (void)parseData:(NSData *)data { - mavlink_message_t msg; - mavlink_status_t status; - char *bytes = (char *)[data bytes]; - - for (NSInteger i = 0; i < [data length]; ++i) { - if (mavlink_parse_char(MAVLINK_COMM_0, bytes[i], &msg, &status)) { - // Packet received - id message = [MVMessage messageWithCMessage:msg]; - [_delegate mavlink:self didGetMessage:message]; - } - } -} - -- (BOOL)sendMessage:(id)message { - return [_delegate mavlink:self shouldWriteData:[message data]]; -} - -@end -''', xml) - f.close() - -def generate_base_message(directory, xml): - '''Generate base MVMessage header and implementation''' - f = open(os.path.join(directory, 'MVMessage.h'), mode='w') - t.write(f, ''' -// -// MVMessage.h -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -#import "mavlink.h" - -@protocol MVMessage -- (id)initWithCMessage:(mavlink_message_t)message; -- (NSData *)data; -@property (readonly, nonatomic) mavlink_message_t message; -@end - -@interface MVMessage : NSObject { - mavlink_message_t _message; -} - -/*! - Create an MVMessage subclass from a mavlink_message_t. - - @param message Struct containing the details of the message - @result MVMessage or subclass representing the message - */ -+ (id)messageWithCMessage:(mavlink_message_t)message; - -//! System ID of the sender of the message. -- (uint8_t)systemId; - -//! Component ID of the sender of the message. -- (uint8_t)componentId; - -//! Message ID of this message. -- (uint8_t)messageId; - -@end -''', xml) - f.close() - f = open(os.path.join(directory, 'MVMessage.m'), mode='w') - t.write(f, ''' -// -// MVMessage.m -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -#import "MVMessage.h" -${{message_definition_files:#import "MV${name_camel_case}Messages.h" -}} - -@implementation MVMessage - -@synthesize message=_message; - -+ (id)messageWithCMessage:(mavlink_message_t)message { - static NSDictionary *messageIdToClass = nil; - if (!messageIdToClass) { - messageIdToClass = @{ -${{message: @${id} : [MVMessage${name_camel_case} class], -}} - }; - } - - Class messageClass = messageIdToClass[@(message.msgid)]; - // Store unknown messages to MVMessage - if (!messageClass) { - messageClass = [MVMessage class]; - } - - return [[messageClass alloc] initWithCMessage:message]; -} - -- (id)initWithCMessage:(mavlink_message_t)message { - if ((self = [super init])) { - self->_message = message; - } - return self; -} - -- (NSData *)data { - uint8_t buffer[MAVLINK_MAX_PACKET_LEN]; - - NSInteger length = mavlink_msg_to_send_buffer(buffer, &self->_message); - - return [NSData dataWithBytes:buffer length:length]; -} - -- (uint8_t)systemId { - return self->_message.sysid; -} - -- (uint8_t)componentId { - return self->_message.compid; -} - -- (uint8_t)messageId { - return self->_message.msgid; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"%@, systemId=%d, componentId=%d", [self class], self.systemId, self.componentId]; -} - -@end -''', xml) - f.close() - -def generate_message_definitions_h(directory, xml): - '''generate headerfile containing includes for all messages''' - f = open(os.path.join(directory, "MV" + camel_case_from_underscores(xml.basename) + "Messages.h"), mode='w') - t.write(f, ''' -// -// MV${basename_camel_case}Messages.h -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -${{message:#import "MVMessage${name_camel_case}.h" -}} -''', xml) - f.close() - -def generate_message(directory, m): - '''generate per-message header and implementation file''' - f = open(os.path.join(directory, 'MVMessage%s.h' % m.name_camel_case), mode='w') - t.write(f, ''' -// -// MVMessage${name_camel_case}.h -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -#import "MVMessage.h" - -/*! - Class that represents a ${name} Mavlink message. - - @discussion ${description} - */ -@interface MVMessage${name_camel_case} : MVMessage - -- (id)initWithSystemId:(uint8_t)systemId componentId:(uint8_t)componentId${{arg_fields: ${name_lower_camel_case}:(${arg_type}${array_prefix})${name_lower_camel_case}}}; - -${{fields://! ${description} -- (${return_type})${name_lower_camel_case}${get_arg_objc}; - -}} -@end -''', m) - f.close() - f = open(os.path.join(directory, 'MVMessage%s.m' % m.name_camel_case), mode='w') - t.write(f, ''' -// -// MVMessage${name_camel_case}.m -// MAVLink communications protocol built from ${basename}.xml -// -// Created by mavgen_objc.py -// http://qgroundcontrol.org/mavlink -// - -#import "MVMessage${name_camel_case}.h" - -@implementation MVMessage${name_camel_case} - -- (id)initWithSystemId:(uint8_t)systemId componentId:(uint8_t)componentId${{arg_fields: ${name_lower_camel_case}:(${arg_type}${array_prefix})${name_lower_camel_case}}} { - if ((self = [super init])) { - mavlink_msg_${name_lower}_pack(systemId, componentId, &(self->_message)${{arg_fields:, ${name_lower_camel_case}}}); - } - return self; -} - -${{fields:- (${return_type})${name_lower_camel_case}${get_arg_objc} { - ${return_method_implementation} -} - -}} -- (NSString *)description { - return [NSString stringWithFormat:@"%@${{fields:, ${name_lower_camel_case}=${print_format}}}", [super description]${{fields:, ${get_message}}}]; -} - -@end -''', m) - f.close() - -def camel_case_from_underscores(string): - """generate a CamelCase string from an underscore_string.""" - components = string.split('_') - string = '' - for component in components: - string += component[0].upper() + component[1:] - return string - -def lower_camel_case_from_underscores(string): - """generate a lower-cased camelCase string from an underscore_string. - For example: my_variable_name -> myVariableName""" - components = string.split('_') - string = components[0] - for component in components[1:]: - string += component[0].upper() + component[1:] - return string - -def generate_shared(basename, xml_list): - # Create a dictionary to hold all the values we want to use in the templates - template_dict = {} - template_dict['parse_time'] = xml_list[0].parse_time - template_dict['message'] = [] - template_dict['message_definition_files'] = [] - - print("Generating Objective-C implementation in directory %s" % basename) - mavparse.mkdir_p(basename) - - for xml in xml_list: - template_dict['message'].extend(xml.message) - basename_camel_case = camel_case_from_underscores(xml.basename) - template_dict['message_definition_files'].append({'name_camel_case': basename_camel_case}) - if not template_dict.get('basename', None): - template_dict['basename'] = xml.basename - else: - template_dict['basename'] = template_dict['basename'] + ', ' + xml.basename - - # Sort messages by ID - template_dict['message'] = sorted(template_dict['message'], key = lambda message : message.id) - - # Add name_camel_case to each message object - for message in template_dict['message']: - message.name_camel_case = camel_case_from_underscores(message.name_lower) - - generate_mavlink(basename, template_dict) - generate_base_message(basename, template_dict) - -def generate_message_definitions(basename, xml): - '''generate files for one XML file''' - - directory = os.path.join(basename, xml.basename) - - print("Generating Objective-C implementation in directory %s" % directory) - mavparse.mkdir_p(directory) - - xml.basename_camel_case = camel_case_from_underscores(xml.basename) - - # Add some extra field attributes for convenience - for m in xml.message: - m.basename = xml.basename - m.parse_time = xml.parse_time - m.name_camel_case = camel_case_from_underscores(m.name_lower) - for f in m.fields: - f.name_lower_camel_case = lower_camel_case_from_underscores(f.name); - f.get_message = "[self %s]" % f.name_lower_camel_case - f.return_method_implementation = '' - f.array_prefix = '' - f.array_return_arg = '' - f.get_arg = '' - f.get_arg_objc = '' - if f.enum: - f.return_type = f.enum - f.arg_type = f.enum - else: - f.return_type = f.type - f.arg_type = f.type - if f.print_format is None: - if f.array_length != 0: - f.print_format = "%@" - elif f.type.startswith('uint64_t'): - f.print_format = "%lld" - elif f.type.startswith('uint') or f.type.startswith('int'): - f.print_format = "%d" - elif f.type.startswith('float'): - f.print_format = "%f" - elif f.type.startswith('char'): - f.print_format = "%c" - else: - print("print_format unsupported for type %s" % f.type) - if f.array_length != 0: - f.get_message = '@"[array of %s[%d]]"' % (f.type, f.array_length) - f.array_prefix = ' *' - f.array_return_arg = '%s, %u, ' % (f.name, f.array_length) - f.return_type = 'uint16_t' - f.get_arg = ', %s' % (f.name) - f.get_arg_objc = ':(%s *)%s' % (f.type, f.name) - if f.type == 'char': - # Special handling for strings (assumes all char arrays are strings) - f.return_type = 'NSString *' - f.get_arg_objc = '' - f.get_message = "[self %s]" % f.name_lower_camel_case - f.return_method_implementation = \ -"""char string[%(array_length)d]; - mavlink_msg_%(message_name_lower)s_get_%(name)s(&(self->_message), (char *)&string); - return [[NSString alloc] initWithBytes:string length:%(array_length)d encoding:NSASCIIStringEncoding];""" % {'array_length': f.array_length, 'message_name_lower': m.name_lower, 'name': f.name} - - if not f.return_method_implementation: - f.return_method_implementation = \ -"""return mavlink_msg_%(message_name_lower)s_get_%(name)s(&(self->_message)%(get_arg)s);""" % {'message_name_lower': m.name_lower, 'name': f.name, 'get_arg': f.get_arg} - - for m in xml.message: - m.arg_fields = [] - for f in m.fields: - if not f.omit_arg: - m.arg_fields.append(f) - - generate_message_definitions_h(directory, xml) - for m in xml.message: - generate_message(directory, m) - - -def generate(basename, xml_list): - '''generate complete MAVLink Objective-C implemenation''' - - generate_shared(basename, xml_list) - for xml in xml_list: - generate_message_definitions(basename, xml) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_python.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_python.py deleted file mode 100644 index 46dc5ecc9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_python.py +++ /dev/null @@ -1,845 +0,0 @@ -#!/usr/bin/env python -''' -parse a MAVLink protocol XML file and generate a python implementation - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import sys, textwrap, os -from . import mavparse, mavtemplate - -t = mavtemplate.MAVTemplate() - -def generate_preamble(outf, msgs, basename, args, xml): - print("Generating preamble") - t.write(outf, """ -''' -MAVLink protocol implementation (auto-generated by mavgen.py) - -Generated from: ${FILELIST} - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import struct, array, time, json, os, sys, platform - -from ...generator.mavcrc import x25crc -import hashlib - -WIRE_PROTOCOL_VERSION = '${WIRE_PROTOCOL_VERSION}' -DIALECT = '${DIALECT}' - -PROTOCOL_MARKER_V1 = 0xFE -PROTOCOL_MARKER_V2 = 0xFD -HEADER_LEN_V1 = 6 -HEADER_LEN_V2 = 10 - -MAVLINK_SIGNATURE_BLOCK_LEN = 13 - -MAVLINK_IFLAG_SIGNED = 0x01 - -native_supported = platform.system() != 'Windows' # Not yet supported on other dialects -native_force = 'MAVNATIVE_FORCE' in os.environ # Will force use of native code regardless of what client app wants -native_testing = 'MAVNATIVE_TESTING' in os.environ # Will force both native and legacy code to be used and their results compared - -if native_supported and float(WIRE_PROTOCOL_VERSION) <= 1: - try: - import mavnative - except ImportError: - print('ERROR LOADING MAVNATIVE - falling back to python implementation') - native_supported = False -else: - # mavnative isn't supported for MAVLink2 yet - native_supported = False - -# some base types from mavlink_types.h -MAVLINK_TYPE_CHAR = 0 -MAVLINK_TYPE_UINT8_T = 1 -MAVLINK_TYPE_INT8_T = 2 -MAVLINK_TYPE_UINT16_T = 3 -MAVLINK_TYPE_INT16_T = 4 -MAVLINK_TYPE_UINT32_T = 5 -MAVLINK_TYPE_INT32_T = 6 -MAVLINK_TYPE_UINT64_T = 7 -MAVLINK_TYPE_INT64_T = 8 -MAVLINK_TYPE_FLOAT = 9 -MAVLINK_TYPE_DOUBLE = 10 - - -class MAVLink_header(object): - '''MAVLink message header''' - def __init__(self, msgId, incompat_flags=0, compat_flags=0, mlen=0, seq=0, srcSystem=0, srcComponent=0): - self.mlen = mlen - self.seq = seq - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.msgId = msgId - self.incompat_flags = incompat_flags - self.compat_flags = compat_flags - - def pack(self, force_mavlink1=False): - if WIRE_PROTOCOL_VERSION == '2.0' and not force_mavlink1: - return struct.pack('>16) - return struct.pack(' 1 and payload[plen-1] == chr(0): - plen -= 1 - self._payload = payload[:plen] - incompat_flags = 0 - if mav.signing.sign_outgoing: - incompat_flags |= MAVLINK_IFLAG_SIGNED - self._header = MAVLink_header(self._header.msgId, - incompat_flags=incompat_flags, compat_flags=0, - mlen=len(self._payload), seq=mav.seq, - srcSystem=mav.srcSystem, srcComponent=mav.srcComponent) - self._msgbuf = self._header.pack(force_mavlink1=force_mavlink1) + self._payload - crc = x25crc(self._msgbuf[1:]) - if ${crc_extra}: # using CRC extra - crc.accumulate_str(struct.pack('B', crc_extra)) - self._crc = crc.crc - self._msgbuf += struct.pack(' 1): - for i in range(field.array_length): - outf.write(", self.{0:s}[{1:d}]".format(field.name,i)) - else: - outf.write(", self.{0:s}".format(field.name)) - outf.write("), force_mavlink1=force_mavlink1)\n") - - -def native_mavfmt(field): - '''work out the struct format for a type (in a form expected by mavnative)''' - map = { - 'float' : 'f', - 'double' : 'd', - 'char' : 'c', - 'int8_t' : 'b', - 'uint8_t' : 'B', - 'uint8_t_mavlink_version' : 'v', - 'int16_t' : 'h', - 'uint16_t' : 'H', - 'int32_t' : 'i', - 'uint32_t' : 'I', - 'int64_t' : 'q', - 'uint64_t' : 'Q', - } - return map[field.type] - -def mavfmt(field): - '''work out the struct format for a type''' - map = { - 'float' : 'f', - 'double' : 'd', - 'char' : 'c', - 'int8_t' : 'b', - 'uint8_t' : 'B', - 'uint8_t_mavlink_version' : 'B', - 'int16_t' : 'h', - 'uint16_t' : 'H', - 'int32_t' : 'i', - 'uint32_t' : 'I', - 'int64_t' : 'q', - 'uint64_t' : 'Q', - } - - if field.array_length: - if field.type == 'char': - return str(field.array_length)+'s' - return str(field.array_length)+map[field.type] - return map[field.type] - -def generate_mavlink_class(outf, msgs, xml): - print("Generating MAVLink class") - - outf.write("\n\nmavlink_map = {\n"); - for m in msgs: - outf.write(" MAVLINK_MSG_ID_%s : MAVLink_%s_message,\n" % ( - m.name.upper(), m.name.lower())) - outf.write("}\n\n") - - t.write(outf, """ -class MAVError(Exception): - '''MAVLink error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - self.message = msg - -class MAVString(str): - '''NUL terminated string''' - def __init__(self, s): - str.__init__(self) - def __str__(self): - i = self.find(chr(0)) - if i == -1: - return self[:] - return self[0:i] - -class MAVLink_bad_data(MAVLink_message): - ''' - a piece of bad data in a mavlink stream - ''' - def __init__(self, data, reason): - MAVLink_message.__init__(self, MAVLINK_MSG_ID_BAD_DATA, 'BAD_DATA') - self._fieldnames = ['data', 'reason'] - self.data = data - self.reason = reason - self._msgbuf = data - - def __str__(self): - '''Override the __str__ function from MAVLink_messages because non-printable characters are common in to be the reason for this message to exist.''' - return '%s {%s, data:%s}' % (self._type, self.reason, [('%x' % ord(i) if isinstance(i, str) else '%x' % i) for i in self.data]) - -class MAVLinkSigning(object): - '''MAVLink signing state class''' - def __init__(self): - self.secret_key = None - self.timestamp = 0 - self.link_id = 0 - self.sign_outgoing = False - self.allow_unsigned_callback = None - self.stream_timestamps = {} - self.badsig_count = 0 - self.goodsig_count = 0 - self.unsigned_count = 0 - self.reject_count = 0 - -class MAVLink(object): - '''MAVLink protocol handling class''' - def __init__(self, file, srcSystem=0, srcComponent=0, use_native=False): - self.seq = 0 - self.file = file - self.srcSystem = srcSystem - self.srcComponent = srcComponent - self.callback = None - self.callback_args = None - self.callback_kwargs = None - self.send_callback = None - self.send_callback_args = None - self.send_callback_kwargs = None - self.buf = bytearray() - self.buf_index = 0 - self.expected_length = HEADER_LEN_V1+2 - self.have_prefix_error = False - self.robust_parsing = False - self.protocol_marker = ${protocol_marker} - self.little_endian = ${little_endian} - self.crc_extra = ${crc_extra} - self.sort_fields = ${sort_fields} - self.total_packets_sent = 0 - self.total_bytes_sent = 0 - self.total_packets_received = 0 - self.total_bytes_received = 0 - self.total_receive_errors = 0 - self.startup_time = time.time() - self.signing = MAVLinkSigning() - if native_supported and (use_native or native_testing or native_force): - print("NOTE: mavnative is currently beta-test code") - self.native = mavnative.NativeConnection(MAVLink_message, mavlink_map) - else: - self.native = None - if native_testing: - self.test_buf = bytearray() - - def set_callback(self, callback, *args, **kwargs): - self.callback = callback - self.callback_args = args - self.callback_kwargs = kwargs - - def set_send_callback(self, callback, *args, **kwargs): - self.send_callback = callback - self.send_callback_args = args - self.send_callback_kwargs = kwargs - - def send(self, mavmsg, force_mavlink1=False): - '''send a MAVLink message''' - buf = mavmsg.pack(self, force_mavlink1=force_mavlink1) - self.file.write(buf) - self.seq = (self.seq + 1) % 256 - self.total_packets_sent += 1 - self.total_bytes_sent += len(buf) - if self.send_callback: - self.send_callback(mavmsg, *self.send_callback_args, **self.send_callback_kwargs) - - def buf_len(self): - return len(self.buf) - self.buf_index - - def bytes_needed(self): - '''return number of bytes needed for next parsing stage''' - if self.native: - ret = self.native.expected_length - self.buf_len() - else: - ret = self.expected_length - self.buf_len() - - if ret <= 0: - return 1 - return ret - - def __parse_char_native(self, c): - '''this method exists only to see in profiling results''' - m = self.native.parse_chars(c) - return m - - def __callbacks(self, msg): - '''this method exists only to make profiling results easier to read''' - if self.callback: - self.callback(msg, *self.callback_args, **self.callback_kwargs) - - def parse_char(self, c): - '''input some data bytes, possibly returning a new message''' - self.buf.extend(c) - - self.total_bytes_received += len(c) - - if self.native: - if native_testing: - self.test_buf.extend(c) - m = self.__parse_char_native(self.test_buf) - m2 = self.__parse_char_legacy() - if m2 != m: - print("Native: %s\\nLegacy: %s\\n" % (m, m2)) - raise Exception('Native vs. Legacy mismatch') - else: - m = self.__parse_char_native(self.buf) - else: - m = self.__parse_char_legacy() - - if m != None: - self.total_packets_received += 1 - self.__callbacks(m) - else: - # XXX The idea here is if we've read something and there's nothing left in - # the buffer, reset it to 0 which frees the memory - if self.buf_len() == 0 and self.buf_index != 0: - self.buf = bytearray() - self.buf_index = 0 - - return m - - def __parse_char_legacy(self): - '''input some data bytes, possibly returning a new message (uses no native code)''' - header_len = HEADER_LEN_V1 - if self.buf_len() >= 1 and self.buf[self.buf_index] == PROTOCOL_MARKER_V2: - header_len = HEADER_LEN_V2 - - if self.buf_len() >= 1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V1 and self.buf[self.buf_index] != PROTOCOL_MARKER_V2: - magic = self.buf[self.buf_index] - self.buf_index += 1 - if self.robust_parsing: - m = MAVLink_bad_data(chr(magic), 'Bad prefix') - self.expected_length = header_len+2 - self.total_receive_errors += 1 - return m - if self.have_prefix_error: - return None - self.have_prefix_error = True - self.total_receive_errors += 1 - raise MAVError("invalid MAVLink prefix '%s'" % magic) - self.have_prefix_error = False - if self.buf_len() >= 3: - sbuf = self.buf[self.buf_index:3+self.buf_index] - if sys.version_info[0] < 3: - sbuf = str(sbuf) - (magic, self.expected_length, incompat_flags) = struct.unpack('BBB', sbuf) - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & MAVLINK_IFLAG_SIGNED): - self.expected_length += MAVLINK_SIGNATURE_BLOCK_LEN - self.expected_length += header_len + 2 - if self.expected_length >= (header_len+2) and self.buf_len() >= self.expected_length: - mbuf = array.array('B', self.buf[self.buf_index:self.buf_index+self.expected_length]) - self.buf_index += self.expected_length - self.expected_length = header_len+2 - if self.robust_parsing: - try: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - except MAVError as reason: - m = MAVLink_bad_data(mbuf, reason.message) - self.total_receive_errors += 1 - else: - if magic == PROTOCOL_MARKER_V2 and (incompat_flags & ~MAVLINK_IFLAG_SIGNED) != 0: - raise MAVError('invalid incompat_flags 0x%x 0x%x %u' % (incompat_flags, magic, self.expected_length)) - m = self.decode(mbuf) - return m - return None - - def parse_buffer(self, s): - '''input some data bytes, possibly returning a list of new messages''' - m = self.parse_char(s) - if m is None: - return None - ret = [m] - while True: - m = self.parse_char("") - if m is None: - return ret - ret.append(m) - return ret - - def check_signature(self, msgbuf, srcSystem, srcComponent): - '''check signature on incoming message''' - if isinstance(msgbuf, array.array): - msgbuf = msgbuf.tostring() - timestamp_buf = msgbuf[-12:-6] - link_id = msgbuf[-13] - (tlow, thigh) = struct.unpack(' String = { (let name, var value) in - value = value is String ? "\\"\(value)\\"" : value - return "\(name): \(value)" - } - let fieldsDescription = ", ".join(allFields.map(describeField)) - return "\(self.dynamicType)(\(fieldsDescription))" - } - - public var debugDescription: String { - let describeFieldVerbose: ((String, Any)) -> String = { (let name, var value) in - value = value is String ? "\\"\(value)\\"" : value - let (_, _, _, description) = Self.fieldsInfo.filter { $0.0 == name }.first! - return "\(name) = \(value) : \(description)" - } - let fieldsDescription = "\\n\\t".join(allFields.map(describeFieldVerbose)) - return "\(Self.typeName): \(Self.typeDescription)\\nFields:\\n\\t\(fieldsDescription)" - } - - public var allFields: [(String, Any)] { - var result: [(String, Any)] = [] - let mirror = reflect(self) - for i in 0.. 0: - if field.return_type == "String": - # handle strings - field.initial_value = "data." + swift_types[field.type][2] % (field.wire_offset, field.array_length) - else: - # other array types - field.return_type = "[%s]" % field.return_type - field.initial_value = "try data.mavArray(offset: %u, count: %u)" % (field.wire_offset, field.array_length) - else: - # simple type field - field.initial_value = "try data." + swift_types[field.type][2] % field.wire_offset - - field.formatted_description = "" - if field.description: - field.description = " ".join(field.description.split()) - field.formatted_description = "\n\t/// " + field.description + "\n" - - fields_info = map(lambda field: '("%s", %u, "%s", "%s")' % (field.swift_name, field.wire_offset, field.return_type, field.description.replace('"','\\"')), msg.fields) - msg.fields_info = ", ".join(fields_info) - - msgs.sort(key = lambda msg : msg.id) - -def generate(basename, xml_list): - """Generate complete MAVLink Swift implemenation""" - - if os.path.isdir(basename): - filename = os.path.join(basename, 'MAVLink.swift') - else: - filename = basename - - msgs = [] - enums = [] - filelist = [] - for xml in xml_list: - msgs.extend(xml.message) - enums.extend(xml.enum) - filelist.append(os.path.basename(xml.filename)) - - outf = open(filename, "w") - generate_header(outf, filelist, xml_list) - generate_enums_info(enums, msgs) - generate_enums(outf, enums, msgs) - generate_messages_info(msgs) - generate_messages(outf, msgs) - append_static_code('Parser.swift', outf) - generate_message_mappings_array(outf, msgs) - generate_message_lengths_array(outf, msgs) - generate_message_crc_extra_array(outf, msgs) - outf.close() \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_wlua.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_wlua.py deleted file mode 100644 index a27c8fd43..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavgen_wlua.py +++ /dev/null @@ -1,348 +0,0 @@ -#!/usr/bin/env python -''' -parse a MAVLink protocol XML file and generate a Wireshark LUA dissector - -Copyright Holger Steinhaus 2012 -Released under GNU GPL version 3 or later - -Instructions for use: -1. python -m pymavlink.generator.mavgen --lang=wlua mymavlink.xml -o ~/.wireshark/plugins/mymavlink.lua -2. convert binary stream int .pcap file format (see ../examples/mav2pcap.py) -3. open the pcap file in Wireshark -''' - -import sys, textwrap, os, re -from . import mavparse, mavtemplate - -t = mavtemplate.MAVTemplate() - - -def lua_type(mavlink_type): - # qnd typename conversion - if (mavlink_type=='char'): - lua_t = 'uint8' - else: - lua_t = mavlink_type.replace('_t', '') - return lua_t - -def type_size(mavlink_type): - # infer size of mavlink types - re_int = re.compile('^(u?)int(8|16|32|64)_t$') - int_parts = re_int.findall(mavlink_type) - if len(int_parts): - return int(int_parts[0][1])/8 - elif mavlink_type == 'float': - return 4 - elif mavlink_type == 'double': - return 8 - elif mavlink_type == 'char': - return 1 - else: - raise Exception('unsupported MAVLink type - please fix me') - - -def mavfmt(field): - '''work out the struct format for a type''' - map = { - 'float' : 'f', - 'double' : 'd', - 'char' : 'c', - 'int8_t' : 'b', - 'uint8_t' : 'B', - 'uint8_t_mavlink_version' : 'B', - 'int16_t' : 'h', - 'uint16_t' : 'H', - 'int32_t' : 'i', - 'uint32_t' : 'I', - 'int64_t' : 'q', - 'uint64_t' : 'Q', - } - - if field.array_length: - if field.type in ['char', 'int8_t', 'uint8_t']: - return str(field.array_length)+'s' - return str(field.array_length)+map[field.type] - return map[field.type] - - -def generate_preamble(outf): - print("Generating preamble") - t.write(outf, -""" --- Wireshark dissector for the MAVLink protocol (please see http://qgroundcontrol.org/mavlink/start for details) - -mavlink_proto = Proto("mavlink_proto", "MAVLink protocol") -f = mavlink_proto.fields - -payload_fns = {} - -""" ) - - -def generate_body_fields(outf): - t.write(outf, -""" -f.magic = ProtoField.uint8("mavlink_proto.magic", "Magic value / version", base.HEX) -f.length = ProtoField.uint8("mavlink_proto.length", "Payload length") -f.sequence = ProtoField.uint8("mavlink_proto.sequence", "Packet sequence") -f.sysid = ProtoField.uint8("mavlink_proto.sysid", "System id", base.HEX) -f.compid = ProtoField.uint8("mavlink_proto.compid", "Component id", base.HEX) -f.msgid = ProtoField.uint8("mavlink_proto.msgid", "Message id", base.HEX) -f.crc = ProtoField.uint16("mavlink_proto.crc", "Message CRC", base.HEX) -f.payload = ProtoField.uint8("mavlink_proto.crc", "Payload", base.DEC, messageName) -f.rawheader = ProtoField.bytes("mavlink_proto.rawheader", "Unparsable header fragment") -f.rawpayload = ProtoField.bytes("mavlink_proto.rawpayload", "Unparsable payload") - -""") - - -def generate_msg_table(outf, msgs): - t.write(outf, """ -messageName = { -""") - for msg in msgs: - assert isinstance(msg, mavparse.MAVType) - t.write(outf, """ - [${msgid}] = '${msgname}', -""", {'msgid':msg.id, 'msgname':msg.name}) - - t.write(outf, """ -} - -""") - - -def generate_msg_fields(outf, msg): - assert isinstance(msg, mavparse.MAVType) - for f in msg.fields: - assert isinstance(f, mavparse.MAVField) - mtype = f.type - ltype = lua_type(mtype) - count = f.array_length if f.array_length>0 else 1 - - # string is no array, but string of chars - if mtype == 'char' and count > 1: - count = 1 - ltype = 'string' - - for i in range(0,count): - if count>1: - array_text = '[' + str(i) + ']' - index_text = '_' + str(i) - else: - array_text = '' - index_text = '' - - t.write(outf, -""" -f.${fmsg}_${fname}${findex} = ProtoField.${ftype}("mavlink_proto.${fmsg}_${fname}${findex}", "${fname}${farray} (${ftype})") -""", {'fmsg':msg.name, 'ftype':ltype, 'fname':f.name, 'findex':index_text, 'farray':array_text}) - - t.write(outf, '\n\n') - -def generate_field_dissector(outf, msg, field): - assert isinstance(field, mavparse.MAVField) - - mtype = field.type - size = type_size(mtype) - ltype = lua_type(mtype) - count = field.array_length if field.array_length>0 else 1 - - # string is no array but string of chars - if mtype == 'char': - size = count - count = 1 - - # handle arrays, but not strings - - for i in range(0,count): - if count>1: - index_text = '_' + str(i) - else: - index_text = '' - t.write(outf, -""" - tree:add_le(f.${fmsg}_${fname}${findex}, buffer(offset, ${fbytes})) - offset = offset + ${fbytes} - -""", {'fname':field.name, 'ftype':mtype, 'fmsg': msg.name, 'fbytes':size, 'findex':index_text}) - - -def generate_payload_dissector(outf, msg): - assert isinstance(msg, mavparse.MAVType) - t.write(outf, -""" --- dissect payload of message type ${msgname} -function payload_fns.payload_${msgid}(buffer, tree, msgid, offset) -""", {'msgid':msg.id, 'msgname':msg.name}) - - for f in msg.ordered_fields: - generate_field_dissector(outf, msg, f) - - - t.write(outf, -""" - return offset -end - - -""") - - -def generate_packet_dis(outf): - t.write(outf, -""" --- dissector function -function mavlink_proto.dissector(buffer,pinfo,tree) - local offset = 0 - - local subtree = tree:add (mavlink_proto, buffer(), "MAVLink Protocol ("..buffer:len()..")") - - -- decode protocol version first - local version = buffer(offset,1):uint() - local protocolString = "" - - if (version == 0xfe) then - protocolString = "MAVLink 1.0" - elseif (version == 0x55) then - protocolString = "MAVLink 0.9" - else - protocolString = "unknown" - end - - -- some Wireshark decoration - pinfo.cols.protocol = protocolString - - -- HEADER ---------------------------------------- - - local msgid - if (buffer:len() - 2 - offset > 6) then - -- normal header - local header = subtree:add("Header") - header:add(f.magic,version) - offset = offset + 1 - - local length = buffer(offset,1) - header:add(f.length, length) - offset = offset + 1 - - local sequence = buffer(offset,1) - header:add(f.sequence, sequence) - offset = offset + 1 - - local sysid = buffer(offset,1) - header:add(f.sysid, sysid) - offset = offset + 1 - - local compid = buffer(offset,1) - header:add(f.compid, compid) - offset = offset + 1 - - pinfo.cols.src = "System: "..tostring(sysid:uint())..', Component: '..tostring(compid:uint()) - - msgid = buffer(offset,1) - header:add(f.msgid, msgid) - offset = offset + 1 - else - -- handle truncated header - local hsize = buffer:len() - 2 - offset - subtree:add(f.rawheader, buffer(offset, hsize)) - offset = offset + hsize - end - - - -- BODY ---------------------------------------- - - -- dynamically call the type-specific payload dissector - local msgnr = msgid:uint() - local dissect_payload_fn = "payload_"..tostring(msgnr) - local fn = payload_fns[dissect_payload_fn] - - if (fn == nil) then - pinfo.cols.info:append ("Unkown message type ") - subtree:add_expert_info(PI_MALFORMED, PI_ERROR, "Unkown message type") - size = buffer:len() - 2 - offset - subtree:add(f.rawpayload, buffer(offset,size)) - offset = offset + size - else - local payload = subtree:add(f.payload, msgid) - pinfo.cols.dst:set(messageName[msgid:uint()]) - pinfo.cols.info = messageName[msgid:uint()] - offset = fn(buffer, payload, msgid, offset) - end - - -- CRC ---------------------------------------- - local crc = buffer(offset,2) - subtree:add_le(f.crc, crc) - offset = offset + 2 - -end - - -""") - - - -def generate_epilog(outf): - print("Generating epilog") - t.write(outf, -""" --- bind protocol dissector to USER0 linktype - -wtap_encap = DissectorTable.get("wtap_encap") -wtap_encap:add(wtap.USER0, mavlink_proto) - --- bind protocol dissector to port 14550 - -local udp_dissector_table = DissectorTable.get("udp.port") -udp_dissector_table:add(14550, mavlink_proto) -""") - -def generate(basename, xml): - '''generate complete python implemenation''' - if basename.endswith('.lua'): - filename = basename - else: - filename = basename + '.lua' - - msgs = [] - enums = [] - filelist = [] - for x in xml: - msgs.extend(x.message) - enums.extend(x.enum) - filelist.append(os.path.basename(x.filename)) - - for m in msgs: - if xml[0].little_endian: - m.fmtstr = '<' - else: - m.fmtstr = '>' - for f in m.ordered_fields: - m.fmtstr += mavfmt(f) - m.order_map = [ 0 ] * len(m.fieldnames) - for i in range(0, len(m.fieldnames)): - m.order_map[i] = m.ordered_fieldnames.index(m.fieldnames[i]) - - print("Generating %s" % filename) - outf = open(filename, "w") - generate_preamble(outf) - generate_msg_table(outf, msgs) - generate_body_fields(outf) - - for m in msgs: - generate_msg_fields(outf, m) - - for m in msgs: - generate_payload_dissector(outf, m) - - generate_packet_dis(outf) -# generate_enums(outf, enums) -# generate_message_ids(outf, msgs) -# generate_classes(outf, msgs) -# generate_mavlink_class(outf, msgs, xml[0]) -# generate_methods(outf, msgs) - generate_epilog(outf) - outf.close() - print("Generated %s OK" % filename) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavparse.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavparse.py deleted file mode 100644 index e491853c2..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavparse.py +++ /dev/null @@ -1,491 +0,0 @@ -#!/usr/bin/env python -''' -mavlink python parse functions - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import xml.parsers.expat, os, errno, time, sys, operator, struct - -PROTOCOL_0_9 = "0.9" -PROTOCOL_1_0 = "1.0" -PROTOCOL_2_0 = "2.0" - -# message flags -FLAG_HAVE_TARGET_SYSTEM = 1 -FLAG_HAVE_TARGET_COMPONENT = 2 - -class MAVParseError(Exception): - def __init__(self, message, inner_exception=None): - self.message = message - self.inner_exception = inner_exception - self.exception_info = sys.exc_info() - def __str__(self): - return self.message - -class MAVField(object): - def __init__(self, name, type, print_format, xml, description='', enum=''): - self.name = name - self.name_upper = name.upper() - self.description = description - self.array_length = 0 - self.enum = enum - self.omit_arg = False - self.const_value = None - self.print_format = print_format - lengths = { - 'float' : 4, - 'double' : 8, - 'char' : 1, - 'int8_t' : 1, - 'uint8_t' : 1, - 'uint8_t_mavlink_version' : 1, - 'int16_t' : 2, - 'uint16_t' : 2, - 'int32_t' : 4, - 'uint32_t' : 4, - 'int64_t' : 8, - 'uint64_t' : 8, - } - - if type=='uint8_t_mavlink_version': - type = 'uint8_t' - self.omit_arg = True - self.const_value = xml.version - - aidx = type.find("[") - if aidx != -1: - assert type[-1:] == ']' - self.array_length = int(type[aidx+1:-1]) - type = type[0:aidx] - if type == 'array': - type = 'int8_t' - if type in lengths: - self.type_length = lengths[type] - self.type = type - elif (type+"_t") in lengths: - self.type_length = lengths[type+"_t"] - self.type = type+'_t' - else: - raise MAVParseError("unknown type '%s'" % type) - if self.array_length != 0: - self.wire_length = self.array_length * self.type_length - else: - self.wire_length = self.type_length - self.type_upper = self.type.upper() - - def gen_test_value(self, i): - '''generate a testsuite value for a MAVField''' - if self.const_value: - return self.const_value - elif self.type == 'float': - return 17.0 + self.wire_offset*7 + i - elif self.type == 'double': - return 123.0 + self.wire_offset*7 + i - elif self.type == 'char': - return chr(ord('A') + (self.wire_offset + i)%26) - elif self.type in [ 'int8_t', 'uint8_t' ]: - return (5 + self.wire_offset*67 + i) & 0xFF - elif self.type in ['int16_t', 'uint16_t']: - return (17235 + self.wire_offset*52 + i) & 0xFFFF - elif self.type in ['int32_t', 'uint32_t']: - return (963497464 + self.wire_offset*52 + i)&0xFFFFFFFF - elif self.type in ['int64_t', 'uint64_t']: - return 93372036854775807 + self.wire_offset*63 + i - else: - raise MAVError('unknown type %s' % self.type) - - def set_test_value(self): - '''set a testsuite value for a MAVField''' - if self.array_length: - self.test_value = [] - for i in range(self.array_length): - self.test_value.append(self.gen_test_value(i)) - else: - self.test_value = self.gen_test_value(0) - if self.type == 'char' and self.array_length: - v = "" - for c in self.test_value: - v += c - self.test_value = v[:-1] - - -class MAVType(object): - def __init__(self, name, id, linenumber, description=''): - self.name = name - self.name_lower = name.lower() - self.linenumber = linenumber - self.id = int(id) - self.description = description - self.fields = [] - self.fieldnames = [] - self.extensions_start = None - - def base_fields(self): - '''return number of non-extended fields''' - if self.extensions_start is None: - return len(self.fields) - return len(self.fields[:self.extensions_start]) - -class MAVEnumParam(object): - def __init__(self, index, description=''): - self.index = index - self.description = description - -class MAVEnumEntry(object): - def __init__(self, name, value, description='', end_marker=False, autovalue=False, origin_file='', origin_line=0): - self.name = name - self.value = value - self.description = description - self.param = [] - self.end_marker = end_marker - self.autovalue = autovalue # True if value was *not* specified in XML - self.origin_file = origin_file - self.origin_line = origin_line - -class MAVEnum(object): - def __init__(self, name, linenumber, description=''): - self.name = name - self.description = description - self.entry = [] - self.start_value = None - self.highest_value = 0 - self.linenumber = linenumber - -class MAVXML(object): - '''parse a mavlink XML file''' - def __init__(self, filename, wire_protocol_version=PROTOCOL_0_9): - self.filename = filename - self.basename = os.path.basename(filename) - if self.basename.lower().endswith(".xml"): - self.basename = self.basename[:-4] - self.basename_upper = self.basename.upper() - self.message = [] - self.enum = [] - # we use only the day for the parse_time, as otherwise - # it causes a lot of unnecessary cache misses with ccache - self.parse_time = time.strftime("%a %b %d %Y") - self.version = 2 - self.include = [] - self.wire_protocol_version = wire_protocol_version - - # setup the protocol features for the requested protocol version - if wire_protocol_version == PROTOCOL_0_9: - self.protocol_marker = ord('U') - self.sort_fields = False - self.little_endian = False - self.crc_extra = False - self.crc_struct = False - self.command_24bit = False - self.allow_extensions = False - elif wire_protocol_version == PROTOCOL_1_0: - self.protocol_marker = 0xFE - self.sort_fields = True - self.little_endian = True - self.crc_extra = True - self.crc_struct = False - self.command_24bit = False - self.allow_extensions = False - elif wire_protocol_version == PROTOCOL_2_0: - self.protocol_marker = 0xFD - self.sort_fields = True - self.little_endian = True - self.crc_extra = True - self.crc_struct = True - self.command_24bit = True - self.allow_extensions = True - else: - print("Unknown wire protocol version") - print("Available versions are: %s %s" % (PROTOCOL_0_9, PROTOCOL_1_0, PROTOCOL_2_0)) - raise MAVParseError('Unknown MAVLink wire protocol version %s' % wire_protocol_version) - - in_element_list = [] - - def check_attrs(attrs, check, where): - for c in check: - if not c in attrs: - raise MAVParseError('expected missing %s "%s" attribute at %s:%u' % ( - where, c, filename, p.CurrentLineNumber)) - - def start_element(name, attrs): - in_element_list.append(name) - in_element = '.'.join(in_element_list) - #print in_element - if in_element == "mavlink.messages.message": - check_attrs(attrs, ['name', 'id'], 'message') - self.message.append(MAVType(attrs['name'], attrs['id'], p.CurrentLineNumber)) - elif in_element == "mavlink.messages.message.extensions": - self.message[-1].extensions_start = len(self.message[-1].fields) - elif in_element == "mavlink.messages.message.field": - check_attrs(attrs, ['name', 'type'], 'field') - if 'print_format' in attrs: - print_format = attrs['print_format'] - else: - print_format = None - if 'enum' in attrs: - enum = attrs['enum'] - else: - enum = '' - new_field = MAVField(attrs['name'], attrs['type'], print_format, self, enum=enum) - if self.message[-1].extensions_start is None or self.allow_extensions: - self.message[-1].fields.append(new_field) - elif in_element == "mavlink.enums.enum": - check_attrs(attrs, ['name'], 'enum') - self.enum.append(MAVEnum(attrs['name'], p.CurrentLineNumber)) - elif in_element == "mavlink.enums.enum.entry": - check_attrs(attrs, ['name'], 'enum entry') - # determine value and if it was automatically assigned (for possible merging later) - if 'value' in attrs: - value = eval(attrs['value']) - autovalue = False - else: - value = self.enum[-1].highest_value + 1 - autovalue = True - # check lowest value - if (self.enum[-1].start_value == None or value < self.enum[-1].start_value): - self.enum[-1].start_value = value - # check highest value - if (value > self.enum[-1].highest_value): - self.enum[-1].highest_value = value - # append the new entry - self.enum[-1].entry.append(MAVEnumEntry(attrs['name'], value, '', False, autovalue, self.filename, p.CurrentLineNumber)) - elif in_element == "mavlink.enums.enum.entry.param": - check_attrs(attrs, ['index'], 'enum param') - self.enum[-1].entry[-1].param.append(MAVEnumParam(attrs['index'])) - - def end_element(name): - in_element_list.pop() - - def char_data(data): - in_element = '.'.join(in_element_list) - if in_element == "mavlink.messages.message.description": - self.message[-1].description += data - elif in_element == "mavlink.messages.message.field": - if self.message[-1].extensions_start is None or self.allow_extensions: - self.message[-1].fields[-1].description += data - elif in_element == "mavlink.enums.enum.description": - self.enum[-1].description += data - elif in_element == "mavlink.enums.enum.entry.description": - self.enum[-1].entry[-1].description += data - elif in_element == "mavlink.enums.enum.entry.param": - self.enum[-1].entry[-1].param[-1].description += data - elif in_element == "mavlink.version": - self.version = int(data) - elif in_element == "mavlink.include": - self.include.append(data) - - f = open(filename, mode='rb') - p = xml.parsers.expat.ParserCreate() - p.StartElementHandler = start_element - p.EndElementHandler = end_element - p.CharacterDataHandler = char_data - p.ParseFile(f) - f.close() - - self.message_lengths = {} - self.message_min_lengths = {} - self.message_flags = {} - self.message_target_system_ofs = {} - self.message_target_component_ofs = {} - self.message_crcs = {} - self.message_names = {} - self.largest_payload = 0 - - if not self.command_24bit: - # remove messages with IDs > 255 - m2 = [] - for m in self.message: - if m.id <= 255: - m2.append(m) - else: - print("Ignoring MAVLink2 message %s" % m.name) - self.message = m2 - - for m in self.message: - if not self.command_24bit and m.id > 255: - continue - - m.wire_length = 0 - m.wire_min_length = 0 - m.fieldnames = [] - m.fieldlengths = [] - m.ordered_fieldnames = [] - m.message_flags = 0 - m.target_system_ofs = 0 - m.target_component_ofs = 0 - - if self.sort_fields: - # when we have extensions we only sort up to the first extended field - sort_end = m.base_fields() - m.ordered_fields = sorted(m.fields[:sort_end], - key=operator.attrgetter('type_length'), - reverse=True) - m.ordered_fields.extend(m.fields[sort_end:]) - else: - m.ordered_fields = m.fields - for f in m.fields: - m.fieldnames.append(f.name) - L = f.array_length - if L == 0: - m.fieldlengths.append(1) - elif L > 1 and f.type == 'char': - m.fieldlengths.append(1) - else: - m.fieldlengths.append(L) - for i in range(len(m.ordered_fields)): - f = m.ordered_fields[i] - f.wire_offset = m.wire_length - m.wire_length += f.wire_length - if m.extensions_start is None or i < m.extensions_start: - m.wire_min_length = m.wire_length - m.ordered_fieldnames.append(f.name) - f.set_test_value() - if f.name.find('[') != -1: - raise MAVParseError("invalid field name with array descriptor %s" % f.name) - # having flags for target_system and target_component helps a lot for routing code - if f.name == 'target_system': - m.message_flags |= FLAG_HAVE_TARGET_SYSTEM - m.target_system_ofs = f.wire_offset - elif f.name == 'target_component': - m.message_flags |= FLAG_HAVE_TARGET_COMPONENT - m.target_component_ofs = f.wire_offset - m.num_fields = len(m.fieldnames) - if m.num_fields > 64: - raise MAVParseError("num_fields=%u : Maximum number of field names allowed is" % ( - m.num_fields, 64)) - m.crc_extra = message_checksum(m) - - key = m.id - self.message_crcs[key] = m.crc_extra - self.message_lengths[key] = m.wire_length - self.message_min_lengths[key] = m.wire_min_length - self.message_names[key] = m.name - self.message_flags[key] = m.message_flags - self.message_target_system_ofs[key] = m.target_system_ofs - self.message_target_component_ofs[key] = m.target_component_ofs - - if m.wire_length > self.largest_payload: - self.largest_payload = m.wire_length - - if m.wire_length+8 > 64: - print("Note: message %s is longer than 64 bytes long (%u bytes), which can cause fragmentation since many radio modems use 64 bytes as maximum air transfer unit." % (m.name, m.wire_length+8)) - - def __str__(self): - return "MAVXML for %s from %s (%u message, %u enums)" % ( - self.basename, self.filename, len(self.message), len(self.enum)) - - -def message_checksum(msg): - '''calculate a 8-bit checksum of the key fields of a message, so we - can detect incompatible XML changes''' - from .mavcrc import x25crc - crc = x25crc() - crc.accumulate_str(msg.name + ' ') - # in order to allow for extensions the crc does not include - # any field extensions - crc_end = msg.base_fields() - for i in range(crc_end): - f = msg.ordered_fields[i] - crc.accumulate_str(f.type + ' ') - crc.accumulate_str(f.name + ' ') - if f.array_length: - crc.accumulate([f.array_length]) - return (crc.crc&0xFF) ^ (crc.crc>>8) - -def merge_enums(xml): - '''merge enums between XML files''' - emap = {} - for x in xml: - newenums = [] - for enum in x.enum: - if enum.name in emap: - emapitem = emap[enum.name] - # check for possible conflicting auto-assigned values after merge - if (emapitem.start_value <= enum.highest_value and emapitem.highest_value >= enum.start_value): - for entry in emapitem.entry: - # correct the value if necessary, but only if it was auto-assigned to begin with - if entry.value <= enum.highest_value and entry.autovalue == True: - entry.value = enum.highest_value + 1 - enum.highest_value = entry.value - # merge the entries - emapitem.entry.extend(enum.entry) - if not emapitem.description: - emapitem.description = enum.description - print("Merged enum %s" % enum.name) - else: - newenums.append(enum) - emap[enum.name] = enum - x.enum = newenums - for e in emap: - # sort by value - emap[e].entry = sorted(emap[e].entry, - key=operator.attrgetter('value'), - reverse=False) - # add a ENUM_END - emap[e].entry.append(MAVEnumEntry("%s_ENUM_END" % emap[e].name, - emap[e].entry[-1].value+1, end_marker=True)) - -def check_duplicates(xml): - '''check for duplicate message IDs''' - - merge_enums(xml) - - msgmap = {} - enummap = {} - for x in xml: - for m in x.message: - key = m.id - if key in msgmap: - print("ERROR: Duplicate message id %u for %s (%s:%u) also used by %s" % ( - m.id, - m.name, - x.filename, m.linenumber, - msgmap[key])) - return True - fieldset = set() - for f in m.fields: - if f.name in fieldset: - print("ERROR: Duplicate field %s in message %s (%s:%u)" % ( - f.name, m.name, - x.filename, m.linenumber)) - return True - fieldset.add(f.name) - msgmap[key] = '%s (%s:%u)' % (m.name, x.filename, m.linenumber) - for enum in x.enum: - for entry in enum.entry: - if entry.autovalue == True and "common.xml" not in entry.origin_file: - print("Note: An enum value was auto-generated: %s = %u" % (entry.name, entry.value)) - s1 = "%s.%s" % (enum.name, entry.name) - s2 = "%s.%s" % (enum.name, entry.value) - if s1 in enummap or s2 in enummap: - print("ERROR: Duplicate enum %s:\n\t%s = %s @ %s:%u\n\t%s" % ( - "names" if s1 in enummap else "values", - s1, entry.value, entry.origin_file, entry.origin_line, - enummap.get(s1) or enummap.get(s2))) - return True - enummap[s1] = enummap[s2] = "%s.%s = %s @ %s:%u" % (enum.name, entry.name, entry.value, entry.origin_file, entry.origin_line) - - return False - - - -def total_msgs(xml): - '''count total number of msgs''' - count = 0 - for x in xml: - count += len(x.message) - return count - -def mkdir_p(dir): - try: - os.makedirs(dir) - except OSError as exc: - if exc.errno == errno.EEXIST: - pass - else: raise - -# check version consistent -# add test.xml -# finish test suite -# printf style error macro, if defined call errors diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavschema.xsd b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavschema.xsd deleted file mode 100644 index eb028b3f0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavschema.xsd +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtemplate.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtemplate.py deleted file mode 100644 index ede41260b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtemplate.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -''' -simple templating system for mavlink generator - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -from .mavparse import MAVParseError - -class MAVTemplate(object): - '''simple templating system''' - def __init__(self, - start_var_token="${", - end_var_token="}", - start_rep_token="${{", - end_rep_token="}}", - trim_leading_lf=True, - checkmissing=True): - self.start_var_token = start_var_token - self.end_var_token = end_var_token - self.start_rep_token = start_rep_token - self.end_rep_token = end_rep_token - self.trim_leading_lf = trim_leading_lf - self.checkmissing = checkmissing - - def find_end(self, text, start_token, end_token, ignore_end_token=None): - '''find the of a token. - Returns the offset in the string immediately after the matching end_token''' - if not text.startswith(start_token): - raise MAVParseError("invalid token start") - offset = len(start_token) - nesting = 1 - while nesting > 0: - idx1 = text[offset:].find(start_token) - idx2 = text[offset:].find(end_token) - # Check for false positives due to another similar token - # For example, make sure idx2 points to the second '}' in ${{field: ${name}}} - if ignore_end_token: - combined_token = ignore_end_token + end_token - if text[offset+idx2:offset+idx2+len(combined_token)] == combined_token: - idx2 += len(ignore_end_token) - if idx1 == -1 and idx2 == -1: - raise MAVParseError("token nesting error") - if idx1 == -1 or idx1 > idx2: - offset += idx2 + len(end_token) - nesting -= 1 - else: - offset += idx1 + len(start_token) - nesting += 1 - return offset - - def find_var_end(self, text): - '''find the of a variable''' - return self.find_end(text, self.start_var_token, self.end_var_token) - - def find_rep_end(self, text): - '''find the of a repitition''' - return self.find_end(text, self.start_rep_token, self.end_rep_token, ignore_end_token=self.end_var_token) - - def substitute(self, text, subvars={}, - trim_leading_lf=None, checkmissing=None): - '''substitute variables in a string''' - - if trim_leading_lf is None: - trim_leading_lf = self.trim_leading_lf - if checkmissing is None: - checkmissing = self.checkmissing - - # handle repititions - while True: - subidx = text.find(self.start_rep_token) - if subidx == -1: - break - endidx = self.find_rep_end(text[subidx:]) - if endidx == -1: - raise MAVParseError("missing end macro in %s" % text[subidx:]) - part1 = text[0:subidx] - part2 = text[subidx+len(self.start_rep_token):subidx+(endidx-len(self.end_rep_token))] - part3 = text[subidx+endidx:] - a = part2.split(':') - field_name = a[0] - rest = ':'.join(a[1:]) - v = None - if isinstance(subvars, dict): - v = subvars.get(field_name, None) - else: - v = getattr(subvars, field_name, None) - if v is None: - raise MAVParseError('unable to find field %s' % field_name) - t1 = part1 - for f in v: - t1 += self.substitute(rest, f, trim_leading_lf=False, checkmissing=False) - if len(v) != 0 and t1[-1] in ["\n", ","]: - t1 = t1[:-1] - t1 += part3 - text = t1 - - if trim_leading_lf: - if text[0] == '\n': - text = text[1:] - while True: - idx = text.find(self.start_var_token) - if idx == -1: - return text - endidx = text[idx:].find(self.end_var_token) - if endidx == -1: - raise MAVParseError('missing end of variable: %s' % text[idx:idx+10]) - varname = text[idx+2:idx+endidx] - if isinstance(subvars, dict): - if not varname in subvars: - if checkmissing: - raise MAVParseError("unknown variable in '%s%s%s'" % ( - self.start_var_token, varname, self.end_var_token)) - return text[0:idx+endidx] + self.substitute(text[idx+endidx:], subvars, - trim_leading_lf=False, checkmissing=False) - value = subvars[varname] - else: - value = getattr(subvars, varname, None) - if value is None: - if checkmissing: - raise MAVParseError("unknown variable in '%s%s%s'" % ( - self.start_var_token, varname, self.end_var_token)) - return text[0:idx+endidx] + self.substitute(text[idx+endidx:], subvars, - trim_leading_lf=False, checkmissing=False) - text = text.replace("%s%s%s" % (self.start_var_token, varname, self.end_var_token), str(value)) - return text - - def write(self, file, text, subvars={}, trim_leading_lf=True): - '''write to a file with variable substitution''' - file.write(self.substitute(text, subvars=subvars, trim_leading_lf=trim_leading_lf)) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtestgen.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtestgen.py deleted file mode 100755 index b4311800e..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/generator/mavtestgen.py +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/env python -''' -generate a MAVLink test suite - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import sys, textwrap -from argparse import ArgumentParser - -# mavparse is up a directory level -from . import mavparse - -def gen_value(f, i, language): - '''generate a test value for the ith field of a message''' - type = f.type - - # could be an array - if type.find("[") != -1: - aidx = type.find("[") - basetype = type[0:aidx] - if basetype == "array": - basetype = "int8_t" - if language == 'C': - return '(const %s *)"%s%u"' % (basetype, f.name, i) - return '"%s%u"' % (f.name, i) - - if type == 'float': - return 17.0 + i*7 - if type == 'char': - return 'A' + i - if type == 'int8_t': - return 5 + i - if type in ['int8_t', 'uint8_t']: - return 5 + i - if type in ['uint8_t_mavlink_version']: - return 2 - if type in ['int16_t', 'uint16_t']: - return 17235 + i*52 - if type in ['int32_t', 'uint32_t']: - v = 963497464 + i*52 - if language == 'C': - return "%sL" % v - return v - if type in ['int64_t', 'uint64_t']: - v = 9223372036854775807 + i*63 - if language == 'C': - return "%sLL" % v - return v - - - -def generate_methods_python(outf, msgs): - outf.write(""" -''' -MAVLink protocol test implementation (auto-generated by mavtestgen.py) - -Generated from: %s - -Note: this file has been auto-generated. DO NOT EDIT -''' - -import mavlink - -def generate_outputs(mav): - '''generate all message types as outputs''' -""") - for m in msgs: - if m.name == "HEARTBEAT": continue - outf.write("\tmav.%s_send(" % m.name.lower()) - for i in range(0, len(m.fields)): - f = m.fields[i] - outf.write("%s=%s" % (f.name, gen_value(f, i, 'py'))) - if i != len(m.fields)-1: - outf.write(",") - outf.write(")\n") - - -def generate_methods_C(outf, msgs): - outf.write(""" -/* -MAVLink protocol test implementation (auto-generated by mavtestgen.py) - -Generated from: %s - -Note: this file has been auto-generated. DO NOT EDIT -*/ - -static void mavtest_generate_outputs(mavlink_channel_t chan) -{ -""") - for m in msgs: - if m.name == "HEARTBEAT": continue - outf.write("\tmavlink_msg_%s_send(chan," % m.name.lower()) - for i in range(0, len(m.fields)): - f = m.fields[i] - outf.write("%s" % gen_value(f, i, 'C')) - if i != len(m.fields)-1: - outf.write(",") - outf.write(");\n") - outf.write("}\n") - - - -###################################################################### -'''main program''' - -parser = ArgumentParser(description="This tool generate MAVLink test suite") -parser.add_argument("-o", "--output", default="mavtest", help="output folder [default: %(default)s]") -parser.add_argument("definitions", metavar="XML", nargs="+", help="MAVLink definitions") -args = parser.parse_args() - -msgs = [] -enums = [] - -for fname in args.definitions: - (m, e) = mavparse.parse_mavlink_xml(fname) - msgs.extend(m) - enums.extend(e) - - -if mavparse.check_duplicates(msgs): - sys.exit(1) - -print("Found %u MAVLink message types" % len(msgs)) - -print("Generating python %s" % (args.output+'.py')) -outf = open(args.output + '.py', "w") -generate_methods_python(outf, msgs) -outf.close() - -print("Generating C %s" % (args.output+'.h')) -outf = open(args.output + '.h', "w") -generate_methods_C(outf, msgs) -outf.close() - -print("Generated %s OK" % args.output) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavexpression.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavexpression.py deleted file mode 100644 index 20f1169b6..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavexpression.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -''' -mavlink expression evaluation functions - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import os - -# these imports allow for mavgraph and mavlogdump to use maths expressions more easily -from math import * -from .mavextra import * - -''' -Support having a $HOME/.pymavlink/mavextra.py for extra graphing functions -''' -home = os.getenv('HOME') -if home is not None: - extra = os.path.join(home, '.pymavlink', 'mavextra.py') - if os.path.exists(extra): - import imp - mavuser = imp.load_source('pymavlink.mavuser', extra) - from pymavlink.mavuser import * - -def evaluate_expression(expression, vars): - '''evaluation an expression''' - try: - v = eval(expression, globals(), vars) - except NameError: - return None - except ZeroDivisionError: - return None - return v diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavextra.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavextra.py deleted file mode 100644 index 8ea3d49a0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavextra.py +++ /dev/null @@ -1,1008 +0,0 @@ -#!/usr/bin/env python -''' -useful extra functions for use by mavlink clients - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import os, sys -from math import * - -try: - # in case numpy isn't installed - from .quaternion import Quaternion -except: - pass - -try: - # rotmat doesn't work on Python3.2 yet - from .rotmat import Vector3, Matrix3 -except Exception: - pass - - -def kmh(mps): - '''convert m/s to Km/h''' - return mps*3.6 - -def altitude(SCALED_PRESSURE, ground_pressure=None, ground_temp=None): - '''calculate barometric altitude''' - from . import mavutil - self = mavutil.mavfile_global - if ground_pressure is None: - if self.param('GND_ABS_PRESS', None) is None: - return 0 - ground_pressure = self.param('GND_ABS_PRESS', 1) - if ground_temp is None: - ground_temp = self.param('GND_TEMP', 0) - scaling = ground_pressure / (SCALED_PRESSURE.press_abs*100.0) - temp = ground_temp + 273.15 - return log(scaling) * temp * 29271.267 * 0.001 - -def altitude2(SCALED_PRESSURE, ground_pressure=None, ground_temp=None): - '''calculate barometric altitude''' - from . import mavutil - self = mavutil.mavfile_global - if ground_pressure is None: - if self.param('GND_ABS_PRESS', None) is None: - return 0 - ground_pressure = self.param('GND_ABS_PRESS', 1) - if ground_temp is None: - ground_temp = self.param('GND_TEMP', 0) - scaling = SCALED_PRESSURE.press_abs*100.0 / ground_pressure - temp = ground_temp + 273.15 - return 153.8462 * temp * (1.0 - exp(0.190259 * log(scaling))) - -def mag_heading(RAW_IMU, ATTITUDE, declination=None, SENSOR_OFFSETS=None, ofs=None): - '''calculate heading from raw magnetometer''' - if declination is None: - import mavutil - declination = degrees(mavutil.mavfile_global.param('COMPASS_DEC', 0)) - mag_x = RAW_IMU.xmag - mag_y = RAW_IMU.ymag - mag_z = RAW_IMU.zmag - if SENSOR_OFFSETS is not None and ofs is not None: - mag_x += ofs[0] - SENSOR_OFFSETS.mag_ofs_x - mag_y += ofs[1] - SENSOR_OFFSETS.mag_ofs_y - mag_z += ofs[2] - SENSOR_OFFSETS.mag_ofs_z - - # go via a DCM matrix to match the APM calculation - dcm_matrix = rotation(ATTITUDE) - cos_pitch_sq = 1.0-(dcm_matrix.c.x*dcm_matrix.c.x) - headY = mag_y * dcm_matrix.c.z - mag_z * dcm_matrix.c.y - headX = mag_x * cos_pitch_sq - dcm_matrix.c.x * (mag_y * dcm_matrix.c.y + mag_z * dcm_matrix.c.z) - - heading = degrees(atan2(-headY,headX)) + declination - if heading < 0: - heading += 360 - return heading - -def mag_heading_motors(RAW_IMU, ATTITUDE, declination, SENSOR_OFFSETS, ofs, SERVO_OUTPUT_RAW, motor_ofs): - '''calculate heading from raw magnetometer''' - ofs = get_motor_offsets(SERVO_OUTPUT_RAW, ofs, motor_ofs) - - if declination is None: - import mavutil - declination = degrees(mavutil.mavfile_global.param('COMPASS_DEC', 0)) - mag_x = RAW_IMU.xmag - mag_y = RAW_IMU.ymag - mag_z = RAW_IMU.zmag - if SENSOR_OFFSETS is not None and ofs is not None: - mag_x += ofs[0] - SENSOR_OFFSETS.mag_ofs_x - mag_y += ofs[1] - SENSOR_OFFSETS.mag_ofs_y - mag_z += ofs[2] - SENSOR_OFFSETS.mag_ofs_z - - headX = mag_x*cos(ATTITUDE.pitch) + mag_y*sin(ATTITUDE.roll)*sin(ATTITUDE.pitch) + mag_z*cos(ATTITUDE.roll)*sin(ATTITUDE.pitch) - headY = mag_y*cos(ATTITUDE.roll) - mag_z*sin(ATTITUDE.roll) - heading = degrees(atan2(-headY,headX)) + declination - if heading < 0: - heading += 360 - return heading - -def mag_field(RAW_IMU, SENSOR_OFFSETS=None, ofs=None): - '''calculate magnetic field strength from raw magnetometer''' - mag_x = RAW_IMU.xmag - mag_y = RAW_IMU.ymag - mag_z = RAW_IMU.zmag - if SENSOR_OFFSETS is not None and ofs is not None: - mag_x += ofs[0] - SENSOR_OFFSETS.mag_ofs_x - mag_y += ofs[1] - SENSOR_OFFSETS.mag_ofs_y - mag_z += ofs[2] - SENSOR_OFFSETS.mag_ofs_z - return sqrt(mag_x**2 + mag_y**2 + mag_z**2) - -def mag_field_df(MAG, ofs=None): - '''calculate magnetic field strength from raw magnetometer (dataflash version)''' - mag = Vector3(MAG.MagX, MAG.MagY, MAG.MagZ) - offsets = Vector3(MAG.OfsX, MAG.OfsY, MAG.OfsZ) - if ofs is not None: - mag = (mag - offsets) + Vector3(ofs[0], ofs[1], ofs[2]) - return mag.length() - -def get_motor_offsets(SERVO_OUTPUT_RAW, ofs, motor_ofs): - '''calculate magnetic field strength from raw magnetometer''' - import mavutil - self = mavutil.mavfile_global - - m = SERVO_OUTPUT_RAW - motor_pwm = m.servo1_raw + m.servo2_raw + m.servo3_raw + m.servo4_raw - motor_pwm *= 0.25 - rc3_min = self.param('RC3_MIN', 1100) - rc3_max = self.param('RC3_MAX', 1900) - motor = (motor_pwm - rc3_min) / (rc3_max - rc3_min) - if motor > 1.0: - motor = 1.0 - if motor < 0.0: - motor = 0.0 - - motor_offsets0 = motor_ofs[0] * motor - motor_offsets1 = motor_ofs[1] * motor - motor_offsets2 = motor_ofs[2] * motor - ofs = (ofs[0] + motor_offsets0, ofs[1] + motor_offsets1, ofs[2] + motor_offsets2) - - return ofs - -def mag_field_motors(RAW_IMU, SENSOR_OFFSETS, ofs, SERVO_OUTPUT_RAW, motor_ofs): - '''calculate magnetic field strength from raw magnetometer''' - mag_x = RAW_IMU.xmag - mag_y = RAW_IMU.ymag - mag_z = RAW_IMU.zmag - - ofs = get_motor_offsets(SERVO_OUTPUT_RAW, ofs, motor_ofs) - - if SENSOR_OFFSETS is not None and ofs is not None: - mag_x += ofs[0] - SENSOR_OFFSETS.mag_ofs_x - mag_y += ofs[1] - SENSOR_OFFSETS.mag_ofs_y - mag_z += ofs[2] - SENSOR_OFFSETS.mag_ofs_z - return sqrt(mag_x**2 + mag_y**2 + mag_z**2) - -def angle_diff(angle1, angle2): - '''show the difference between two angles in degrees''' - ret = angle1 - angle2 - if ret > 180: - ret -= 360; - if ret < -180: - ret += 360 - return ret - -average_data = {} - -def average(var, key, N): - '''average over N points''' - global average_data - if not key in average_data: - average_data[key] = [var]*N - return var - average_data[key].pop(0) - average_data[key].append(var) - return sum(average_data[key])/N - -derivative_data = {} - -def second_derivative_5(var, key): - '''5 point 2nd derivative''' - global derivative_data - import mavutil - tnow = mavutil.mavfile_global.timestamp - - if not key in derivative_data: - derivative_data[key] = (tnow, [var]*5) - return 0 - (last_time, data) = derivative_data[key] - data.pop(0) - data.append(var) - derivative_data[key] = (tnow, data) - h = (tnow - last_time) - # N=5 2nd derivative from - # http://www.holoborodko.com/pavel/numerical-methods/numerical-derivative/smooth-low-noise-differentiators/ - ret = ((data[4] + data[0]) - 2*data[2]) / (4*h**2) - return ret - -def second_derivative_9(var, key): - '''9 point 2nd derivative''' - global derivative_data - import mavutil - tnow = mavutil.mavfile_global.timestamp - - if not key in derivative_data: - derivative_data[key] = (tnow, [var]*9) - return 0 - (last_time, data) = derivative_data[key] - data.pop(0) - data.append(var) - derivative_data[key] = (tnow, data) - h = (tnow - last_time) - # N=5 2nd derivative from - # http://www.holoborodko.com/pavel/numerical-methods/numerical-derivative/smooth-low-noise-differentiators/ - f = data - ret = ((f[8] + f[0]) + 4*(f[7] + f[1]) + 4*(f[6]+f[2]) - 4*(f[5]+f[3]) - 10*f[4])/(64*h**2) - return ret - -lowpass_data = {} - -def lowpass(var, key, factor): - '''a simple lowpass filter''' - global lowpass_data - if not key in lowpass_data: - lowpass_data[key] = var - else: - lowpass_data[key] = factor*lowpass_data[key] + (1.0 - factor)*var - return lowpass_data[key] - -last_diff = {} - -def diff(var, key): - '''calculate differences between values''' - global last_diff - ret = 0 - if not key in last_diff: - last_diff[key] = var - return 0 - ret = var - last_diff[key] - last_diff[key] = var - return ret - -last_delta = {} - -def delta(var, key, tusec=None): - '''calculate slope''' - global last_delta - if tusec is not None: - tnow = tusec * 1.0e-6 - else: - import mavutil - tnow = mavutil.mavfile_global.timestamp - dv = 0 - ret = 0 - if key in last_delta: - (last_v, last_t, last_ret) = last_delta[key] - if last_t == tnow: - return last_ret - if tnow == last_t: - ret = 0 - else: - ret = (var - last_v) / (tnow - last_t) - last_delta[key] = (var, tnow, ret) - return ret - -def delta_angle(var, key, tusec=None): - '''calculate slope of an angle''' - global last_delta - if tusec is not None: - tnow = tusec * 1.0e-6 - else: - import mavutil - tnow = mavutil.mavfile_global.timestamp - dv = 0 - ret = 0 - if key in last_delta: - (last_v, last_t, last_ret) = last_delta[key] - if last_t == tnow: - return last_ret - if tnow == last_t: - ret = 0 - else: - dv = var - last_v - if dv > 180: - dv -= 360 - if dv < -180: - dv += 360 - ret = dv / (tnow - last_t) - last_delta[key] = (var, tnow, ret) - return ret - -def roll_estimate(RAW_IMU,GPS_RAW_INT=None,ATTITUDE=None,SENSOR_OFFSETS=None, ofs=None, mul=None,smooth=0.7): - '''estimate roll from accelerometer''' - rx = RAW_IMU.xacc * 9.81 / 1000.0 - ry = RAW_IMU.yacc * 9.81 / 1000.0 - rz = RAW_IMU.zacc * 9.81 / 1000.0 - if ATTITUDE is not None and GPS_RAW_INT is not None: - ry -= ATTITUDE.yawspeed * GPS_RAW_INT.vel*0.01 - rz += ATTITUDE.pitchspeed * GPS_RAW_INT.vel*0.01 - if SENSOR_OFFSETS is not None and ofs is not None: - rx += SENSOR_OFFSETS.accel_cal_x - ry += SENSOR_OFFSETS.accel_cal_y - rz += SENSOR_OFFSETS.accel_cal_z - rx -= ofs[0] - ry -= ofs[1] - rz -= ofs[2] - if mul is not None: - rx *= mul[0] - ry *= mul[1] - rz *= mul[2] - return lowpass(degrees(-asin(ry/sqrt(rx**2+ry**2+rz**2))),'_roll',smooth) - -def pitch_estimate(RAW_IMU, GPS_RAW_INT=None,ATTITUDE=None, SENSOR_OFFSETS=None, ofs=None, mul=None, smooth=0.7): - '''estimate pitch from accelerometer''' - rx = RAW_IMU.xacc * 9.81 / 1000.0 - ry = RAW_IMU.yacc * 9.81 / 1000.0 - rz = RAW_IMU.zacc * 9.81 / 1000.0 - if ATTITUDE is not None and GPS_RAW_INT is not None: - ry -= ATTITUDE.yawspeed * GPS_RAW_INT.vel*0.01 - rz += ATTITUDE.pitchspeed * GPS_RAW_INT.vel*0.01 - if SENSOR_OFFSETS is not None and ofs is not None: - rx += SENSOR_OFFSETS.accel_cal_x - ry += SENSOR_OFFSETS.accel_cal_y - rz += SENSOR_OFFSETS.accel_cal_z - rx -= ofs[0] - ry -= ofs[1] - rz -= ofs[2] - if mul is not None: - rx *= mul[0] - ry *= mul[1] - rz *= mul[2] - return lowpass(degrees(asin(rx/sqrt(rx**2+ry**2+rz**2))),'_pitch',smooth) - -def rotation(ATTITUDE): - '''return the current DCM rotation matrix''' - r = Matrix3() - r.from_euler(ATTITUDE.roll, ATTITUDE.pitch, ATTITUDE.yaw) - return r - -def mag_rotation(RAW_IMU, inclination, declination): - '''return an attitude rotation matrix that is consistent with the current mag - vector''' - m_body = Vector3(RAW_IMU.xmag, RAW_IMU.ymag, RAW_IMU.zmag) - m_earth = Vector3(m_body.length(), 0, 0) - - r = Matrix3() - r.from_euler(0, -radians(inclination), radians(declination)) - m_earth = r * m_earth - - r.from_two_vectors(m_earth, m_body) - return r - -def mag_yaw(RAW_IMU, inclination, declination): - '''estimate yaw from mag''' - m = mag_rotation(RAW_IMU, inclination, declination) - (r, p, y) = m.to_euler() - y = degrees(y) - if y < 0: - y += 360 - return y - -def mag_pitch(RAW_IMU, inclination, declination): - '''estimate pithc from mag''' - m = mag_rotation(RAW_IMU, inclination, declination) - (r, p, y) = m.to_euler() - return degrees(p) - -def mag_roll(RAW_IMU, inclination, declination): - '''estimate roll from mag''' - m = mag_rotation(RAW_IMU, inclination, declination) - (r, p, y) = m.to_euler() - return degrees(r) - -def expected_mag(RAW_IMU, ATTITUDE, inclination, declination): - '''return expected mag vector''' - m_body = Vector3(RAW_IMU.xmag, RAW_IMU.ymag, RAW_IMU.zmag) - field_strength = m_body.length() - - m = rotation(ATTITUDE) - - r = Matrix3() - r.from_euler(0, -radians(inclination), radians(declination)) - m_earth = r * Vector3(field_strength, 0, 0) - - return m.transposed() * m_earth - -def mag_discrepancy(RAW_IMU, ATTITUDE, inclination, declination=None): - '''give the magnitude of the discrepancy between observed and expected magnetic field''' - if declination is None: - import mavutil - declination = degrees(mavutil.mavfile_global.param('COMPASS_DEC', 0)) - expected = expected_mag(RAW_IMU, ATTITUDE, inclination, declination) - mag = Vector3(RAW_IMU.xmag, RAW_IMU.ymag, RAW_IMU.zmag) - return degrees(expected.angle(mag)) - - -def mag_inclination(RAW_IMU, ATTITUDE, declination=None): - '''give the magnitude of the discrepancy between observed and expected magnetic field''' - if declination is None: - import mavutil - declination = degrees(mavutil.mavfile_global.param('COMPASS_DEC', 0)) - r = rotation(ATTITUDE) - mag1 = Vector3(RAW_IMU.xmag, RAW_IMU.ymag, RAW_IMU.zmag) - mag1 = r * mag1 - mag2 = Vector3(cos(radians(declination)), sin(radians(declination)), 0) - inclination = degrees(mag1.angle(mag2)) - if RAW_IMU.zmag < 0: - inclination = -inclination - return inclination - -def expected_magx(RAW_IMU, ATTITUDE, inclination, declination): - '''estimate from mag''' - v = expected_mag(RAW_IMU, ATTITUDE, inclination, declination) - return v.x - -def expected_magy(RAW_IMU, ATTITUDE, inclination, declination): - '''estimate from mag''' - v = expected_mag(RAW_IMU, ATTITUDE, inclination, declination) - return v.y - -def expected_magz(RAW_IMU, ATTITUDE, inclination, declination): - '''estimate from mag''' - v = expected_mag(RAW_IMU, ATTITUDE, inclination, declination) - return v.z - -def gravity(RAW_IMU, SENSOR_OFFSETS=None, ofs=None, mul=None, smooth=0.7): - '''estimate pitch from accelerometer''' - if hasattr(RAW_IMU, 'xacc'): - rx = RAW_IMU.xacc * 9.81 / 1000.0 - ry = RAW_IMU.yacc * 9.81 / 1000.0 - rz = RAW_IMU.zacc * 9.81 / 1000.0 - else: - rx = RAW_IMU.AccX - ry = RAW_IMU.AccY - rz = RAW_IMU.AccZ - if SENSOR_OFFSETS is not None and ofs is not None: - rx += SENSOR_OFFSETS.accel_cal_x - ry += SENSOR_OFFSETS.accel_cal_y - rz += SENSOR_OFFSETS.accel_cal_z - rx -= ofs[0] - ry -= ofs[1] - rz -= ofs[2] - if mul is not None: - rx *= mul[0] - ry *= mul[1] - rz *= mul[2] - return sqrt(rx**2+ry**2+rz**2) - - - -def pitch_sim(SIMSTATE, GPS_RAW): - '''estimate pitch from SIMSTATE accels''' - xacc = SIMSTATE.xacc - lowpass(delta(GPS_RAW.v,"v")*6.6, "v", 0.9) - zacc = SIMSTATE.zacc - zacc += SIMSTATE.ygyro * GPS_RAW.v; - if xacc/zacc >= 1: - return 0 - if xacc/zacc <= -1: - return -0 - return degrees(-asin(xacc/zacc)) - -def distance_two(GPS_RAW1, GPS_RAW2, horizontal=True): - '''distance between two points''' - if hasattr(GPS_RAW1, 'Lat'): - lat1 = radians(GPS_RAW1.Lat) - lat2 = radians(GPS_RAW2.Lat) - lon1 = radians(GPS_RAW1.Lng) - lon2 = radians(GPS_RAW2.Lng) - alt1 = GPS_RAW1.Alt - alt2 = GPS_RAW2.Alt - elif hasattr(GPS_RAW1, 'cog'): - lat1 = radians(GPS_RAW1.lat)*1.0e-7 - lat2 = radians(GPS_RAW2.lat)*1.0e-7 - lon1 = radians(GPS_RAW1.lon)*1.0e-7 - lon2 = radians(GPS_RAW2.lon)*1.0e-7 - alt1 = GPS_RAW1.alt*0.001 - alt2 = GPS_RAW2.alt*0.001 - else: - lat1 = radians(GPS_RAW1.lat) - lat2 = radians(GPS_RAW2.lat) - lon1 = radians(GPS_RAW1.lon) - lon2 = radians(GPS_RAW2.lon) - alt1 = GPS_RAW1.alt*0.001 - alt2 = GPS_RAW2.alt*0.001 - dLat = lat2 - lat1 - dLon = lon2 - lon1 - - a = sin(0.5*dLat)**2 + sin(0.5*dLon)**2 * cos(lat1) * cos(lat2) - c = 2.0 * atan2(sqrt(a), sqrt(1.0-a)) - ground_dist = 6371 * 1000 * c - if horizontal: - return ground_dist - return sqrt(ground_dist**2 + (alt2-alt1)**2) - - -first_fix = None - -def distance_home(GPS_RAW): - '''distance from first fix point''' - global first_fix - if (hasattr(GPS_RAW, 'fix_type') and GPS_RAW.fix_type < 2) or \ - (hasattr(GPS_RAW, 'Status') and GPS_RAW.Status < 2): - return 0 - - if first_fix == None: - first_fix = GPS_RAW - return 0 - return distance_two(GPS_RAW, first_fix) - -def sawtooth(ATTITUDE, amplitude=2.0, period=5.0): - '''sawtooth pattern based on uptime''' - mins = (ATTITUDE.usec * 1.0e-6)/60 - p = fmod(mins, period*2) - if p < period: - return amplitude * (p/period) - return amplitude * (period - (p-period))/period - -def rate_of_turn(speed, bank): - '''return expected rate of turn in degrees/s for given speed in m/s and - bank angle in degrees''' - if abs(speed) < 2 or abs(bank) > 80: - return 0 - ret = degrees(9.81*tan(radians(bank))/speed) - return ret - -def wingloading(bank): - '''return expected wing loading factor for a bank angle in radians''' - return 1.0/cos(bank) - -def airspeed(VFR_HUD, ratio=None, used_ratio=None, offset=None): - '''recompute airspeed with a different ARSPD_RATIO''' - import mavutil - mav = mavutil.mavfile_global - if ratio is None: - ratio = 1.9936 # APM default - if used_ratio is None: - if 'ARSPD_RATIO' in mav.params: - used_ratio = mav.params['ARSPD_RATIO'] - else: - print("no ARSPD_RATIO in mav.params") - used_ratio = ratio - if hasattr(VFR_HUD,'airspeed'): - airspeed = VFR_HUD.airspeed - else: - airspeed = VFR_HUD.Airspeed - airspeed_pressure = (airspeed**2) / used_ratio - if offset is not None: - airspeed_pressure += offset - if airspeed_pressure < 0: - airspeed_pressure = 0 - airspeed = sqrt(airspeed_pressure * ratio) - return airspeed - -def EAS2TAS(ARSP,GPS,BARO,ground_temp=25): - '''EAS2TAS from ARSP.Temp''' - tempK = ground_temp + 273.15 - 0.0065 * GPS.Alt - return sqrt(1.225 / (BARO.Press / (287.26 * tempK))) - - -def airspeed_ratio(VFR_HUD): - '''recompute airspeed with a different ARSPD_RATIO''' - import mavutil - mav = mavutil.mavfile_global - airspeed_pressure = (VFR_HUD.airspeed**2) / ratio - airspeed = sqrt(airspeed_pressure * ratio) - return airspeed - -def airspeed_voltage(VFR_HUD, ratio=None): - '''back-calculate the voltage the airspeed sensor must have seen''' - import mavutil - mav = mavutil.mavfile_global - if ratio is None: - ratio = 1.9936 # APM default - if 'ARSPD_RATIO' in mav.params: - used_ratio = mav.params['ARSPD_RATIO'] - else: - used_ratio = ratio - if 'ARSPD_OFFSET' in mav.params: - offset = mav.params['ARSPD_OFFSET'] - else: - return -1 - airspeed_pressure = (pow(VFR_HUD.airspeed,2)) / used_ratio - raw = airspeed_pressure + offset - SCALING_OLD_CALIBRATION = 204.8 - voltage = 5.0 * raw / 4096 - return voltage - - -def earth_rates(ATTITUDE): - '''return angular velocities in earth frame''' - from math import sin, cos, tan, fabs - - p = ATTITUDE.rollspeed - q = ATTITUDE.pitchspeed - r = ATTITUDE.yawspeed - phi = ATTITUDE.roll - theta = ATTITUDE.pitch - psi = ATTITUDE.yaw - - phiDot = p + tan(theta)*(q*sin(phi) + r*cos(phi)) - thetaDot = q*cos(phi) - r*sin(phi) - if fabs(cos(theta)) < 1.0e-20: - theta += 1.0e-10 - psiDot = (q*sin(phi) + r*cos(phi))/cos(theta) - return (phiDot, thetaDot, psiDot) - -def roll_rate(ATTITUDE): - '''return roll rate in earth frame''' - (phiDot, thetaDot, psiDot) = earth_rates(ATTITUDE) - return phiDot - -def pitch_rate(ATTITUDE): - '''return pitch rate in earth frame''' - (phiDot, thetaDot, psiDot) = earth_rates(ATTITUDE) - return thetaDot - -def yaw_rate(ATTITUDE): - '''return yaw rate in earth frame''' - (phiDot, thetaDot, psiDot) = earth_rates(ATTITUDE) - return psiDot - - -def gps_velocity(GLOBAL_POSITION_INT): - '''return GPS velocity vector''' - return Vector3(GLOBAL_POSITION_INT.vx, GLOBAL_POSITION_INT.vy, GLOBAL_POSITION_INT.vz) * 0.01 - - -def gps_velocity_old(GPS_RAW_INT): - '''return GPS velocity vector''' - return Vector3(GPS_RAW_INT.vel*0.01*cos(radians(GPS_RAW_INT.cog*0.01)), - GPS_RAW_INT.vel*0.01*sin(radians(GPS_RAW_INT.cog*0.01)), 0) - -def gps_velocity_body(GPS_RAW_INT, ATTITUDE): - '''return GPS velocity vector in body frame''' - r = rotation(ATTITUDE) - return r.transposed() * Vector3(GPS_RAW_INT.vel*0.01*cos(radians(GPS_RAW_INT.cog*0.01)), - GPS_RAW_INT.vel*0.01*sin(radians(GPS_RAW_INT.cog*0.01)), - -tan(ATTITUDE.pitch)*GPS_RAW_INT.vel*0.01) - -def earth_accel(RAW_IMU,ATTITUDE): - '''return earth frame acceleration vector''' - r = rotation(ATTITUDE) - accel = Vector3(RAW_IMU.xacc, RAW_IMU.yacc, RAW_IMU.zacc) * 9.81 * 0.001 - return r * accel - -def earth_gyro(RAW_IMU,ATTITUDE): - '''return earth frame gyro vector''' - r = rotation(ATTITUDE) - accel = Vector3(degrees(RAW_IMU.xgyro), degrees(RAW_IMU.ygyro), degrees(RAW_IMU.zgyro)) * 0.001 - return r * accel - -def airspeed_energy_error(NAV_CONTROLLER_OUTPUT, VFR_HUD): - '''return airspeed energy error matching APM internals - This is positive when we are going too slow - ''' - aspeed_cm = VFR_HUD.airspeed*100 - target_airspeed = NAV_CONTROLLER_OUTPUT.aspd_error + aspeed_cm - airspeed_energy_error = ((target_airspeed*target_airspeed) - (aspeed_cm*aspeed_cm))*0.00005 - return airspeed_energy_error - - -def energy_error(NAV_CONTROLLER_OUTPUT, VFR_HUD): - '''return energy error matching APM internals - This is positive when we are too low or going too slow - ''' - aspeed_energy_error = airspeed_energy_error(NAV_CONTROLLER_OUTPUT, VFR_HUD) - alt_error = NAV_CONTROLLER_OUTPUT.alt_error*100 - energy_error = aspeed_energy_error + alt_error*0.098 - return energy_error - -def rover_turn_circle(SERVO_OUTPUT_RAW): - '''return turning circle (diameter) in meters for steering_angle in degrees - ''' - - # this matches Toms slash - max_wheel_turn = 35 - wheelbase = 0.335 - wheeltrack = 0.296 - - steering_angle = max_wheel_turn * (SERVO_OUTPUT_RAW.servo1_raw - 1500) / 400.0 - theta = radians(steering_angle) - return (wheeltrack/2) + (wheelbase/sin(theta)) - -def rover_yaw_rate(VFR_HUD, SERVO_OUTPUT_RAW): - '''return yaw rate in degrees/second given steering_angle and speed''' - max_wheel_turn=35 - speed = VFR_HUD.groundspeed - # assume 1100 to 1900 PWM on steering - steering_angle = max_wheel_turn * (SERVO_OUTPUT_RAW.servo1_raw - 1500) / 400.0 - if abs(steering_angle) < 1.0e-6 or abs(speed) < 1.0e-6: - return 0 - d = rover_turn_circle(SERVO_OUTPUT_RAW) - c = pi * d - t = c / speed - rate = 360.0 / t - return rate - -def rover_lat_accel(VFR_HUD, SERVO_OUTPUT_RAW): - '''return lateral acceleration in m/s/s''' - speed = VFR_HUD.groundspeed - yaw_rate = rover_yaw_rate(VFR_HUD, SERVO_OUTPUT_RAW) - accel = radians(yaw_rate) * speed - return accel - - -def demix1(servo1, servo2, gain=0.5): - '''de-mix a mixed servo output''' - s1 = servo1 - 1500 - s2 = servo2 - 1500 - out1 = (s1+s2)*gain - out2 = (s1-s2)*gain - return out1+1500 - -def demix2(servo1, servo2, gain=0.5): - '''de-mix a mixed servo output''' - s1 = servo1 - 1500 - s2 = servo2 - 1500 - out1 = (s1+s2)*gain - out2 = (s1-s2)*gain - return out2+1500 - -def mixer(servo1, servo2, mixtype=1, gain=0.5): - '''mix two servos''' - s1 = servo1 - 1500 - s2 = servo2 - 1500 - v1 = (s1-s2)*gain - v2 = (s1+s2)*gain - if mixtype == 2: - v2 = -v2 - elif mixtype == 3: - v1 = -v1 - elif mixtype == 4: - v1 = -v1 - v2 = -v2 - if v1 > 600: - v1 = 600 - elif v1 < -600: - v1 = -600 - if v2 > 600: - v2 = 600 - elif v2 < -600: - v2 = -600 - return (1500+v1,1500+v2) - -def mix1(servo1, servo2, mixtype=1, gain=0.5): - '''de-mix a mixed servo output''' - (v1,v2) = mixer(servo1, servo2, mixtype=mixtype, gain=gain) - return v1 - -def mix2(servo1, servo2, mixtype=1, gain=0.5): - '''de-mix a mixed servo output''' - (v1,v2) = mixer(servo1, servo2, mixtype=mixtype, gain=gain) - return v2 - -def wrap_180(angle): - if angle > 180: - angle -= 360.0 - if angle < -180: - angle += 360.0 - return angle - - -def wrap_360(angle): - if angle > 360: - angle -= 360.0 - if angle < 0: - angle += 360.0 - return angle - -class DCM_State(object): - '''DCM state object''' - def __init__(self, roll, pitch, yaw): - self.dcm = Matrix3() - self.dcm2 = Matrix3() - self.dcm.from_euler(radians(roll), radians(pitch), radians(yaw)) - self.dcm2.from_euler(radians(roll), radians(pitch), radians(yaw)) - self.mag = Vector3() - self.gyro = Vector3() - self.accel = Vector3() - self.gps = None - self.rate = 50.0 - self.kp = 0.2 - self.kp_yaw = 0.3 - self.omega_P = Vector3() - self.omega_P_yaw = Vector3() - self.omega_I = Vector3() # (-0.00199045287445, -0.00653007719666, -0.00714212376624) - self.omega_I_sum = Vector3() - self.omega_I_sum_time = 0 - self.omega = Vector3() - self.ra_sum = Vector3() - self.last_delta_angle = Vector3() - self.last_velocity = Vector3() - (self.roll, self.pitch, self.yaw) = self.dcm.to_euler() - (self.roll2, self.pitch2, self.yaw2) = self.dcm2.to_euler() - - def update(self, gyro, accel, mag, GPS): - if self.gyro != gyro or self.accel != accel: - delta_angle = (gyro+self.omega_I) / self.rate - self.dcm.rotate(delta_angle) - correction = self.last_delta_angle % delta_angle - #print (delta_angle - self.last_delta_angle) * 58.0 - corrected_delta = delta_angle + 0.0833333 * correction - self.dcm2.rotate(corrected_delta) - self.last_delta_angle = delta_angle - - self.dcm.normalize() - self.dcm2.normalize() - - self.gyro = gyro - self.accel = accel - (self.roll, self.pitch, self.yaw) = self.dcm.to_euler() - (self.roll2, self.pitch2, self.yaw2) = self.dcm2.to_euler() - -dcm_state = None - -def DCM_update(IMU, ATT, MAG, GPS): - '''implement full DCM system''' - global dcm_state - if dcm_state is None: - dcm_state = DCM_State(ATT.Roll, ATT.Pitch, ATT.Yaw) - - mag = Vector3(MAG.MagX, MAG.MagY, MAG.MagZ) - gyro = Vector3(IMU.GyrX, IMU.GyrY, IMU.GyrZ) - accel = Vector3(IMU.AccX, IMU.AccY, IMU.AccZ) - accel2 = Vector3(IMU.AccX, IMU.AccY, IMU.AccZ) - dcm_state.update(gyro, accel, mag, GPS) - return dcm_state - -class PX4_State(object): - '''PX4 DCM state object''' - def __init__(self, roll, pitch, yaw, timestamp): - self.dcm = Matrix3() - self.dcm.from_euler(radians(roll), radians(pitch), radians(yaw)) - self.gyro = Vector3() - self.accel = Vector3() - self.timestamp = timestamp - (self.roll, self.pitch, self.yaw) = self.dcm.to_euler() - - def update(self, gyro, accel, timestamp): - if self.gyro != gyro or self.accel != accel: - delta_angle = gyro * (timestamp - self.timestamp) - self.timestamp = timestamp - self.dcm.rotate(delta_angle) - self.dcm.normalize() - self.gyro = gyro - self.accel = accel - (self.roll, self.pitch, self.yaw) = self.dcm.to_euler() - -px4_state = None - -def PX4_update(IMU, ATT): - '''implement full DCM using PX4 native SD log data''' - global px4_state - if px4_state is None: - px4_state = PX4_State(degrees(ATT.Roll), degrees(ATT.Pitch), degrees(ATT.Yaw), IMU._timestamp) - - gyro = Vector3(IMU.GyroX, IMU.GyroY, IMU.GyroZ) - accel = Vector3(IMU.AccX, IMU.AccY, IMU.AccZ) - px4_state.update(gyro, accel, IMU._timestamp) - return px4_state - -_downsample_N = 0 - -def downsample(N): - '''conditional that is true on every Nth sample''' - global _downsample_N - _downsample_N = (_downsample_N + 1) % N - return _downsample_N == 0 - -def armed(HEARTBEAT): - '''return 1 if armed, 0 if not''' - from . import mavutil - if HEARTBEAT.type == mavutil.mavlink.MAV_TYPE_GCS: - self = mavutil.mavfile_global - if self.motors_armed(): - return 1 - return 0 - if HEARTBEAT.base_mode & mavutil.mavlink.MAV_MODE_FLAG_SAFETY_ARMED: - return 1 - return 0 - -def rotation_df(ATT): - '''return the current DCM rotation matrix''' - r = Matrix3() - r.from_euler(radians(ATT.Roll), radians(ATT.Pitch), radians(ATT.Yaw)) - return r - -def rotation2(AHRS2): - '''return the current DCM rotation matrix''' - r = Matrix3() - r.from_euler(AHRS2.roll, AHRS2.pitch, AHRS2.yaw) - return r - -def earth_accel2(RAW_IMU,ATTITUDE): - '''return earth frame acceleration vector from AHRS2''' - r = rotation2(ATTITUDE) - accel = Vector3(RAW_IMU.xacc, RAW_IMU.yacc, RAW_IMU.zacc) * 9.81 * 0.001 - return r * accel - -def earth_accel_df(IMU,ATT): - '''return earth frame acceleration vector from df log''' - r = rotation_df(ATT) - accel = Vector3(IMU.AccX, IMU.AccY, IMU.AccZ) - return r * accel - -def earth_accel2_df(IMU,IMU2,ATT): - '''return earth frame acceleration vector from df log''' - r = rotation_df(ATT) - accel1 = Vector3(IMU.AccX, IMU.AccY, IMU.AccZ) - accel2 = Vector3(IMU2.AccX, IMU2.AccY, IMU2.AccZ) - accel = 0.5 * (accel1 + accel2) - return r * accel - -def gps_velocity_df(GPS): - '''return GPS velocity vector''' - vx = GPS.Spd * cos(radians(GPS.GCrs)) - vy = GPS.Spd * sin(radians(GPS.GCrs)) - return Vector3(vx, vy, GPS.VZ) - -def distance_gps2(GPS, GPS2): - '''distance between two points''' - if GPS.TimeMS != GPS2.TimeMS: - # reject messages not time aligned - return None - return distance_two(GPS, GPS2) - - -radius_of_earth = 6378100.0 # in meters - -def wrap_valid_longitude(lon): - ''' wrap a longitude value around to always have a value in the range - [-180, +180) i.e 0 => 0, 1 => 1, -1 => -1, 181 => -179, -181 => 179 - ''' - return (((lon + 180.0) % 360.0) - 180.0) - -def gps_newpos(lat, lon, bearing, distance): - '''extrapolate latitude/longitude given a heading and distance - thanks to http://www.movable-type.co.uk/scripts/latlong.html - ''' - import math - lat1 = math.radians(lat) - lon1 = math.radians(lon) - brng = math.radians(bearing) - dr = distance/radius_of_earth - - lat2 = math.asin(math.sin(lat1)*math.cos(dr) + - math.cos(lat1)*math.sin(dr)*math.cos(brng)) - lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(dr)*math.cos(lat1), - math.cos(dr)-math.sin(lat1)*math.sin(lat2)) - return (math.degrees(lat2), wrap_valid_longitude(math.degrees(lon2))) - -def gps_offset(lat, lon, east, north): - '''return new lat/lon after moving east/north - by the given number of meters''' - import math - bearing = math.degrees(math.atan2(east, north)) - distance = math.sqrt(east**2 + north**2) - return gps_newpos(lat, lon, bearing, distance) - -ekf_home = None - -def ekf1_pos(EKF1): - '''calculate EKF position when EKF disabled''' - global ekf_home - from . import mavutil - self = mavutil.mavfile_global - if ekf_home is None: - if not 'GPS' in self.messages or self.messages['GPS'].Status != 3: - return None - ekf_home = self.messages['GPS'] - (ekf_home.Lat, ekf_home.Lng) = gps_offset(ekf_home.Lat, ekf_home.Lng, -EKF1.PE, -EKF1.PN) - (lat,lon) = gps_offset(ekf_home.Lat, ekf_home.Lng, EKF1.PE, EKF1.PN) - return (lat, lon) - -def quat_to_euler(q): - ''' - Get Euler angles from a quaternion - :param q: quaternion [w, x, y , z] - :returns: euler angles [roll, pitch, yaw] - ''' - quat = Quaternion(q) - return quat.euler - -def euler_to_quat(e): - ''' - Get quaternion from euler angles - :param e: euler angles [roll, pitch, yaw] - :returns: quaternion [w, x, y , z] - ''' - quat = Quaternion(e) - return quat.q - -def rotate_quat(attitude, roll, pitch, yaw): - ''' - Returns rotated quaternion - :param attitude: quaternion [w, x, y , z] - :param roll: rotation in rad - :param pitch: rotation in rad - :param yaw: rotation in rad - :returns: quaternion [w, x, y , z] - ''' - quat = Quaternion(attitude) - rotation = Quaternion([roll, pitch, yaw]) - res = rotation * quat - - return res.q diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavlink_defaults.h b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavlink_defaults.h deleted file mode 100644 index 316e64c33..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavlink_defaults.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _MAVLINK_DEFAULTS_H -#define _MAVLINK_DEFAULTS_H - -// This is normally dynamically generated as mavlink.h, but we just use the same settings for all native stacks - -#ifndef MAVLINK_STX -#define MAVLINK_STX 254 -#endif - -#ifndef MAVLINK_ENDIAN -#define MAVLINK_ENDIAN MAVLINK_LITTLE_ENDIAN -#endif - -#ifndef MAVLINK_ALIGNED_FIELDS -#define MAVLINK_ALIGNED_FIELDS 1 -#endif - -#ifndef MAVLINK_CRC_EXTRA -#define MAVLINK_CRC_EXTRA 1 -#endif - -#endif \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavnative.c b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavnative.c deleted file mode 100644 index ab3f5af27..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavnative/mavnative.c +++ /dev/null @@ -1,977 +0,0 @@ -/* - Native mavlink glue for python. - Author: kevinh@geeksville.com -*/ - -#undef NDEBUG - -#include -#include - -#include -#include -#include -#include -#include -#include - -#if PY_MAJOR_VERSION >= 3 -// In python3 it only has longs, not 32 bit ints -#define PyInt_AsLong PyLong_AsLong -#define PyInt_FromLong PyLong_FromLong - -// We returns strings for byte arreays in python2, but bytes objects in python3 -#define PyByteString_FromString PyBytes_FromString -#define PyByteString_FromStringAndSize PyBytes_FromStringAndSize -#define PyByteString_ConcatAndDel PyBytes_ConcatAndDel -#else -#define PyByteString_FromString PyString_FromString -#define PyByteString_FromStringAndSize PyString_FromStringAndSize -#define PyByteString_ConcatAndDel PyString_ConcatAndDel -#endif - -#include "mavlink_defaults.h" - -#define MAVLINK_USE_CONVENIENCE_FUNCTIONS - -#include - -// Mavlink send support -// Not currently used, but keeps mavlink_helpers send code happy -static mavlink_system_t mavlink_system = {42,11,}; -static void comm_send_ch(mavlink_channel_t chan, uint8_t c) { - // Sending not supported yet in native code - assert(0); -} - -#define MAVLINK_ASSERT(x) assert(x) - -// static mavlink_message_t last_msg; - -/* - default message crc function. You can override this per-system to - put this data in a different memory segment -*/ -#define MAVLINK_MESSAGE_CRC(msgid) py_message_info[msgid].crc_extra - -/* Enable this option to check the length of each message. - This allows invalid messages to be caught much sooner. Use if the transmission - medium is prone to missing (or extra) characters (e.g. a radio that fades in - and out). Only use if the channel will only contain messages types listed in - the headers. -*/ - -#define MAVLINK_MESSAGE_LENGTH(msgid) py_message_info[msgid].len - -// #include - -#define TRUE 1 -#define FALSE 0 - -typedef struct { - PyObject *name; // name of this field - mavlink_message_type_t type; // type of this field - unsigned int array_length; // if non-zero, field is an array - unsigned int wire_offset; // offset of each field in the payload -} py_field_info_t; - -// note that in this structure the order of fields is the order -// in the XML file, not necessary the wire order -typedef struct { - PyObject *id; // The int id for this msg - PyObject *name; // name of the message - unsigned len; // the raw message length of this message - not including headers & CRC - uint8_t crc_extra; // the CRC extra for this message - unsigned num_fields; // how many fields in this message - PyObject *fieldnames; // fieldnames in the correct order expected by user (not wire order) - py_field_info_t fields[MAVLINK_MAX_FIELDS]; // field information -} py_message_info_t; - -static py_message_info_t py_message_info[256]; -static uint8_t info_inited = FALSE; // We only do the init once (assuming only one dialect in use) - -#include - -/** - * Contains a structure mavlink_message but also the raw bytes that make up that message - */ -typedef struct { - mavlink_message_t msg; - int numBytes; - uint8_t bytes[MAVLINK_MAX_PACKET_LEN]; -} py_message_t; - -typedef struct { - PyObject_HEAD - - PyObject *MAVLinkMessage; - mavlink_status_t mav_status; - py_message_t msg; -} NativeConnection; - -// #define MAVNATIVE_DEBUG -#ifdef MAVNATIVE_DEBUG -# define mavdebug printf -#else -# define mavdebug(x...) -#endif - - -// My exception type -static PyObject *MAVNativeError; - -static jmp_buf python_entry; - -#define PYTHON_ENTRY if(!setjmp(python_entry)) { -#define PYTHON_EXIT } else { return NULL; } // Used for routines thar return ptrs -#define PYTHON_EXIT_INT } else { return -1; } // Used for routines that return ints - - -/** (originally from mavlink_helpers.h - but now customized to not be channel based) - * This is a convenience function which handles the complete MAVLink parsing. - * the function will parse one byte at a time and return the complete packet once - * it could be successfully decoded. Checksum and other failures will be silently - * ignored. - * - * Messages are parsed into an internal buffer (one for each channel). When a complete - * message is received it is copies into *returnMsg and the channel's status is - * copied into *returnStats. - * - * @param c The char to parse - * - * @param returnMsg NULL if no message could be decoded, the message data else - * @param returnStats if a message was decoded, this is filled with the channel's stats - * @return 0 if no message could be decoded, 1 else - * - */ -MAVLINK_HELPER uint8_t py_mavlink_parse_char(uint8_t c, py_message_t* pymsg, mavlink_status_t* status) -{ - mavlink_message_t *rxmsg = &pymsg->msg; - - int bufferIndex = 0; - - status->msg_received = 0; - - switch (status->parse_state) - { - case MAVLINK_PARSE_STATE_UNINIT: - case MAVLINK_PARSE_STATE_IDLE: - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - pymsg->numBytes = 0; - rxmsg->magic = c; - mavlink_start_checksum(rxmsg); - pymsg->bytes[pymsg->numBytes++] = c; - } - break; - - case MAVLINK_PARSE_STATE_GOT_STX: - if (status->msg_received -/* Support shorter buffers than the - default maximum packet size */ -#if (MAVLINK_MAX_PAYLOAD_LEN < 255) - || c > MAVLINK_MAX_PAYLOAD_LEN -#endif - ) - { - status->buffer_overrun++; - status->parse_error++; - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - } - else - { - // NOT counting STX, LENGTH, SEQ, SYSID, COMPID, MSGID, CRC1 and CRC2 - rxmsg->len = c; - status->packet_idx = 0; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - status->parse_state = MAVLINK_PARSE_STATE_GOT_LENGTH; - } - break; - - case MAVLINK_PARSE_STATE_GOT_LENGTH: - rxmsg->seq = c; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - status->parse_state = MAVLINK_PARSE_STATE_GOT_SEQ; - break; - - case MAVLINK_PARSE_STATE_GOT_SEQ: - rxmsg->sysid = c; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - status->parse_state = MAVLINK_PARSE_STATE_GOT_SYSID; - break; - - case MAVLINK_PARSE_STATE_GOT_SYSID: - rxmsg->compid = c; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - status->parse_state = MAVLINK_PARSE_STATE_GOT_COMPID; - break; - - case MAVLINK_PARSE_STATE_GOT_COMPID: -#ifdef MAVLINK_CHECK_MESSAGE_LENGTH - if (rxmsg->len != MAVLINK_MESSAGE_LENGTH(c)) - { - status->parse_error++; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - break; - } -#endif - rxmsg->msgid = c; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - if (rxmsg->len == 0) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - else - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_MSGID; - } - break; - - case MAVLINK_PARSE_STATE_GOT_MSGID: - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx++] = (char)c; - mavlink_update_checksum(rxmsg, c); - pymsg->bytes[pymsg->numBytes++] = c; - if (status->packet_idx == rxmsg->len) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_PAYLOAD; - } - break; - - case MAVLINK_PARSE_STATE_GOT_PAYLOAD: -#if MAVLINK_CRC_EXTRA - mavlink_update_checksum(rxmsg, MAVLINK_MESSAGE_CRC(rxmsg->msgid)); -#endif - pymsg->bytes[pymsg->numBytes++] = c; - if (c != (rxmsg->checksum & 0xFF)) { - // Check first checksum byte - status->parse_error++; - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - mavlink_start_checksum(rxmsg); - } - } - else - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_CRC1; - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx] = (char)c; - } - break; - - case MAVLINK_PARSE_STATE_GOT_CRC1: - pymsg->bytes[pymsg->numBytes++] = c; - if (c != (rxmsg->checksum >> 8)) { - // Check second checksum byte - status->parse_error++; - status->msg_received = 0; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - if (c == MAVLINK_STX) - { - status->parse_state = MAVLINK_PARSE_STATE_GOT_STX; - rxmsg->len = 0; - mavlink_start_checksum(rxmsg); - } - } - else - { - // Successfully got message - status->msg_received = 1; - status->parse_state = MAVLINK_PARSE_STATE_IDLE; - _MAV_PAYLOAD_NON_CONST(rxmsg)[status->packet_idx+1] = (char)c; - } - break; - } - - bufferIndex++; - // If a message has been sucessfully decoded, check index - if (status->msg_received == 1) - { - //while(status->current_seq != rxmsg->seq) - //{ - // status->packet_rx_drop_count++; - // status->current_seq++; - //} - status->current_rx_seq = rxmsg->seq; - // Initial condition: If no packet has been received so far, drop count is undefined - if (status->packet_rx_success_count == 0) status->packet_rx_drop_count = 0; - // Count this packet as received - status->packet_rx_success_count++; - } - - return status->msg_received; -} - - -// Raise a python exception -static void set_pyerror(const char *msg) { - PyErr_SetString(MAVNativeError, msg); -} - -// Pass assertion failures back to python (if we can) -extern void __assert_fail(const char *__assertion, const char *__file, unsigned int __line, const char *__function) -{ - char msg[256]; - - sprintf(msg, "Assertion failed: %s, %s:%d", __assertion, __file, __line); - - set_pyerror(msg); - longjmp(python_entry, 1); -} - - -static unsigned get_field_size(int field_type) { - unsigned fieldSize; - - switch(field_type) - { - case MAVLINK_TYPE_CHAR: - fieldSize = 1; - break; - case MAVLINK_TYPE_UINT8_T: - fieldSize = 1; - break; - case MAVLINK_TYPE_INT8_T: - fieldSize = 1; - break; - case MAVLINK_TYPE_UINT16_T: - fieldSize = 2; - break; - case MAVLINK_TYPE_INT16_T: - fieldSize = 2; - break; - case MAVLINK_TYPE_UINT32_T: - fieldSize = 4; - break; - case MAVLINK_TYPE_INT32_T: - fieldSize = 4; - break; - case MAVLINK_TYPE_UINT64_T: - fieldSize = 8; - break; - case MAVLINK_TYPE_INT64_T: - fieldSize = 8; - break; - case MAVLINK_TYPE_FLOAT: - fieldSize = 4; - break; - case MAVLINK_TYPE_DOUBLE: - fieldSize = 8; - break; - default: - mavdebug("BAD MAV TYPE %d\n", field_type); - set_pyerror("Unexpected mavlink type"); - fieldSize = 1; - } - - return fieldSize; -} - - -/** - * Given a python type character & array_size advance the wire_offset to the correct next value. - - * @return the equivalent C++ type code. - */ -static int get_py_typeinfo(char type_char, int array_size, unsigned *wire_offset) -{ - int type_code; - - switch(type_char) - { - case 'f': type_code = MAVLINK_TYPE_FLOAT; break; - case 'd': type_code = MAVLINK_TYPE_DOUBLE; break; - case 'c': type_code = MAVLINK_TYPE_CHAR; break; - case 'v': type_code = MAVLINK_TYPE_UINT8_T; break; - case 'b': type_code = MAVLINK_TYPE_INT8_T; break; - case 'B': type_code = MAVLINK_TYPE_UINT8_T; break; - case 'h': type_code = MAVLINK_TYPE_INT16_T; break; - case 'H': type_code = MAVLINK_TYPE_UINT16_T; break; - case 'i': type_code = MAVLINK_TYPE_INT32_T; break; - case 'I': type_code = MAVLINK_TYPE_UINT32_T; break; - case 'q': type_code = MAVLINK_TYPE_INT64_T; break; - case 'Q': type_code = MAVLINK_TYPE_UINT64_T; break; - default: - assert(0); - } - - int total_len = get_field_size(type_code) * (array_size == 0 ? 1 : array_size); - - *wire_offset += total_len; - - return type_code; -} - -/** - We preconvert message info from the C style representation to python objects (to minimize # of object allocs). - - FIXME - we really should free these PyObjects if our module gets unloaded. - - @param mavlink_map - the mavlink_map object from python a dict from an int msgid -> tuple(fmt, type_class, order_list, len_list, crc_extra) -*/ -static void init_message_info(PyObject *mavlink_map) { - // static const mavlink_message_info_t src[256] = MAVLINK_MESSAGE_INFO; - - PyObject *items_list = PyDict_Values(mavlink_map); - assert(items_list); // A list of the tuples in mavlink_map - - Py_ssize_t numMsgs = PyList_Size(items_list); - - int i; - for(i = 0; i < numMsgs; i++) { - PyObject *type_class = PyList_GetItem(items_list, i); // returns a _borrowed_ reference - assert(type_class); - - PyObject *id_obj = PyObject_GetAttrString(type_class, "id"); // A _new_ reference - assert(id_obj); - PyObject *name_obj = PyObject_GetAttrString(type_class, "name"); // A new reference - assert(name_obj); - PyObject *crc_extra_obj = PyObject_GetAttrString(type_class, "crc_extra"); // A new reference - assert(crc_extra_obj); - PyObject *fieldname_list = PyObject_GetAttrString(type_class, "ordered_fieldnames"); // A new reference - assert(fieldname_list); - //PyObject *order_list = PyObject_GetAttrString(type_class, "orders"); // A new reference - //assert(order_list); - PyObject *arrlen_list = PyObject_GetAttrString(type_class, "array_lengths"); // A new reference - assert(arrlen_list); - PyObject *type_format = PyObject_GetAttrString(type_class, "native_format"); // A new reference - assert(type_format); - char *type_str = PyByteArray_AsString(type_format); - assert(type_str); - - Py_ssize_t num_fields = PyList_Size(fieldname_list); - - uint8_t id = (uint8_t) PyInt_AsLong(id_obj); - py_message_info_t *d = &py_message_info[id]; - - d->id = id_obj; - d->name = name_obj; - d->num_fields = num_fields; - d->crc_extra = PyInt_AsLong(crc_extra_obj); - d->fieldnames = PyObject_GetAttrString(type_class, "fieldnames"); // A new reference - assert(d->fieldnames); - - int fnum; - unsigned wire_offset = 0; - for(fnum = 0; fnum < num_fields; fnum++) { - PyObject *field_name_obj = PyList_GetItem(fieldname_list, fnum); // returns a _borrowed_ reference - assert(field_name_obj); - Py_INCREF(field_name_obj); - - PyObject *len_obj = PyList_GetItem(arrlen_list, fnum); // returns a _borrowed_ reference - assert(len_obj); - - d->fields[fnum].name = field_name_obj; - d->fields[fnum].array_length = PyInt_AsLong(len_obj); - char type_char = type_str[1 + fnum]; - d->fields[fnum].wire_offset = wire_offset; // Store the current offset before advancing - d->fields[fnum].type = get_py_typeinfo(type_char, d->fields[fnum].array_length, &wire_offset); - } - d->len = wire_offset; - - Py_DECREF(crc_extra_obj); - Py_DECREF(arrlen_list); - Py_DECREF(type_format); - //Py_DECREF(order_list); - } - - Py_DECREF(items_list); -} - -static PyObject *createPyNone(void) -{ - Py_INCREF(Py_None); - return Py_None; -} - - - -/** - Set an attribute, but handing over ownership on the value -*/ -static void set_attribute(PyObject *obj, const char *attrName, PyObject *val) { - assert(val); - PyObject_SetAttrString(obj, attrName, val); - Py_DECREF(val); -} - - - -/** - Extract a field value from a mavlink msg - - @return possibly null if mavlink stream is corrupted (FIXME, caller should check) -*/ -static PyObject *pyextract_mavlink(const mavlink_message_t *msg, const py_field_info_t *field) { - unsigned offset = field->wire_offset; - int index; - - // For arrays of chars we build the result in a string instead of an array - PyObject *arrayResult = (field->array_length != 0 && field->type != MAVLINK_TYPE_CHAR) ? PyList_New(field->array_length) : NULL; - PyObject *stringResult = (field->array_length != 0 && field->type == MAVLINK_TYPE_CHAR) ? PyByteString_FromString("") : NULL; - PyObject *result = NULL; - - int numValues = (field->array_length == 0) ? 1 : field->array_length; - unsigned fieldSize = get_field_size(field->type); - - uint8_t string_ended = FALSE; - - if(arrayResult != NULL) - result = arrayResult; - - // Either build a full array of results, or return a single value - for(index = 0; index < numValues; index++) { - PyObject *val = NULL; - - switch(field->type) { - case MAVLINK_TYPE_CHAR: { - // If we are building a string, stop writing when we see a null char - char c = _MAV_RETURN_char(msg, offset); - - if(stringResult && c == 0) - string_ended = TRUE; - - val = PyByteString_FromStringAndSize(&c, 1); - break; - } - case MAVLINK_TYPE_UINT8_T: - val = PyInt_FromLong(_MAV_RETURN_uint8_t(msg, offset)); - break; - case MAVLINK_TYPE_INT8_T: - val = PyInt_FromLong(_MAV_RETURN_int8_t(msg, offset)); - break; - case MAVLINK_TYPE_UINT16_T: - val = PyInt_FromLong(_MAV_RETURN_uint16_t(msg, offset)); - break; - case MAVLINK_TYPE_INT16_T: - val = PyInt_FromLong(_MAV_RETURN_int16_t(msg, offset)); - break; - case MAVLINK_TYPE_UINT32_T: - val = PyLong_FromLong(_MAV_RETURN_uint32_t(msg, offset)); - break; - case MAVLINK_TYPE_INT32_T: - val = PyInt_FromLong(_MAV_RETURN_int32_t(msg, offset)); - break; - case MAVLINK_TYPE_UINT64_T: - val = PyLong_FromLongLong(_MAV_RETURN_uint64_t(msg, offset)); - break; - case MAVLINK_TYPE_INT64_T: - val = PyLong_FromLongLong(_MAV_RETURN_int64_t(msg, offset)); - break; - case MAVLINK_TYPE_FLOAT: - val = PyFloat_FromDouble(_MAV_RETURN_float(msg, offset)); - break; - case MAVLINK_TYPE_DOUBLE: - val = PyFloat_FromDouble(_MAV_RETURN_double(msg, offset)); - break; - default: - mavdebug("BAD MAV TYPE %d\n", field->type); - set_pyerror("Unexpected mavlink type"); - return NULL; - } - offset += fieldSize; - - assert(val); - if(arrayResult != NULL) - PyList_SetItem(arrayResult, index, val); - else if(stringResult != NULL) { - if(!string_ended) - PyByteString_ConcatAndDel(&stringResult, val); - else - Py_DECREF(val); // We didn't use this char - - result = stringResult; - } - else // Not building an array - result = val; - } - - assert(result); - return result; -} - - -/** - Convert a message to a valid python representation. - - @return new message, or null if a valid encoding could not be made - - FIXME - move msgclass, the mavstatus and channel context into an instance, created once with the mavfile object - */ -static PyObject *msg_to_py(PyObject* msgclass, const py_message_t *pymsg) { - const mavlink_message_t *msg = &pymsg->msg; - const py_message_info_t *info = &py_message_info[msg->msgid]; - - mavdebug("Found a msg: %s\n", PyString_AS_STRING(info->name)); - - /* Call the class object to create our instance */ - // PyObject *obj = PyObject_CallObject((PyObject *) &NativeConnectionType, null); - PyObject *argList = PyTuple_Pack(2, info->id, info->name); - PyObject *obj = PyObject_CallObject(msgclass, argList); - uint8_t objValid = TRUE; - assert(obj); - Py_DECREF(argList); - - // Find the header subobject - PyObject *header = PyObject_GetAttrString(obj, "_header"); - assert(header); - - // msgid already set in the constructor call - set_attribute(header, "mlen", PyInt_FromLong(msg->len)); - set_attribute(header, "seq", PyInt_FromLong(msg->seq)); - set_attribute(header, "srcSystem", PyInt_FromLong(msg->sysid)); - set_attribute(header, "srcComponent", PyInt_FromLong(msg->compid)); - Py_DECREF(header); - header = NULL; - - // FIXME - we should generate this expensive field only as needed (via a getattr override) - set_attribute(obj, "_msgbuf", PyByteArray_FromStringAndSize((const char *) pymsg->bytes, pymsg->numBytes)); - - // Now add all the fields - FIXME - do this lazily using getattr overrides - PyObject_SetAttrString(obj, "_fieldnames", info->fieldnames); // Will increment the reference count - - // FIXME - reuse the fieldnames list from python - so it is in the right order - - int fnum; - for(fnum = 0; fnum < info->num_fields && objValid; fnum++) { - const py_field_info_t *f = &info->fields[fnum]; - PyObject *val = pyextract_mavlink(msg, f); - - if(val != NULL) { - PyObject_SetAttr(obj, f->name, val); - Py_DECREF(val); // We no longer need val, the attribute will keep a ref - } - else - objValid = FALSE; - } - - if(objValid) - return obj; - else { - Py_DECREF(obj); - return NULL; - } -} - - -/** - * How many bytes would we like to read to complete current packet - */ -static int get_expectedlength(NativeConnection *self) -{ - int desired; - - mavlink_message_t *msg = &self->msg.msg; - - switch(self->mav_status.parse_state) { - case MAVLINK_PARSE_STATE_UNINIT: - case MAVLINK_PARSE_STATE_IDLE: - desired = 8; - break; - case MAVLINK_PARSE_STATE_GOT_STX: - desired = 7; - break; - case MAVLINK_PARSE_STATE_GOT_LENGTH: - desired = msg->len + 6; - break; - case MAVLINK_PARSE_STATE_GOT_SEQ: - desired = msg->len + 5; - break; - case MAVLINK_PARSE_STATE_GOT_SYSID: - desired = msg->len + 4; - break; - case MAVLINK_PARSE_STATE_GOT_COMPID: - desired = msg->len + 3; - break; - case MAVLINK_PARSE_STATE_GOT_MSGID: - desired = msg->len - self->mav_status.packet_idx + 2; - break; - case MAVLINK_PARSE_STATE_GOT_PAYLOAD: - desired = 2; - break; - case MAVLINK_PARSE_STATE_GOT_CRC1: - desired = 1; - break; - default: - // Huh? Just claim 1 - desired = 1; - break; - } - - mavdebug("in state %d, expected_length=%d\n", (int) self->mav_status.parse_state, desired); - return desired; -} - - -static PyObject *NativeConnection_getexpectedlength(NativeConnection *self, void *closure) -{ - return PyInt_FromLong(get_expectedlength(self)); -} - -/** - Given a byte array of bytes - @return a list of MAVProxy_message objects -*/ -static PyObject * -py_parse_chars(NativeConnection *self, PyObject *args) -{ - PYTHON_ENTRY - - PyObject* byteObj; - if (!PyArg_ParseTuple(args, "O", &byteObj)) { - set_pyerror("Invalid arguments"); - return NULL; - } - - assert(PyByteArray_Check(byteObj)); - Py_ssize_t numBytes = PyByteArray_Size(byteObj); - mavdebug("numbytes %u\n", (unsigned) numBytes); - - char *start = PyByteArray_AsString(byteObj); - assert(start); - char *bytes = start; - PyObject *result = NULL; - - // Generate a list of messages found - while(numBytes) { - char c = *bytes++; - numBytes--; - get_expectedlength(self); mavdebug("parse 0x%x\n", (unsigned char) c); - - if (py_mavlink_parse_char(c, &self->msg, &self->mav_status)) { - mavdebug("got packet\n"); - result = msg_to_py(self->MAVLinkMessage, &self->msg); - if(result != NULL) - break; - } - } - - // We didn't process all bytes provided by the caller, so fixup their array - memmove(start, bytes, numBytes); - PyByteArray_Resize(byteObj, numBytes); - - if(result != NULL) - return result; - else - return createPyNone(); - - PYTHON_EXIT -} - -/** - Given an string of bytes. - - This routine is more efficient than parse_chars, because it doesn't need to buffer characters. - - @return a list of MAVProxy_message objects -*/ -static PyObject * -py_parse_buffer(NativeConnection *self, PyObject *args) -{ - PYTHON_ENTRY - - mavdebug("Enter py_parse_buffer\n"); - - const char *bytes; - Py_ssize_t numBytes = 0; - - if (!PyArg_ParseTuple(args, "s#", &bytes, &numBytes)) { - set_pyerror("Invalid arguments"); - return NULL; - } - - // mavdebug("numbytes %u\n", (unsigned) numBytes); - - PyObject* list = PyList_New(0); - - // Generate a list of messages found - while(numBytes--) { - char c = *bytes++; - // mavdebug("parse %c\n", c); - - if (py_mavlink_parse_char(c, &self->msg, &self->mav_status)) { - PyObject *obj = msg_to_py(self->MAVLinkMessage, &self->msg); - if(obj != NULL) { - PyList_Append(list, obj); - - // Append will have bummped up the ref count on obj, so we need to release our count - Py_DECREF(obj); - } - } - } - - return list; - - PYTHON_EXIT -} - -static PyObject * -NativeConnection_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - NativeConnection *self = (NativeConnection *)type->tp_alloc(type, 0); - - mavdebug("new connection\n"); - return (PyObject *)self; -} - - -static int -NativeConnection_init(NativeConnection *self, PyObject *args, PyObject *kwds) -{ - PYTHON_ENTRY - - mavdebug("Enter init\n"); - - memset(&self->mav_status, 0, sizeof(self->mav_status)); - - PyObject* msgclass, *mavlink_map; - if (!PyArg_ParseTuple(args, "OO", &msgclass, &mavlink_map)) { - set_pyerror("Invalid arguments"); - return -1; - } - - // keep a ref to our mavlink instance constructor - assert(msgclass); - self->MAVLinkMessage = msgclass; - Py_INCREF(msgclass); - - assert(mavlink_map); - if(!info_inited) { - init_message_info(mavlink_map); - info_inited = TRUE; - } - - mavdebug("inited connection\n"); - return 0; - - PYTHON_EXIT_INT -} - -static void NativeConnection_dealloc(NativeConnection* self) -{ - Py_XDECREF(self->MAVLinkMessage); - Py_TYPE(self)->tp_free((PyObject*)self); -} - -static PyMemberDef NativeConnection_members[] = { - {NULL} /* Sentinel */ -}; - -static PyGetSetDef NativeConnection_getseters[] = { - {"expected_length", - (getter)NativeConnection_getexpectedlength, NULL, - "How many characters would the state-machine like to read now", - NULL}, - {NULL} /* Sentinel */ -}; - -static PyMethodDef NativeConnection_methods[] = { - {"parse_chars", (PyCFunction) py_parse_chars, METH_VARARGS, - "Given a msg class and an array of bytes, Parse chars, returning a message or None"}, - {"parse_buffer", (PyCFunction) py_parse_buffer, METH_VARARGS, - "Given a msg class and a string like object, Parse chars, returning a (possibly empty) list of messages"}, - {NULL, NULL}, -}; - -// FIXME - delete this? -static PyTypeObject NativeConnectionType = { -#if PY_MAJOR_VERSION >= 3 - PyVarObject_HEAD_INIT(NULL, 0) -#else - PyObject_HEAD_INIT(NULL) - 0, /* ob_size */ -#endif - "mavnative.NativeConnection", /* tp_name */ - sizeof(NativeConnection), /* tp_basicsize */ - 0, /* tp_itemsize */ - (destructor)NativeConnection_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | - Py_TPFLAGS_BASETYPE, /* tp_flags */ - "NativeConnection objects", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - NativeConnection_methods, /* tp_methods */ - NativeConnection_members, /* tp_members */ - NativeConnection_getseters, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - (initproc)NativeConnection_init, /* tp_init */ - 0, /* tp_alloc */ - NativeConnection_new, /* tp_new */ -}; - -#if PY_MAJOR_VERSION >= 3 -#define MOD_RETURN(m) return m -#else -#define MOD_RETURN(m) return -#endif - -PyMODINIT_FUNC -#if PY_MAJOR_VERSION >= 3 - PyInit_mavnative(void) -#else - initmavnative(void) -#endif -{ - if (PyType_Ready(&NativeConnectionType) < 0) - MOD_RETURN(NULL); - -#if PY_MAJOR_VERSION < 3 - static PyMethodDef ModuleMethods[] = { - {NULL, NULL, 0, NULL} /* Sentinel */ - }; - - PyObject *m = Py_InitModule3("mavnative", ModuleMethods, "Mavnative module"); - if (m == NULL) - MOD_RETURN(m); -#else - static PyModuleDef mod_def = { - PyModuleDef_HEAD_INIT, - "mavnative", - "EMavnative module", - -1, - NULL, NULL, NULL, NULL, NULL - }; - - PyObject *m = PyModule_Create(&mod_def); -#endif - - MAVNativeError = PyErr_NewException("mavnative.error", NULL, NULL); - Py_INCREF(MAVNativeError); - PyModule_AddObject(m, "error", MAVNativeError); - - Py_INCREF(&NativeConnectionType); - PyModule_AddObject(m, "NativeConnection", (PyObject *) &NativeConnectionType); - MOD_RETURN(m); -} diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavparm.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavparm.py deleted file mode 100644 index 9a95622bc..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavparm.py +++ /dev/null @@ -1,125 +0,0 @@ -''' -module for loading/saving sets of mavlink parameters -''' - -import fnmatch, math, time - -class MAVParmDict(dict): - def __init__(self, *args): - dict.__init__(self, args) - # some parameters should not be loaded from files - self.exclude_load = ['SYSID_SW_MREV', 'SYS_NUM_RESETS', 'ARSPD_OFFSET', 'GND_ABS_PRESS', - 'GND_TEMP', 'CMD_TOTAL', 'CMD_INDEX', 'LOG_LASTFILE', 'FENCE_TOTAL', - 'FORMAT_VERSION' ] - self.mindelta = 0.000001 - - - def mavset(self, mav, name, value, retries=3): - '''set a parameter on a mavlink connection''' - got_ack = False - while retries > 0 and not got_ack: - retries -= 1 - mav.param_set_send(name.upper(), float(value)) - tstart = time.time() - while time.time() - tstart < 1: - ack = mav.recv_match(type='PARAM_VALUE', blocking=False) - if ack == None: - time.sleep(0.1) - continue - if str(name).upper() == str(ack.param_id).upper(): - got_ack = True - self.__setitem__(name, float(value)) - break - if not got_ack: - print("timeout setting %s to %f" % (name, float(value))) - return False - return True - - - def save(self, filename, wildcard='*', verbose=False): - '''save parameters to a file''' - f = open(filename, mode='w') - k = list(self.keys()) - k.sort() - count = 0 - for p in k: - if p and fnmatch.fnmatch(str(p).upper(), wildcard.upper()): - f.write("%-16.16s %f\n" % (p, self.__getitem__(p))) - count += 1 - f.close() - if verbose: - print("Saved %u parameters to %s" % (count, filename)) - - - def load(self, filename, wildcard='*', mav=None, check=True): - '''load parameters from a file''' - try: - f = open(filename, mode='r') - except: - print("Failed to open file '%s'" % filename) - return False - count = 0 - changed = 0 - for line in f: - line = line.strip() - if not line or line[0] == "#": - continue - line = line.replace(',',' ') - a = line.split() - if len(a) != 2: - print("Invalid line: %s" % line) - continue - # some parameters should not be loaded from files - if a[0] in self.exclude_load: - continue - if not fnmatch.fnmatch(a[0].upper(), wildcard.upper()): - continue - if mav is not None: - if check: - if a[0] not in self.keys(): - print("Unknown parameter %s" % a[0]) - continue - old_value = self.__getitem__(a[0]) - if math.fabs(old_value - float(a[1])) <= self.mindelta: - count += 1 - continue - if self.mavset(mav, a[0], a[1]): - print("changed %s from %f to %f" % (a[0], old_value, float(a[1]))) - else: - print("set %s to %f" % (a[0], float(a[1]))) - self.mavset(mav, a[0], a[1]) - changed += 1 - else: - self.__setitem__(a[0], float(a[1])) - count += 1 - f.close() - if mav is not None: - print("Loaded %u parameters from %s (changed %u)" % (count, filename, changed)) - else: - print("Loaded %u parameters from %s" % (count, filename)) - return True - - def show(self, wildcard='*'): - '''show parameters''' - k = sorted(self.keys()) - for p in k: - if fnmatch.fnmatch(str(p).upper(), wildcard.upper()): - print("%-16.16s %f" % (str(p), self.get(p))) - - def diff(self, filename, wildcard='*'): - '''show differences with another parameter file''' - other = MAVParmDict() - if not other.load(filename): - return - keys = sorted(list(set(self.keys()).union(set(other.keys())))) - for k in keys: - if not fnmatch.fnmatch(str(k).upper(), wildcard.upper()): - continue - if not k in other: - print("%-16.16s %12.4f" % (k, self[k])) - elif not k in self: - print("%-16.16s %12.4f" % (k, other[k])) - elif abs(self[k] - other[k]) > self.mindelta: - print("%-16.16s %12.4f %12.4f" % (k, other[k], self[k])) - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavutil.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavutil.py deleted file mode 100644 index 56d13344c..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavutil.py +++ /dev/null @@ -1,1782 +0,0 @@ -#!/usr/bin/env python -''' -mavlink python utility functions - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later -''' - -import socket, math, struct, time, os, fnmatch, array, sys, errno -import select -from pymavlink import mavexpression - -# adding these extra imports allows pymavlink to be used directly with pyinstaller -# without having complex spec files. To allow for installs that don't have ardupilotmega -# at all we avoid throwing an exception if it isn't installed -try: - import json - from pymavlink.dialects.v10 import ardupilotmega -except Exception: - pass - -# maximum packet length for a single receive call - use the UDP limit -UDP_MAX_PACKET_LEN = 65535 - -# Store the MAVLink library for the currently-selected dialect -# (set by set_dialect()) -mavlink = None - -# Store the mavlink file currently being operated on -# (set by mavlink_connection()) -mavfile_global = None - -# If the caller hasn't specified a particular native/legacy version, use this -default_native = False - -# link_id used for signing -global_link_id = 0 - -# Use a globally-set MAVLink dialect if one has been specified as an environment variable. -if not 'MAVLINK_DIALECT' in os.environ: - os.environ['MAVLINK_DIALECT'] = 'ardupilotmega' - -def mavlink10(): - '''return True if using MAVLink 1.0 or later''' - return not 'MAVLINK09' in os.environ - -def mavlink20(): - '''return True if using MAVLink 2.0''' - return 'MAVLINK20' in os.environ - -def evaluate_expression(expression, vars): - '''evaluation an expression''' - return mavexpression.evaluate_expression(expression, vars) - -def evaluate_condition(condition, vars): - '''evaluation a conditional (boolean) statement''' - if condition is None: - return True - v = evaluate_expression(condition, vars) - if v is None: - return False - return v - -class location(object): - '''represent a GPS coordinate''' - def __init__(self, lat, lng, alt=0, heading=0): - self.lat = lat - self.lng = lng - self.alt = alt - self.heading = heading - - def __str__(self): - return "lat=%.6f,lon=%.6f,alt=%.1f" % (self.lat, self.lng, self.alt) - -def set_dialect(dialect): - '''set the MAVLink dialect to work with. - For example, set_dialect("ardupilotmega") - ''' - global mavlink, current_dialect - from .generator import mavparse - if 'MAVLINK20' in os.environ: - wire_protocol = mavparse.PROTOCOL_2_0 - modname = "pymavlink.dialects.v20." + dialect - elif mavlink is None or mavlink.WIRE_PROTOCOL_VERSION == "1.0" or not 'MAVLINK09' in os.environ: - wire_protocol = mavparse.PROTOCOL_1_0 - modname = "pymavlink.dialects.v10." + dialect - else: - wire_protocol = mavparse.PROTOCOL_0_9 - modname = "pymavlink.dialects.v09." + dialect - - try: - mod = __import__(modname) - except Exception: - # auto-generate the dialect module - from .generator.mavgen import mavgen_python_dialect - mavgen_python_dialect(dialect, wire_protocol) - mod = __import__(modname) - components = modname.split('.') - for comp in components[1:]: - mod = getattr(mod, comp) - current_dialect = dialect - mavlink = mod - -# Set the default dialect. This is done here as it needs to be after the function declaration -set_dialect(os.environ['MAVLINK_DIALECT']) - -class mavfile(object): - '''a generic mavlink port''' - def __init__(self, fd, address, source_system=255, notimestamps=False, input=True, use_native=default_native): - global mavfile_global - if input: - mavfile_global = self - self.fd = fd - self.address = address - self.messages = { 'MAV' : self } - if float(mavlink.WIRE_PROTOCOL_VERSION) >= 1: - self.messages['HOME'] = mavlink.MAVLink_gps_raw_int_message(0,0,0,0,0,0,0,0,0,0) - mavlink.MAVLink_waypoint_message = mavlink.MAVLink_mission_item_message - else: - self.messages['HOME'] = mavlink.MAVLink_gps_raw_message(0,0,0,0,0,0,0,0,0) - self.params = {} - self.target_system = 0 - self.target_component = 0 - self.source_system = source_system - self.first_byte = True - self.robust_parsing = True - self.mav = mavlink.MAVLink(self, srcSystem=self.source_system, use_native=use_native) - self.mav.robust_parsing = self.robust_parsing - self.logfile = None - self.logfile_raw = None - self.param_fetch_in_progress = False - self.param_fetch_complete = False - self.start_time = time.time() - self.flightmode = "UNKNOWN" - self.vehicle_type = "UNKNOWN" - self.mav_type = mavlink.MAV_TYPE_FIXED_WING - self.base_mode = 0 - self.timestamp = 0 - self.message_hooks = [] - self.idle_hooks = [] - self.uptime = 0.0 - self.notimestamps = notimestamps - self._timestamp = None - self.ground_pressure = None - self.ground_temperature = None - self.altitude = 0 - self.WIRE_PROTOCOL_VERSION = mavlink.WIRE_PROTOCOL_VERSION - self.last_seq = {} - self.mav_loss = 0 - self.mav_count = 0 - self.stop_on_EOF = False - self.portdead = False - - def auto_mavlink_version(self, buf): - '''auto-switch mavlink protocol version''' - global mavlink - if len(buf) == 0: - return - try: - magic = ord(buf[0]) - except: - magic = buf[0] - if not magic in [ 85, 254, 253 ]: - return - self.first_byte = False - if self.WIRE_PROTOCOL_VERSION == "0.9" and magic == 254: - self.WIRE_PROTOCOL_VERSION = "1.0" - set_dialect(current_dialect) - elif self.WIRE_PROTOCOL_VERSION == "1.0" and magic == 85: - self.WIRE_PROTOCOL_VERSION = "0.9" - os.environ['MAVLINK09'] = '1' - set_dialect(current_dialect) - elif self.WIRE_PROTOCOL_VERSION != "2.0" and magic == 253: - self.WIRE_PROTOCOL_VERSION = "2.0" - os.environ['MAVLINK20'] = '1' - set_dialect(current_dialect) - else: - return - # switch protocol - (callback, callback_args, callback_kwargs) = (self.mav.callback, - self.mav.callback_args, - self.mav.callback_kwargs) - self.mav = mavlink.MAVLink(self, srcSystem=self.source_system) - self.mav.robust_parsing = self.robust_parsing - self.WIRE_PROTOCOL_VERSION = mavlink.WIRE_PROTOCOL_VERSION - (self.mav.callback, self.mav.callback_args, self.mav.callback_kwargs) = (callback, - callback_args, - callback_kwargs) - - def recv(self, n=None): - '''default recv method''' - raise RuntimeError('no recv() method supplied') - - def close(self, n=None): - '''default close method''' - raise RuntimeError('no close() method supplied') - - def write(self, buf): - '''default write method''' - raise RuntimeError('no write() method supplied') - - - def select(self, timeout): - '''wait for up to timeout seconds for more data''' - if self.fd is None: - time.sleep(min(timeout,0.5)) - return True - try: - (rin, win, xin) = select.select([self.fd], [], [], timeout) - except select.error: - return False - return len(rin) == 1 - - def pre_message(self): - '''default pre message call''' - return - - def set_rtscts(self, enable): - '''enable/disable RTS/CTS if applicable''' - return - - def post_message(self, msg): - '''default post message call''' - if '_posted' in msg.__dict__: - return - msg._posted = True - msg._timestamp = time.time() - type = msg.get_type() - if type != 'HEARTBEAT' or (msg.type != mavlink.MAV_TYPE_GCS and msg.type != mavlink.MAV_TYPE_GIMBAL): - self.messages[type] = msg - - if 'usec' in msg.__dict__: - self.uptime = msg.usec * 1.0e-6 - if 'time_boot_ms' in msg.__dict__: - self.uptime = msg.time_boot_ms * 1.0e-3 - - if self._timestamp is not None: - if self.notimestamps: - msg._timestamp = self.uptime - else: - msg._timestamp = self._timestamp - - src_system = msg.get_srcSystem() - src_component = msg.get_srcComponent() - src_tuple = (src_system, src_component) - radio_tuple = (ord('3'), ord('D')) - if not (src_tuple == radio_tuple or msg.get_type() == 'BAD_DATA'): - if not src_tuple in self.last_seq: - last_seq = -1 - else: - last_seq = self.last_seq[src_tuple] - seq = (last_seq+1) % 256 - seq2 = msg.get_seq() - if seq != seq2 and last_seq != -1: - diff = (seq2 - seq) % 256 - self.mav_loss += diff - #print("lost %u seq=%u seq2=%u last_seq=%u src_system=%u %s" % (diff, seq, seq2, last_seq, src_system, msg.get_type())) - self.last_seq[src_tuple] = seq2 - self.mav_count += 1 - - self.timestamp = msg._timestamp - if type == 'HEARTBEAT' and msg.get_srcComponent() != mavlink.MAV_COMP_ID_GIMBAL: - self.target_system = msg.get_srcSystem() - self.target_component = msg.get_srcComponent() - if float(mavlink.WIRE_PROTOCOL_VERSION) >= 1 and msg.type != mavlink.MAV_TYPE_GCS: - self.flightmode = mode_string_v10(msg) - self.mav_type = msg.type - self.base_mode = msg.base_mode - elif type == 'PARAM_VALUE': - s = str(msg.param_id) - self.params[str(msg.param_id)] = msg.param_value - if msg.param_index+1 == msg.param_count: - self.param_fetch_in_progress = False - self.param_fetch_complete = True - elif type == 'SYS_STATUS' and mavlink.WIRE_PROTOCOL_VERSION == '0.9': - self.flightmode = mode_string_v09(msg) - elif type == 'GPS_RAW': - if self.messages['HOME'].fix_type < 2: - self.messages['HOME'] = msg - elif type == 'GPS_RAW_INT': - if self.messages['HOME'].fix_type < 3: - self.messages['HOME'] = msg - for hook in self.message_hooks: - hook(self, msg) - - if (msg.get_signed() and - self.mav.signing.link_id == 0 and - msg.get_link_id() != 0 and - self.target_system == msg.get_srcSystem() and - self.target_component == msg.get_srcComponent()): - # change to link_id from incoming packet - self.mav.signing.link_id = msg.get_link_id() - - - def packet_loss(self): - '''packet loss as a percentage''' - if self.mav_count == 0: - return 0 - return (100.0*self.mav_loss)/(self.mav_count+self.mav_loss) - - - def recv_msg(self): - '''message receive routine''' - self.pre_message() - while True: - n = self.mav.bytes_needed() - s = self.recv(n) - numnew = len(s) - - if numnew != 0: - if self.logfile_raw: - self.logfile_raw.write(str(s)) - if self.first_byte: - self.auto_mavlink_version(s) - - # We always call parse_char even if the new string is empty, because the existing message buf might already have some valid packet - # we can extract - msg = self.mav.parse_char(s) - if msg: - if self.logfile and msg.get_type() != 'BAD_DATA' : - usec = int(time.time() * 1.0e6) & ~3 - self.logfile.write(str(struct.pack('>Q', usec) + msg.get_msgbuf())) - self.post_message(msg) - return msg - else: - # if we failed to parse any messages _and_ no new bytes arrived, return immediately so the client has the option to - # timeout - if numnew == 0: - return None - - def recv_match(self, condition=None, type=None, blocking=False, timeout=None): - '''recv the next MAVLink message that matches the given condition - type can be a string or a list of strings''' - if type is not None and not isinstance(type, list): - type = [type] - start_time = time.time() - while True: - if timeout is not None: - now = time.time() - if now < start_time: - start_time = now # If an external process rolls back system time, we should not spin forever. - if start_time + timeout < time.time(): - return None - m = self.recv_msg() - if m is None: - if blocking: - for hook in self.idle_hooks: - hook(self) - if timeout is None: - self.select(0.05) - else: - self.select(timeout/2) - continue - return None - if type is not None and not m.get_type() in type: - continue - if not evaluate_condition(condition, self.messages): - continue - return m - - def check_condition(self, condition): - '''check if a condition is true''' - return evaluate_condition(condition, self.messages) - - def mavlink10(self): - '''return True if using MAVLink 1.0 or later''' - return float(self.WIRE_PROTOCOL_VERSION) >= 1 - - def mavlink20(self): - '''return True if using MAVLink 2.0 or later''' - return float(self.WIRE_PROTOCOL_VERSION) >= 2 - - def setup_logfile(self, logfile, mode='w'): - '''start logging to the given logfile, with timestamps''' - self.logfile = open(logfile, mode=mode) - - def setup_logfile_raw(self, logfile, mode='w'): - '''start logging raw bytes to the given logfile, without timestamps''' - self.logfile_raw = open(logfile, mode=mode) - - def wait_heartbeat(self, blocking=True): - '''wait for a heartbeat so we know the target system IDs''' - return self.recv_match(type='HEARTBEAT', blocking=blocking) - - def param_fetch_all(self): - '''initiate fetch of all parameters''' - if time.time() - getattr(self, 'param_fetch_start', 0) < 2.0: - # don't fetch too often - return - self.param_fetch_start = time.time() - self.param_fetch_in_progress = True - self.mav.param_request_list_send(self.target_system, self.target_component) - - def param_fetch_one(self, name): - '''initiate fetch of one parameter''' - try: - idx = int(name) - self.mav.param_request_read_send(self.target_system, self.target_component, "", idx) - except Exception: - self.mav.param_request_read_send(self.target_system, self.target_component, name, -1) - - def time_since(self, mtype): - '''return the time since the last message of type mtype was received''' - if not mtype in self.messages: - return time.time() - self.start_time - return time.time() - self.messages[mtype]._timestamp - - def param_set_send(self, parm_name, parm_value, parm_type=None): - '''wrapper for parameter set''' - if self.mavlink10(): - if parm_type == None: - parm_type = mavlink.MAVLINK_TYPE_FLOAT - self.mav.param_set_send(self.target_system, self.target_component, - parm_name, parm_value, parm_type) - else: - self.mav.param_set_send(self.target_system, self.target_component, - parm_name, parm_value) - - def waypoint_request_list_send(self): - '''wrapper for waypoint_request_list_send''' - if self.mavlink10(): - self.mav.mission_request_list_send(self.target_system, self.target_component) - else: - self.mav.waypoint_request_list_send(self.target_system, self.target_component) - - def waypoint_clear_all_send(self): - '''wrapper for waypoint_clear_all_send''' - if self.mavlink10(): - self.mav.mission_clear_all_send(self.target_system, self.target_component) - else: - self.mav.waypoint_clear_all_send(self.target_system, self.target_component) - - def waypoint_request_send(self, seq): - '''wrapper for waypoint_request_send''' - if self.mavlink10(): - self.mav.mission_request_send(self.target_system, self.target_component, seq) - else: - self.mav.waypoint_request_send(self.target_system, self.target_component, seq) - - def waypoint_set_current_send(self, seq): - '''wrapper for waypoint_set_current_send''' - if self.mavlink10(): - self.mav.mission_set_current_send(self.target_system, self.target_component, seq) - else: - self.mav.waypoint_set_current_send(self.target_system, self.target_component, seq) - - def waypoint_current(self): - '''return current waypoint''' - if self.mavlink10(): - m = self.recv_match(type='MISSION_CURRENT', blocking=True) - else: - m = self.recv_match(type='WAYPOINT_CURRENT', blocking=True) - return m.seq - - def waypoint_count_send(self, seq): - '''wrapper for waypoint_count_send''' - if self.mavlink10(): - self.mav.mission_count_send(self.target_system, self.target_component, seq) - else: - self.mav.waypoint_count_send(self.target_system, self.target_component, seq) - - def set_mode_flag(self, flag, enable): - ''' - Enables/ disables MAV_MODE_FLAG - @param flag The mode flag, - see MAV_MODE_FLAG enum - @param enable Enable the flag, (True/False) - ''' - if self.mavlink10(): - mode = self.base_mode - if (enable == True): - mode = mode | flag - elif (enable == False): - mode = mode & ~flag - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_DO_SET_MODE, 0, - mode, - 0, 0, 0, 0, 0, 0) - else: - print("Set mode flag not supported") - - def set_mode_auto(self): - '''enter auto mode''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_MISSION_START, 0, 0, 0, 0, 0, 0, 0, 0) - else: - MAV_ACTION_SET_AUTO = 13 - self.mav.action_send(self.target_system, self.target_component, MAV_ACTION_SET_AUTO) - - def mode_mapping(self): - '''return dictionary mapping mode names to numbers, or None if unknown''' - mav_type = self.field('HEARTBEAT', 'type', self.mav_type) - mav_autopilot = self.field('HEARTBEAT', 'autopilot', None) - if mav_autopilot == mavlink.MAV_AUTOPILOT_PX4: - return px4_map - if mav_type is None: - return None - map = None - if mav_type in [mavlink.MAV_TYPE_QUADROTOR, - mavlink.MAV_TYPE_HELICOPTER, - mavlink.MAV_TYPE_HEXAROTOR, - mavlink.MAV_TYPE_OCTOROTOR, - mavlink.MAV_TYPE_COAXIAL, - mavlink.MAV_TYPE_TRICOPTER]: - map = mode_mapping_acm - if mav_type == mavlink.MAV_TYPE_FIXED_WING: - map = mode_mapping_apm - if mav_type == mavlink.MAV_TYPE_GROUND_ROVER: - map = mode_mapping_rover - if mav_type == mavlink.MAV_TYPE_ANTENNA_TRACKER: - map = mode_mapping_tracker - if map is None: - return None - inv_map = dict((a, b) for (b, a) in list(map.items())) - return inv_map - - def set_mode_apm(self, mode, custom_mode = 0, custom_sub_mode = 0): - '''enter arbitrary mode''' - if isinstance(mode, str): - mode_map = self.mode_mapping() - if mode_map is None or mode not in mode_map: - print("Unknown mode '%s'" % mode) - return - mode = mode_map[mode] - # set mode by integer mode number for ArduPilot - self.mav.set_mode_send(self.target_system, - mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED, - mode) - - def set_mode_px4(self, mode, custom_mode, custom_sub_mode): - '''enter arbitrary mode''' - if isinstance(mode, str): - mode_map = self.mode_mapping() - if mode_map is None or mode not in mode_map: - print("Unknown mode '%s'" % mode) - return - # PX4 uses two fields to define modes - mode, custom_mode, custom_sub_mode = px4_map[mode] - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_DO_SET_MODE, 0, mode, custom_mode, custom_sub_mode, 0, 0, 0, 0) - - def set_mode(self, mode, custom_mode = 0, custom_sub_mode = 0): - '''set arbitrary flight mode''' - mav_autopilot = self.field('HEARTBEAT', 'autopilot', None) - if mav_autopilot == mavlink.MAV_AUTOPILOT_PX4: - self.set_mode_px4(mode, custom_mode, custom_sub_mode) - else: - self.set_mode_apm(mode) - - def set_mode_rtl(self): - '''enter RTL mode''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_NAV_RETURN_TO_LAUNCH, 0, 0, 0, 0, 0, 0, 0, 0) - else: - MAV_ACTION_RETURN = 3 - self.mav.action_send(self.target_system, self.target_component, MAV_ACTION_RETURN) - - def set_mode_manual(self): - '''enter MANUAL mode''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_DO_SET_MODE, 0, - mavlink.MAV_MODE_MANUAL_ARMED, - 0, 0, 0, 0, 0, 0) - else: - MAV_ACTION_SET_MANUAL = 12 - self.mav.action_send(self.target_system, self.target_component, MAV_ACTION_SET_MANUAL) - - def set_mode_fbwa(self): - '''enter FBWA mode''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_DO_SET_MODE, 0, - mavlink.MAV_MODE_STABILIZE_ARMED, - 0, 0, 0, 0, 0, 0) - else: - print("Forcing FBWA not supported") - - def set_mode_loiter(self): - '''enter LOITER mode''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_NAV_LOITER_UNLIM, 0, 0, 0, 0, 0, 0, 0, 0) - else: - MAV_ACTION_LOITER = 27 - self.mav.action_send(self.target_system, self.target_component, MAV_ACTION_LOITER) - - def set_servo(self, channel, pwm): - '''set a servo value''' - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_DO_SET_SERVO, 0, - channel, pwm, - 0, 0, 0, 0, 0) - - - def set_relay(self, relay_pin=0, state=True): - '''Set relay_pin to value of state''' - if self.mavlink10(): - self.mav.command_long_send( - self.target_system, # target_system - self.target_component, # target_component - mavlink.MAV_CMD_DO_SET_RELAY, # command - 0, # Confirmation - relay_pin, # Relay Number - int(state), # state (1 to indicate arm) - 0, # param3 (all other params meaningless) - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - else: - print("Setting relays not supported.") - - def calibrate_level(self): - '''calibrate accels (1D version)''' - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 1, 1, 0, 0, 0, 0, 0) - - def calibrate_pressure(self): - '''calibrate pressure''' - if self.mavlink10(): - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, 0, - 0, 0, 1, 0, 0, 0, 0) - else: - MAV_ACTION_CALIBRATE_PRESSURE = 20 - self.mav.action_send(self.target_system, self.target_component, MAV_ACTION_CALIBRATE_PRESSURE) - - def reboot_autopilot(self, hold_in_bootloader=False): - '''reboot the autopilot''' - if self.mavlink10(): - if hold_in_bootloader: - param1 = 3 - else: - param1 = 1 - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 0, - param1, 0, 0, 0, 0, 0, 0) - # send an old style reboot immediately afterwards in case it is an older firmware - # that doesn't understand the new convention - self.mav.command_long_send(self.target_system, self.target_component, - mavlink.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 0, - 1, 0, 0, 0, 0, 0, 0) - - def wait_gps_fix(self): - self.recv_match(type='VFR_HUD', blocking=True) - if self.mavlink10(): - self.recv_match(type='GPS_RAW_INT', blocking=True, - condition='GPS_RAW_INT.fix_type==3 and GPS_RAW_INT.lat != 0 and GPS_RAW_INT.alt != 0') - else: - self.recv_match(type='GPS_RAW', blocking=True, - condition='GPS_RAW.fix_type==2 and GPS_RAW.lat != 0 and GPS_RAW.alt != 0') - - def location(self, relative_alt=False): - '''return current location''' - self.wait_gps_fix() - # wait for another VFR_HUD, to ensure we have correct altitude - self.recv_match(type='VFR_HUD', blocking=True) - self.recv_match(type='GLOBAL_POSITION_INT', blocking=True) - if relative_alt: - alt = self.messages['GLOBAL_POSITION_INT'].relative_alt*0.001 - else: - alt = self.messages['VFR_HUD'].alt - return location(self.messages['GPS_RAW_INT'].lat*1.0e-7, - self.messages['GPS_RAW_INT'].lon*1.0e-7, - alt, - self.messages['VFR_HUD'].heading) - - def arducopter_arm(self): - '''arm motors (arducopter only)''' - if self.mavlink10(): - self.mav.command_long_send( - self.target_system, # target_system - self.target_component, - mavlink.MAV_CMD_COMPONENT_ARM_DISARM, # command - 0, # confirmation - 1, # param1 (1 to indicate arm) - 0, # param2 (all other params meaningless) - 0, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - - def arducopter_disarm(self): - '''calibrate pressure''' - if self.mavlink10(): - self.mav.command_long_send( - self.target_system, # target_system - self.target_component, - mavlink.MAV_CMD_COMPONENT_ARM_DISARM, # command - 0, # confirmation - 0, # param1 (0 to indicate disarm) - 0, # param2 (all other params meaningless) - 0, # param3 - 0, # param4 - 0, # param5 - 0, # param6 - 0) # param7 - - def motors_armed(self): - '''return true if motors armed''' - if not 'HEARTBEAT' in self.messages: - return False - m = self.messages['HEARTBEAT'] - return (m.base_mode & mavlink.MAV_MODE_FLAG_SAFETY_ARMED) != 0 - - def motors_armed_wait(self): - '''wait for motors to be armed''' - while True: - m = self.wait_heartbeat() - if self.motors_armed(): - return - - def motors_disarmed_wait(self): - '''wait for motors to be disarmed''' - while True: - m = self.wait_heartbeat() - if not self.motors_armed(): - return - - - def field(self, type, field, default=None): - '''convenient function for returning an arbitrary MAVLink - field with a default''' - if not type in self.messages: - return default - return getattr(self.messages[type], field, default) - - def param(self, name, default=None): - '''convenient function for returning an arbitrary MAVLink - parameter with a default''' - if not name in self.params: - return default - return self.params[name] - - def setup_signing(self, secret_key, sign_outgoing=True, allow_unsigned_callback=None, initial_timestamp=None, link_id=None): - '''setup for MAVLink2 signing''' - self.mav.signing.secret_key = secret_key - self.mav.signing.sign_outgoing = sign_outgoing - self.mav.signing.allow_unsigned_callback = allow_unsigned_callback - if link_id is None: - # auto-increment the link_id for each link - global global_link_id - link_id = global_link_id - global_link_id = min(global_link_id + 1, 255) - self.mav.signing.link_id = link_id - if initial_timestamp is None: - # timestamp is time since 1/1/2015 - epoch_offset = 1420070400 - now = max(time.time(), epoch_offset) - initial_timestamp = now - epoch_offset - initial_timestamp = int(initial_timestamp * 100 * 1000) - # initial_timestamp is in 10usec units - self.mav.signing.timestamp = initial_timestamp - - def disable_signing(self): - '''disable MAVLink2 signing''' - self.mav.signing.secret_key = None - self.mav.signing.sign_outgoing = False - self.mav.signing.allow_unsigned_callback = None - self.mav.signing.link_id = 0 - self.mav.signing.timestamp = 0 - -def set_close_on_exec(fd): - '''set the clone on exec flag on a file descriptor. Ignore exceptions''' - try: - import fcntl - flags = fcntl.fcntl(fd, fcntl.F_GETFD) - flags |= fcntl.FD_CLOEXEC - fcntl.fcntl(fd, fcntl.F_SETFD, flags) - except Exception: - pass - -class mavserial(mavfile): - '''a serial mavlink port''' - def __init__(self, device, baud=115200, autoreconnect=False, source_system=255, use_native=default_native): - import serial - if ',' in device and not os.path.exists(device): - device, baud = device.split(',') - self.baud = baud - self.device = device - self.autoreconnect = autoreconnect - # we rather strangely set the baudrate initially to 1200, then change to the desired - # baudrate. This works around a kernel bug on some Linux kernels where the baudrate - # is not set correctly - self.port = serial.Serial(self.device, 1200, timeout=0, - dsrdtr=False, rtscts=False, xonxoff=False) - try: - fd = self.port.fileno() - set_close_on_exec(fd) - except Exception: - fd = None - self.set_baudrate(self.baud) - mavfile.__init__(self, fd, device, source_system=source_system, use_native=use_native) - self.rtscts = False - - def set_rtscts(self, enable): - '''enable/disable RTS/CTS if applicable''' - try: - self.port.setRtsCts(enable) - except Exception: - self.port.rtscts = enable - self.rtscts = enable - - def set_baudrate(self, baudrate): - '''set baudrate''' - try: - self.port.setBaudrate(baudrate) - except Exception: - # for pySerial 3.0, which doesn't have setBaudrate() - self.port.baudrate = baudrate - - def close(self): - self.port.close() - - def recv(self,n=None): - if n is None: - n = self.mav.bytes_needed() - if self.fd is None: - waiting = self.port.inWaiting() - if waiting < n: - n = waiting - ret = self.port.read(n) - return ret - - def write(self, buf): - try: - if not isinstance(buf, str): - buf = str(buf) - return self.port.write(buf) - except Exception: - if not self.portdead: - print("Device %s is dead" % self.device) - self.portdead = True - if self.autoreconnect: - self.reset() - return -1 - - def reset(self): - import serial - try: - newport = serial.Serial(self.device, self.baud, timeout=0, - dsrdtr=False, rtscts=False, xonxoff=False) - self.port.close() - self.port = newport - print("Device %s reopened OK" % self.device) - self.portdead = False - try: - self.fd = self.port.fileno() - except Exception: - self.fd = None - if self.rtscts: - self.set_rtscts(self.rtscts) - return True - except Exception: - return False - - -class mavudp(mavfile): - '''a UDP mavlink socket''' - def __init__(self, device, input=True, broadcast=False, source_system=255, use_native=default_native): - a = device.split(':') - if len(a) != 2: - print("UDP ports must be specified as host:port") - sys.exit(1) - self.port = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - self.udp_server = input - self.broadcast = False - if input: - self.port.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - self.port.bind((a[0], int(a[1]))) - else: - self.destination_addr = (a[0], int(a[1])) - if broadcast: - self.port.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) - self.broadcast = True - set_close_on_exec(self.port.fileno()) - self.port.setblocking(0) - self.last_address = None - mavfile.__init__(self, self.port.fileno(), device, source_system=source_system, input=input, use_native=use_native) - - def close(self): - self.port.close() - - def recv(self,n=None): - try: - data, new_addr = self.port.recvfrom(UDP_MAX_PACKET_LEN) - except socket.error as e: - if e.errno in [ errno.EAGAIN, errno.EWOULDBLOCK, errno.ECONNREFUSED ]: - return "" - raise - if self.udp_server or self.broadcast: - self.last_address = new_addr - return data - - def write(self, buf): - try: - if self.udp_server: - if self.last_address: - self.port.sendto(buf, self.last_address) - else: - if self.last_address and self.broadcast: - self.destination_addr = self.last_address - self.broadcast = False - self.port.connect(self.destination_addr) - self.port.sendto(buf, self.destination_addr) - except socket.error: - pass - - def recv_msg(self): - '''message receive routine for UDP link''' - self.pre_message() - s = self.recv() - if len(s) > 0: - if self.first_byte: - self.auto_mavlink_version(s) - - m = self.mav.parse_char(s) - if m is not None: - self.post_message(m) - - return m - - -class mavtcp(mavfile): - '''a TCP mavlink socket''' - def __init__(self, device, source_system=255, retries=3, use_native=default_native): - a = device.split(':') - if len(a) != 2: - print("TCP ports must be specified as host:port") - sys.exit(1) - self.port = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.destination_addr = (a[0], int(a[1])) - while retries >= 0: - retries -= 1 - if retries <= 0: - self.port.connect(self.destination_addr) - else: - try: - self.port.connect(self.destination_addr) - break - except Exception as e: - if retries > 0: - print(e, "sleeping") - time.sleep(1) - continue - self.port.setblocking(0) - set_close_on_exec(self.port.fileno()) - self.port.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) - mavfile.__init__(self, self.port.fileno(), "tcp:" + device, source_system=source_system, use_native=use_native) - - def close(self): - self.port.close() - - def recv(self,n=None): - if n is None: - n = self.mav.bytes_needed() - try: - data = self.port.recv(n) - except socket.error as e: - if e.errno in [ errno.EAGAIN, errno.EWOULDBLOCK ]: - return "" - raise - return data - - def write(self, buf): - try: - self.port.send(buf) - except socket.error: - pass - - -class mavtcpin(mavfile): - '''a TCP input mavlink socket''' - def __init__(self, device, source_system=255, retries=3, use_native=default_native): - a = device.split(':') - if len(a) != 2: - print("TCP ports must be specified as host:port") - sys.exit(1) - self.listen = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.listen_addr = (a[0], int(a[1])) - self.listen.bind(self.listen_addr) - self.listen.listen(1) - self.listen.setblocking(0) - set_close_on_exec(self.listen.fileno()) - self.listen.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) - mavfile.__init__(self, self.listen.fileno(), "tcpin:" + device, source_system=source_system, use_native=use_native) - self.port = None - - def close(self): - self.listen.close() - - def recv(self,n=None): - if not self.port: - try: - (self.port, addr) = self.listen.accept() - except Exception: - return '' - self.port.setsockopt(socket.SOL_TCP, socket.TCP_NODELAY, 1) - self.port.setblocking(0) - set_close_on_exec(self.port.fileno()) - self.fd = self.port.fileno() - - if n is None: - n = self.mav.bytes_needed() - try: - data = self.port.recv(n) - except socket.error as e: - if e.errno in [ errno.EAGAIN, errno.EWOULDBLOCK ]: - return "" - self.port.close() - self.port = None - self.fd = self.listen.fileno() - return '' - return data - - def write(self, buf): - if self.port is None: - return - try: - self.port.send(buf) - except socket.error as e: - if e.errno in [ errno.EPIPE ]: - self.port.close() - self.port = None - self.fd = self.listen.fileno() - pass - - -class mavlogfile(mavfile): - '''a MAVLink logfile reader/writer''' - def __init__(self, filename, planner_format=None, - write=False, append=False, - robust_parsing=True, notimestamps=False, source_system=255, use_native=default_native): - self.filename = filename - self.writeable = write - self.robust_parsing = robust_parsing - self.planner_format = planner_format - self._two64 = math.pow(2.0, 63) - mode = 'rb' - if self.writeable: - if append: - mode = 'ab' - else: - mode = 'wb' - self.f = open(filename, mode) - self.filesize = os.path.getsize(filename) - self.percent = 0 - mavfile.__init__(self, None, filename, source_system=source_system, notimestamps=notimestamps, use_native=use_native) - if self.notimestamps: - self._timestamp = 0 - else: - self._timestamp = time.time() - self.stop_on_EOF = True - self._last_message = None - self._last_timestamp = None - - def close(self): - self.f.close() - - def recv(self,n=None): - if n is None: - n = self.mav.bytes_needed() - return self.f.read(n) - - def write(self, buf): - self.f.write(buf) - - def scan_timestamp(self, tbuf): - '''scan forward looking in a tlog for a timestamp in a reasonable range''' - while True: - (tusec,) = struct.unpack('>Q', tbuf) - t = tusec * 1.0e-6 - if abs(t - self._last_timestamp) <= 3*24*60*60: - break - c = self.f.read(1) - if len(c) != 1: - break - tbuf = tbuf[1:] + c - return t - - - def pre_message(self): - '''read timestamp if needed''' - # read the timestamp - if self.filesize != 0: - self.percent = (100.0 * self.f.tell()) / self.filesize - if self.notimestamps: - return - if self.planner_format: - tbuf = self.f.read(21) - if len(tbuf) != 21 or tbuf[0] != '-' or tbuf[20] != ':': - raise RuntimeError('bad planner timestamp %s' % tbuf) - hnsec = self._two64 + float(tbuf[0:20]) - t = hnsec * 1.0e-7 # convert to seconds - t -= 719163 * 24 * 60 * 60 # convert to 1970 base - self._link = 0 - else: - tbuf = self.f.read(8) - if len(tbuf) != 8: - return - (tusec,) = struct.unpack('>Q', tbuf) - t = tusec * 1.0e-6 - if (self._last_timestamp is not None and - self._last_message.get_type() == "BAD_DATA" and - abs(t - self._last_timestamp) > 3*24*60*60): - t = self.scan_timestamp(tbuf) - self._link = tusec & 0x3 - self._timestamp = t - - def post_message(self, msg): - '''add timestamp to message''' - # read the timestamp - super(mavlogfile, self).post_message(msg) - if self.planner_format: - self.f.read(1) # trailing newline - self.timestamp = msg._timestamp - self._last_message = msg - if msg.get_type() != "BAD_DATA": - self._last_timestamp = msg._timestamp - msg._link = self._link - - -class mavmemlog(mavfile): - '''a MAVLink log in memory. This allows loading a log into - memory to make it easier to do multiple sweeps over a log''' - def __init__(self, mav): - mavfile.__init__(self, None, 'memlog') - self._msgs = [] - self._index = 0 - self._count = 0 - self.messages = {} - while True: - m = mav.recv_msg() - if m is None: - break - self._msgs.append(m) - self._count = len(self._msgs) - - def recv_msg(self): - '''message receive routine''' - if self._index >= self._count: - return None - m = self._msgs[self._index] - self._index += 1 - self.percent = (100.0 * self._index) / self._count - self.messages[m.get_type()] = m - return m - - def rewind(self): - '''rewind to start''' - self._index = 0 - self.percent = 0 - self.messages = {} - -class mavchildexec(mavfile): - '''a MAVLink child processes reader/writer''' - def __init__(self, filename, source_system=255, use_native=default_native): - from subprocess import Popen, PIPE - import fcntl - - self.filename = filename - self.child = Popen(filename, shell=False, stdout=PIPE, stdin=PIPE, bufsize=0) - self.fd = self.child.stdout.fileno() - - fl = fcntl.fcntl(self.fd, fcntl.F_GETFL) - fcntl.fcntl(self.fd, fcntl.F_SETFL, fl | os.O_NONBLOCK) - - fl = fcntl.fcntl(self.child.stdout.fileno(), fcntl.F_GETFL) - fcntl.fcntl(self.child.stdout.fileno(), fcntl.F_SETFL, fl | os.O_NONBLOCK) - - mavfile.__init__(self, self.fd, filename, source_system=source_system, use_native=use_native) - - def close(self): - self.child.close() - - def recv(self,n=None): - try: - x = self.child.stdout.read(1) - except Exception: - return '' - return x - - def write(self, buf): - self.child.stdin.write(buf) - - -def mavlink_connection(device, baud=115200, source_system=255, - planner_format=None, write=False, append=False, - robust_parsing=True, notimestamps=False, input=True, - dialect=None, autoreconnect=False, zero_time_base=False, - retries=3, use_native=default_native): - '''open a serial, UDP, TCP or file mavlink connection''' - global mavfile_global - - if dialect is not None: - set_dialect(dialect) - if device.startswith('tcp:'): - return mavtcp(device[4:], source_system=source_system, retries=retries, use_native=use_native) - if device.startswith('tcpin:'): - return mavtcpin(device[6:], source_system=source_system, retries=retries, use_native=use_native) - if device.startswith('udpin:'): - return mavudp(device[6:], input=True, source_system=source_system, use_native=use_native) - if device.startswith('udpout:'): - return mavudp(device[7:], input=False, source_system=source_system, use_native=use_native) - if device.startswith('udpbcast:'): - return mavudp(device[9:], input=False, source_system=source_system, use_native=use_native, broadcast=True) - # For legacy purposes we accept the following syntax and let the caller to specify direction - if device.startswith('udp:'): - return mavudp(device[4:], input=input, source_system=source_system, use_native=use_native) - - if device.lower().endswith('.bin') or device.lower().endswith('.px4log'): - # support dataflash logs - from pymavlink import DFReader - m = DFReader.DFReader_binary(device, zero_time_base=zero_time_base) - mavfile_global = m - return m - - if device.endswith('.log'): - # support dataflash text logs - from pymavlink import DFReader - if DFReader.DFReader_is_text_log(device): - m = DFReader.DFReader_text(device, zero_time_base=zero_time_base) - mavfile_global = m - return m - - # list of suffixes to prevent setting DOS paths as UDP sockets - logsuffixes = ['mavlink', 'log', 'raw', 'tlog' ] - suffix = device.split('.')[-1].lower() - if device.find(':') != -1 and not suffix in logsuffixes: - return mavudp(device, source_system=source_system, input=input, use_native=use_native) - if os.path.isfile(device): - if device.endswith(".elf") or device.find("/bin/") != -1: - print("executing '%s'" % device) - return mavchildexec(device, source_system=source_system, use_native=use_native) - else: - return mavlogfile(device, planner_format=planner_format, write=write, - append=append, robust_parsing=robust_parsing, notimestamps=notimestamps, - source_system=source_system, use_native=use_native) - return mavserial(device, baud=baud, source_system=source_system, autoreconnect=autoreconnect, use_native=use_native) - -class periodic_event(object): - '''a class for fixed frequency events''' - def __init__(self, frequency): - self.frequency = float(frequency) - self.last_time = time.time() - - def force(self): - '''force immediate triggering''' - self.last_time = 0 - - def trigger(self): - '''return True if we should trigger now''' - tnow = time.time() - - if tnow < self.last_time: - print("Warning, time moved backwards. Restarting timer.") - self.last_time = tnow - - if self.last_time + (1.0/self.frequency) <= tnow: - self.last_time = tnow - return True - return False - - -try: - from curses import ascii - have_ascii = True -except: - have_ascii = False - -def is_printable(c): - '''see if a character is printable''' - global have_ascii - if have_ascii: - return ascii.isprint(c) - if isinstance(c, int): - ic = c - else: - ic = ord(c) - return ic >= 32 and ic <= 126 - -def all_printable(buf): - '''see if a string is all printable''' - for c in buf: - if not is_printable(c) and not c in ['\r', '\n', '\t']: - return False - return True - -class SerialPort(object): - '''auto-detected serial port''' - def __init__(self, device, description=None, hwid=None): - self.device = device - self.description = description - self.hwid = hwid - - def __str__(self): - ret = self.device - if self.description is not None: - ret += " : " + self.description - if self.hwid is not None: - ret += " : " + self.hwid - return ret - -def auto_detect_serial_win32(preferred_list=['*']): - '''try to auto-detect serial ports on win32''' - try: - from serial.tools.list_ports_windows import comports - list = sorted(comports()) - except: - return [] - ret = [] - others = [] - for port, description, hwid in list: - matches = False - p = SerialPort(port, description=description, hwid=hwid) - for preferred in preferred_list: - if fnmatch.fnmatch(description, preferred) or fnmatch.fnmatch(hwid, preferred): - matches = True - if matches: - ret.append(p) - else: - others.append(p) - if len(ret) > 0: - return ret - # now the rest - ret.extend(others) - return ret - - - - -def auto_detect_serial_unix(preferred_list=['*']): - '''try to auto-detect serial ports on unix''' - import glob - glist = glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') + glob.glob('/dev/serial/by-id/*') - ret = [] - others = [] - # try preferred ones first - for d in glist: - matches = False - for preferred in preferred_list: - if fnmatch.fnmatch(d, preferred): - matches = True - if matches: - ret.append(SerialPort(d)) - else: - others.append(SerialPort(d)) - if len(ret) > 0: - return ret - ret.extend(others) - return ret - -def auto_detect_serial(preferred_list=['*']): - '''try to auto-detect serial port''' - # see if - if os.name == 'nt': - return auto_detect_serial_win32(preferred_list=preferred_list) - return auto_detect_serial_unix(preferred_list=preferred_list) - -def mode_string_v09(msg): - '''mode string for 0.9 protocol''' - mode = msg.mode - nav_mode = msg.nav_mode - - MAV_MODE_UNINIT = 0 - MAV_MODE_MANUAL = 2 - MAV_MODE_GUIDED = 3 - MAV_MODE_AUTO = 4 - MAV_MODE_TEST1 = 5 - MAV_MODE_TEST2 = 6 - MAV_MODE_TEST3 = 7 - - MAV_NAV_GROUNDED = 0 - MAV_NAV_LIFTOFF = 1 - MAV_NAV_HOLD = 2 - MAV_NAV_WAYPOINT = 3 - MAV_NAV_VECTOR = 4 - MAV_NAV_RETURNING = 5 - MAV_NAV_LANDING = 6 - MAV_NAV_LOST = 7 - MAV_NAV_LOITER = 8 - - cmode = (mode, nav_mode) - mapping = { - (MAV_MODE_UNINIT, MAV_NAV_GROUNDED) : "INITIALISING", - (MAV_MODE_MANUAL, MAV_NAV_VECTOR) : "MANUAL", - (MAV_MODE_TEST3, MAV_NAV_VECTOR) : "CIRCLE", - (MAV_MODE_GUIDED, MAV_NAV_VECTOR) : "GUIDED", - (MAV_MODE_TEST1, MAV_NAV_VECTOR) : "STABILIZE", - (MAV_MODE_TEST2, MAV_NAV_LIFTOFF) : "FBWA", - (MAV_MODE_AUTO, MAV_NAV_WAYPOINT) : "AUTO", - (MAV_MODE_AUTO, MAV_NAV_RETURNING) : "RTL", - (MAV_MODE_AUTO, MAV_NAV_LOITER) : "LOITER", - (MAV_MODE_AUTO, MAV_NAV_LIFTOFF) : "TAKEOFF", - (MAV_MODE_AUTO, MAV_NAV_LANDING) : "LANDING", - (MAV_MODE_AUTO, MAV_NAV_HOLD) : "LOITER", - (MAV_MODE_GUIDED, MAV_NAV_VECTOR) : "GUIDED", - (MAV_MODE_GUIDED, MAV_NAV_WAYPOINT) : "GUIDED", - (100, MAV_NAV_VECTOR) : "STABILIZE", - (101, MAV_NAV_VECTOR) : "ACRO", - (102, MAV_NAV_VECTOR) : "ALT_HOLD", - (107, MAV_NAV_VECTOR) : "CIRCLE", - (109, MAV_NAV_VECTOR) : "LAND", - } - if cmode in mapping: - return mapping[cmode] - return "Mode(%s,%s)" % cmode - -mode_mapping_apm = { - 0 : 'MANUAL', - 1 : 'CIRCLE', - 2 : 'STABILIZE', - 3 : 'TRAINING', - 4 : 'ACRO', - 5 : 'FBWA', - 6 : 'FBWB', - 7 : 'CRUISE', - 8 : 'AUTOTUNE', - 10 : 'AUTO', - 11 : 'RTL', - 12 : 'LOITER', - 14 : 'LAND', - 15 : 'GUIDED', - 16 : 'INITIALISING', - 17 : 'QSTABILIZE', - 18 : 'QHOVER', - 19 : 'QLOITER', - 20 : 'QLAND', - 21 : 'QRTL', - } -mode_mapping_acm = { - 0 : 'STABILIZE', - 1 : 'ACRO', - 2 : 'ALT_HOLD', - 3 : 'AUTO', - 4 : 'GUIDED', - 5 : 'LOITER', - 6 : 'RTL', - 7 : 'CIRCLE', - 8 : 'POSITION', - 9 : 'LAND', - 10 : 'OF_LOITER', - 11 : 'DRIFT', - 13 : 'SPORT', - 14 : 'FLIP', - 15 : 'AUTOTUNE', - 16 : 'POSHOLD', - 17 : 'BRAKE', - 18 : 'THROW', - 19 : 'AVOID_ADSB', - } -mode_mapping_rover = { - 0 : 'MANUAL', - 2 : 'LEARNING', - 3 : 'STEERING', - 4 : 'HOLD', - 10 : 'AUTO', - 11 : 'RTL', - 15 : 'GUIDED', - 16 : 'INITIALISING' - } - -mode_mapping_tracker = { - 0 : 'MANUAL', - 1 : 'STOP', - 2 : 'SCAN', - 10 : 'AUTO', - 16 : 'INITIALISING' - } - -# map from a PX4 "main_state" to a string; see msg/commander_state.msg -# This allows us to map sdlog STAT.MainState to a simple "mode" -# string, used in DFReader and possibly other places. These are -# related but distict from what is found in mavlink messages; see -# "Custom mode definitions", below. -mainstate_mapping_px4 = { - 0 : 'MANUAL', - 1 : 'ALTCTL', - 2 : 'POSCTL', - 3 : 'AUTO_MISSION', - 4 : 'AUTO_LOITER', - 5 : 'AUTO_RTL', - 6 : 'ACRO', - 7 : 'OFFBOARD', - 8 : 'STAB', - 9 : 'RATTITUDE', - 10 : 'AUTO_TAKEOFF', - 11 : 'AUTO_LAND', - 12 : 'AUTO_FOLLOW_TARGET', - 13 : 'MAX', -} -def mode_string_px4(MainState): - return mainstate_mapping_px4.get(MainState, "Unknown") - - -# Custom mode definitions from PX4 -PX4_CUSTOM_MAIN_MODE_MANUAL = 1 -PX4_CUSTOM_MAIN_MODE_ALTCTL = 2 -PX4_CUSTOM_MAIN_MODE_POSCTL = 3 -PX4_CUSTOM_MAIN_MODE_AUTO = 4 -PX4_CUSTOM_MAIN_MODE_ACRO = 5 -PX4_CUSTOM_MAIN_MODE_OFFBOARD = 6 -PX4_CUSTOM_MAIN_MODE_STABILIZED = 7 -PX4_CUSTOM_MAIN_MODE_RATTITUDE = 8 - -PX4_CUSTOM_SUB_MODE_AUTO_READY = 1 -PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF = 2 -PX4_CUSTOM_SUB_MODE_AUTO_LOITER = 3 -PX4_CUSTOM_SUB_MODE_AUTO_MISSION = 4 -PX4_CUSTOM_SUB_MODE_AUTO_RTL = 5 -PX4_CUSTOM_SUB_MODE_AUTO_LAND = 6 -PX4_CUSTOM_SUB_MODE_AUTO_RTGS = 7 -PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_TARGET = 8 - -auto_mode_flags = mavlink.MAV_MODE_FLAG_AUTO_ENABLED \ - | mavlink.MAV_MODE_FLAG_STABILIZE_ENABLED \ - | mavlink.MAV_MODE_FLAG_GUIDED_ENABLED - -px4_map = { "MANUAL": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_STABILIZE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_MANUAL, 0 ), - "STABILIZED": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_STABILIZE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_STABILIZED, 0 ), - "ACRO": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_ACRO, 0 ), - "RATTITUDE": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0 ), - "ALTCTL": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_STABILIZE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_ALTCTL, 0 ), - "POSCTL": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | mavlink.MAV_MODE_FLAG_STABILIZE_ENABLED | mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, PX4_CUSTOM_MAIN_MODE_POSCTL, 0 ), - "LOITER": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | auto_mode_flags, PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LOITER ), - "MISSION": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | auto_mode_flags, PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_MISSION ), - "RTL": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | auto_mode_flags, PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL ), - "FOLLOWME": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | auto_mode_flags, PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_TARGET ), - "OFFBOARD": (mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED | auto_mode_flags, PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0 )} - - -def interpret_px4_mode(base_mode, custom_mode): - custom_main_mode = (custom_mode & 0xFF0000) >> 16 - custom_sub_mode = (custom_mode & 0xFF000000) >> 24 - - if base_mode & mavlink.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED != 0: #manual modes - if custom_main_mode == PX4_CUSTOM_MAIN_MODE_MANUAL: - return "MANUAL" - elif custom_main_mode == PX4_CUSTOM_MAIN_MODE_ACRO: - return "ACRO" - elif custom_main_mode == PX4_CUSTOM_MAIN_MODE_RATTITUDE: - return "RATTITUDE" - elif custom_main_mode == PX4_CUSTOM_MAIN_MODE_STABILIZED: - return "STABILIZED" - elif custom_main_mode == PX4_CUSTOM_MAIN_MODE_ALTCTL: - return "ALTCTL" - elif custom_main_mode == PX4_CUSTOM_MAIN_MODE_POSCTL: - return "POSCTL" - elif (base_mode & auto_mode_flags) == auto_mode_flags: #auto modes - if custom_main_mode & PX4_CUSTOM_MAIN_MODE_AUTO != 0: - if custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_MISSION: - return "TAKEOFF" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_TAKEOFF: - return "MISSION" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_LOITER: - return "LOITER" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_TARGET: - return "FOLLOWME" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_RTL: - return "RTL" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_LAND: - return "LAND" - elif custom_sub_mode == PX4_CUSTOM_SUB_MODE_AUTO_RTGS: - return "RTGS" - elif custom_sub_mode == PX4_CUSTOM_MAIN_MODE_OFFBOARD: - return "OFFBOARD" - return "UNKNOWN" - -def mode_mapping_byname(mav_type): - '''return dictionary mapping mode names to numbers, or None if unknown''' - map = None - if mav_type in [mavlink.MAV_TYPE_QUADROTOR, - mavlink.MAV_TYPE_HELICOPTER, - mavlink.MAV_TYPE_HEXAROTOR, - mavlink.MAV_TYPE_OCTOROTOR, - mavlink.MAV_TYPE_COAXIAL, - mavlink.MAV_TYPE_TRICOPTER]: - map = mode_mapping_acm - if mav_type == mavlink.MAV_TYPE_FIXED_WING: - map = mode_mapping_apm - if mav_type == mavlink.MAV_TYPE_GROUND_ROVER: - map = mode_mapping_rover - if mav_type == mavlink.MAV_TYPE_ANTENNA_TRACKER: - map = mode_mapping_tracker - if map is None: - return None - inv_map = dict((a, b) for (b, a) in map.items()) - return inv_map - -def mode_mapping_bynumber(mav_type): - '''return dictionary mapping mode numbers to name, or None if unknown''' - map = None - if mav_type in [mavlink.MAV_TYPE_QUADROTOR, - mavlink.MAV_TYPE_HELICOPTER, - mavlink.MAV_TYPE_HEXAROTOR, - mavlink.MAV_TYPE_OCTOROTOR, - mavlink.MAV_TYPE_COAXIAL, - mavlink.MAV_TYPE_TRICOPTER]: - map = mode_mapping_acm - if mav_type == mavlink.MAV_TYPE_FIXED_WING: - map = mode_mapping_apm - if mav_type == mavlink.MAV_TYPE_GROUND_ROVER: - map = mode_mapping_rover - if mav_type == mavlink.MAV_TYPE_ANTENNA_TRACKER: - map = mode_mapping_tracker - if map is None: - return None - return map - - -def mode_string_v10(msg): - '''mode string for 1.0 protocol, from heartbeat''' - if msg.autopilot == mavlink.MAV_AUTOPILOT_PX4: - return interpret_px4_mode(msg.base_mode, msg.custom_mode) - if not msg.base_mode & mavlink.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED: - return "Mode(0x%08x)" % msg.base_mode - if msg.type in [ mavlink.MAV_TYPE_QUADROTOR, mavlink.MAV_TYPE_HEXAROTOR, - mavlink.MAV_TYPE_OCTOROTOR, mavlink.MAV_TYPE_TRICOPTER, - mavlink.MAV_TYPE_COAXIAL, - mavlink.MAV_TYPE_HELICOPTER ]: - if msg.custom_mode in mode_mapping_acm: - return mode_mapping_acm[msg.custom_mode] - if msg.type == mavlink.MAV_TYPE_FIXED_WING: - if msg.custom_mode in mode_mapping_apm: - return mode_mapping_apm[msg.custom_mode] - if msg.type == mavlink.MAV_TYPE_GROUND_ROVER: - if msg.custom_mode in mode_mapping_rover: - return mode_mapping_rover[msg.custom_mode] - if msg.type == mavlink.MAV_TYPE_ANTENNA_TRACKER: - if msg.custom_mode in mode_mapping_tracker: - return mode_mapping_tracker[msg.custom_mode] - return "Mode(%u)" % msg.custom_mode - -def mode_string_apm(mode_number): - '''return mode string for APM:Plane''' - if mode_number in mode_mapping_apm: - return mode_mapping_apm[mode_number] - return "Mode(%u)" % mode_number - -def mode_string_acm(mode_number): - '''return mode string for APM:Copter''' - if mode_number in mode_mapping_acm: - return mode_mapping_acm[mode_number] - return "Mode(%u)" % mode_number - -class x25crc(object): - '''x25 CRC - based on checksum.h from mavlink library''' - def __init__(self, buf=''): - self.crc = 0xffff - self.accumulate(buf) - - def accumulate(self, buf): - '''add in some more bytes''' - bytes = array.array('B') - if isinstance(buf, array.array): - bytes.extend(buf) - else: - bytes.fromstring(buf) - accum = self.crc - for b in bytes: - tmp = b ^ (accum & 0xff) - tmp = (tmp ^ (tmp<<4)) & 0xFF - accum = (accum>>8) ^ (tmp<<8) ^ (tmp<<3) ^ (tmp>>4) - accum = accum & 0xFFFF - self.crc = accum - -class MavlinkSerialPort(): - '''an object that looks like a serial port, but - transmits using mavlink SERIAL_CONTROL packets''' - def __init__(self, portname, baudrate, devnum=0, devbaud=0, timeout=3, debug=0): - from . import mavutil - - self.baudrate = 0 - self.timeout = timeout - self._debug = debug - self.buf = '' - self.port = devnum - self.debug("Connecting with MAVLink to %s ..." % portname) - self.mav = mavutil.mavlink_connection(portname, autoreconnect=True, baud=baudrate) - self.mav.wait_heartbeat() - self.debug("HEARTBEAT OK\n") - if devbaud != 0: - self.setBaudrate(devbaud) - self.debug("Locked serial device\n") - - def debug(self, s, level=1): - '''write some debug text''' - if self._debug >= level: - print(s) - - def write(self, b): - '''write some bytes''' - from . import mavutil - self.debug("sending '%s' (0x%02x) of len %u\n" % (b, ord(b[0]), len(b)), 2) - while len(b) > 0: - n = len(b) - if n > 70: - n = 70 - buf = [ord(x) for x in b[:n]] - buf.extend([0]*(70-len(buf))) - self.mav.mav.serial_control_send(self.port, - mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE | - mavutil.mavlink.SERIAL_CONTROL_FLAG_RESPOND, - 0, - 0, - n, - buf) - b = b[n:] - - def _recv(self): - '''read some bytes into self.buf''' - from . import mavutil - start_time = time.time() - while time.time() < start_time + self.timeout: - m = self.mav.recv_match(condition='SERIAL_CONTROL.count!=0', - type='SERIAL_CONTROL', blocking=False, timeout=0) - if m is not None and m.count != 0: - break - self.mav.mav.serial_control_send(self.port, - mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE | - mavutil.mavlink.SERIAL_CONTROL_FLAG_RESPOND, - 0, - 0, - 0, [0]*70) - m = self.mav.recv_match(condition='SERIAL_CONTROL.count!=0', - type='SERIAL_CONTROL', blocking=True, timeout=0.01) - if m is not None and m.count != 0: - break - if m is not None: - if self._debug > 2: - print(m) - data = m.data[:m.count] - self.buf += ''.join(str(chr(x)) for x in data) - - def read(self, n): - '''read some bytes''' - if len(self.buf) == 0: - self._recv() - if len(self.buf) > 0: - if n > len(self.buf): - n = len(self.buf) - ret = self.buf[:n] - self.buf = self.buf[n:] - if self._debug >= 2: - for b in ret: - self.debug("read 0x%x" % ord(b), 2) - return ret - return '' - - def flushInput(self): - '''flush any pending input''' - self.buf = '' - saved_timeout = self.timeout - self.timeout = 0.5 - self._recv() - self.timeout = saved_timeout - self.buf = '' - self.debug("flushInput") - - def setBaudrate(self, baudrate): - '''set baudrate''' - from . import mavutil - if self.baudrate == baudrate: - return - self.baudrate = baudrate - self.mav.mav.serial_control_send(self.port, - mavutil.mavlink.SERIAL_CONTROL_FLAG_EXCLUSIVE, - 0, - self.baudrate, - 0, [0]*70) - self.flushInput() - self.debug("Changed baudrate %u" % self.baudrate) - -if __name__ == '__main__': - serial_list = auto_detect_serial(preferred_list=['*FTDI*',"*Arduino_Mega_2560*", "*3D_Robotics*", "*USB_to_UART*", '*PX4*', '*FMU*']) - for port in serial_list: - print("%s" % port) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavwp.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavwp.py deleted file mode 100644 index 7d3b56670..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/mavwp.py +++ /dev/null @@ -1,604 +0,0 @@ -''' -module for loading/saving waypoints -''' - -import time, copy -import logging -from . import mavutil -try: - from google.protobuf import text_format - import mission_pb2 - HAVE_PROTOBUF = True -except ImportError: - HAVE_PROTOBUF = False - - -class MAVWPError(Exception): - '''MAVLink WP error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - self.message = msg - - -class MAVWPLoader(object): - '''MAVLink waypoint loader''' - def __init__(self, target_system=0, target_component=0): - self.wpoints = [] - self.target_system = target_system - self.target_component = target_component - self.last_change = time.time() - - def count(self): - '''return number of waypoints''' - return len(self.wpoints) - - def wp(self, i): - '''return a waypoint''' - try: - the_wp = self.wpoints[i] - except: - the_wp = None - - return the_wp - - def wp_is_loiter(self, i): - '''return true if waypoint is a loiter waypoint''' - loiter_cmds = [mavutil.mavlink.MAV_CMD_NAV_LOITER_UNLIM, - mavutil.mavlink.MAV_CMD_NAV_LOITER_TURNS, - mavutil.mavlink.MAV_CMD_NAV_LOITER_TIME, - mavutil.mavlink.MAV_CMD_NAV_LOITER_TO_ALT] - - if (self.wpoints[i].command in loiter_cmds): - return True - - return False - - def add(self, w, comment=''): - '''add a waypoint''' - w = copy.copy(w) - if comment: - w.comment = comment - w.seq = self.count() - self.wpoints.append(w) - self.last_change = time.time() - - def insert(self, idx, w, comment=''): - '''insert a waypoint''' - if idx >= self.count(): - self.add(w, comment) - return - if idx < 0: - return - w = copy.copy(w) - if comment: - w.comment = comment - w.seq = idx - self.wpoints.insert(idx, w) - self.last_change = time.time() - self.reindex() - - def reindex(self): - '''reindex waypoints''' - for i in range(self.count()): - w = self.wpoints[i] - w.seq = i - self.last_change = time.time() - - def add_latlonalt(self, lat, lon, altitude, terrain_alt=False): - '''add a point via latitude/longitude/altitude''' - if terrain_alt: - frame = mavutil.mavlink.MAV_FRAME_GLOBAL_TERRAIN_ALT - else: - frame = mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT - p = mavutil.mavlink.MAVLink_mission_item_message(self.target_system, - self.target_component, - 0, - frame, - mavutil.mavlink.MAV_CMD_NAV_WAYPOINT, - 0, 0, 0, 0, 0, 0, - lat, lon, altitude) - self.add(p) - - def set(self, w, idx): - '''set a waypoint''' - w.seq = idx - if w.seq == self.count(): - return self.add(w) - if self.count() <= idx: - raise MAVWPError('adding waypoint at idx=%u past end of list (count=%u)' % (idx, self.count())) - self.wpoints[idx] = w - self.last_change = time.time() - - def remove(self, w): - '''remove a waypoint''' - self.wpoints.remove(w) - self.last_change = time.time() - self.reindex() - - def clear(self): - '''clear waypoint list''' - self.wpoints = [] - self.last_change = time.time() - - def _read_waypoints_v100(self, file): - '''read a version 100 waypoint''' - cmdmap = { - 2 : mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, - 3 : mavutil.mavlink.MAV_CMD_NAV_RETURN_TO_LAUNCH, - 4 : mavutil.mavlink.MAV_CMD_NAV_LAND, - 24: mavutil.mavlink.MAV_CMD_NAV_TAKEOFF, - 26: mavutil.mavlink.MAV_CMD_NAV_LAND, - 25: mavutil.mavlink.MAV_CMD_NAV_WAYPOINT , - 27: mavutil.mavlink.MAV_CMD_NAV_LOITER_UNLIM - } - comment = '' - for line in file: - if line.startswith('#'): - comment = line[1:].lstrip() - continue - line = line.strip() - if not line: - continue - a = line.split() - if len(a) != 13: - raise MAVWPError("invalid waypoint line with %u values" % len(a)) - if mavutil.mavlink10(): - fn = mavutil.mavlink.MAVLink_mission_item_message - else: - fn = mavutil.mavlink.MAVLink_waypoint_message - w = fn(self.target_system, self.target_component, - int(a[0]), # seq - int(a[1]), # frame - int(a[2]), # action - int(a[7]), # current - int(a[12]), # autocontinue - float(a[5]), # param1, - float(a[6]), # param2, - float(a[3]), # param3 - float(a[4]), # param4 - float(a[9]), # x, latitude - float(a[8]), # y, longitude - float(a[10]) # z - ) - if not w.command in cmdmap: - raise MAVWPError("Unknown v100 waypoint action %u" % w.command) - - w.command = cmdmap[w.command] - self.add(w, comment) - comment = '' - - def _read_waypoints_v110(self, file): - '''read a version 110 waypoint''' - comment = '' - for line in file: - if line.startswith('#'): - comment = line[1:].lstrip() - continue - line = line.strip() - if not line: - continue - a = line.split() - if len(a) != 12: - raise MAVWPError("invalid waypoint line with %u values" % len(a)) - if mavutil.mavlink10(): - fn = mavutil.mavlink.MAVLink_mission_item_message - else: - fn = mavutil.mavlink.MAVLink_waypoint_message - w = fn(self.target_system, self.target_component, - int(a[0]), # seq - int(a[2]), # frame - int(a[3]), # command - int(a[1]), # current - int(a[11]), # autocontinue - float(a[4]), # param1, - float(a[5]), # param2, - float(a[6]), # param3 - float(a[7]), # param4 - float(a[8]), # x (latitude) - float(a[9]), # y (longitude) - float(a[10]) # z (altitude) - ) - if w.command == 0 and w.seq == 0 and self.count() == 0: - # special handling for Mission Planner created home wp - w.command = mavutil.mavlink.MAV_CMD_NAV_WAYPOINT - self.add(w, comment) - comment = '' - - def _read_waypoints_pb_110(self, file): - if not HAVE_PROTOBUF: - raise MAVWPError( - 'Cannot read mission file in protobuf format without protobuf ' - 'library. Try "easy_install protobuf".') - explicit_seq = False - warned_seq = False - mission = mission_pb2.Mission() - text_format.Merge(file.read(), mission) - defaults = mission_pb2.Waypoint() - # Set defaults (may be overriden in file). - defaults.current = False - defaults.autocontinue = True - defaults.param1 = 0.0 - defaults.param2 = 0.0 - defaults.param3 = 0.0 - defaults.param4 = 0.0 - defaults.x = 0.0 - defaults.y = 0.0 - defaults.z = 0.0 - # Use defaults specified in mission file, if there are any. - if mission.defaults: - defaults.MergeFrom(mission.defaults) - for seq, waypoint in enumerate(mission.waypoint): - # Consecutive sequence numbers are automatically assigned - # UNLESS the mission file specifies sequence numbers of - # its own. - if waypoint.seq: - explicit_seq = True - else: - if explicit_seq and not warned_seq: - logging.warn( - 'Waypoint file %s: mixes explicit and implicit ' - 'sequence numbers' % (file,)) - warned_seq = True - # The first command has current=True, the rest have current=False. - if seq > 0: - current = defaults.current - else: - current = True - w = mavutil.mavlink.MAVLink_mission_item_message( - self.target_system, self.target_component, - waypoint.seq or seq, - waypoint.frame, - waypoint.command, - waypoint.current or current, - waypoint.autocontinue or defaults.autocontinue, - waypoint.param1 or defaults.param1, - waypoint.param2 or defaults.param2, - waypoint.param3 or defaults.param3, - waypoint.param4 or defaults.param4, - waypoint.x or defaults.x, - waypoint.y or defaults.y, - waypoint.z or defaults.z) - self.add(w) - - def load(self, filename): - '''load waypoints from a file. - returns number of waypoints loaded''' - f = open(filename, mode='r') - version_line = f.readline().strip() - if version_line == "QGC WPL 100": - readfn = self._read_waypoints_v100 - elif version_line == "QGC WPL 110": - readfn = self._read_waypoints_v110 - elif version_line == "QGC WPL PB 110": - readfn = self._read_waypoints_pb_110 - else: - f.close() - raise MAVWPError("Unsupported waypoint format '%s'" % version_line) - - self.clear() - readfn(f) - f.close() - - return len(self.wpoints) - - def save_as_pb(self, filename): - mission = mission_pb2.Mission() - for w in self.wpoints: - waypoint = mission.waypoint.add() - waypoint.command = w.command - waypoint.frame = w.frame - waypoint.seq = w.seq - waypoint.current = w.current - waypoint.autocontinue = w.autocontinue - waypoint.param1 = w.param1 - waypoint.param2 = w.param2 - waypoint.param3 = w.param3 - waypoint.param4 = w.param4 - waypoint.x = w.x - waypoint.y = w.y - waypoint.z = w.z - with open(filename, 'w') as f: - f.write('QGC WPL PB 110\n') - f.write(text_format.MessageToString(mission)) - - def save(self, filename): - '''save waypoints to a file''' - f = open(filename, mode='w') - f.write("QGC WPL 110\n") - for w in self.wpoints: - if getattr(w, 'comment', None): - f.write("# %s\n" % w.comment) - f.write("%u\t%u\t%u\t%u\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%u\n" % ( - w.seq, w.current, w.frame, w.command, - w.param1, w.param2, w.param3, w.param4, - w.x, w.y, w.z, w.autocontinue)) - f.close() - - def is_location_command(self, cmd): - '''see if cmd is a MAV_CMD with a latitide/longitude. - We check if it has Latitude and Longitude params in the right indexes''' - mav_cmd = mavutil.mavlink.enums['MAV_CMD'] - if not cmd in mav_cmd: - return False - if not mav_cmd[cmd].param.get(5,'').startswith('Latitude'): - return False - if not mav_cmd[cmd].param.get(6,'').startswith('Longitude'): - return False - return True - - - def view_indexes(self, done=None): - '''return a list waypoint indexes in view order''' - ret = [] - if done is None: - done = set() - idx = 0 - - # find first point not done yet - while idx < self.count(): - if not idx in done: - break - idx += 1 - - while idx < self.count(): - w = self.wp(idx) - if idx in done: - if w.x != 0 or w.y != 0: - ret.append(idx) - break - done.add(idx) - if w.command == mavutil.mavlink.MAV_CMD_DO_JUMP: - idx = int(w.param1) - w = self.wp(idx) - if w.x != 0 or w.y != 0: - ret.append(idx) - continue - if (w.x != 0 or w.y != 0) and self.is_location_command(w.command): - ret.append(idx) - idx += 1 - return ret - - def polygon(self, done=None): - '''return a polygon for the waypoints''' - indexes = self.view_indexes(done) - points = [] - for idx in indexes: - w = self.wp(idx) - points.append((w.x, w.y)) - return points - - def polygon_list(self): - '''return a list of polygons for the waypoints''' - done = set() - ret = [] - while len(done) != self.count(): - p = self.polygon(done) - if len(p) > 0: - ret.append(p) - return ret - - def view_list(self): - '''return a list of polygon indexes lists for the waypoints''' - done = set() - ret = [] - while len(done) != self.count(): - p = self.view_indexes(done) - if len(p) > 0: - ret.append(p) - return ret - -class MAVRallyError(Exception): - '''MAVLink rally point error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - self.message = msg - -class MAVRallyLoader(object): - '''MAVLink Rally points and Rally Land ponts loader''' - def __init__(self, target_system=0, target_component=0): - self.rally_points = [] - self.target_system = target_system - self.target_component = target_component - self.last_change = time.time() - - def rally_count(self): - '''return number of rally points''' - return len(self.rally_points) - - def rally_point(self, i): - '''return rally point i''' - return self.rally_points[i] - - def reindex(self): - '''reset counters and indexes''' - for i in range(self.rally_count()): - self.rally_points[i].count = self.rally_count() - self.rally_points[i].idx = i - self.last_change = time.time() - - def append_rally_point(self, p): - '''add rallypoint to end of list''' - if (self.rally_count() > 9): - print("Can't have more than 10 rally points, not adding.") - return - - self.rally_points.append(p) - self.reindex() - - def create_and_append_rally_point(self, lat, lon, alt, break_alt, land_dir, flags): - '''add a point via latitude/longitude''' - p = mavutil.mavlink.MAVLink_rally_point_message(self.target_system, self.target_component, - self.rally_count(), 0, lat, lon, alt, break_alt, land_dir, flags) - self.append_rally_point(p) - - def clear(self): - '''clear all point lists (rally and rally_land)''' - self.rally_points = [] - self.last_change = time.time() - - def remove(self, i): - '''remove a rally point''' - if i < 1 or i > self.rally_count(): - print("Invalid rally point number %u" % i) - self.rally_points.pop(i-1) - self.reindex() - - def move(self, i, lat, lng, change_time=True): - '''move a rally point''' - if i < 1 or i > self.rally_count(): - print("Invalid rally point number %u" % i) - self.rally_points[i-1].lat = int(lat*1e7) - self.rally_points[i-1].lng = int(lng*1e7) - if change_time: - self.last_change = time.time() - - def set_alt(self, i, alt, break_alt=None, change_time=True): - '''set rally point altitude(s)''' - if i < 1 or i > self.rally_count(): - print("Inavlid rally point number %u" % i) - return - self.rally_points[i-1].alt = int(alt) - if (break_alt != None): - self.rally_points[i-1].break_alt = break_alt - if change_time: - self.last_change = time.time() - - def load(self, filename): - '''load rally and rally_land points from a file. - returns number of points loaded''' - f = open(filename, mode='r') - self.clear() - for line in f: - if line.startswith('#'): - continue - line = line.strip() - if not line: - continue - a = line.split() - if len(a) != 7: - raise MAVRallyError("invalid rally file line: %s" % line) - - if (a[0].lower() == "rally"): - self.create_and_append_rally_point(float(a[1]) * 1e7, float(a[2]) * 1e7, - float(a[3]), float(a[4]), float(a[5]) * 100.0, int(a[6])) - f.close() - return len(self.rally_points) - - def save(self, filename): - '''save fence points to a file''' - f = open(filename, mode='w') - for p in self.rally_points: - f.write("RALLY %f\t%f\t%f\t%f\t%f\t%d\n" % (p.lat * 1e-7, p.lng * 1e-7, p.alt, - p.break_alt, p.land_dir, p.flags)) - f.close() - -class MAVFenceError(Exception): - '''MAVLink fence error class''' - def __init__(self, msg): - Exception.__init__(self, msg) - self.message = msg - -class MAVFenceLoader(object): - '''MAVLink geo-fence loader''' - def __init__(self, target_system=0, target_component=0): - self.points = [] - self.target_system = target_system - self.target_component = target_component - self.last_change = time.time() - - def count(self): - '''return number of points''' - return len(self.points) - - def point(self, i): - '''return a point''' - return self.points[i] - - def add(self, p): - '''add a point''' - self.points.append(p) - self.reindex() - - def reindex(self): - '''reindex waypoints''' - for i in range(self.count()): - w = self.points[i] - w.idx = i - w.count = self.count() - w.target_system = self.target_system - w.target_component = self.target_component - self.last_change = time.time() - - def add_latlon(self, lat, lon): - '''add a point via latitude/longitude''' - p = mavutil.mavlink.MAVLink_fence_point_message(self.target_system, self.target_component, - self.count(), 0, lat, lon) - self.add(p) - - def clear(self): - '''clear point list''' - self.points = [] - self.last_change = time.time() - - def load(self, filename): - '''load points from a file. - returns number of points loaded''' - f = open(filename, mode='r') - self.clear() - for line in f: - if line.startswith('#'): - continue - line = line.strip() - if not line: - continue - a = line.split() - if len(a) != 2: - raise MAVFenceError("invalid fence point line: %s" % line) - self.add_latlon(float(a[0]), float(a[1])) - f.close() - return len(self.points) - - def save(self, filename): - '''save fence points to a file''' - f = open(filename, mode='w') - for p in self.points: - f.write("%f\t%f\n" % (p.lat, p.lng)) - f.close() - - def move(self, i, lat, lng, change_time=True): - '''move a fence point''' - if i < 0 or i >= self.count(): - print("Invalid fence point number %u" % i) - self.points[i].lat = lat - self.points[i].lng = lng - # ensure we close the polygon - if i == 1: - self.points[self.count()-1].lat = lat - self.points[self.count()-1].lng = lng - if i == self.count() - 1: - self.points[1].lat = lat - self.points[1].lng = lng - if change_time: - self.last_change = time.time() - - def remove(self, i, change_time=True): - '''remove a fence point''' - if i < 0 or i >= self.count(): - print("Invalid fence point number %u" % i) - self.points.pop(i) - # ensure we close the polygon - if i == 1: - self.points[self.count()-1].lat = self.points[1].lat - self.points[self.count()-1].lng = self.points[1].lng - if i == self.count(): - self.points[1].lat = self.points[self.count()-1].lat - self.points[1].lng = self.points[self.count()-1].lng - if change_time: - self.last_change = time.time() - - def polygon(self): - '''return a polygon for the fence''' - points = [] - for fp in self.points[1:]: - points.append((fp.lat, fp.lng)) - return points diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ardupilotmega.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ardupilotmega.xml deleted file mode 100644 index 673353165..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ardupilotmega.xml +++ /dev/null @@ -1,270 +0,0 @@ - - - common.xml - - - - - - - Enumeration of possible mount operation modes - Load and keep safe position (Roll,Pitch,Yaw) from EEPROM and stop stabilization - Load and keep neutral position (Roll,Pitch,Yaw) from EEPROM. - Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization - Load neutral position and start RC Roll,Pitch,Yaw control with stabilization - Load neutral position and start to point to Lat,Lon,Alt - - - - - - Mission command to configure an on-board camera controller system. - Modes: P, TV, AV, M, Etc - Shutter speed: Divisor number for one second - Aperture: F stop number - ISO number e.g. 80, 100, 200, Etc - Exposure type enumerator - Command Identity - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - - - - Mission command to control an on-board camera controller system. - Session control e.g. show/hide lens - Zoom's absolute position - Zooming step value to offset zoom from the current position - Focus Locking, Unlocking or Re-locking - Shooting Command - Command Identity - Empty - - - - - Mission command to configure a camera or antenna mount - Mount operation mode (see MAV_MOUNT_MODE enum) - stabilize roll? (1 = yes, 0 = no) - stabilize pitch? (1 = yes, 0 = no) - stabilize yaw? (1 = yes, 0 = no) - Empty - Empty - Empty - - - - Mission command to control a camera or antenna mount - pitch(deg*100) or lat, depending on mount mode. - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - Empty - Empty - Empty - Empty - - - - - - - Disable fenced mode - - - Switched to guided mode to return point (fence point 0) - - - - - - No last fence breach - - - Breached minimum altitude - - - Breached minimum altitude - - - Breached fence boundary - - - - - - - Offsets and calibrations values for hardware - sensors. This makes it easier to debug the calibration process. - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - magnetic declination (radians) - raw pressure from barometer - raw temperature from barometer - gyro X calibration - gyro Y calibration - gyro Z calibration - accel X calibration - accel Y calibration - accel Z calibration - - - - set the magnetometer offsets - System ID - Component ID - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - - - - state of APM memory - heap top - free memory - - - - raw ADC output - ADC output 1 - ADC output 2 - ADC output 3 - ADC output 4 - ADC output 5 - ADC output 6 - - - - - Configure on-board Camera Control System. - System ID - Component ID - Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - Exposure type enumeration from 1 to N (0 means ignore) - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - Control on-board Camera Control System to take shots. - System ID - Component ID - 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - 1 to N //Zoom's absolute position (0 means ignore) - -100 to 100 //Zooming step value to offset zoom from the current position - 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - 0: ignore, 1: shot or start filming - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - - Message to configure a camera mount, directional antenna, etc. - System ID - Component ID - mount operating mode (see MAV_MOUNT_MODE enum) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - - - - Message to control a camera mount, directional antenna, etc. - System ID - Component ID - pitch(deg*100) or lat, depending on mount mode - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - - - - Message with some status from APM to GCS about camera or antenna mount - System ID - Component ID - pitch(deg*100) or lat, depending on mount mode - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - - - - - A fence point. Used to set a point when from - GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 1, 0 is for return point) - total number of points (for sanity checking) - Latitude of point - Longitude of point - - - - Request a current fence point from MAV - System ID - Component ID - point index (first point is 1, 0 is for return point) - - - - Status of geo-fencing. Sent in extended - status stream when fencing enabled - 0 if currently inside fence, 1 if outside - number of fence breaches - last breach type (see FENCE_BREACH_* enum) - time of last breach in milliseconds since boot - - - - Status of DCM attitude estimator - X gyro drift estimate rad/s - Y gyro drift estimate rad/s - Z gyro drift estimate rad/s - average accel_weight - average renormalisation value - average error_roll_pitch value - average error_yaw value - - - - Status of simulation environment, if used - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - - - - Status of key hardware - board voltage (mV) - I2C error count - - - - Status generated by radio - local signal strength - remote signal strength - how full the tx buffer is as a percentage - background noise level - remote background noise level - receive errors - count of error corrected packets - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/common.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/common.xml deleted file mode 100644 index dd4ea8443..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/common.xml +++ /dev/null @@ -1,941 +0,0 @@ - - - 2 - - - Commands to be executed by the MAV. They can be executed on user request, - or as part of a mission script. If the action is used in a mission, the parameter mapping - to the waypoint/mission message is as follows: - Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what - ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. - - Navigate to waypoint. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at waypoint for rotary wing) - Acceptance radius in meters (if the sphere with this radius is hit, the waypoint counts as reached) - 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control. - Desired yaw angle at waypoint (rotary wing) - Latitude - Longitude - Altitude - - - Loiter around this waypoint an unlimited amount of time - Empty - Empty - Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Loiter around this waypoint for X turns - Turns - Empty - Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Loiter around this waypoint for X seconds - Seconds (decimal) - Empty - Radius around waypoint, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Return to launch location - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Land at location - Empty - Empty - Empty - Desired yaw angle. - Latitude - Longitude - Altitude - - - Takeoff from ground / hand - Minimum pitch (if airspeed sensor present), desired pitch without sensor - Empty - Empty - Yaw angle (if magnetometer present), ignored without magnetometer - Latitude - Longitude - Altitude - - - Sets the region of interest (ROI) for a sensor set or the - vehicle itself. This can then be used by the vehicles control - system to control the vehicle attitude and the attitude of various - sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - Waypoint index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - Control autonomous path planning on the MAV. - 0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning - 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid - Empty - Yaw angle at goal, in compass degrees, [0..360] - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay mission state machine. - Delay in seconds (decimal) - Empty - Empty - Empty - Empty - Empty - Empty - - - Ascend/descend at rate. Delay mission state machine until desired altitude reached. - Descent / Ascend rate (m/s) - Empty - Empty - Empty - Empty - Empty - Finish Altitude - - - Delay mission state machine until within desired distance of next NAV point. - Distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - Reach a certain target angle. - target angle: [0-360], 0 is north - speed during yaw change:[deg per second] - direction: negative: counter clockwise, positive: clockwise [-1,1] - relative offset or absolute angle: [ 1,0] - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Set system mode. - Mode, as defined by ENUM MAV_MODE - Empty - Empty - Empty - Empty - Empty - Empty - - - Jump to the desired command in the mission list. Repeat this action only the specified number of times - Sequence number - Repeat count - Empty - Empty - Empty - Empty - Empty - - - Change speed and/or throttle set points. - Speed type (0=Airspeed, 1=Ground Speed) - Speed (m/s, -1 indicates no change) - Throttle ( Percent, -1 indicates no change) - Empty - Empty - Empty - Empty - - - Changes the home location either to the current location or a specified location. - Use current (1=use current location, 0=use specified location) - Empty - Empty - Empty - Latitude - Longitude - Altitude - - - Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. - Parameter number - Parameter value - Empty - Empty - Empty - Empty - Empty - - - Set a relay to a condition. - Relay number - Setting (1=on, 0=off, others possible depending on system hardware) - Empty - Empty - Empty - Empty - Empty - - - Cycle a relay on and off for a desired number of cyles with a desired period. - Relay number - Cycle count - Cycle time (seconds, decimal) - Empty - Empty - Empty - Empty - - - Set a servo to a desired PWM value. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Empty - Empty - Empty - Empty - Empty - - - Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Cycle count - Cycle time (seconds) - Empty - Empty - Empty - - - Control onboard camera capturing. - Camera ID (-1 for all) - Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw - Transmission mode: 0: video stream, >0: single images every n seconds (decimal) - Recording: 0: disabled, 1: enabled compressed, 2: enabled raw - Empty - Empty - Empty - - - Sets the region of interest (ROI) for a sensor set or the - vehicle itself. This can then be used by the vehicles control - system to control the vehicle attitude and the attitude of various - devices such as cameras. - - Region of interest mode. (see MAV_ROI enum) - Waypoint index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple cameras etc.) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - NOP - This command is only used to mark the upper limit of the DO commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Trigger calibration. This command will be only accepted if in pre-flight mode. - Gyro calibration: 0: no, 1: yes - Magnetometer calibration: 0: no, 1: yes - Ground pressure: 0: no, 1: yes - Radio calibration: 0: no, 1: yes - Empty - Empty - Empty - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM - Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM - Reserved - Reserved - Empty - Empty - Empty - - - - Data stream IDs. A data stream is not a fixed set of messages, but rather a - recommendation to the autopilot software. Individual autopilots may or may not obey - the recommended messages. - - - Enable all data streams - - - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. - - - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS - - - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW - - - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. - - - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. - - - Dependent on the autopilot - - - Dependent on the autopilot - - - Dependent on the autopilot - - - - The ROI (region of interest) for the vehicle. This can be - be used by the vehicle for camera/vehicle attitude alignment (see - MAV_CMD_NAV_ROI). - - - No region of interest. - - - Point toward next waypoint. - - - Point toward given waypoint. - - - Point toward fixed location. - - - Point toward of given id. - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM - MAVLink version - - - The boot message indicates that a system is starting. The onboard software version allows to keep track of onboard soft/firmware revisions. - The onboard software version - - - The system time is the time of the master clock, typically the computer clock of the main onboard computer. - Timestamp of the master clock in microseconds since UNIX epoch. - - - A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. - PING sequence - 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - Unix timestamp in microseconds - - - UTC date and time from GPS module - GPS UTC date ddmmyy - GPS UTC time hhmmss - - - Request to control this MAV - System the GCS requests control for - 0: request control of this MAV, 1: Release control of this MAV - 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - - - Accept / deny control of this MAV - ID of the GCS this message - 0: request control of this MAV, 1: Release control of this MAV - 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - - - Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety. - key - - - This message acknowledges an action. IMPORTANT: The acknowledgement can be also negative, e.g. the MAV rejects a reset message because it is in-flight. The action ids are defined in ENUM MAV_ACTION in mavlink/include/mavlink_types.h - The action id - 0: Action DENIED, 1: Action executed - - - An action message allows to execute a certain onboard action. These include liftoff, land, storing parameters too EEPROM, shutddown, etc. The action ids are defined in ENUM MAV_ACTION in mavlink/include/mavlink_types.h - The system executing the action - The component executing the action - The action id - - - Set the system mode, as defined by enum MAV_MODE in mavlink/include/mavlink_types.h. There is no target component id as the mode is by definition for the overall aircraft, not only for one component. - The system setting the mode - The new mode - - - Set the system navigation mode, as defined by enum MAV_NAV_MODE in mavlink/include/mavlink_types.h. The navigation mode applies to the whole aircraft and thus all components. - The system setting the mode - The new navigation mode - - - Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code. - System ID - Component ID - Onboard parameter id - Parameter index. Send -1 to use the param ID field as identifier - - - Request all parameters of this component. After his request, all parameters are emitted. - System ID - Component ID - - - Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. - Onboard parameter id - Onboard parameter value - Total number of onboard parameters - Index of this onboard parameter - - - Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message. - System ID - Component ID - Onboard parameter id - Onboard parameter value - - - The global position, as returned by the Global Positioning System (GPS). This is -NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - Latitude in 1E7 degrees - Longitude in 1E7 degrees - Altitude in 1E3 meters (millimeters) - GPS HDOP - GPS VDOP - GPS ground speed (m/s) - Compass heading in degrees, 0..360 degrees - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites. - Number of satellites visible - Global satellite ID - 0: Satellite not used, 1: used for localization - Elevation (0: right on top of receiver, 90: on the horizon) of satellite - Direction of satellite, 0: 0 deg, 255: 360 deg. - Signal to noise ratio of satellite - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X acceleration (raw) - Y acceleration (raw) - Z acceleration (raw) - Angular speed around X axis (raw) - Angular speed around Y axis (raw) - Angular speed around Z axis (raw) - X Magnetic field (raw) - Y Magnetic field (raw) - Z Magnetic field (raw) - - - The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Absolute pressure (raw) - Differential pressure 1 (raw) - Differential pressure 2 (raw) - Raw Temperature measurement (raw) - - - The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X Position - Y Position - Z Position - X Speed - Y Speed - Z Speed - - - The filtered global position (e.g. fused GPS and accelerometers). Coordinate frame is right-handed, Z-axis up (GPS frame) - Timestamp (microseconds since unix epoch) - Latitude, in degrees - Longitude, in degrees - Absolute altitude, in meters - X Speed (in Latitude direction, positive: going north) - Y Speed (in Longitude direction, positive: going east) - Z Speed (in Altitude direction, positive: going up) - - - The global position, as returned by the Global Positioning System (GPS). This is -NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - Latitude in degrees - Longitude in degrees - Altitude in meters - GPS HDOP - GPS VDOP - GPS ground speed - Compass heading in degrees, 0..360 degrees - - - The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout. - System mode, see MAV_MODE ENUM in mavlink/include/mavlink_types.h - Navigation mode, see MAV_NAV_MODE ENUM - System status flag, see MAV_STATUS ENUM - Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - Battery voltage, in millivolts (1 = 1 millivolt) - Remaining battery energy: (0%: 0, 100%: 1000) - Dropped packets (packets that were corrupted on reception on the MAV) - - - The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - RC channel 1 value, in microseconds - RC channel 2 value, in microseconds - RC channel 3 value, in microseconds - RC channel 4 value, in microseconds - RC channel 5 value, in microseconds - RC channel 6 value, in microseconds - RC channel 7 value, in microseconds - RC channel 8 value, in microseconds - Receive signal strength indicator, 0: 0%, 255: 100% - - - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000 - Receive signal strength indicator, 0: 0%, 255: 100% - - - The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. - Servo output 1 value, in microseconds - Servo output 2 value, in microseconds - Servo output 3 value, in microseconds - Servo output 4 value, in microseconds - Servo output 5 value, in microseconds - Servo output 6 value, in microseconds - Servo output 7 value, in microseconds - Servo output 8 value, in microseconds - - - Message encoding a waypoint. This message is emitted to announce - the presence of a waypoint and to set a waypoint on the system. The waypoint can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed, global frame is Z-up, right handed - System ID - Component ID - Sequence - The coordinate system of the waypoint. see MAV_FRAME in mavlink_types.h - The scheduled action for the waypoint. see MAV_COMMAND in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1 / For NAV command waypoints: Radius in which the waypoint is accepted as reached, in meters - PARAM2 / For NAV command waypoints: Time that the MAV should stay inside the PARAM1 radius before advancing, in milliseconds - PARAM3 / For LOITER command waypoints: Orbit to circle around the waypoint, in meters. If positive the orbit direction should be clockwise, if negative the orbit direction should be counter-clockwise. - PARAM4 / For NAV and LOITER command waypoints: Yaw orientation in degrees, [0..360] 0 = NORTH - PARAM5 / local: x position, global: latitude - PARAM6 / y position: global: longitude - PARAM7 / z position: global: altitude - - - Request the information of the waypoint with the sequence number seq. The response of the system to this message should be a WAYPOINT message. - System ID - Component ID - Sequence - - - Set the waypoint with sequence number seq as current waypoint. This means that the MAV will continue to this waypoint on the shortest path (not following the waypoints in-between). - System ID - Component ID - Sequence - - - Message that announces the sequence number of the current active waypoint. The MAV will fly towards this waypoint. - Sequence - - - Request the overall list of waypoints from the system/component. - System ID - Component ID - - - This message is emitted as response to WAYPOINT_REQUEST_LIST by the MAV. The GCS can then request the individual waypoints based on the knowledge of the total number of waypoints. - System ID - Component ID - Number of Waypoints in the Sequence - - - Delete all waypoints at once. - System ID - Component ID - - - A certain waypoint has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next waypoint. - Sequence - - - Ack message during waypoint handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero). - System ID - Component ID - 0: OK, 1: Error - - - As local waypoints exist, the global waypoint reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor. - System ID - Component ID - global position * 1E7 - global position * 1E7 - global position * 1000 - - - Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position - Latitude (WGS84), expressed as * 1E7 - Longitude (WGS84), expressed as * 1E7 - Altitude(WGS84), expressed as * 1000 - - - Set the setpoint for a local position controller. This is the position in local coordinates the MAV should fly to. This message is sent by the path/waypoint planner to the onboard position controller. As some MAVs have a degree of freedom in yaw (e.g. all helicopters/quadrotors), the desired yaw angle is part of the message. - System ID - Component ID - x position - y position - z position - Desired yaw angle - - - Transmit the current local setpoint of the controller to other MAVs (collision avoidance) and to the GCS. - x position - y position - z position - Desired yaw angle - - - Position fix: 0: lost, 2: 2D position fix, 3: 3D position fix - Vision position fix: 0: lost, 1: 2D local position hold, 2: 2D global position fix, 3: 3D global position fix - GPS position fix: 0: no reception, 1: Minimum 1 satellite, but no position fix, 2: 2D position fix, 3: 3D position fix - Attitude estimation health: 0: poor, 255: excellent - 0: Attitude control disabled, 1: enabled - 0: X, Y position control disabled, 1: enabled - 0: Z position control disabled, 1: enabled - 0: Yaw angle control disabled, 1: enabled - - - Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/waypoints to accept and which to reject. Safety areas are often enforced by national or competition regulations. - System ID - Component ID - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - Read out the safety zone the MAV currently assumes. - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - Set roll, pitch and yaw. - System ID - Component ID - Desired roll angle in radians - Desired pitch angle in radians - Desired yaw angle in radians - Collective thrust, normalized to 0 .. 1 - - - Set roll, pitch and yaw. - System ID - Component ID - Desired roll angular speed in rad/s - Desired pitch angular speed in rad/s - Desired yaw angular speed in rad/s - Collective thrust, normalized to 0 .. 1 - - - Setpoint in roll, pitch, yaw currently active on the system. - Timestamp in micro seconds since unix epoch - Desired roll angle in radians - Desired pitch angle in radians - Desired yaw angle in radians - Collective thrust, normalized to 0 .. 1 - - - Setpoint in rollspeed, pitchspeed, yawspeed currently active on the system. - Timestamp in micro seconds since unix epoch - Desired roll angular speed in rad/s - Desired pitch angular speed in rad/s - Desired yaw angular speed in rad/s - Collective thrust, normalized to 0 .. 1 - - - Outputs of the APM navigation controller. The primary use of this message is to check the response and signs -of the controller before actual flight and to assist with tuning controller parameters - Current desired roll in degrees - Current desired pitch in degrees - Current desired heading in degrees - Bearing to current waypoint/target in degrees - Distance to active waypoint in meters - Current altitude error in meters - Current airspeed error in meters/second - Current crosstrack error on x-y plane in meters - - - The goal position of the system. This position is the input to any navigation or path planning algorithm and does NOT represent the current controller setpoint. - x position - y position - z position - yaw orientation in radians, 0 = NORTH - - - Corrects the systems state by adding an error correction term to the position and velocity, and by rotating the attitude by a correction angle. - x position error - y position error - z position error - roll error (radians) - pitch error (radians) - yaw error (radians) - x velocity - y velocity - z velocity - - - The system setting the altitude - The new altitude in meters - - - The target requested to send the message stream. - The target requested to send the message stream. - The ID of the requested message type - Update rate in Hertz - 1 to start sending, 0 to stop sending. - - - This packet is useful for high throughput - applications such as hardware in the loop simulations. - - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - Hardware in the loop control outputs - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control output -3 .. 1 - Control output -1 .. 1 - Control output -1 .. 1 - Throttle 0 .. 1 - System mode (MAV_MODE) - Navigation mode (MAV_NAV_MODE) - - - The system to be controlled - roll - pitch - yaw - thrust - roll control enabled auto:0, manual:1 - pitch auto:0, manual:1 - yaw auto:0, manual:1 - thrust auto:0, manual:1 - - - The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of -1 means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - System ID - Component ID - RC channel 1 value, in microseconds - RC channel 2 value, in microseconds - RC channel 3 value, in microseconds - RC channel 4 value, in microseconds - RC channel 5 value, in microseconds - RC channel 6 value, in microseconds - RC channel 7 value, in microseconds - RC channel 8 value, in microseconds - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - - - Metrics typically displayed on a HUD for fixed wing aircraft - Current airspeed in m/s - Current ground speed in m/s - Current heading in degrees, in compass units (0..360, 0=north) - Current throttle setting in integer percent, 0 to 100 - Current altitude (MSL), in meters - Current climb rate in meters/second - - - Send a command with up to four parameters to the MAV - System which should execute the command - Component which should execute the command, 0 for all components - Command ID, as defined by MAV_CMD enum. - 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - Parameter 1, as defined by MAV_CMD enum. - Parameter 2, as defined by MAV_CMD enum. - Parameter 3, as defined by MAV_CMD enum. - Parameter 4, as defined by MAV_CMD enum. - - - Report status of a command. Includes feedback wether the command was executed - Current airspeed in m/s - 1: Action ACCEPTED and EXECUTED, 1: Action TEMPORARY REJECTED/DENIED, 2: Action PERMANENTLY DENIED, 3: Action UNKNOWN/UNSUPPORTED, 4: Requesting CONFIRMATION - - - Optical flow from a flow sensor (e.g. optical mouse sensor) - Timestamp (UNIX) - Sensor ID - Flow in pixels in x-sensor direction - Flow in pixels in y-sensor direction - Optical flow quality / confidence. 0: bad, 255: maximum quality - Ground distance in meters - - - Object has been detected - Timestamp in milliseconds since system boot - Object ID - Object type: 0: image, 1: letter, 2: ground vehicle, 3: air vehicle, 4: surface vehicle, 5: sub-surface vehicle, 6: human, 7: animal - Name of the object as defined by the detector - Detection quality / confidence. 0: bad, 255: maximum confidence - Angle of the object with respect to the body frame in NED coordinates in radians. 0: front - Ground distance in meters - - - - Name - Timestamp - x - y - z - - - Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Name of the debug variable - Floating point value - - - Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Name of the debug variable - Signed integer value - - - Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz). - Severity of status, 0 = info message, 255 = critical fault - Status text message, without null termination character - - - Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N. - index of debug variable - DEBUG value - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/minimal.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/minimal.xml deleted file mode 100644 index 5b41a4909..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/minimal.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - 2 - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM - MAVLink version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/slugs.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/slugs.xml deleted file mode 100644 index db08abb39..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/slugs.xml +++ /dev/null @@ -1,148 +0,0 @@ - - - common.xml - - - - - - - - Sensor and DSC control loads. - - Sensor DSC Load - Control DSC Load - Battery Voltage in millivolts - - - - - Air data for altitude and airspeed computation. - - Dynamic pressure (Pa) - Static pressure (Pa) - Board temperature - - - - Accelerometer and gyro biases. - Accelerometer X bias (m/s) - Accelerometer Y bias (m/s) - Accelerometer Z bias (m/s) - Gyro X bias (rad/s) - Gyro Y bias (rad/s) - Gyro Z bias (rad/s) - - - - Configurable diagnostic messages. - Diagnostic float 1 - Diagnostic float 2 - Diagnostic float 3 - Diagnostic short 1 - Diagnostic short 2 - Diagnostic short 3 - - - - Data used in the navigation algorithm. - Measured Airspeed prior to the Nav Filter - Commanded Roll - Commanded Pitch - Commanded Turn rate - Y component of the body acceleration - Total Distance to Run on this leg of Navigation - Remaining distance to Run on this leg of Navigation - Origin WP - Destination WP - - - - Configurable data log probes to be used inside Simulink - Log value 1 - Log value 2 - Log value 3 - Log value 4 - Log value 5 - Log value 6 - - - - Pilot console PWM messges. - Year reported by Gps - Month reported by Gps - Day reported by Gps - Hour reported by Gps - Min reported by Gps - Sec reported by Gps - Visible sattelites reported by Gps - - - - Mid Level commands sent from the GS to the autopilot. These are only sent when being opperated in mid-level commands mode from the ground; for periodic report of these commands generated from the autopilot see message XXXX. - The system setting the commands - Commanded Airspeed - Log value 2 - Log value 3 - - - - - This message configures the Selective Passthrough mode. it allows to select which control surfaces the Pilot can control from his console. It is implemented as a bitfield as follows: - Position Bit Code - ================================= - 15-8 Reserved - 7 dt_pass 128 - 6 dla_pass 64 - 5 dra_pass 32 - 4 dr_pass 16 - 3 dle_pass 8 - 2 dre_pass 4 - 1 dlf_pass 2 - 0 drf_pass 1 - Where Bit 15 is the MSb. 0 = AP has control of the surface; 1 = Pilot Console has control of the surface. - The system setting the commands - Bitfield containing the PT configuration - - - - - - Action messages focused on the SLUGS AP. - The system reporting the action - Action ID. See apDefinitions.h in the SLUGS /clib directory for the ID names - Value associated with the action - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/test.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/test.xml deleted file mode 100644 index 43a11e3d1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/test.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 3 - - - Test all field types - char - string - uint8_t - uint16_t - uint32_t - uint64_t - int8_t - int16_t - int32_t - int64_t - float - double - uint8_t_array - uint16_t_array - uint32_t_array - uint64_t_array - int8_t_array - int16_t_array - int32_t_array - int64_t_array - float_array - double_array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ualberta.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ualberta.xml deleted file mode 100644 index 4023aa908..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v0.9/ualberta.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - common.xml - - - Available autopilot modes for ualberta uav - Raw input pulse widts sent to output - Inputs are normalized using calibration, the converted back to raw pulse widths for output - dfsdfs - dfsfds - dfsdfsdfs - - - Navigation filter mode - - AHRS mode - INS/GPS initialization mode - INS/GPS mode - - - Mode currently commanded by pilot - sdf - dfs - Rotomotion mode - - - - - Accelerometer and Gyro biases from the navigation filter - Timestamp (microseconds) - b_f[0] - b_f[1] - b_f[2] - b_f[0] - b_f[1] - b_f[2] - - - Complete set of calibration parameters for the radio - Aileron setpoints: left, center, right - Elevator setpoints: nose down, center, nose up - Rudder setpoints: nose left, center, nose right - Tail gyro mode/gain setpoints: heading hold, rate mode - Pitch curve setpoints (every 25%) - Throttle curve setpoints (every 25%) - - - System status specific to ualberta uav - System mode, see UALBERTA_AUTOPILOT_MODE ENUM - Navigation mode, see UALBERTA_NAV_MODE ENUM - Pilot mode, see UALBERTA_PILOT_MODE - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ASLUAV.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ASLUAV.xml deleted file mode 100644 index 5eba2d187..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ASLUAV.xml +++ /dev/null @@ -1,202 +0,0 @@ - - - - - common.xml - - - - - Mission command to reset Maximum Power Point Tracker (MPPT) - MPPT number - Empty - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a power cycle on payload - Complete power cycle - VISensor power cycle - Empty - Empty - Empty - Empty - Empty - - - - - - Voltage and current sensor data - Power board voltage sensor reading in volts - Power board current sensor reading in amps - Board current sensor 1 reading in amps - Board current sensor 2 reading in amps - - - Maximum Power Point Tracker (MPPT) sensor data for solar module power performance tracking - MPPT last timestamp - MPPT1 voltage - MPPT1 current - MPPT1 pwm - MPPT1 status - MPPT2 voltage - MPPT2 current - MPPT2 pwm - MPPT2 status - MPPT3 voltage - MPPT3 current - MPPT3 pwm - MPPT3 status - - - ASL-fixed-wing controller data - Timestamp - ASLCTRL control-mode (manual, stabilized, auto, etc...) - See sourcecode for a description of these values... - - - Pitch angle [deg] - Pitch angle reference[deg] - - - - - - - Airspeed reference [m/s] - - Yaw angle [deg] - Yaw angle reference[deg] - Roll angle [deg] - Roll angle reference[deg] - - - - - - - - - ASL-fixed-wing controller debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - Debug data - - - Extended state information for ASLUAVs - Status of the position-indicator LEDs - Status of the IRIDIUM satellite communication system - Status vector for up to 8 servos - Motor RPM - - - - Extended EKF state estimates for ASLUAVs - Time since system start [us] - Magnitude of wind velocity (in lateral inertial plane) [m/s] - Wind heading angle from North [rad] - Z (Down) component of inertial wind velocity [m/s] - Magnitude of air velocity [m/s] - Sideslip angle [rad] - Angle of attack [rad] - - - Off-board controls/commands for ASLUAVs - Time since system start [us] - Elevator command [~] - Throttle command [~] - Throttle 2 command [~] - Left aileron command [~] - Right aileron command [~] - Rudder command [~] - Off-board computer status - - - Atmospheric sensors (temperature, humidity, ...) - Ambient temperature [degrees Celsius] - Relative humidity [%] - - - Battery pack monitoring data for Li-Ion batteries - Battery pack temperature in [deg C] - Battery pack voltage in [mV] - Battery pack current in [mA] - Battery pack state-of-charge - Battery monitor status report bits in Hex - Battery monitor serial number in Hex - Battery monitor sensor host FET control in Hex - Battery pack cell 1 voltage in [mV] - Battery pack cell 2 voltage in [mV] - Battery pack cell 3 voltage in [mV] - Battery pack cell 4 voltage in [mV] - Battery pack cell 5 voltage in [mV] - Battery pack cell 6 voltage in [mV] - - - Fixed-wing soaring (i.e. thermal seeking) data - Timestamp [ms] - Timestamp since last mode change[ms] - Thermal core updraft strength [m/s] - Thermal radius [m] - Thermal center latitude [deg] - Thermal center longitude [deg] - Variance W - Variance R - Variance Lat - Variance Lon - Suggested loiter radius [m] - Suggested loiter direction - Distance to soar point [m] - Expected sink rate at current airspeed, roll and throttle [m/s] - Measurement / updraft speed at current/local airplane position [m/s] - Measurement / roll angle tracking error [deg] - Expected measurement 1 - Expected measurement 2 - Thermal drift (from estimator prediction step only) [m/s] - Thermal drift (from estimator prediction step only) [m/s] - Total specific energy change (filtered) [m/s] - Debug variable 1 - Debug variable 2 - Control Mode [-] - Data valid [-] - - - Monitoring of sensorpod status - Timestamp in linuxtime [ms] (since 1.1.1970) - Rate of ROS topic 1 - Rate of ROS topic 2 - Rate of ROS topic 3 - Rate of ROS topic 4 - Number of recording nodes - Temperature of sensorpod CPU in [deg C] - Free space available in recordings directory in [Gb] * 1e2 - - - Monitoring of power board status - Timestamp - Power board status register - Power board leds status - Power board system voltage - Power board servo voltage - Power board left motor current sensor - Power board right motor current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board servo1 current sensor - Power board aux current sensor - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ardupilotmega.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ardupilotmega.xml deleted file mode 100644 index 21f66ae50..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ardupilotmega.xml +++ /dev/null @@ -1,1545 +0,0 @@ - - - common.xml - - - uAvionix.xml - - 2 - - - - - - Mission command to operate EPM gripper - gripper number (a number from 1 to max number of grippers on the vehicle) - gripper action (0=release, 1=grab. See GRIPPER_ACTIONS enum) - Empty - Empty - Empty - Empty - Empty - - - - Enable/disable autotune - enable (1: enable, 0:disable) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to wait for an altitude or downwards vertical speed. This is meant for high altitude balloon launches, allowing the aircraft to be idle until either an altitude is reached or a negative vertical speed is reached (indicating early balloon burst). The wiggle time is how often to wiggle the control surfaces to prevent them seizing up. - altitude (m) - descent speed (m/s) - Wiggle Time (s) - Empty - Empty - Empty - Empty - - - - A system wide power-off event has been initiated. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - FLY button has been clicked. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - FLY button has been held for 1.5 seconds. - Takeoff altitude - Empty - Empty - Empty - Empty - Empty - Empty - - - - PAUSE button has been clicked. - 1 if Solo is in a shot mode, 0 otherwise - Empty - Empty - Empty - Empty - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Automatically retry on failure (0=no retry, 1=retry). - Save without user input (0=require input, 1=autosave). - Delay (seconds) - Autoreboot (0=user reboot, 1=autoreboot) - Empty - Empty - - - - Initiate a magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Cancel a running magnetometer calibration - uint8_t bitmask of magnetometers (0 means all) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reply with the version banner - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Causes the gimbal to reset and boot as if it was just powered on - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Command autopilot to get into factory test/diagnostic mode - 0 means get out of test mode, 1 means get into test mode - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reports progress and success or failure of gimbal axis calibration procedure - Gimbal axis we're reporting calibration progress for - Current calibration progress for this axis, 0x64=100% - Status of the calibration - Empty - Empty - Empty - Empty - - - - Starts commutation calibration on the gimbal - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - Erases gimbal application and parameters - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - Magic number - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - a limit has been breached - - - - taking action eg. RTL - - - - we're no longer in breach of a limit - - - - - - - pre-initialization - - - - disabled - - - - checking limits - - - - - - Flags in RALLY_POINT message - - Flag set when requiring favorable winds for landing. - - - - Flag set when plane is to immediately descend to break altitude and land without GCS intervention. Flag not set when plane is to loiter at Rally point until commanded to land. - - - - - - - Disable parachute release - - - - Enable parachute release - - - - Release parachute - - - - - - Gripper actions. - - gripper release of cargo - - - - gripper grabs onto cargo - - - - - - - Camera heartbeat, announce camera component ID at 1hz - - - - Camera image triggered - - - - Camera connection lost - - - - Camera unknown error - - - - Camera battery low. Parameter p1 shows reported voltage - - - - Camera storage low. Parameter p1 shows reported shots remaining - - - - Camera storage low. Parameter p1 shows reported video minutes remaining - - - - - - - Shooting photos, not video - - - - Shooting video, not stills - - - - Unable to achieve requested exposure (e.g. shutter speed too low) - - - - Closed loop feedback from camera, we know for sure it has successfully taken a picture - - - - Open loop camera, an image trigger has been requested but we can't know for sure it has successfully taken a picture - - - - - - - Gimbal is powered on but has not started initializing yet - - - - Gimbal is currently running calibration on the pitch axis - - - - Gimbal is currently running calibration on the roll axis - - - - Gimbal is currently running calibration on the yaw axis - - - - Gimbal has finished calibrating and initializing, but is relaxed pending reception of first rate command from copter - - - - Gimbal is actively stabilizing - - - - Gimbal is relaxed because it missed more than 10 expected rate command messages in a row. Gimbal will move back to active mode when it receives a new rate command - - - - - - Gimbal yaw axis - - - - Gimbal pitch axis - - - - Gimbal roll axis - - - - - - Axis calibration is in progress - - - - Axis calibration succeeded - - - - Axis calibration failed - - - - - - Whether or not this axis requires calibration is unknown at this time - - - - This axis requires calibration - - - - This axis does not require calibration - - - - - - - No GoPro connected - - - - The detected GoPro is not HeroBus compatible - - - - A HeroBus compatible GoPro is connected - - - - An unrecoverable error was encountered with the connected GoPro, it may require a power cycle - - - - - - - GoPro is currently recording - - - - - - The write message with ID indicated succeeded - - - - The write message with ID indicated failed - - - - - - (Get/Set) - - - - (Get/Set) - - - - (___/Set) - - - - (Get/___) - - - - (Get/___) - - - - (Get/Set) - - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) Hero 3+ Only - - - - (Get/Set) - - - - - (Get/Set) - - - - - - Video mode - - - - Photo mode - - - - Burst mode, hero 3+ only - - - - Time lapse mode, hero 3+ only - - - - Multi shot mode, hero 4 only - - - - Playback mode, hero 4 only, silver only except when LCD or HDMI is connected to black - - - - Playback mode, hero 4 only - - - - Mode not yet known - - - - - - 848 x 480 (480p) - - - - 1280 x 720 (720p) - - - - 1280 x 960 (960p) - - - - 1920 x 1080 (1080p) - - - - 1920 x 1440 (1440p) - - - - 2704 x 1440 (2.7k-17:9) - - - - 2704 x 1524 (2.7k-16:9) - - - - 2704 x 2028 (2.7k-4:3) - - - - 3840 x 2160 (4k-16:9) - - - - 4096 x 2160 (4k-17:9) - - - - 1280 x 720 (720p-SuperView) - - - - 1920 x 1080 (1080p-SuperView) - - - - 2704 x 1520 (2.7k-SuperView) - - - - 3840 x 2160 (4k-SuperView) - - - - - - 12 FPS - - - - 15 FPS - - - - 24 FPS - - - - 25 FPS - - - - 30 FPS - - - - 48 FPS - - - - 50 FPS - - - - 60 FPS - - - - 80 FPS - - - - 90 FPS - - - - 100 FPS - - - - 120 FPS - - - - 240 FPS - - - - 12.5 FPS - - - - - - 0x00: Wide - - - - 0x01: Medium - - - - 0x02: Narrow - - - - - - 0=NTSC, 1=PAL - - - - - - 5MP Medium - - - - 7MP Medium - - - - 7MP Wide - - - - 10MP Wide - - - - 12MP Wide - - - - - - Auto - - - - 3000K - - - - 5500K - - - - 6500K - - - - Camera Raw - - - - - - Auto - - - - Neutral - - - - - - ISO 400 - - - - ISO 800 (Only Hero 4) - - - - ISO 1600 - - - - ISO 3200 (Only Hero 4) - - - - ISO 6400 - - - - - - Low Sharpness - - - - Medium Sharpness - - - - High Sharpness - - - - - - -5.0 EV (Hero 3+ Only) - - - - -4.5 EV (Hero 3+ Only) - - - - -4.0 EV (Hero 3+ Only) - - - - -3.5 EV (Hero 3+ Only) - - - - -3.0 EV (Hero 3+ Only) - - - - -2.5 EV (Hero 3+ Only) - - - - -2.0 EV - - - - -1.5 EV - - - - -1.0 EV - - - - -0.5 EV - - - - 0.0 EV - - - - +0.5 EV - - - - +1.0 EV - - - - +1.5 EV - - - - +2.0 EV - - - - +2.5 EV (Hero 3+ Only) - - - - +3.0 EV (Hero 3+ Only) - - - - +3.5 EV (Hero 3+ Only) - - - - +4.0 EV (Hero 3+ Only) - - - - +4.5 EV (Hero 3+ Only) - - - - +5.0 EV (Hero 3+ Only) - - - - - - Charging disabled - - - - Charging enabled - - - - - - Unknown gopro model - - - - Hero 3+ Silver (HeroBus not supported by GoPro) - - - - Hero 3+ Black - - - - Hero 4 Silver - - - - Hero 4 Black - - - - - - 3 Shots / 1 Second - - - - 5 Shots / 1 Second - - - - 10 Shots / 1 Second - - - - 10 Shots / 2 Second - - - - 10 Shots / 3 Second (Hero 4 Only) - - - - 30 Shots / 1 Second - - - - 30 Shots / 2 Second - - - - 30 Shots / 3 Second - - - - 30 Shots / 6 Second - - - - - - - LED patterns off (return control to regular vehicle control) - - - - LEDs show pattern during firmware update - - - - Custom Pattern using custom bytes fields - - - - - - Flags in EKF_STATUS message - - set if EKF's attitude estimate is good - - - - set if EKF's horizontal velocity estimate is good - - - - set if EKF's vertical velocity estimate is good - - - - set if EKF's horizontal position (relative) estimate is good - - - - set if EKF's horizontal position (absolute) estimate is good - - - - set if EKF's vertical position (absolute) estimate is good - - - - set if EKF's vertical position (above ground) estimate is good - - - - EKF is in constant position mode and does not know it's absolute or relative position - - - - set if EKF's predicted horizontal position (relative) estimate is good - - - - set if EKF's predicted horizontal position (absolute) estimate is good - - - - - - - - - - - - - - - - - - - - - - Special ACK block numbers control activation of dataflash log streaming - - - - UAV to stop sending DataFlash blocks - - - - - UAV to start sending DataFlash blocks - - - - - - - Possible remote log data block statuses - - This block has NOT been received - - - - This block has been received - - - - - - - Offsets and calibrations values for hardware sensors. This makes it easier to debug the calibration process. - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - magnetic declination (radians) - raw pressure from barometer - raw temperature from barometer - gyro X calibration - gyro Y calibration - gyro Z calibration - accel X calibration - accel Y calibration - accel Z calibration - - - - Deprecated. Use MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS instead. Set the magnetometer offsets - System ID - Component ID - magnetometer X offset - magnetometer Y offset - magnetometer Z offset - - - - state of APM memory - heap top - free memory - - free memory (32 bit) - - - - raw ADC output - ADC output 1 - ADC output 2 - ADC output 3 - ADC output 4 - ADC output 5 - ADC output 6 - - - - - Configure on-board Camera Control System. - System ID - Component ID - Mode enumeration from 1 to N //P, TV, AV, M, Etc (0 means ignore) - Divisor number //e.g. 1000 means 1/1000 (0 means ignore) - F stop number x 10 //e.g. 28 means 2.8 (0 means ignore) - ISO enumeration from 1 to N //e.g. 80, 100, 200, Etc (0 means ignore) - Exposure type enumeration from 1 to N (0 means ignore) - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - Control on-board Camera Control System to take shots. - System ID - Component ID - 0: stop, 1: start or keep it up //Session control e.g. show/hide lens - 1 to N //Zoom's absolute position (0 means ignore) - -100 to 100 //Zooming step value to offset zoom from the current position - 0: unlock focus or keep unlocked, 1: lock focus or keep locked, 3: re-lock focus - 0: ignore, 1: shot or start filming - Command Identity (incremental loop: 0 to 255)//A command sent multiple times will be executed or pooled just once - Extra parameters enumeration (0 means ignore) - Correspondent value to given extra_param - - - - - Message to configure a camera mount, directional antenna, etc. - System ID - Component ID - mount operating mode (see MAV_MOUNT_MODE enum) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - (1 = yes, 0 = no) - - - - Message to control a camera mount, directional antenna, etc. - System ID - Component ID - pitch(deg*100) or lat, depending on mount mode - roll(deg*100) or lon depending on mount mode - yaw(deg*100) or alt (in cm) depending on mount mode - if "1" it will save current trimmed position on EEPROM (just valid for NEUTRAL and LANDING) - - - - Message with some status from APM to GCS about camera or antenna mount - System ID - Component ID - pitch(deg*100) - roll(deg*100) - yaw(deg*100) - - - - - A fence point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 1, 0 is for return point) - total number of points (for sanity checking) - Latitude of point - Longitude of point - - - - Request a current fence point from MAV - System ID - Component ID - point index (first point is 1, 0 is for return point) - - - - Status of geo-fencing. Sent in extended status stream when fencing enabled - 0 if currently inside fence, 1 if outside - number of fence breaches - last breach type (see FENCE_BREACH_* enum) - time of last breach in milliseconds since boot - - - - Status of DCM attitude estimator - X gyro drift estimate rad/s - Y gyro drift estimate rad/s - Z gyro drift estimate rad/s - average accel_weight - average renormalisation value - average error_roll_pitch value - average error_yaw value - - - - Status of simulation environment, if used - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - Status of key hardware - board voltage (mV) - I2C error count - - - - Status generated by radio - local signal strength - remote signal strength - how full the tx buffer is as a percentage - background noise level - remote background noise level - receive errors - count of error corrected packets - - - - - Status of AP_Limits. Sent in extended status stream when AP_Limits is enabled - state of AP_Limits, (see enum LimitState, LIMITS_STATE) - time of last breach in milliseconds since boot - time of last recovery action in milliseconds since boot - time of last successful recovery in milliseconds since boot - time of last all-clear in milliseconds since boot - number of fence breaches - AP_Limit_Module bitfield of enabled modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of required modules, (see enum moduleid or LIMIT_MODULE) - AP_Limit_Module bitfield of triggered modules, (see enum moduleid or LIMIT_MODULE) - - - - Wind estimation - wind direction that wind is coming from (degrees) - wind speed in ground plane (m/s) - vertical wind speed (m/s) - - - - Data packet, size 16 - data type - data length - raw data - - - - Data packet, size 32 - data type - data length - raw data - - - - Data packet, size 64 - data type - data length - raw data - - - - Data packet, size 96 - data type - data length - raw data - - - - Rangefinder reporting - distance in meters - raw voltage if available, zero otherwise - - - - Airspeed auto-calibration - GPS velocity north m/s - GPS velocity east m/s - GPS velocity down m/s - Differential pressure pascals - Estimated to true airspeed ratio - Airspeed ratio - EKF state x - EKF state y - EKF state z - EKF Pax - EKF Pby - EKF Pcz - - - - - A rally point. Used to set a point when from GCS -> MAV. Also used to return a point from MAV -> GCS - System ID - Component ID - point index (first point is 0) - total number of points (for sanity checking) - Latitude of point in degrees * 1E7 - Longitude of point in degrees * 1E7 - Transit / loiter altitude in meters relative to home - - Break altitude in meters relative to home - Heading to aim for when landing. In centi-degrees. - See RALLY_FLAGS enum for definition of the bitmask. - - - - Request a current rally point from MAV. MAV should respond with a RALLY_POINT message. MAV should not respond if the request is invalid. - System ID - Component ID - point index (first point is 0) - - - - Status of compassmot calibration - throttle (percent*10) - current (amps) - interference (percent) - Motor Compensation X - Motor Compensation Y - Motor Compensation Z - - - - - Status of secondary AHRS filter if available - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - - - - - Camera Event - Image timestamp (microseconds since UNIX epoch, according to camera clock) - System ID - - Camera ID - - Image index - - See CAMERA_STATUS_TYPES enum for definition of the bitmask - Parameter 1 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 2 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 3 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - Parameter 4 (meaning depends on event, see CAMERA_STATUS_TYPES enum) - - - - - Camera Capture Feedback - Image timestamp (microseconds since UNIX epoch), as passed in by CAMERA_STATUS message (or autopilot if no CCB) - System ID - - Camera ID - - Image index - - Latitude in (deg * 1E7) - Longitude in (deg * 1E7) - Altitude Absolute (meters AMSL) - Altitude Relative (meters above HOME location) - Camera Roll angle (earth frame, degrees, +-180) - - Camera Pitch angle (earth frame, degrees, +-180) - - Camera Yaw (earth frame, degrees, 0-360, true) - - Focal Length (mm) - - See CAMERA_FEEDBACK_FLAGS enum for definition of the bitmask - - - - - 2nd Battery status - voltage in millivolts - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - - - - Status of third AHRS filter if available. This is for ANU research group (Ali and Sean) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Altitude (MSL) - Latitude in degrees * 1E7 - Longitude in degrees * 1E7 - test variable1 - test variable2 - test variable3 - test variable4 - - - - Request the autopilot version from the system/component. - System ID - Component ID - - - - - Send a block of log data to remote location - System ID - Component ID - log data block sequence number - log data block - - - - Send Status of each log block that autopilot board might have sent - System ID - Component ID - log data block sequence number - log data block status - - - - Control vehicle LEDs - System ID - Component ID - Instance (LED instance to control or 255 for all LEDs) - Pattern (see LED_PATTERN_ENUM) - Custom Byte Length - Custom Bytes - - - - Reports progress of compass calibration. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - Attempt number - Completion percentage - Bitmask of sphere sections (see http://en.wikipedia.org/wiki/Geodesic_grid) - Body frame direction vector for display - Body frame direction vector for display - Body frame direction vector for display - - - - Reports results of completed compass calibration. Sent until MAG_CAL_ACK received. - Compass being calibrated - Bitmask of compasses being calibrated - Status (see MAG_CAL_STATUS enum) - 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters - RMS milligauss residuals - X offset - Y offset - Z offset - X diagonal (matrix 11) - Y diagonal (matrix 22) - Z diagonal (matrix 33) - X off-diagonal (matrix 12 and 21) - Y off-diagonal (matrix 13 and 31) - Z off-diagonal (matrix 32 and 23) - - - - - EKF Status message including flags and variances - Flags - - Velocity variance - - Horizontal Position variance - Vertical Position variance - Compass variance - Terrain Altitude variance - - - - - PID tuning information - axis - desired rate (degrees/s) - achieved rate (degrees/s) - FF component - P component - I component - D component - - - - 3 axis gimbal mesuraments - System ID - Component ID - Time since last update (seconds) - Delta angle X (radians) - Delta angle Y (radians) - Delta angle X (radians) - Delta velocity X (m/s) - Delta velocity Y (m/s) - Delta velocity Z (m/s) - Joint ROLL (radians) - Joint EL (radians) - Joint AZ (radians) - - - - Control message for rate gimbal - System ID - Component ID - Demanded angular rate X (rad/s) - Demanded angular rate Y (rad/s) - Demanded angular rate Z (rad/s) - - - - 100 Hz gimbal torque command telemetry - System ID - Component ID - Roll Torque Command - Elevation Torque Command - Azimuth Torque Command - - - - - Heartbeat from a HeroBus attached GoPro - Status - Current capture mode - additional status bits - - - - - Request a GOPRO_COMMAND response from the GoPro - System ID - Component ID - Command ID - - - - Response from a GOPRO_COMMAND get request - Command ID - Status - Value - - - - Request to set a GOPRO_COMMAND with a desired - System ID - Component ID - Command ID - Value - - - - Response from a GOPRO_COMMAND set request - Command ID - Status - - - - - RPM sensor output - RPM Sensor1 - RPM Sensor2 - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/autoquad.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/autoquad.xml deleted file mode 100644 index 8c224783b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/autoquad.xml +++ /dev/null @@ -1,169 +0,0 @@ - - - common.xml - 3 - - - Track current version of these definitions (can be used by checking value of AUTOQUAD_MAVLINK_DEFS_VERSION_ENUM_END). Append a new entry for each published change. - - - - Available operating modes/statuses for AutoQuad flight controller. - Bitmask up to 32 bits. Low side bits for base modes, high side for - additional active features/modifiers/constraints. - - System is initializing - - - - System is *armed* and standing by, with no throttle input and no autonomous mode - - - Flying (throttle input detected), assumed under manual control unless other mode bits are set - - - Altitude hold engaged - - - Position hold engaged - - - Externally-guided (eg. GCS) navigation mode - - - Autonomous mission execution mode - - - - Ready but *not armed* - - - Calibration mode active - - - - No valid control input (eg. no radio link) - - - Battery is low (stage 1 warning) - - - Battery is depleted (stage 2 warning) - - - - Dynamic Velocity Hold is active (PH with proportional manual direction override) - - - ynamic Altitude Override is active (AH with proportional manual adjustment) - - - - Craft is at ceiling altitude - - - Ceiling altitude is set - - - Heading-Free dynamic mode active - - - Heading-Free locked mode active - - - Automatic Return to Home is active - - - System is in failsafe recovery mode - - - - - Orbit a waypoint. - Orbit radius in meters - Loiter time in decimal seconds - Maximum horizontal speed in m/s - Desired yaw angle at waypoint - Latitude - Longitude - Altitude - - - Start/stop AutoQuad telemetry values stream. - Start or stop (1 or 0) - Stream frequency in us - Dataset ID (refer to aq_mavlink.h::mavlinkCustomDataSets enum in AQ flight controller code) - Empty - Empty - Empty - Empty - - - - Request AutoQuad firmware version number. - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - - - - Motor/ESC telemetry data. - - - - - - Sends up to 20 raw float values. - Index of message - value1 - value2 - value3 - value4 - value5 - value6 - value7 - value8 - value9 - value10 - value11 - value12 - value13 - value14 - value15 - value16 - value17 - value18 - value19 - value20 - - - Sends ESC32 telemetry data for up to 4 motors. Multiple messages may be sent in sequence when system has > 4 motors. Data is described as follows: - // unsigned int state : 3; - // unsigned int vin : 12; // x 100 - // unsigned int amps : 14; // x 100 - // unsigned int rpm : 15; - // unsigned int duty : 8; // x (255/100) - // - Data Version 2 - - // unsigned int errors : 9; // Bad detects error count - // - Data Version 3 - - // unsigned int temp : 9; // (Deg C + 32) * 4 - // unsigned int errCode : 3; - - Timestamp of the component clock since boot time in ms. - Sequence number of message (first set of 4 motors is #1, next 4 is #2, etc). - Total number of active ESCs/motors on the system. - Number of active ESCs in this sequence (1 through this many array members will be populated with data) - ESC/Motor ID - Age of each ESC telemetry reading in ms compared to boot time. A value of 0xFFFF means timeout/no data. - Version of data structure (determines contents). - Data bits 1-32 for each ESC. - Data bits 33-64 for each ESC. - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/common.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/common.xml deleted file mode 100644 index 8718cd7da..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/common.xml +++ /dev/null @@ -1,3716 +0,0 @@ - - - 3 - 0 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - Reserved for future use. - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - PX4 Autopilot - http://pixhawk.ethz.ch/px4/ - - - SMACCMPilot - http://smaccmpilot.org - - - AutoQuad -- http://autoquad.org - - - Armazila -- http://armazila.com - - - Aerob -- http://aerob.ru - - - ASLUAV autopilot -- http://www.asl.ethz.ch - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Tricopter - - - Flapping wing - - - Kite - - - Onboard companion controller - - - Two-rotor VTOL using control surfaces in vertical operation in addition. Tailsitter. - - - Quad-rotor VTOL using a V-shaped quad config in vertical operation. Tailsitter. - - - Tiltrotor VTOL - - - - VTOL reserved 2 - - - VTOL reserved 3 - - - VTOL reserved 4 - - - VTOL reserved 5 - - - Onboard gimbal - - - Onboard ADSB peripheral - - - - These values define the type of firmware release. These values indicate the first version or release of this type. For example the first alpha release would be 64, the second would be 65. - - development release - - - alpha release - - - beta release - - - release candidate - - - official stable release - - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - Override command, pauses current mission execution and moves immediately to a position - - Hold at the current position. - - - Continue with the next item in mission execution. - - - Hold at the current position of the system - - - Hold at the position specified in the parameters of the DO_HOLD action - - - - These defines are predefined OR-combined mode flags. There is no need to use values from this enum, but it - simplifies the use of the mode flags. Note that manual input is enabled in all modes as a safety override. - - System is not ready to fly, booting, calibrating, etc. No flag is set. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under assisted RC control. - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under manual (RC) control, no stabilization - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control, manual setpoint - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - System is allowed to be active, under autonomous control and navigation (the trajectory is decided onboard and not pre-programmed by MISSIONs) - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - UNDEFINED mode. This solely depends on the autopilot - use with caution, intended for developers only. - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - On Screen Display (OSD) devices for video links - - - Generic autopilot peripheral component ID. Meant for devices that do not implement the parameter sub-protocol - - - - - - - These encode the sensors whose status is sent as part of the SYS_STATUS message. - - 0x01 3D gyro - - - 0x02 3D accelerometer - - - 0x04 3D magnetometer - - - 0x08 absolute pressure - - - 0x10 differential pressure - - - 0x20 GPS - - - 0x40 optical flow - - - 0x80 computer vision position - - - 0x100 laser based position - - - 0x200 external ground truth (Vicon or Leica) - - - 0x400 3D angular rate control - - - 0x800 attitude stabilization - - - 0x1000 yaw position - - - 0x2000 z/altitude control - - - 0x4000 x/y position control - - - 0x8000 motor outputs / control - - - 0x10000 rc receiver - - - 0x20000 2nd 3D gyro - - - 0x40000 2nd 3D accelerometer - - - 0x80000 2nd 3D magnetometer - - - 0x100000 geofence - - - 0x200000 AHRS subsystem health - - - 0x400000 Terrain subsystem health - - - 0x800000 Motors are reversed - - - 0x1000000 Logging - - - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude, second value / y: longitude, third value / z: positive altitude over mean sea level (MSL) - - - Local coordinate frame, Z-up (x: north, y: east, z: down). - - - NOT a coordinate frame, indicates a mission command. - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude, second value / y: longitude, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Local coordinate frame, Z-down (x: east, y: north, z: up) - - - Global coordinate frame, WGS84 coordinate system. First value / x: latitude in degrees*1.0e-7, second value / y: longitude in degrees*1.0e-7, third value / z: positive altitude over mean sea level (MSL) - - - Global coordinate frame, WGS84 coordinate system, relative altitude over ground with respect to the home position. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude with 0 being at the altitude of the home location. - - - Offset to the current local frame. Anything expressed in this frame should be added to the current local frame position. - - - Setpoint in body NED frame. This makes sense if all position control is externalized - e.g. useful to command 2 m/s^2 acceleration to the right. - - - Offset in body NED frame. This makes sense if adding setpoints to the current flight path, to avoid an obstacle - e.g. useful to command 2 m/s^2 acceleration to the east. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees, second value / y: longitude in degrees, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - Global coordinate frame with above terrain level altitude. WGS84 coordinate system, relative altitude over terrain with respect to the waypoint coordinate. First value / x: latitude in degrees*10e-7, second value / y: longitude in degrees*10e-7, third value / z: positive altitude in meters with 0 being at ground level in terrain model. - - - - - - - - - - - - - - - - - - - - - - - - - - Disable fenced mode - - - Switched to guided mode to return point (fence point 0) - - - Report fence breach, but don't take action - - - Switched to guided mode to return point (fence point 0) with manual throttle control - - - Switch to RTL (return to launch) mode and head for the return point. - - - - - - No last fence breach - - - Breached minimum altitude - - - Breached maximum altitude - - - Breached fence boundary - - - - - Enumeration of possible mount operation modes - Load and keep safe position (Roll,Pitch,Yaw) from permant memory and stop stabilization - Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory. - Load neutral position and start MAVLink Roll,Pitch,Yaw control with stabilization - Load neutral position and start RC Roll,Pitch,Yaw control with stabilization - Load neutral position and start to point to Lat,Lon,Alt - - - Commands to be executed by the MAV. They can be executed on user request, or as part of a mission script. If the action is used in a mission, the parameter mapping to the waypoint/mission message is as follows: Param 1, Param 2, Param 3, Param 4, X: Param 5, Y:Param 6, Z:Param 7. This command list is similar what ARINC 424 is for commercial aircraft: A data format how to interpret waypoint/mission data. - - Navigate to MISSION. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Acceptance radius in meters (if the sphere with this radius is hit, the MISSION counts as reached) - 0 to pass through the WP, if > 0 radius in meters to pass by WP. Positive value for clockwise orbit, negative value for counter-clockwise orbit. Allows trajectory control. - Desired yaw angle at MISSION (rotary wing) - Latitude - Longitude - Altitude - - - Loiter around this MISSION an unlimited amount of time - Empty - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X turns - Turns - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Loiter around this MISSION for X seconds - Seconds (decimal) - Empty - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location. Else, this is desired yaw angle - Latitude - Longitude - Altitude - - - Return to launch location - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Land at location - Abort Alt - Empty - Empty - Desired yaw angle - Latitude - Longitude - Altitude - - - Takeoff from ground / hand - Minimum pitch (if airspeed sensor present), desired pitch without sensor - Empty - Empty - Yaw angle (if magnetometer present), ignored without magnetometer - Latitude - Longitude - Altitude - - - Land at local position (local frame only) - Landing target number (if available) - Maximum accepted offset from desired landing position [m] - computed magnitude from spherical coordinates: d = sqrt(x^2 + y^2 + z^2), which gives the maximum accepted distance between the desired landing position and the position where the vehicle is about to land - Landing descend rate [ms^-1] - Desired yaw angle [rad] - Y-axis position [m] - X-axis position [m] - Z-axis / ground level position [m] - - - Takeoff from local position (local frame only) - Minimum pitch (if airspeed sensor present), desired pitch without sensor [rad] - Empty - Takeoff ascend rate [ms^-1] - Yaw angle [rad] (if magnetometer or another yaw estimation source present), ignored without one of these - Y-axis position [m] - X-axis position [m] - Z-axis position [m] - - - Vehicle following, i.e. this waypoint represents the position of a moving vehicle - Following logic to use (e.g. loitering or sinusoidal following) - depends on specific autopilot implementation - Ground speed of vehicle to be followed - Radius around MISSION, in meters. If positive loiter clockwise, else counter-clockwise - Desired yaw angle. - Latitude - Longitude - Altitude - - - Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached. - Climb or Descend (0 = Neutral, command completes when within 5m of this command's altitude, 1 = Climbing, command completes when at or above this command's altitude, 2 = Descending, command completes when at or below this command's altitude. - Empty - Empty - Empty - Empty - Empty - Desired altitude in meters - - - Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. - Heading Required (0 = False) - Radius in meters. If positive loiter clockwise, negative counter-clockwise, 0 means no change to standard loiter. - Empty - Forward moving aircraft this sets exit xtrack location: 0 for center of loiter wp, 1 for exit location - Latitude - Longitude - Altitude - - - Being following a target - System ID (the system ID of the FOLLOW_TARGET beacon). Send 0 to disable follow-me and return to the default position hold mode - RESERVED - RESERVED - altitude flag: 0: Keep current altitude, 1: keep altitude difference to target, 2: go to a fixed altitude above home - altitude - RESERVED - TTL in seconds in which the MAV should go to the default position hold mode after a message rx timeout - - - Reposition the MAV after a follow target command has been sent - Camera q1 (where 0 is on the ray from the camera to the tracking device) - Camera q2 - Camera q3 - Camera q4 - altitude offset from target (m) - X offset from target (m) - Y offset from target (m) - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - Control autonomous path planning on the MAV. - 0: Disable local obstacle avoidance / local path planning (without resetting map), 1: Enable local path planning, 2: Enable and reset local path planning - 0: Disable full path planning (without resetting map), 1: Enable, 2: Enable and reset map/occupancy grid, 3: Enable and reset planned route, but not occupancy grid - Empty - Yaw angle at goal, in compass degrees, [0..360] - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Navigate to MISSION using a spline path. - Hold time in decimal seconds. (ignored by fixed wing, time to stay at MISSION for rotary wing) - Empty - Empty - Empty - Latitude/X of goal - Longitude/Y of goal - Altitude/Z of goal - - - Takeoff from ground using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - Land using VTOL mode - Empty - Empty - Empty - Yaw angle in degrees - Latitude - Longitude - Altitude - - - - - - hand control over to an external controller - On / Off (> 0.5f on) - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay the next navigation command a number of seconds or until a specified time - Delay in seconds (decimal, -1 to enable time-of-day fields) - hour (24h format, UTC, -1 to ignore) - minute (24h format, UTC, -1 to ignore) - second (24h format, UTC) - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the NAV/ACTION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Delay mission state machine. - Delay in seconds (decimal) - Empty - Empty - Empty - Empty - Empty - Empty - - - Ascend/descend at rate. Delay mission state machine until desired altitude reached. - Descent / Ascend rate (m/s) - Empty - Empty - Empty - Empty - Empty - Finish Altitude - - - Delay mission state machine until within desired distance of next NAV point. - Distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - Reach a certain target angle. - target angle: [0-360], 0 is north - speed during yaw change:[deg per second] - direction: negative: counter clockwise, positive: clockwise [-1,1] - relative offset or absolute angle: [ 1,0] - Empty - Empty - Empty - - - NOP - This command is only used to mark the upper limit of the CONDITION commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Set system mode. - Mode, as defined by ENUM MAV_MODE - Custom mode - this is system specific, please refer to the individual autopilot specifications for details. - Custom sub mode - this is system specific, please refer to the individual autopilot specifications for details. - Empty - Empty - Empty - Empty - - - Jump to the desired command in the mission list. Repeat this action only the specified number of times - Sequence number - Repeat count - Empty - Empty - Empty - Empty - Empty - - - Change speed and/or throttle set points. - Speed type (0=Airspeed, 1=Ground Speed) - Speed (m/s, -1 indicates no change) - Throttle ( Percent, -1 indicates no change) - absolute or relative [0,1] - Empty - Empty - Empty - - - Changes the home location either to the current location or a specified location. - Use current (1=use current location, 0=use specified location) - Empty - Empty - Empty - Latitude - Longitude - Altitude - - - Set a system parameter. Caution! Use of this command requires knowledge of the numeric enumeration value of the parameter. - Parameter number - Parameter value - Empty - Empty - Empty - Empty - Empty - - - Set a relay to a condition. - Relay number - Setting (1=on, 0=off, others possible depending on system hardware) - Empty - Empty - Empty - Empty - Empty - - - Cycle a relay on and off for a desired number of cyles with a desired period. - Relay number - Cycle count - Cycle time (seconds, decimal) - Empty - Empty - Empty - Empty - - - Set a servo to a desired PWM value. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Empty - Empty - Empty - Empty - Empty - - - Cycle a between its nominal setting and a desired PWM for a desired number of cycles with a desired period. - Servo number - PWM (microseconds, 1000 to 2000 typical) - Cycle count - Cycle time (seconds) - Empty - Empty - Empty - - - Terminate flight immediately - Flight termination activated if > 0.5 - Empty - Empty - Empty - Empty - Empty - Empty - - - Change altitude set point. - Altitude in meters - Mav frame of new altitude (see MAV_FRAME) - Empty - Empty - Empty - Empty - Empty - - - Mission command to perform a landing. This is used as a marker in a mission to tell the autopilot where a sequence of mission items that represents a landing starts. It may also be sent via a COMMAND_LONG to trigger a landing, in which case the nearest (geographically) landing sequence in the mission will be used. The Latitude/Longitude is optional, and may be set to 0/0 if not needed. If specified then it will be used to help find the closest landing sequence. - Empty - Empty - Empty - Empty - Latitude - Longitude - Empty - - - Mission command to perform a landing from a rally point. - Break altitude (meters) - Landing speed (m/s) - Empty - Empty - Empty - Empty - Empty - - - Mission command to safely abort an autonmous landing. - Altitude (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Reposition the vehicle to a specific WGS84 global position. - Ground speed, less than 0 (-1) for default - Bitmask of option flags, see the MAV_DO_REPOSITION_FLAGS enum. - Reserved - Yaw heading, NaN for unchanged. For planes indicates loiter direction (0: clockwise, 1: counter clockwise) - Latitude (deg * 1E7) - Longitude (deg * 1E7) - Altitude (meters) - - - If in a GPS controlled position mode, hold the current position or continue. - 0: Pause current mission or reposition command, hold current position. 1: Continue mission. A VTOL capable vehicle should enter hover mode (multicopter and VTOL planes). A plane should loiter with the default loiter radius. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Set moving direction to forward or reverse. - Direction (0=Forward, 1=Reverse) - Empty - Empty - Empty - Empty - Empty - Empty - - - Control onboard camera system. - Camera ID (-1 for all) - Transmission: 0: disabled, 1: enabled compressed, 2: enabled raw - Transmission mode: 0: video stream, >0: single images every n seconds (decimal) - Recording: 0: disabled, 1: enabled compressed, 2: enabled raw - Empty - Empty - Empty - - - Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras. - Region of intereset mode. (see MAV_ROI enum) - MISSION index/ target ID. (see MAV_ROI enum) - ROI index (allows a vehicle to manage multiple ROI's) - Empty - x the location of the fixed ROI (see MAV_FRAME) - y - z - - - - - Mission command to configure an on-board camera controller system. - Modes: P, TV, AV, M, Etc - Shutter speed: Divisor number for one second - Aperture: F stop number - ISO number e.g. 80, 100, 200, Etc - Exposure type enumerator - Command Identity - Main engine cut-off time before camera trigger in seconds/10 (0 means no cut-off) - - - - Mission command to control an on-board camera controller system. - Session control e.g. show/hide lens - Zoom's absolute position - Zooming step value to offset zoom from the current position - Focus Locking, Unlocking or Re-locking - Shooting Command - Command Identity - Empty - - - - - Mission command to configure a camera or antenna mount - Mount operation mode (see MAV_MOUNT_MODE enum) - stabilize roll? (1 = yes, 0 = no) - stabilize pitch? (1 = yes, 0 = no) - stabilize yaw? (1 = yes, 0 = no) - Empty - Empty - Empty - - - - Mission command to control a camera or antenna mount - pitch or lat in degrees, depending on mount mode. - roll or lon in degrees depending on mount mode - yaw or alt (in meters) depending on mount mode - reserved - reserved - reserved - MAV_MOUNT_MODE enum value - - - - Mission command to set CAM_TRIGG_DIST for this flight - Camera trigger distance (meters) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to enable the geofence - enable? (0=disable, 1=enable, 2=disable_floor_only) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to trigger a parachute - action (0=disable, 1=enable, 2=release, for some systems see PARACHUTE_ACTION enum, not in general message set.) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Mission command to perform motor test - motor sequence number (a number from 1 to max number of motors on the vehicle) - throttle type (0=throttle percentage, 1=PWM, 2=pilot throttle channel pass-through. See MOTOR_TEST_THROTTLE_TYPE enum) - throttle - timeout (in seconds) - Empty - Empty - Empty - - - - Change to/from inverted flight - inverted (0=normal, 1=inverted) - Empty - Empty - Empty - Empty - Empty - Empty - - - - Sets a desired vehicle turn angle and thrust change - yaw angle to adjust steering by in centidegress - Thrust - normalized to -2 .. 2 - Empty - Empty - Empty - Empty - Empty - - - - - Mission command to control a camera or antenna mount, using a quaternion as reference. - q1 - quaternion param #1, w (1 in null-rotation) - q2 - quaternion param #2, x (0 in null-rotation) - q3 - quaternion param #3, y (0 in null-rotation) - q4 - quaternion param #4, z (0 in null-rotation) - Empty - Empty - Empty - - - - set id of master controller - System ID - Component ID - Empty - Empty - Empty - Empty - Empty - - - - set limits for external control - timeout - maximum time (in seconds) that external controller will be allowed to control vehicle. 0 means no timeout - absolute altitude min (in meters, AMSL) - if vehicle moves below this alt, the command will be aborted and the mission will continue. 0 means no lower altitude limit - absolute altitude max (in meters)- if vehicle moves above this alt, the command will be aborted and the mission will continue. 0 means no upper altitude limit - horizontal move limit (in meters, AMSL) - if vehicle moves more than this distance from it's location at the moment the command was executed, the command will be aborted and the mission will continue. 0 means no horizontal altitude limit - Empty - Empty - Empty - - - - Control vehicle engine. This is interpreted by the vehicles engine controller to change the target engine state. It is intended for vehicles with internal combustion engines - 0: Stop engine, 1:Start Engine - 0: Warm start, 1:Cold start. Controls use of choke where applicable - Height delay (meters). This is for commanding engine start only after the vehicle has gained the specified height. Used in VTOL vehicles during takeoff to start engine after the aircraft is off the ground. Zero for no delay. - Empty - Empty - Empty - Empty - Empty - - - - NOP - This command is only used to mark the upper limit of the DO commands in the enumeration - Empty - Empty - Empty - Empty - Empty - Empty - Empty - - - Trigger calibration. This command will be only accepted if in pre-flight mode. - Gyro calibration: 0: no, 1: yes - Magnetometer calibration: 0: no, 1: yes - Ground pressure: 0: no, 1: yes - Radio calibration: 0: no, 1: yes - Accelerometer calibration: 0: no, 1: yes - Compass/Motor interference calibration: 0: no, 1: yes - Empty - - - Set sensor offsets. This command will be only accepted if in pre-flight mode. - Sensor to adjust the offsets for: 0: gyros, 1: accelerometer, 2: magnetometer, 3: barometer, 4: optical flow, 5: second magnetometer, 6: third magnetometer - X axis offset (or generic dimension 1), in the sensor's raw units - Y axis offset (or generic dimension 2), in the sensor's raw units - Z axis offset (or generic dimension 3), in the sensor's raw units - Generic dimension 4, in the sensor's raw units - Generic dimension 5, in the sensor's raw units - Generic dimension 6, in the sensor's raw units - - - Trigger UAVCAN config. This command will be only accepted if in pre-flight mode. - 1: Trigger actuator ID assignment and direction mapping. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Parameter storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Mission storage: 0: READ FROM FLASH/EEPROM, 1: WRITE CURRENT TO FLASH/EEPROM, 2: Reset to defaults - Onboard logging: 0: Ignore, 1: Start default rate logging, -1: Stop logging, > 1: start logging with rate of param 3 in Hz (e.g. set to 1000 for 1000 Hz logging) - Reserved - Empty - Empty - Empty - - - Request the reboot or shutdown of system components. - 0: Do nothing for autopilot, 1: Reboot autopilot, 2: Shutdown autopilot, 3: Reboot autopilot and keep it in the bootloader until upgraded. - 0: Do nothing for onboard computer, 1: Reboot onboard computer, 2: Shutdown onboard computer, 3: Reboot onboard computer and keep it in the bootloader until upgraded. - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - Reserved, send 0 - - - Hold / continue the current action - MAV_GOTO_DO_HOLD: hold MAV_GOTO_DO_CONTINUE: continue with next item in mission plan - MAV_GOTO_HOLD_AT_CURRENT_POSITION: Hold at current position MAV_GOTO_HOLD_AT_SPECIFIED_POSITION: hold at specified position - MAV_FRAME coordinate frame of hold point - Desired yaw angle in degrees - Latitude / X position - Longitude / Y position - Altitude / Z position - - - start running a mission - first_item: the first mission item to run - last_item: the last mission item to run (after this item is run, the mission ends) - - - Arms / Disarms a component - 1 to arm, 0 to disarm - - - Request the home position from the vehicle. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - Starts receiver pairing - 0:Spektrum - 0:Spektrum DSM2, 1:Spektrum DSMX - - - Request the interval between messages for a particular MAVLink message ID - The MAVLink message ID - - - Request the interval between messages for a particular MAVLink message ID. This interface replaces REQUEST_DATA_STREAM - The MAVLink message ID - The interval between two messages, in microseconds. Set to -1 to disable and 0 to request default rate. - - - Request autopilot capabilities - 1: Request autopilot version - Reserved (all remaining params) - - - Start image capture sequence - Duration between two consecutive pictures (in seconds) - Number of images to capture total - 0 for unlimited capture - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop image capture sequence - Reserved - Reserved - - - - Enable or disable on-board camera triggering system. - Trigger enable/disable (0 for disable, 1 for start) - Shutter integration time (in ms) - Reserved - - - - Starts video capture - Camera ID (0 for all cameras), 1 for first, 2 for second, etc. - Frames per second - Resolution in megapixels (0.3 for 640x480, 1.3 for 1280x720, etc) - - - - Stop the current video capture - Reserved - Reserved - - - - Create a panorama at the current position - Viewing angle horizontal of the panorama (in degrees, +- 0.5 the total angle) - Viewing angle vertical of panorama (in degrees) - Speed of the horizontal rotation (in degrees per second) - Speed of the vertical rotation (in degrees per second) - - - - Request VTOL transition - The target VTOL state, as defined by ENUM MAV_VTOL_STATE. Only MAV_VTOL_STATE_MC and MAV_VTOL_STATE_FW can be used. - - - - This command sets the submode to standard guided when vehicle is in guided mode. The vehicle holds position and altitude and the user can input the desired velocites along all three axes. - - - - - This command sets submode circle when vehicle is in guided mode. Vehicle flies along a circle facing the center of the circle. The user can input the velocity along the circle and change the radius. If no input is given the vehicle will hold position. - - Radius of desired circle in CIRCLE_MODE - User defined - User defined - User defined - Unscaled target latitude of center of circle in CIRCLE_MODE - Unscaled target longitude of center of circle in CIRCLE_MODE - - - - - - - Deploy payload on a Lat / Lon / Alt position. This includes the navigation to reach the required release position and velocity. - Operation mode. 0: prepare single payload deploy (overwriting previous requests), but do not execute it. 1: execute payload deploy immediately (rejecting further deploy commands during execution, but allowing abort). 2: add payload deploy to existing deployment list. - Desired approach vector in degrees compass heading (0..360). A negative value indicates the system can define the approach vector at will. - Desired ground speed at release time. This can be overriden by the airframe in case it needs to meet minimum airspeed. A negative value indicates the system can define the ground speed at will. - Minimum altitude clearance to the release position in meters. A negative value indicates the system can define the clearance at will. - Latitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Longitude unscaled for MISSION_ITEM or in 1e7 degrees for MISSION_ITEM_INT - Altitude, in meters AMSL - - - Control the payload deployment. - Operation mode. 0: Abort deployment, continue normal mission. 1: switch to payload deploment mode. 100: delete first payload deployment request. 101: delete all payload deployment requests. - Reserved - Reserved - Reserved - Reserved - Reserved - Reserved - - - - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined waypoint item. Ground Station will show the Vehicle as flying through this item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined spatial item. Ground Station will not show the Vehicle as flying through this item. Example: ROI item. - User defined - User defined - User defined - User defined - Latitude unscaled - Longitude unscaled - Altitude, in meters AMSL - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - User defined command. Ground Station will not show the Vehicle as flying through this item. Example: MAV_CMD_DO_SET_PARAMETER item. - User defined - User defined - User defined - User defined - User defined - User defined - User defined - - - - - THIS INTERFACE IS DEPRECATED AS OF JULY 2015. Please use MESSAGE_INTERVAL instead. A data stream is not a fixed set of messages, but rather a - recommendation to the autopilot software. Individual autopilots may or may not obey - the recommended messages. - - Enable all data streams - - - Enable IMU_RAW, GPS_RAW, GPS_STATUS packets. - - - Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS - - - Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW - - - Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. - - - Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. - - - Dependent on the autopilot - - - Dependent on the autopilot - - - Dependent on the autopilot - - - - The ROI (region of interest) for the vehicle. This can be - be used by the vehicle for camera/vehicle attitude alignment (see - MAV_CMD_NAV_ROI). - - No region of interest. - - - Point toward next MISSION. - - - Point toward given MISSION. - - - Point toward fixed location. - - - Point toward of given id. - - - - ACK / NACK / ERROR values as a result of MAV_CMDs and for mission item transmission. - - Command / mission item is ok. - - - Generic error message if none of the other reasons fails or if no detailed error reporting is implemented. - - - The system is refusing to accept this command from this source / communication partner. - - - Command or mission item is not supported, other commands would be accepted. - - - The coordinate frame of this command / mission item is not supported. - - - The coordinate frame of this command is ok, but he coordinate values exceed the safety limits of this system. This is a generic error, please use the more specific error messages below if possible. - - - The X or latitude value is out of range. - - - The Y or longitude value is out of range. - - - The Z or altitude value is out of range. - - - - Specifies the datatype of a MAVLink parameter. - - 8-bit unsigned integer - - - 8-bit signed integer - - - 16-bit unsigned integer - - - 16-bit signed integer - - - 32-bit unsigned integer - - - 32-bit signed integer - - - 64-bit unsigned integer - - - 64-bit signed integer - - - 32-bit floating-point - - - 64-bit floating-point - - - - result from a mavlink command - - Command ACCEPTED and EXECUTED - - - Command TEMPORARY REJECTED/DENIED - - - Command PERMANENTLY DENIED - - - Command UNKNOWN/UNSUPPORTED - - - Command executed, but failed - - - - result in a mavlink mission ack - - mission accepted OK - - - generic error / not accepting mission commands at all right now - - - coordinate frame is not supported - - - command is not supported - - - mission item exceeds storage space - - - one of the parameters has an invalid value - - - param1 has an invalid value - - - param2 has an invalid value - - - param3 has an invalid value - - - param4 has an invalid value - - - x/param5 has an invalid value - - - y/param6 has an invalid value - - - param7 has an invalid value - - - received waypoint out of sequence - - - not accepting any mission commands from this communication partner - - - - Indicates the severity level, generally used for status messages to indicate their relative urgency. Based on RFC-5424 using expanded definitions at: http://www.kiwisyslog.com/kb/info:-syslog-message-levels/. - - System is unusable. This is a "panic" condition. - - - Action should be taken immediately. Indicates error in non-critical systems. - - - Action must be taken immediately. Indicates failure in a primary system. - - - Indicates an error in secondary/redundant systems. - - - Indicates about a possible future error if this is not resolved within a given timeframe. Example would be a low battery warning. - - - An unusual event has occured, though not an error condition. This should be investigated for the root cause. - - - Normal operational messages. Useful for logging. No action is required for these messages. - - - Useful non-operational messages that can assist in debugging. These should not occur during normal operation. - - - - Power supply status flags (bitmask) - - main brick power supply valid - - - main servo power supply valid for FMU - - - USB power is connected - - - peripheral supply is in over-current state - - - hi-power peripheral supply is in over-current state - - - Power status has changed since boot - - - - SERIAL_CONTROL device types - - First telemetry port - - - Second telemetry port - - - First GPS port - - - Second GPS port - - - system shell - - - - SERIAL_CONTROL flags (bitmask) - - Set if this is a reply - - - Set if the sender wants the receiver to send a response as another SERIAL_CONTROL message - - - Set if access to the serial port should be removed from whatever driver is currently using it, giving exclusive access to the SERIAL_CONTROL protocol. The port can be handed back by sending a request without this flag set - - - Block on writes to the serial port - - - Send multiple replies until port is drained - - - - Enumeration of distance sensor types - - Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units - - - Ultrasound rangefinder, e.g. MaxBotix units - - - Infrared rangefinder, e.g. Sharp units - - - - Enumeration of sensor orientation, according to its rotations - - Roll: 0, Pitch: 0, Yaw: 0 - - - Roll: 0, Pitch: 0, Yaw: 45 - - - Roll: 0, Pitch: 0, Yaw: 90 - - - Roll: 0, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 0, Yaw: 180 - - - Roll: 0, Pitch: 0, Yaw: 225 - - - Roll: 0, Pitch: 0, Yaw: 270 - - - Roll: 0, Pitch: 0, Yaw: 315 - - - Roll: 180, Pitch: 0, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 45 - - - Roll: 180, Pitch: 0, Yaw: 90 - - - Roll: 180, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 180, Yaw: 0 - - - Roll: 180, Pitch: 0, Yaw: 225 - - - Roll: 180, Pitch: 0, Yaw: 270 - - - Roll: 180, Pitch: 0, Yaw: 315 - - - Roll: 90, Pitch: 0, Yaw: 0 - - - Roll: 90, Pitch: 0, Yaw: 45 - - - Roll: 90, Pitch: 0, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 135 - - - Roll: 270, Pitch: 0, Yaw: 0 - - - Roll: 270, Pitch: 0, Yaw: 45 - - - Roll: 270, Pitch: 0, Yaw: 90 - - - Roll: 270, Pitch: 0, Yaw: 135 - - - Roll: 0, Pitch: 90, Yaw: 0 - - - Roll: 0, Pitch: 270, Yaw: 0 - - - Roll: 0, Pitch: 180, Yaw: 90 - - - Roll: 0, Pitch: 180, Yaw: 270 - - - Roll: 90, Pitch: 90, Yaw: 0 - - - Roll: 180, Pitch: 90, Yaw: 0 - - - Roll: 270, Pitch: 90, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 0 - - - Roll: 270, Pitch: 180, Yaw: 0 - - - Roll: 90, Pitch: 270, Yaw: 0 - - - Roll: 180, Pitch: 270, Yaw: 0 - - - Roll: 270, Pitch: 270, Yaw: 0 - - - Roll: 90, Pitch: 180, Yaw: 90 - - - Roll: 90, Pitch: 0, Yaw: 270 - - - Roll: 315, Pitch: 315, Yaw: 315 - - - - Bitmask of (optional) autopilot capabilities (64 bit). If a bit is set, the autopilot supports this capability. - - Autopilot supports MISSION float message type. - - - Autopilot supports the new param float message type. - - - Autopilot supports MISSION_INT scaled integer message type. - - - Autopilot supports COMMAND_INT scaled integer message type. - - - Autopilot supports the new param union message type. - - - Autopilot supports the new FILE_TRANSFER_PROTOCOL message type. - - - Autopilot supports commanding attitude offboard. - - - Autopilot supports commanding position and velocity targets in local NED frame. - - - Autopilot supports commanding position and velocity targets in global scaled integers. - - - Autopilot supports terrain protocol / data handling. - - - Autopilot supports direct actuator control. - - - Autopilot supports the flight termination command. - - - Autopilot supports onboard compass calibration. - - - Autopilot supports mavlink version 2. - - - - Enumeration of estimator types - - This is a naive estimator without any real covariance feedback. - - - Computer vision based estimate. Might be up to scale. - - - Visual-inertial estimate. - - - Plain GPS estimate. - - - Estimator integrating GPS and inertial sensing. - - - - Enumeration of battery types - - Not specified. - - - Lithium polymer battery - - - Lithium-iron-phosphate battery - - - Lithium-ION battery - - - Nickel metal hydride battery - - - - Enumeration of battery functions - - Battery function is unknown - - - Battery supports all flight systems - - - Battery for the propulsion system - - - Avionics battery - - - Payload battery - - - - Enumeration of VTOL states - - MAV is not configured as VTOL - - - VTOL is in transition from multicopter to fixed-wing - - - VTOL is in transition from fixed-wing to multicopter - - - VTOL is in multicopter state - - - VTOL is in fixed-wing state - - - - Enumeration of landed detector states - - MAV landed state is unknown - - - MAV is landed (on ground) - - - MAV is in air - - - - Enumeration of the ADSB altimeter types - - Altitude reported from a Baro source using QNH reference - - - Altitude reported from a GNSS source - - - - ADSB classification for the type of vehicle emitting the transponder signal - - - - - - - - - - - - - - - - - - - - - - - These flags indicate status such as data validity of each data source. Set = data valid - - - - - - - - - - Bitmask of options for the MAV_CMD_DO_REPOSITION - - The aircraft should immediately transition into guided. This should not be set for follow me applications - - - - - Flags in EKF_STATUS message - - True if the attitude estimate is good - - - - True if the horizontal velocity estimate is good - - - - True if the vertical velocity estimate is good - - - - True if the horizontal position (relative) estimate is good - - - - True if the horizontal position (absolute) estimate is good - - - - True if the vertical position (absolute) estimate is good - - - - True if the vertical position (above ground) estimate is good - - - - True if the EKF is in a constant position mode and is not using external measurements (eg GPS or optical flow) - - - - True if the EKF has sufficient data to enter a mode that will provide a (relative) position estimate - - - - True if the EKF has sufficient data to enter a mode that will provide a (absolute) position estimate - - - - True if the EKF has detected a GPS glitch - - - - - - - throttle as a percentage from 0 ~ 100 - - - - throttle as an absolute PWM value (normally in range of 1000~2000) - - - - throttle pass-through from pilot's transmitter - - - - - - - ignore altitude field - - - ignore hdop field - - - ignore vdop field - - - ignore horizontal velocity field (vn and ve) - - - ignore vertical velocity field (vd) - - - ignore speed accuracy field - - - ignore horizontal accuracy field - - - ignore vertical accuracy field - - - - Possible actions an aircraft can take to avoid a collision. - - Ignore any potential collisions - - - Report potential collision - - - Ascend or Descend to avoid thread - - - Ascend or Descend to avoid thread - - - Aircraft to move perpendicular to the collision's velocity vector - - - Aircraft to fly directly back to its launch point - - - Aircraft to stop in place - - - - Aircraft-rated danger from this threat. - - Not a threat - - - Craft is mildly concerned about this threat - - - Craft is panicing, and may take actions to avoid threat - - - - Source of information about this collision. - - ID field references ADSB_VEHICLE packets - - - ID field references MAVLink SRC ID - - - - Type of GPS fix - - No GPS connected - - - No position information, GPS is connected - - - 2D position - - - 3D position - - - DGPS/SBAS aided 3D position - - - RTK float, 3D position - - - RTK Fixed, 3D position - - - Static fixed, typically used for base stations - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAG ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version - - - The general system state. If the system is following the MAVLink standard, the system state is mainly defined by three orthogonal states/modes: The system mode, which is either LOCKED (motors shut down and locked), MANUAL (system under RC control), GUIDED (system with autonomous position control, position setpoint controlled manually) or AUTO (system guided by path/waypoint planner). The NAV_MODE defined the current flight state: LIFTOFF (often an open-loop maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal navigation state machine. The system status shows wether the system is currently active or not and if an emergency occured. During the CRITICAL and EMERGENCY states the MAV is still considered to be active, but should start emergency procedures autonomously. After a failure occured it should first move from active to critical to allow manual intervention and then move to emergency after a certain timeout. - Bitmask showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are enabled: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Bitmask showing which onboard controllers and sensors are operational or have an error: Value of 0: not enabled. Value of 1: enabled. Indices defined by ENUM MAV_SYS_STATUS_SENSOR - Maximum usage in percent of the mainloop time, (0%: 0, 100%: 1000) should be always below 1000 - Battery voltage, in millivolts (1 = 1 millivolt) - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery - Communication drops in percent, (0%: 0, 100%: 10'000), (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - Autopilot-specific errors - - - The system time is the time of the master clock, typically the computer clock of the main onboard computer. - Timestamp of the master clock in microseconds since UNIX epoch. - Timestamp of the component clock since boot time in milliseconds. - - - - A ping message either requesting or responding to a ping. This allows to measure the system latencies, including serial port, radio modem and UDP connections. - Unix timestamp in microseconds or since system boot if smaller than MAVLink epoch (1.1.2009) - PING sequence - 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system - 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system - - - Request to control this MAV - System the GCS requests control for - 0: request control of this MAV, 1: Release control of this MAV - 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. - Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" - - - Accept / deny control of this MAV - ID of the GCS this message - 0: request control of this MAV, 1: Release control of this MAV - 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control - - - Emit an encrypted signature / key identifying this system. PLEASE NOTE: This protocol has been kept simple, so transmitting the key requires an encrypted channel for true safety. - key - - - THIS INTERFACE IS DEPRECATED. USE COMMAND_LONG with MAV_CMD_DO_SET_MODE INSTEAD. Set the system mode, as defined by enum MAV_MODE. There is no target component id as the mode is by definition for the overall aircraft, not only for one component. - The system setting the mode - The new base mode - The new autopilot-specific mode. This field can be ignored by an autopilot. - - - - Request to read the onboard parameter with the param_id string id. Onboard parameters are stored as key[const char*] -> value[float]. This allows to send a parameter to any other component (such as the GCS) without the need of previous knowledge of possible parameter names. Thus the same GCS can store different parameters for different autopilots. See also http://qgroundcontrol.org/parameter_interface for a full documentation of QGroundControl and IMU code. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) - - - Request all parameters of this component. After this request, all parameters are emitted. - System ID - Component ID - - - Emit the value of a onboard parameter. The inclusion of param_count and param_index in the message allows the recipient to keep track of received parameters and allows him to re-request missing parameters after a loss or timeout. - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - Total number of onboard parameters - Index of this onboard parameter - - - Set a parameter value TEMPORARILY to RAM. It will be reset to default on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving component should acknowledge the new parameter value by sending a param_value message to all communication partners. This will also ensure that multiple GCS all have an up-to-date list of all parameters. If the sending GCS did not receive a PARAM_VALUE message within its timeout time, it should re-send the PARAM_SET message. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Onboard parameter value - Onboard parameter type: see the MAV_PARAM_TYPE enum for supported data types. - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the system, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, NOT WGS84), in meters * 1000 (positive for up). Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. - GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - - - The positioning status, as reported by GPS. This message is intended to display status information about each satellite visible to the receiver. See message GLOBAL_POSITION for the global position estimate. This message can contain information for up to 20 satellites. - Number of satellites visible - Global satellite ID - 0: Satellite not used, 1: used for localization - Elevation (0: right on top of receiver, 90: on the horizon) of satellite - Direction of satellite, 0: 0 deg, 255: 360 deg. - Signal to noise ratio of satellite - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - The RAW IMU readings for the usual 9DOF sensor setup. This message should always contain the true raw values without any scaling to allow data capture and system debugging. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - X acceleration (raw) - Y acceleration (raw) - Z acceleration (raw) - Angular speed around X axis (raw) - Angular speed around Y axis (raw) - Angular speed around Z axis (raw) - X Magnetic field (raw) - Y Magnetic field (raw) - Z Magnetic field (raw) - - - The RAW pressure readings for the typical setup of one absolute pressure and one differential pressure sensor. The sensor values should be the raw, UNSCALED ADC values. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Absolute pressure (raw) - Differential pressure 1 (raw, 0 if nonexistant) - Differential pressure 2 (raw, 0 if nonexistant) - Raw Temperature measurement (raw) - - - The pressure readings for the typical setup of one absolute and differential pressure sensor. The units are as specified in each field. - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right). - Timestamp (milliseconds since system boot) - Roll angle (rad, -pi..+pi) - Pitch angle (rad, -pi..+pi) - Yaw angle (rad, -pi..+pi) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion component 1, w (1 in null-rotation) - Quaternion component 2, x (0 in null-rotation) - Quaternion component 3, y (0 in null-rotation) - Quaternion component 4, z (0 in null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - X Speed - Y Speed - Z Speed - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It - is designed as scaled integer message since the resolution of float is not sufficient. - Timestamp (milliseconds since system boot) - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), AMSL (not WGS84 - note that virtually all GPS modules provide the AMSL as well) - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude, positive north), expressed as m/s * 100 - Ground Y Speed (Longitude, positive east), expressed as m/s * 100 - Ground Z Speed (Altitude, positive down), expressed as m/s * 100 - Vehicle heading (yaw angle) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - - - The scaled values of the RC channels received. (-100%) -10000, (0%) 0, (100%) 10000. Channels that are inactive should be set to UINT16_MAX. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 2 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 3 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 4 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 5 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 6 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 7 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - RC channel 8 value scaled, (-100%) -10000, (0%) 0, (100%) 10000, (invalid) INT16_MAX. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - The RAW values of the servo outputs (for RC input from the remote, use the RC_CHANNELS messages). The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. - Timestamp (microseconds since system boot) - Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. - Servo output 1 value, in microseconds - Servo output 2 value, in microseconds - Servo output 3 value, in microseconds - Servo output 4 value, in microseconds - Servo output 5 value, in microseconds - Servo output 6 value, in microseconds - Servo output 7 value, in microseconds - Servo output 8 value, in microseconds - - Servo output 9 value, in microseconds - Servo output 10 value, in microseconds - Servo output 11 value, in microseconds - Servo output 12 value, in microseconds - Servo output 13 value, in microseconds - Servo output 14 value, in microseconds - Servo output 15 value, in microseconds - Servo output 16 value, in microseconds - - - Request a partial list of mission items from the system/component. http://qgroundcontrol.org/mavlink/waypoint_protocol. If start and end index are the same, just send one waypoint. - System ID - Component ID - Start index, 0 by default - End index, -1 by default (-1: send list to end). Else a valid index of the list - - - This message is sent to the MAV to write a partial list. If start index == end index, only one item will be transmitted / updated. If the start index is NOT 0 and above the current list size, this request should be REJECTED! - System ID - Component ID - Start index, 0 by default and smaller / equal to the largest index of the current onboard list. - End index, equal or greater than start index. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See also http://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Sequence - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position, global: latitude - PARAM6 / y position: global: longitude - PARAM7 / z position: global: altitude (relative or absolute, depending on frame. - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set the mission item with sequence number seq as current item. This means that the MAV will continue to this mission item on the shortest path (not following the mission items in-between). - System ID - Component ID - Sequence - - - Message that announces the sequence number of the current active mission item. The MAV will fly towards this mission item. - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to MISSION_REQUEST_LIST by the MAV and to initiate a write transaction. The GCS can then request the individual mission item based on the knowledge of the total number of MISSIONs. - System ID - Component ID - Number of mission items in the sequence - - - Delete all mission items at once. - System ID - Component ID - - - A certain mission item has been reached. The system will either hold this position (or circle on the orbit) or (if the autocontinue on the WP was set) continue to the next MISSION. - Sequence - - - Ack message during MISSION handling. The type field states if this message is a positive ack (type=0) or if an error happened (type=non-zero). - System ID - Component ID - See MAV_MISSION_RESULT enum - - - As local waypoints exist, the global MISSION reference allows to transform between the local coordinate frame and the global (GPS) coordinate frame. This can be necessary when e.g. in- and outdoor settings are connected and the MAV should move from in- to outdoor. - System ID - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Once the MAV sets a new GPS-Local correspondence, this message announces the origin (0,0,0) position - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - - - Bind a RC channel to a parameter. The parameter should change accoding to the RC channel value. - System ID - Component ID - Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string - Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. - Index of parameter RC channel. Not equal to the RC channel id. Typically correpsonds to a potentiometer-knob on the RC. - Initial parameter value - Scale, maps the RC range [-1, 1] to a parameter value - Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) - Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) - - - Request the information of the mission item with the sequence number seq. The response of the system to this message should be a MISSION_ITEM_INT message. http://qgroundcontrol.org/mavlink/waypoint_protocol - System ID - Component ID - Sequence - - - Set a safety zone (volume), which is defined by two corners of a cube. This message can be used to tell the MAV which setpoints/MISSIONs to accept and which to reject. Safety areas are often enforced by national or competition regulations. - System ID - Component ID - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - Read out the safety zone the MAV currently assumes. - Coordinate frame, as defined by MAV_FRAME enum in mavlink_types.h. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. - x position 1 / Latitude 1 - y position 1 / Longitude 1 - z position 1 / Altitude 1 - x position 2 / Latitude 2 - y position 2 / Longitude 2 - z position 2 / Altitude 2 - - - The attitude in the aeronautical frame (right-handed, Z-down, X-front, Y-right), expressed as quaternion. Quaternion order is w, x, y, z and a zero rotation would be expressed as (1 0 0 0). - Timestamp (milliseconds since system boot) - Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) - Roll angular speed (rad/s) - Pitch angular speed (rad/s) - Yaw angular speed (rad/s) - Attitude covariance - - - The state of the fixed wing navigation and position controller. - Current desired roll in degrees - Current desired pitch in degrees - Current desired heading in degrees - Bearing to current MISSION/target in degrees - Distance to active MISSION in meters - Current altitude error in meters - Current airspeed error in meters/second - Current crosstrack error on x-y plane in meters - - - The filtered global position (e.g. fused GPS and accelerometers). The position is in GPS-frame (right-handed, Z-up). It is designed as scaled integer message since the resolution of float is not sufficient. NOTE: This message is intended for onboard networks / companion computers and higher-bandwidth links and optimized for accuracy and completeness. Please use the GLOBAL_POSITION_INT message for a minimal subset. - Timestamp (milliseconds since system boot) - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Altitude in meters, expressed as * 1000 (millimeters), above MSL - Altitude above ground in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s - Ground Y Speed (Longitude), expressed as m/s - Ground Z Speed (Altitude), expressed as m/s - Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) - - - The filtered local position (e.g. fused computer vision and accelerometers). Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot). 0 for system without monotonic timestamp - Timestamp (microseconds since UNIX epoch) in UTC. 0 for unknown. Commonly filled by the precision time source of a GPS receiver. - Class id of the estimator this estimate originated from. - X Position - Y Position - Z Position - X Speed (m/s) - Y Speed (m/s) - Z Speed (m/s) - X Acceleration (m/s^2) - Y Acceleration (m/s^2) - Z Acceleration (m/s^2) - Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) - - - The PPM values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (milliseconds since system boot) - Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. - RC channel 1 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 2 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 3 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 4 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 5 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 6 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 7 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 8 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 9 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 10 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 11 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 12 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 13 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 14 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 15 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 16 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 17 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - RC channel 18 value, in microseconds. A value of UINT16_MAX implies the channel is unused. - Receive signal strength indicator, 0: 0%, 100: 100%, 255: invalid/unknown. - - - THIS INTERFACE IS DEPRECATED. USE SET_MESSAGE_INTERVAL INSTEAD. - The target requested to send the message stream. - The target requested to send the message stream. - The ID of the requested data stream - The requested message rate - 1 to start sending, 0 to stop sending. - - - THIS INTERFACE IS DEPRECATED. USE MESSAGE_INTERVAL INSTEAD. - The ID of the requested data stream - The message rate - 1 stream is enabled, 0 stream is stopped. - - - This message provides an API for manually controlling the vehicle using standard joystick axes nomenclature, along with a joystick-like input device. Unused axes can be disabled an buttons are also transmit as boolean values of their - The system to be controlled. - X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. - Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. - Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. - R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. - A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. - - - The RAW values of the RC channels sent to the MAV to override info received from the RC radio. A value of UINT16_MAX means no change to that channel. A value of 0 means control of that channel should be released back to the RC radio. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - System ID - Component ID - RC channel 1 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 2 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 3 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 4 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 5 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 6 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 7 value, in microseconds. A value of UINT16_MAX means to ignore this field. - RC channel 8 value, in microseconds. A value of UINT16_MAX means to ignore this field. - - - Message encoding a mission item. This message is emitted to announce - the presence of a mission item and to set a mission item on the system. The mission item can be either in x, y, z meters (type: LOCAL) or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed (NED), global frame is Z-up, right handed (ENU). See alsohttp://qgroundcontrol.org/mavlink/waypoint_protocol. - System ID - Component ID - Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). - The coordinate system of the MISSION. see MAV_FRAME in mavlink_types.h - The scheduled action for the MISSION. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Metrics typically displayed on a HUD for fixed wing aircraft - Current airspeed in m/s - Current ground speed in m/s - Current heading in degrees, in compass units (0..360, 0=north) - Current throttle setting in integer percent, 0 to 100 - Current altitude (MSL), in meters - Current climb rate in meters/second - - - Message encoding a command with parameters as scaled integers. Scaling depends on the actual command value. - System ID - Component ID - The coordinate system of the COMMAND. see MAV_FRAME in mavlink_types.h - The scheduled action for the mission item. see MAV_CMD in common.xml MAVLink specs - false:0, true:1 - autocontinue to next wp - PARAM1, see MAV_CMD enum - PARAM2, see MAV_CMD enum - PARAM3, see MAV_CMD enum - PARAM4, see MAV_CMD enum - PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 - PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 - PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. - - - Send a command with up to seven parameters to the MAV - System which should execute the command - Component which should execute the command, 0 for all components - Command ID, as defined by MAV_CMD enum. - 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) - Parameter 1, as defined by MAV_CMD enum. - Parameter 2, as defined by MAV_CMD enum. - Parameter 3, as defined by MAV_CMD enum. - Parameter 4, as defined by MAV_CMD enum. - Parameter 5, as defined by MAV_CMD enum. - Parameter 6, as defined by MAV_CMD enum. - Parameter 7, as defined by MAV_CMD enum. - - - Report status of a command. Includes feedback wether the command was executed. - Command ID, as defined by MAV_CMD enum. - See MAV_RESULT enum - - - Setpoint in roll, pitch, yaw and thrust from the operator - Timestamp in milliseconds since system boot - Desired roll rate in radians per second - Desired pitch rate in radians per second - Desired yaw rate in radians per second - Collective thrust, normalized to 0 .. 1 - Flight mode switch position, 0.. 255 - Override mode switch position, 0.. 255 - - - Sets a desired vehicle attitude. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Reports the current commanded attitude of the vehicle as specified by the autopilot. This should match the commands sent in a SET_ATTITUDE_TARGET message if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - Body roll rate in radians per second - Body roll rate in radians per second - Body roll rate in radians per second - Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) - - - Sets a desired vehicle position in a local north-east-down coordinate frame. Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot - System ID - Component ID - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot - Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in NED frame in meters - Y Position in NED frame in meters - Z Position in NED frame in meters (note, altitude is negative in NED) - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Sets a desired vehicle position, velocity, and/or acceleration in a global coordinate system (WGS84). Used by an external controller to command the vehicle (manual controller or other system). - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - System ID - Component ID - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - Reports the current commanded vehicle position, velocity, and acceleration as specified by the autopilot. This should match the commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is being controlled this way. - Timestamp in milliseconds since system boot. The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. - Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 - Bitmask to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate - X Position in WGS84 frame in 1e7 * meters - Y Position in WGS84 frame in 1e7 * meters - Altitude in meters in AMSL altitude, not WGS84 if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT - X velocity in NED frame in meter / s - Y velocity in NED frame in meter / s - Z velocity in NED frame in meter / s - X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N - yaw setpoint in rad - yaw rate setpoint in rad/s - - - The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages of MAV X and the global coordinate frame in NED coordinates. Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED / north-east-down convention) - Timestamp (milliseconds since system boot) - X Position - Y Position - Z Position - Roll - Pitch - Yaw - - - DEPRECATED PACKET! Suffers from missing airspeed fields and singularities due to Euler angles. Please use HIL_STATE_QUATERNION instead. Sent from simulation to autopilot. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Roll angle (rad) - Pitch angle (rad) - Yaw angle (rad) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - Sent from autopilot to simulation. Hardware in the loop control outputs - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control output -1 .. 1 - Control output -1 .. 1 - Control output -1 .. 1 - Throttle 0 .. 1 - Aux 1, -1 .. 1 - Aux 2, -1 .. 1 - Aux 3, -1 .. 1 - Aux 4, -1 .. 1 - System mode (MAV_MODE) - Navigation mode (MAV_NAV_MODE) - - - Sent from simulation to autopilot. The RAW values of the RC channels received. The standard PPM modulation is as follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual receivers/transmitters might violate this specification. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - RC channel 1 value, in microseconds - RC channel 2 value, in microseconds - RC channel 3 value, in microseconds - RC channel 4 value, in microseconds - RC channel 5 value, in microseconds - RC channel 6 value, in microseconds - RC channel 7 value, in microseconds - RC channel 8 value, in microseconds - RC channel 9 value, in microseconds - RC channel 10 value, in microseconds - RC channel 11 value, in microseconds - RC channel 12 value, in microseconds - Receive signal strength indicator, 0: 0%, 255: 100% - - - Sent from autopilot to simulation. Hardware in the loop control outputs (replacement for HIL_CONTROLS) - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. - System mode (MAV_MODE), includes arming state. - Flags as bitfield, reserved for future use. - - - Optical flow from a flow sensor (e.g. optical mouse sensor) - Timestamp (UNIX) - Sensor ID - Flow in pixels * 10 in x-sensor direction (dezi-pixels) - Flow in pixels * 10 in y-sensor direction (dezi-pixels) - Flow in meters in x-sensor direction, angular-speed compensated - Flow in meters in y-sensor direction, angular-speed compensated - Optical flow quality / confidence. 0: bad, 255: maximum quality - Ground distance in meters. Positive value: distance known. Negative value: Unknown distance - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X speed - Global Y speed - Global Z speed - - - Timestamp (microseconds, synced to UNIX time or since system boot) - Global X position - Global Y position - Global Z position - Roll angle in rad - Pitch angle in rad - Yaw angle in rad - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis (rad / sec) - Angular speed around Y axis (rad / sec) - Angular speed around Z axis (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature - - - Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - The IMU readings in SI units in NED body frame - Timestamp (microseconds, synced to UNIX time or since system boot) - X acceleration (m/s^2) - Y acceleration (m/s^2) - Z acceleration (m/s^2) - Angular speed around X axis in body frame (rad / sec) - Angular speed around Y axis in body frame (rad / sec) - Angular speed around Z axis in body frame (rad / sec) - X Magnetic field (Gauss) - Y Magnetic field (Gauss) - Z Magnetic field (Gauss) - Absolute pressure in millibar - Differential pressure (airspeed) in millibar - Altitude calculated from pressure - Temperature in degrees celsius - Bitmask for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. - - - - Status of simulation environment, if used - True attitude quaternion component 1, w (1 in null-rotation) - True attitude quaternion component 2, x (0 in null-rotation) - True attitude quaternion component 3, y (0 in null-rotation) - True attitude quaternion component 4, z (0 in null-rotation) - Attitude roll expressed as Euler angles, not recommended except for human-readable outputs - Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs - Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs - X acceleration m/s/s - Y acceleration m/s/s - Z acceleration m/s/s - Angular speed around X axis rad/s - Angular speed around Y axis rad/s - Angular speed around Z axis rad/s - Latitude in degrees - Longitude in degrees - Altitude in meters - Horizontal position standard deviation - Vertical position standard deviation - True velocity in m/s in NORTH direction in earth-fixed NED frame - True velocity in m/s in EAST direction in earth-fixed NED frame - True velocity in m/s in DOWN direction in earth-fixed NED frame - - - - Status generated by radio and injected into MAVLink stream. - Local signal strength - Remote signal strength - Remaining free buffer space in percent. - Background noise level - Remote background noise level - Receive errors - Count of error corrected packets - - - File transfer message - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Time synchronization message. - Time sync timestamp 1 - Time sync timestamp 2 - - - Camera-IMU triggering and synchronisation message. - Timestamp for the image frame in microseconds - Image frame sequence - - - The global position, as returned by the Global Positioning System (GPS). This is - NOT the global position estimate of the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION for the global position estimate. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: 65535 - GPS ground speed (m/s * 100). If unknown, set to: 65535 - GPS velocity in cm/s in NORTH direction in earth-fixed NED frame - GPS velocity in cm/s in EAST direction in earth-fixed NED frame - GPS velocity in cm/s in DOWN direction in earth-fixed NED frame - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 - Number of satellites visible. If unknown, set to 255 - - - Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical mouse sensor) - Timestamp (microseconds, synced to UNIX time or since system boot) - Sensor ID - Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. - Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) - Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) - RH rotation around X axis (rad) - RH rotation around Y axis (rad) - RH rotation around Z axis (rad) - Temperature * 100 in centi-degrees Celsius - Optical flow quality / confidence. 0: no valid flow, 255: maximum quality - Time in microseconds since the distance was sampled. - Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance. - - - Sent from simulation to autopilot, avoids in contrast to HIL_STATE singularities. This packet is useful for high throughput applications such as hardware in the loop simulations. - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) - Body frame roll / phi angular speed (rad/s) - Body frame pitch / theta angular speed (rad/s) - Body frame yaw / psi angular speed (rad/s) - Latitude, expressed as * 1E7 - Longitude, expressed as * 1E7 - Altitude in meters, expressed as * 1000 (millimeters) - Ground X Speed (Latitude), expressed as m/s * 100 - Ground Y Speed (Longitude), expressed as m/s * 100 - Ground Z Speed (Altitude), expressed as m/s * 100 - Indicated airspeed, expressed as m/s * 100 - True airspeed, expressed as m/s * 100 - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - - - The RAW IMU readings for secondary 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - Request a list of available logs. On some systems calling this may stop on-board logging until LOG_REQUEST_END is called. - System ID - Component ID - First log id (0 for first available) - Last log id (0xffff for last available) - - - Reply to LOG_REQUEST_LIST - Log id - Total number of logs - High log number - UTC timestamp of log in seconds since 1970, or 0 if not available - Size of the log (may be approximate) in bytes - - - Request a chunk of a log - System ID - Component ID - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes - - - Reply to LOG_REQUEST_DATA - Log id (from LOG_ENTRY reply) - Offset into the log - Number of bytes (zero for end of log) - log data - - - Erase all logs - System ID - Component ID - - - Stop log transfer and resume normal logging - System ID - Component ID - - - data for injecting into the onboard GPS (used for DGPS) - System ID - Component ID - data length - raw data (110 is enough for 12 satellites of RTCMv2) - - - Second GPS data. Coordinate frame is right-handed, Z-axis up (GPS frame). - Timestamp (microseconds since UNIX epoch or microseconds since system boot) - See the GPS_FIX_TYPE enum. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in meters * 1000 (positive for up) - GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS VDOP vertical dilution of position in cm (m*100). If unknown, set to: UINT16_MAX - GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX - Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX - Number of satellites visible. If unknown, set to 255 - Number of DGPS satellites - Age of DGPS info - - - Power supply status - 5V rail voltage in millivolts - servo rail voltage in millivolts - power supply status flags (see MAV_POWER_STATUS enum) - - - Control a serial port. This can be used for raw access to an onboard serial peripheral such as a GPS or telemetry radio. It is designed to make it possible to update the devices firmware via MAVLink messages or change the devices settings. A message with zero bytes can be used to change just the baudrate. - See SERIAL_CONTROL_DEV enum - See SERIAL_CONTROL_FLAG enum - Timeout for reply data in milliseconds - Baudrate of transfer. Zero means no change. - how many bytes in this transfer - serial data - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - RTK GPS data. Gives information on the relative baseline calculation the GPS is reporting - Time since boot of last baseline message received in ms. - Identification of connected RTK receiver. - GPS Week Number of last baseline - GPS Time of Week of last baseline - GPS-specific health report for RTK data. - Rate of baseline messages being received by GPS, in HZ - Current number of sats used for RTK calculation. - Coordinate system of baseline. 0 == ECEF, 1 == NED - Current baseline in ECEF x or NED north component in mm. - Current baseline in ECEF y or NED east component in mm. - Current baseline in ECEF z or NED down component in mm. - Current estimate of baseline accuracy. - Current number of integer ambiguity hypotheses. - - - The RAW IMU readings for 3rd 9DOF sensor setup. This message should contain the scaled values to the described units - Timestamp (milliseconds since system boot) - X acceleration (mg) - Y acceleration (mg) - Z acceleration (mg) - Angular speed around X axis (millirad /sec) - Angular speed around Y axis (millirad /sec) - Angular speed around Z axis (millirad /sec) - X Magnetic field (milli tesla) - Y Magnetic field (milli tesla) - Z Magnetic field (milli tesla) - - - type of requested/acknowledged data (as defined in ENUM DATA_TYPES in mavlink/include/mavlink_types.h) - total data size in bytes (set on ACK only) - Width of a matrix or image - Height of a matrix or image - number of packets beeing sent (set on ACK only) - payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only) - JPEG quality out of [1,100] - - - sequence number (starting with 0 on every transmission) - image data bytes - - - Time since system boot - Minimum distance the sensor can measure in centimeters - Maximum distance the sensor can measure in centimeters - Current distance reading - Type from MAV_DISTANCE_SENSOR enum. - Onboard ID of the sensor - Direction the sensor faces from MAV_SENSOR_ORIENTATION enum. - Measurement covariance in centimeters, 0 for unknown / invalid readings - - - Request for terrain data and terrain status - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) - - - Terrain data sent from GCS. The lat/lon and grid_spacing must be the same as a lat/lon from a TERRAIN_REQUEST - Latitude of SW corner of first grid (degrees *10^7) - Longitude of SW corner of first grid (in degrees *10^7) - Grid spacing in meters - bit within the terrain request mask - Terrain data in meters AMSL - - - Request that the vehicle report terrain height at the given location. Used by GCS to check if vehicle has all terrain data needed for a mission. - Latitude (degrees *10^7) - Longitude (degrees *10^7) - - - Response from a TERRAIN_CHECK request - Latitude (degrees *10^7) - Longitude (degrees *10^7) - grid spacing (zero if terrain at this location unavailable) - Terrain height in meters AMSL - Current vehicle height above lat/lon terrain height (meters) - Number of 4x4 terrain blocks waiting to be received or read from disk - Number of 4x4 terrain blocks in memory - - - Barometer readings for 2nd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - Motion capture attitude and position - Timestamp (micros since boot or Unix epoch) - Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) - X position in meters (NED) - Y position in meters (NED) - Z position in meters (NED) - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - System ID - Component ID - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - Set the vehicle attitude and body angular rates. - Timestamp (micros since boot or Unix epoch) - Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. - Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. - - - The current system altitude. - Timestamp (micros since boot or Unix epoch) - This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. - This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. - This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. - This is the altitude above the home position. It resets on each change of the current home position. - This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. - This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. - - - The autopilot is requesting a resource (file, binary, other type of data) - Request ID. This ID should be re-used when sending back URI contents - The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary - The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) - The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. - The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). - - - Barometer readings for 3rd barometer - Timestamp (milliseconds since system boot) - Absolute pressure (hectopascal) - Differential pressure 1 (hectopascal) - Temperature measurement (0.01 degrees celsius) - - - current motion information from a designated system - Timestamp in milliseconds since system boot - bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - AMSL, in meters - target velocity (0,0,0) for unknown - linear target acceleration (0,0,0) for unknown - (1 0 0 0 for unknown) - (0 0 0 for unknown) - eph epv - button states or switches of a tracker device - - - The smoothed, monotonic system state used to feed the control loops of the system. - Timestamp (micros since boot or Unix epoch) - X acceleration in body frame - Y acceleration in body frame - Z acceleration in body frame - X velocity in body frame - Y velocity in body frame - Z velocity in body frame - X position in local frame - Y position in local frame - Z position in local frame - Airspeed, set to -1 if unknown - Variance of body velocity estimate - Variance in local position - The attitude, represented as Quaternion - Angular rate in roll axis - Angular rate in pitch axis - Angular rate in yaw axis - - - Battery information - Battery ID - Function of the battery - Type (chemistry) of the battery - Temperature of the battery in centi-degrees celsius. INT16_MAX for unknown temperature. - Battery voltage of cells, in millivolts (1 = 1 millivolt). Cells above the valid cell count for this battery should have the UINT16_MAX value. - Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current - Consumed charge, in milliampere hours (1 = 1 mAh), -1: autopilot does not provide mAh consumption estimate - Consumed energy, in 100*Joules (intergrated U*I*dt) (1 = 100 Joule), -1: autopilot does not provide energy consumption estimate - Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot does not estimate the remaining battery - - - Version and capability of autopilot software - bitmask of capabilities (see MAV_PROTOCOL_CAPABILITY enum) - Firmware version number - Middleware version number - Operating system version number - HW / board version (last 8 bytes should be silicon ID, if any) - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. - ID of the board vendor - ID of the product - UID if provided by hardware - - - The location of a landing area captured from a downward facing camera - Timestamp (micros since boot or Unix epoch) - The ID of the target if multiple targets are present - MAV_FRAME enum specifying the whether the following feilds are earth-frame, body-frame, etc. - X-axis angular offset (in radians) of the target from the center of the image - Y-axis angular offset (in radians) of the target from the center of the image - Distance to the target from the vehicle in meters - Size in radians of target along x-axis - Size in radians of target along y-axis - - - - Estimator status message including flags, innovation test ratios and estimated accuracies. The flags message is an integer bitmask containing information on which EKF outputs are valid. See the ESTIMATOR_STATUS_FLAGS enum definition for further information. The innovaton test ratios show the magnitude of the sensor innovation divided by the innovation check threshold. Under normal operation the innovaton test ratios should be below 0.5 with occasional values up to 1.0. Values greater than 1.0 should be rare under normal operation and indicate that a measurement has been rejected by the filter. The user should be notified if an innovation test ratio greater than 1.0 is recorded. Notifications for values in the range between 0.5 and 1.0 should be optional and controllable by the user. - Timestamp (micros since boot or Unix epoch) - Integer bitmask indicating which EKF outputs are valid. See definition for ESTIMATOR_STATUS_FLAGS. - Velocity innovation test ratio - Horizontal position innovation test ratio - Vertical position innovation test ratio - Magnetometer innovation test ratio - Height above terrain innovation test ratio - True airspeed innovation test ratio - Horizontal position 1-STD accuracy relative to the EKF local origin (m) - Vertical position 1-STD accuracy relative to the EKF local origin (m) - - - Timestamp (micros since boot or Unix epoch) - Wind in X (NED) direction in m/s - Wind in Y (NED) direction in m/s - Wind in Z (NED) direction in m/s - Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. - Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. - AMSL altitude (m) this measurement was taken at - Horizontal speed 1-STD accuracy - Vertical speed 1-STD accuracy - - - GPS sensor input message. This is a raw sensor value sent by the GPS. This is NOT the global position estimate of the sytem. - Timestamp (micros since boot or Unix epoch) - ID of the GPS for multiple GPS inputs - Flags indicating which fields to ignore (see GPS_INPUT_IGNORE_FLAGS enum). All other fields must be provided. - GPS time (milliseconds from start of GPS week) - GPS week number - 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84), in degrees * 1E7 - Altitude (AMSL, not WGS84), in m (positive for up) - GPS HDOP horizontal dilution of position in m - GPS VDOP vertical dilution of position in m - GPS velocity in m/s in NORTH direction in earth-fixed NED frame - GPS velocity in m/s in EAST direction in earth-fixed NED frame - GPS velocity in m/s in DOWN direction in earth-fixed NED frame - GPS speed accuracy in m/s - GPS horizontal accuracy in m - GPS vertical accuracy in m - Number of satellites visible. - - - WORK IN PROGRESS! RTCM message for injecting into the onboard GPS (used for DGPS) - LSB: 1 means message is fragmented - data length - RTCM message (may be fragmented) - - - Vibration levels and accelerometer clipping - Timestamp (micros since boot or Unix epoch) - Vibration levels on X-axis - Vibration levels on Y-axis - Vibration levels on Z-axis - first accelerometer clipping count - second accelerometer clipping count - third accelerometer clipping count - - - This message can be requested by sending the MAV_CMD_GET_HOME_POSITION command. The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The position the system will return to and land on. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - The position the system will return to and land on. The position is set automatically by the system during the takeoff in case it was not explicitely set by the operator before or after. The global and local positions encode the position in the respective coordinate frames, while the q parameter encodes the orientation of the surface. Under normal conditions it describes the heading and terrain slope, which can be used by the aircraft to adjust the approach. The approach 3D vector describes the point to which the system should fly in normal flight mode and then perform a landing sequence along the vector. - System ID. - Latitude (WGS84), in degrees * 1E7 - Longitude (WGS84, in degrees * 1E7 - Altitude (AMSL), in meters * 1000 (positive for up) - Local X position of this position in the local coordinate frame - Local Y position of this position in the local coordinate frame - Local Z position of this position in the local coordinate frame - World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground - Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. - - - This interface replaces DATA_STREAM - The ID of the requested MAVLink message. v1.0 is limited to 254 messages. - The interval between two messages, in microseconds. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. - - - Provides state for additional features - The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. - The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. - - - The location and information of an ADSB vehicle - ICAO address - Latitude, expressed as degrees * 1E7 - Longitude, expressed as degrees * 1E7 - Type from ADSB_ALTITUDE_TYPE enum - Altitude(ASL) in millimeters - Course over ground in centidegrees - The horizontal velocity in centimeters/second - The vertical velocity in centimeters/second, positive is up - The callsign, 8+null - Type from ADSB_EMITTER_TYPE enum - Time since last communication in seconds - Flags to indicate various statuses including valid data fields - Squawk code - - - Information about a potential collision - Collision data source - Unique identifier, domain based on src field - Action that is being taken to avoid this collision - How concerned the aircraft is about this collision - Estimated time until collision occurs (seconds) - Closest vertical distance in meters between vehicle and object - Closest horizontal distance in meteres between vehicle and object - - - Message implementing parts of the V2 payload specs in V1 frames for transitional support. - Network ID (0 for broadcast) - System ID (0 for broadcast) - Component ID (0 for broadcast) - A code that identifies the software component that understands this message (analogous to usb device classes or mime type strings). If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml. Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. - Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields. The entire content of this block is opaque unless you understand any the encoding message_type. The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. - - - Send raw controller memory. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Starting address of the debug variables - Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below - Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 - Memory contents at specified address - - - Name - Timestamp - x - y - z - - - Send a key-value pair as float. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Floating point value - - - Send a key-value pair as integer. The use of this message is discouraged for normal packets, but a quite efficient way for testing new messages and getting experimental debug output. - Timestamp (milliseconds since system boot) - Name of the debug variable - Signed integer value - - - Status text message. These messages are printed in yellow in the COMM console of QGroundControl. WARNING: They consume quite some bandwidth, so use only for important status and error messages. If implemented wisely, these messages are buffered on the MCU and sent only at a limited rate (e.g. 10 Hz). - Severity of status. Relies on the definitions within RFC-5424. See enum MAV_SEVERITY. - Status text message, without null termination character - - - Send a debug value. The index is used to discriminate between values. These values show up in the plot of QGroundControl as DEBUG N. - Timestamp (milliseconds since system boot) - index of debug variable - DEBUG value - - - - - Setup a MAVLink2 signing key. If called with secret_key of all zero and zero initial_timestamp will disable signing - system id of the target - component ID of the target - signing key - initial timestamp - - - - Report button state change - Timestamp (milliseconds since system boot) - Time of last change of button state - Bitmap state of buttons - - - - Control vehicle tone generation (buzzer) - System ID - Component ID - tune in board specific format - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/matrixpilot.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/matrixpilot.xml deleted file mode 100644 index 29d368d2a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/matrixpilot.xml +++ /dev/null @@ -1,284 +0,0 @@ - - - common.xml - - - - - - - - Action required when performing CMD_PREFLIGHT_STORAGE - - Read all parameters from storage - - - Write all parameters to storage - - - Clear all parameters in storage - - - Read specific parameters from storage - - - Write specific parameters to storage - - - Clear specific parameters in storage - - - do nothing - - - - - - Request storage of different parameter values and logs. This command will be only accepted if in pre-flight mode. - Storage action: Action defined by MAV_PREFLIGHT_STORAGE_ACTION_ADVANCED - Storage area as defined by parameter database - Storage flags as defined by parameter database - Empty - Empty - Empty - Empty - - - - - - - - - Depreciated but used as a compiler flag. Do not remove - System ID - Component ID - - - Reqest reading of flexifunction data - System ID - Component ID - Type of flexifunction data requested - index into data where needed - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - Total count of functions - Address in the flexifunction data, Set to 0xFFFF to use address in target memory - Size of the - Settings data - - - Flexifunction type and parameters for component at function index from buffer - System ID - Component ID - Function index - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - Settings data - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - 0=inputs, 1=outputs - index of first directory entry to write - count of directory entries to write - result of acknowledge, 0=fail, 1=good - - - Acknowldge sucess or failure of a flexifunction command - System ID - Component ID - Flexifunction command type - - - Acknowldge sucess or failure of a flexifunction command - Command acknowledged - result of acknowledge - - - Backwards compatible MAVLink version of SERIAL_UDB_EXTRA - F2: Format Part A - Serial UDB Extra Time - Serial UDB Extra Status - Serial UDB Extra Latitude - Serial UDB Extra Longitude - Serial UDB Extra Altitude - Serial UDB Extra Waypoint Index - Serial UDB Extra Rmat 0 - Serial UDB Extra Rmat 1 - Serial UDB Extra Rmat 2 - Serial UDB Extra Rmat 3 - Serial UDB Extra Rmat 4 - Serial UDB Extra Rmat 5 - Serial UDB Extra Rmat 6 - Serial UDB Extra Rmat 7 - Serial UDB Extra Rmat 8 - Serial UDB Extra GPS Course Over Ground - Serial UDB Extra Speed Over Ground - Serial UDB Extra CPU Load - Serial UDB Extra Voltage in MilliVolts - Serial UDB Extra 3D IMU Air Speed - Serial UDB Extra Estimated Wind 0 - Serial UDB Extra Estimated Wind 1 - Serial UDB Extra Estimated Wind 2 - Serial UDB Extra Magnetic Field Earth 0 - Serial UDB Extra Magnetic Field Earth 1 - Serial UDB Extra Magnetic Field Earth 2 - Serial UDB Extra Number of Sattelites in View - Serial UDB Extra GPS Horizontal Dilution of Precision - - - Backwards compatible version of SERIAL_UDB_EXTRA - F2: Part B - Serial UDB Extra Time - Serial UDB Extra PWM Input Channel 1 - Serial UDB Extra PWM Input Channel 2 - Serial UDB Extra PWM Input Channel 3 - Serial UDB Extra PWM Input Channel 4 - Serial UDB Extra PWM Input Channel 5 - Serial UDB Extra PWM Input Channel 6 - Serial UDB Extra PWM Input Channel 7 - Serial UDB Extra PWM Input Channel 8 - Serial UDB Extra PWM Input Channel 9 - Serial UDB Extra PWM Input Channel 10 - Serial UDB Extra PWM Output Channel 1 - Serial UDB Extra PWM Output Channel 2 - Serial UDB Extra PWM Output Channel 3 - Serial UDB Extra PWM Output Channel 4 - Serial UDB Extra PWM Output Channel 5 - Serial UDB Extra PWM Output Channel 6 - Serial UDB Extra PWM Output Channel 7 - Serial UDB Extra PWM Output Channel 8 - Serial UDB Extra PWM Output Channel 9 - Serial UDB Extra PWM Output Channel 10 - Serial UDB Extra IMU Location X - Serial UDB Extra IMU Location Y - Serial UDB Extra IMU Location Z - Serial UDB Extra Status Flags - Serial UDB Extra Oscillator Failure Count - Serial UDB Extra IMU Velocity X - Serial UDB Extra IMU Velocity Y - Serial UDB Extra IMU Velocity Z - Serial UDB Extra Current Waypoint Goal X - Serial UDB Extra Current Waypoint Goal Y - Serial UDB Extra Current Waypoint Goal Z - Serial UDB Extra Stack Memory Free - - - Backwards compatible version of SERIAL_UDB_EXTRA F4: format - Serial UDB Extra Roll Stabilization with Ailerons Enabled - Serial UDB Extra Roll Stabilization with Rudder Enabled - Serial UDB Extra Pitch Stabilization Enabled - Serial UDB Extra Yaw Stabilization using Rudder Enabled - Serial UDB Extra Yaw Stabilization using Ailerons Enabled - Serial UDB Extra Navigation with Ailerons Enabled - Serial UDB Extra Navigation with Rudder Enabled - Serial UDB Extra Type of Alitude Hold when in Stabilized Mode - Serial UDB Extra Type of Alitude Hold when in Waypoint Mode - Serial UDB Extra Firmware racing mode enabled - - - Backwards compatible version of SERIAL_UDB_EXTRA F5: format - Serial UDB YAWKP_AILERON Gain for Proporional control of navigation - Serial UDB YAWKD_AILERON Gain for Rate control of navigation - Serial UDB Extra ROLLKP Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD Gain for Rate control of roll stabilization - YAW_STABILIZATION_AILERON Proportional control - Gain For Boosting Manual Aileron control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F6: format - Serial UDB Extra PITCHGAIN Proportional Control - Serial UDB Extra Pitch Rate Control - Serial UDB Extra Rudder to Elevator Mix - Serial UDB Extra Roll to Elevator Mix - Gain For Boosting Manual Elevator control When Plane Stabilized - - - Backwards compatible version of SERIAL_UDB_EXTRA F7: format - Serial UDB YAWKP_RUDDER Gain for Proporional control of navigation - Serial UDB YAWKD_RUDDER Gain for Rate control of navigation - Serial UDB Extra ROLLKP_RUDDER Gain for Proportional control of roll stabilization - Serial UDB Extra ROLLKD_RUDDER Gain for Rate control of roll stabilization - SERIAL UDB EXTRA Rudder Boost Gain to Manual Control when stabilized - Serial UDB Extra Return To Landing - Angle to Pitch Plane Down - - - Backwards compatible version of SERIAL_UDB_EXTRA F8: format - Serial UDB Extra HEIGHT_TARGET_MAX - Serial UDB Extra HEIGHT_TARGET_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MIN - Serial UDB Extra ALT_HOLD_THROTTLE_MAX - Serial UDB Extra ALT_HOLD_PITCH_MIN - Serial UDB Extra ALT_HOLD_PITCH_MAX - Serial UDB Extra ALT_HOLD_PITCH_HIGH - - - Backwards compatible version of SERIAL_UDB_EXTRA F13: format - Serial UDB Extra GPS Week Number - Serial UDB Extra MP Origin Latitude - Serial UDB Extra MP Origin Longitude - Serial UDB Extra MP Origin Altitude Above Sea Level - - - Backwards compatible version of SERIAL_UDB_EXTRA F14: format - Serial UDB Extra Wind Estimation Enabled - Serial UDB Extra Type of GPS Unit - Serial UDB Extra Dead Reckoning Enabled - Serial UDB Extra Type of UDB Hardware - Serial UDB Extra Type of Airframe - Serial UDB Extra Reboot Regitster of DSPIC - Serial UDB Extra Last dspic Trap Flags - Serial UDB Extra Type Program Address of Last Trap - Serial UDB Extra Number of Ocillator Failures - Serial UDB Extra UDB Internal Clock Configuration - Serial UDB Extra Type of Flight Plan - - - Backwards compatible version of SERIAL_UDB_EXTRA F15 and F16: format - Serial UDB Extra Model Name Of Vehicle - Serial UDB Extra Registraton Number of Vehicle - - - Serial UDB Extra Name of Expected Lead Pilot - Serial UDB Extra URL of Lead Pilot or Team - - - The altitude measured by sensors and IMU - Timestamp (milliseconds since system boot) - GPS altitude in meters, expressed as * 1000 (millimeters), above MSL - IMU altitude above ground in meters, expressed as * 1000 (millimeters) - barometeric altitude above ground in meters, expressed as * 1000 (millimeters) - Optical flow altitude above ground in meters, expressed as * 1000 (millimeters) - Rangefinder Altitude above ground in meters, expressed as * 1000 (millimeters) - Extra altitude above ground in meters, expressed as * 1000 (millimeters) - - - The airspeed measured by sensors and IMU - Timestamp (milliseconds since system boot) - Airspeed estimate from IMU, cm/s - Pitot measured forward airpseed, cm/s - Hot wire anenometer measured airspeed, cm/s - Ultrasonic measured airspeed, cm/s - Angle of attack sensor, degrees * 10 - Yaw angle sensor, degrees * 10 - - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/minimal.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/minimal.xml deleted file mode 100644 index 88985a5c9..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/minimal.xml +++ /dev/null @@ -1,189 +0,0 @@ - - - 2 - - - Micro air vehicle / autopilot classes. This identifies the individual model. - - Generic autopilot, full support for everything - - - PIXHAWK autopilot, http://pixhawk.ethz.ch - - - SLUGS autopilot, http://slugsuav.soe.ucsc.edu - - - ArduPilotMega / ArduCopter, http://diydrones.com - - - OpenPilot, http://openpilot.org - - - Generic autopilot only supporting simple waypoints - - - Generic autopilot supporting waypoints and other simple navigation commands - - - Generic autopilot supporting the full mission command set - - - No valid autopilot, e.g. a GCS or other MAVLink component - - - PPZ UAV - http://nongnu.org/paparazzi - - - UAV Dev Board - - - FlexiPilot - - - - - Generic micro air vehicle. - - - Fixed wing aircraft. - - - Quadrotor - - - Coaxial helicopter - - - Normal helicopter with tail rotor. - - - Ground installation - - - Operator control unit / ground control station - - - Airship, controlled - - - Free balloon, uncontrolled - - - Rocket - - - Ground rover - - - Surface vessel, boat, ship - - - Submarine - - - Hexarotor - - - Octorotor - - - Octorotor - - - Flapping wing - - - - These flags encode the MAV mode. - - 0b10000000 MAV safety set to armed. Motors are enabled / running / can start. Ready to fly. - - - 0b01000000 remote control input is enabled. - - - 0b00100000 hardware in the loop simulation. All motors / actuators are blocked, but internal software is full operational. - - - 0b00010000 system stabilizes electronically its attitude (and optionally position). It needs however further control inputs to move around. - - - 0b00001000 guided mode enabled, system flies MISSIONs / mission items. - - - 0b00000100 autonomous mode enabled, system finds its own goal positions. Guided flag can be set or not, depends on the actual implementation. - - - 0b00000010 system has a test mode enabled. This flag is intended for temporary system tests and should not be used for stable implementations. - - - 0b00000001 Reserved for future use. - - - - These values encode the bit positions of the decode position. These values can be used to read the value of a flag bit by combining the base_mode variable with AND with the flag position value. The result will be either 0 or 1, depending on if the flag is set or not. - - First bit: 10000000 - - - Second bit: 01000000 - - - Third bit: 00100000 - - - Fourth bit: 00010000 - - - Fifth bit: 00001000 - - - Sixt bit: 00000100 - - - Seventh bit: 00000010 - - - Eighth bit: 00000001 - - - - - Uninitialized system, state is unknown. - - - System is booting up. - - - System is calibrating and not flight-ready. - - - System is grounded and on standby. It can be launched any time. - - - System is active and might be already airborne. Motors are engaged. - - - System is in a non-normal flight mode. It can however still navigate. - - - System is in a non-normal flight mode. It lost control over parts or over the whole airframe. It is in mayday and going down. - - - System just initialized its power-down sequence, will shut down now. - - - - - - The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot). - Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) - Autopilot type / class. defined in MAV_AUTOPILOT ENUM - System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h - A bitfield for use for autopilot-specific flags. - System status flag, see MAV_STATE ENUM - MAVLink version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/paparazzi.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/paparazzi.xml deleted file mode 100755 index 220007558..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/paparazzi.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - common.xml - 3 - - - - - - Message encoding a mission script item. This message is emitted upon a request for the next script item. - System ID - Component ID - Sequence - The name of the mission script, NULL terminated. - - - Request script item with the sequence number seq. The response of the system to this message should be a SCRIPT_ITEM message. - System ID - Component ID - Sequence - - - Request the overall list of mission items from the system/component. - System ID - Component ID - - - This message is emitted as response to SCRIPT_REQUEST_LIST by the MAV to get the number of mission scripts. - System ID - Component ID - Number of script items in the sequence - - - This message informs about the currently active SCRIPT. - Active Sequence - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/python_array_test.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/python_array_test.xml deleted file mode 100644 index f230d0126..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/python_array_test.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - -common.xml - - - Array test #0. - Stub field - Value array - Value array - Value array - Value array - - - Array test #1. - Value array - - - Array test #3. - Stub field - Value array - - - Array test #4. - Value array - Stub field - - - Array test #5. - Value array - Value array - - - Array test #6. - Stub field - Stub field - Stub field - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #7. - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - Value array - - - Array test #8. - Stub field - Value array - Value array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/slugs.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/slugs.xml deleted file mode 100755 index a985eab38..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/slugs.xml +++ /dev/null @@ -1,339 +0,0 @@ - - - common.xml - - - - - - Does nothing. - 1 to arm, 0 to disarm - - - - - - Return vehicle to base. - 0: return to base, 1: track mobile base - - - Stops the vehicle from returning to base and resumes flight. - - - Turns the vehicle's visible or infrared lights on or off. - 0: visible lights, 1: infrared lights - 0: turn on, 1: turn off - - - Requests vehicle to send current mid-level commands to ground station. - - - Requests storage of mid-level commands. - Mid-level command storage: 0: read from flash/EEPROM, 1: write to flash/EEPROM - - - - - - Slugs-specific navigation modes. - - No change to SLUGS mode. - - - Vehicle is in liftoff mode. - - - Vehicle is in passthrough mode, being controlled by a pilot. - - - Vehicle is in waypoint mode, navigating to waypoints. - - - Vehicle is executing mid-level commands. - - - Vehicle is returning to the home location. - - - Vehicle is landing. - - - Lost connection with vehicle. - - - Vehicle is in selective passthrough mode, where selected surfaces are being manually controlled. - - - Vehicle is in ISR mode, performing reconaissance at a point specified by ISR_LOCATION message. - - - Vehicle is patrolling along lines between waypoints. - - - Vehicle is grounded or an error has occurred. - - - - - These flags encode the control surfaces for selective passthrough mode. If a bit is set then the pilot console - has control of the surface, and if not then the autopilot has control of the surface. - - 0b10000000 Throttle control passes through to pilot console. - - - 0b01000000 Left aileron control passes through to pilot console. - - - 0b00100000 Right aileron control passes through to pilot console. - - - 0b00010000 Rudder control passes through to pilot console. - - - 0b00001000 Left elevator control passes through to pilot console. - - - 0b00000100 Right elevator control passes through to pilot console. - - - 0b00000010 Left flap control passes through to pilot console. - - - 0b00000001 Right flap control passes through to pilot console. - - - - - - - - Sensor and DSC control loads. - Sensor DSC Load - Control DSC Load - Battery Voltage in millivolts - - - - Accelerometer and gyro biases. - Accelerometer X bias (m/s) - Accelerometer Y bias (m/s) - Accelerometer Z bias (m/s) - Gyro X bias (rad/s) - Gyro Y bias (rad/s) - Gyro Z bias (rad/s) - - - - Configurable diagnostic messages. - Diagnostic float 1 - Diagnostic float 2 - Diagnostic float 3 - Diagnostic short 1 - Diagnostic short 2 - Diagnostic short 3 - - - - Data used in the navigation algorithm. - Measured Airspeed prior to the nav filter in m/s - Commanded Roll - Commanded Pitch - Commanded Turn rate - Y component of the body acceleration - Total Distance to Run on this leg of Navigation - Remaining distance to Run on this leg of Navigation - Origin WP - Destination WP - Commanded altitude in 0.1 m - - - - Configurable data log probes to be used inside Simulink - Log value 1 - Log value 2 - Log value 3 - Log value 4 - Log value 5 - Log value 6 - - - - Pilot console PWM messges. - Year reported by Gps - Month reported by Gps - Day reported by Gps - Hour reported by Gps - Min reported by Gps - Sec reported by Gps - Clock Status. See table 47 page 211 OEMStar Manual - Visible satellites reported by Gps - Used satellites in Solution - GPS+GLONASS satellites in Solution - GPS and GLONASS usage mask (bit 0 GPS_used? bit_4 GLONASS_used?) - Percent used GPS - - - - Mid Level commands sent from the GS to the autopilot. These are only sent when being operated in mid-level commands mode from the ground. - The system setting the commands - Commanded Altitude in meters - Commanded Airspeed in m/s - Commanded Turnrate in rad/s - - - - This message sets the control surfaces for selective passthrough mode. - The system setting the commands - Bitfield containing the passthrough configuration, see CONTROL_SURFACE_FLAG ENUM. - - - - Orders generated to the SLUGS camera mount. - The system reporting the action - Order the mount to pan: -1 left, 0 No pan motion, +1 right - Order the mount to tilt: -1 down, 0 No tilt motion, +1 up - Order the zoom values 0 to 10 - Orders the camera mount to move home. The other fields are ignored when this field is set. 1: move home, 0 ignored - - - - Control for surface; pending and order to origin. - The system setting the commands - ID control surface send 0: throttle 1: aileron 2: elevator 3: rudder - Pending - Order to origin - - - - - - - Transmits the last known position of the mobile GS to the UAV. Very relevant when Track Mobile is enabled - The system reporting the action - Mobile Latitude - Mobile Longitude - - - - Control for camara. - The system setting the commands - ID 0: brightness 1: aperture 2: iris 3: ICR 4: backlight - 1: up/on 2: down/off 3: auto/reset/no action - - - - Transmits the position of watch - The system reporting the action - ISR Latitude - ISR Longitude - ISR Height - Option 1 - Option 2 - Option 3 - - - - - - - Transmits the readings from the voltage and current sensors - It is the value of reading 2: 0 - Current, 1 - Foreward Sonar, 2 - Back Sonar, 3 - RPM - Voltage in uS of PWM. 0 uS = 0V, 20 uS = 21.5V - Depends on the value of r2Type (0) Current consumption in uS of PWM, 20 uS = 90Amp (1) Distance in cm (2) Distance in cm (3) Absolute value - - - - Transmits the actual Pan, Tilt and Zoom values of the camera unit - The actual Zoom Value - The Pan value in 10ths of degree - The Tilt value in 10ths of degree - - - - Transmits the actual status values UAV in flight - The ID system reporting the action - Latitude UAV - Longitude UAV - Altitude UAV - Speed UAV - Course UAV - - - - This contains the status of the GPS readings - Number of times checksum has failed - The quality indicator, 0=fix not available or invalid, 1=GPS fix, 2=C/A differential GPS, 6=Dead reckoning mode, 7=Manual input mode (fixed position), 8=Simulator mode, 9= WAAS a - Indicates if GN, GL or GP messages are being received - A = data valid, V = data invalid - Magnetic variation, degrees - Magnetic variation direction E/W. Easterly variation (E) subtracts from True course and Westerly variation (W) adds to True course - Positioning system mode indicator. A - Autonomous;D-Differential; E-Estimated (dead reckoning) mode;M-Manual input; N-Data not valid - - - - Transmits the diagnostics data from the Novatel OEMStar GPS - The Time Status. See Table 8 page 27 Novatel OEMStar Manual - Status Bitfield. See table 69 page 350 Novatel OEMstar Manual - solution Status. See table 44 page 197 - position type. See table 43 page 196 - velocity type. See table 43 page 196 - Age of the position solution in seconds - Times the CRC has failed since boot - - - - Diagnostic data Sensor MCU - Float field 1 - Float field 2 - Int 16 field 1 - Int 8 field 1 - - - - - The boot message indicates that a system is starting. The onboard software version allows to keep track of onboard soft/firmware revisions. This message allows the sensor and control MCUs to communicate version numbers on startup. - The onboard software version - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/test.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/test.xml deleted file mode 100644 index 02bc03204..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/test.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 3 - - - Test all field types - char - string - uint8_t - uint16_t - uint32_t - uint64_t - int8_t - int16_t - int32_t - int64_t - float - double - uint8_t_array - uint16_t_array - uint32_t_array - uint64_t_array - int8_t_array - int16_t_array - int32_t_array - int64_t_array - float_array - double_array - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/uAvionix.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/uAvionix.xml deleted file mode 100644 index 627a01bb0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/uAvionix.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - - State flags for ADS-B transponder dynamic report - - - - - - - - Transceiver RF control flags for ADS-B transponder dynamic reports - - - - - - Status for ADS-B transponder dynamic input - - - - - - - - - Status flags for ADS-B transponder dynamic output - - - - - - - Definitions for aircraft size - - - - - - - - - - - - - - - - - - - GPS lataral offset encoding - - - - - - - - - - - GPS longitudinal offset encoding - - - - - Emergency status encoding - - - - - - - - - - - - - Static data to configure the ADS-B transponder (send within 10 sec of a POR and every 10 sec thereafter) - Vehicle address (24 bit) - Vehicle identifier (8 characters, null terminated, valid characters are A-Z, 0-9, " " only) - Transmitting vehicle type. See ADSB_EMITTER_TYPE enum - Aircraft length and width encoding (table 2-35 of DO-282B) - GPS antenna lateral offset (table 2-36 of DO-282B) - GPS antenna longitudinal offset from nose [if non-zero, take position (in meters) divide by 2 and add one] (table 2-37 DO-282B) - Aircraft stall speed in cm/s - ADS-B transponder reciever and transmit enable flags - - - Dynamic data used to generate ADS-B out transponder data (send at 5Hz) - UTC time in seconds since GPS epoch (Jan 6, 1980). If unknown set to UINT32_MAX - Latitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Longitude WGS84 (deg * 1E7). If unknown set to INT32_MAX - Altitude in mm (m * 1E-3) UP +ve. WGS84 altitude. If unknown set to INT32_MAX - 0-1: no fix, 2: 2D fix, 3: 3D fix, 4: DGPS, 5: RTK - Number of satellites visible. If unknown set to UINT8_MAX - Barometric pressure altitude relative to a standard atmosphere of 1013.2 mBar and NOT bar corrected altitude (m * 1E-3). (up +ve). If unknown set to INT32_MAX - Horizontal accuracy in mm (m * 1E-3). If unknown set to UINT32_MAX - Vertical accuracy in cm. If unknown set to UINT16_MAX - Velocity accuracy in mm/s (m * 1E-3). If unknown set to UINT16_MAX - GPS vertical speed in cm/s. If unknown set to INT16_MAX - North-South velocity over ground in cm/s North +ve. If unknown set to INT16_MAX - East-West velocity over ground in cm/s East +ve. If unknown set to INT16_MAX - Emergency status - ADS-B transponder dynamic input state flags - Mode A code (typically 1200 [0x04B0] for VFR) - - - Transceiver heartbeat with health report (updated every 10s) - ADS-B transponder messages - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ualberta.xml b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ualberta.xml deleted file mode 100644 index bb57e8435..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/message_definitions/v1.0/ualberta.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - common.xml - - - Available autopilot modes for ualberta uav - - Raw input pulse widts sent to output - - - Inputs are normalized using calibration, the converted back to raw pulse widths for output - - - dfsdfs - - - dfsfds - - - dfsdfsdfs - - - - Navigation filter mode - - - AHRS mode - - - INS/GPS initialization mode - - - INS/GPS mode - - - - Mode currently commanded by pilot - - sdf - - - dfs - - - Rotomotion mode - - - - - - Accelerometer and Gyro biases from the navigation filter - Timestamp (microseconds) - b_f[0] - b_f[1] - b_f[2] - b_f[0] - b_f[1] - b_f[2] - - - Complete set of calibration parameters for the radio - Aileron setpoints: left, center, right - Elevator setpoints: nose down, center, nose up - Rudder setpoints: nose left, center, nose right - Tail gyro mode/gain setpoints: heading hold, rate mode - Pitch curve setpoints (every 25%) - Throttle curve setpoints (every 25%) - - - System status specific to ualberta uav - System mode, see UALBERTA_AUTOPILOT_MODE ENUM - Navigation mode, see UALBERTA_NAV_MODE ENUM - Pilot mode, see UALBERTA_PILOT_MODE - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/PKG-INFO b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/PKG-INFO deleted file mode 100644 index 47473b851..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/PKG-INFO +++ /dev/null @@ -1,17 +0,0 @@ -Metadata-Version: 1.1 -Name: pymavlink -Version: 2.0.8 -Summary: Python MAVLink code -Home-page: http://github.com/mavlink/mavlink -Author: UNKNOWN -Author-email: UNKNOWN -License: LGPLv3 -Description: A Python library for handling MAVLink protocol streams and log files. This allows for the creation of simple scripts to analyse telemetry logs from autopilots such as ArduPilot which use the MAVLink protocol. See the scripts that come with the package for examples of small, useful scripts that use pymavlink. For more information about the MAVLink protocol see http://qgroundcontrol.org/mavlink/ -Platform: UNKNOWN -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Console -Classifier: Intended Audience :: Science/Research -Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 2.7 -Classifier: Topic :: Scientific/Engineering diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/SOURCES.txt b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/SOURCES.txt deleted file mode 100644 index 5d059ac3d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/SOURCES.txt +++ /dev/null @@ -1,154 +0,0 @@ -README.txt -setup.py -./DFReader.py -./__init__.py -./fgFDM.py -./mavexpression.py -./mavextra.py -./mavparm.py -./mavutil.py -./mavwp.py -./quaternion.py -./rotmat.py -./../message_definitions/v1.0/ASLUAV.xml -./../message_definitions/v1.0/ardupilotmega.xml -./../message_definitions/v1.0/autoquad.xml -./../message_definitions/v1.0/common.xml -./../message_definitions/v1.0/matrixpilot.xml -./../message_definitions/v1.0/minimal.xml -./../message_definitions/v1.0/paparazzi.xml -./../message_definitions/v1.0/python_array_test.xml -./../message_definitions/v1.0/slugs.xml -./../message_definitions/v1.0/test.xml -./../message_definitions/v1.0/uAvionix.xml -./../message_definitions/v1.0/ualberta.xml -./dialects/__init__.py -./dialects/v10/ASLUAV.py -./dialects/v10/ASLUAV.xml -./dialects/v10/__init__.py -./dialects/v10/ardupilotmega.py -./dialects/v10/ardupilotmega.xml -./dialects/v10/autoquad.py -./dialects/v10/autoquad.xml -./dialects/v10/common.py -./dialects/v10/common.xml -./dialects/v10/matrixpilot.py -./dialects/v10/matrixpilot.xml -./dialects/v10/minimal.py -./dialects/v10/minimal.xml -./dialects/v10/paparazzi.py -./dialects/v10/paparazzi.xml -./dialects/v10/python_array_test.py -./dialects/v10/python_array_test.xml -./dialects/v10/slugs.py -./dialects/v10/slugs.xml -./dialects/v10/test.py -./dialects/v10/test.xml -./dialects/v10/uAvionix.py -./dialects/v10/uAvionix.xml -./dialects/v10/ualberta.py -./dialects/v10/ualberta.xml -./dialects/v20/ASLUAV.py -./dialects/v20/ASLUAV.xml -./dialects/v20/__init__.py -./dialects/v20/ardupilotmega.py -./dialects/v20/ardupilotmega.xml -./dialects/v20/autoquad.py -./dialects/v20/autoquad.xml -./dialects/v20/common.py -./dialects/v20/common.xml -./dialects/v20/matrixpilot.py -./dialects/v20/matrixpilot.xml -./dialects/v20/minimal.py -./dialects/v20/minimal.xml -./dialects/v20/paparazzi.py -./dialects/v20/paparazzi.xml -./dialects/v20/python_array_test.py -./dialects/v20/python_array_test.xml -./dialects/v20/slugs.py -./dialects/v20/slugs.xml -./dialects/v20/test.py -./dialects/v20/test.xml -./dialects/v20/uAvionix.py -./dialects/v20/uAvionix.xml -./dialects/v20/ualberta.py -./dialects/v20/ualberta.xml -./generator/__init__.py -./generator/mavcrc.py -./generator/mavgen.py -./generator/mavgen_c.py -./generator/mavgen_cs.py -./generator/mavgen_java.py -./generator/mavgen_javascript.py -./generator/mavgen_objc.py -./generator/mavgen_python.py -./generator/mavgen_swift.py -./generator/mavgen_wlua.py -./generator/mavparse.py -./generator/mavschema.xsd -./generator/mavtemplate.py -./generator/mavtestgen.py -./generator/C/include_v1.0/checksum.h -./generator/C/include_v1.0/mavlink_conversions.h -./generator/C/include_v1.0/mavlink_helpers.h -./generator/C/include_v1.0/mavlink_types.h -./generator/C/include_v1.0/protocol.h -./generator/C/include_v2.0/checksum.h -./generator/C/include_v2.0/mavlink_conversions.h -./generator/C/include_v2.0/mavlink_get_info.h -./generator/C/include_v2.0/mavlink_helpers.h -./generator/C/include_v2.0/mavlink_sha256.h -./generator/C/include_v2.0/mavlink_types.h -./generator/C/include_v2.0/protocol.h -./generator/java/lib/Parser.java -./generator/java/lib/Messages/MAVLinkMessage.java -./generator/java/lib/Messages/MAVLinkPayload.java -./generator/java/lib/Messages/MAVLinkStats.java -./mavnative/mavlink_defaults.h -./message_definitions/v0.9/ardupilotmega.xml -./message_definitions/v0.9/common.xml -./message_definitions/v0.9/minimal.xml -./message_definitions/v0.9/slugs.xml -./message_definitions/v0.9/test.xml -./message_definitions/v0.9/ualberta.xml -./message_definitions/v1.0/ASLUAV.xml -./message_definitions/v1.0/ardupilotmega.xml -./message_definitions/v1.0/autoquad.xml -./message_definitions/v1.0/common.xml -./message_definitions/v1.0/matrixpilot.xml -./message_definitions/v1.0/minimal.xml -./message_definitions/v1.0/paparazzi.xml -./message_definitions/v1.0/python_array_test.xml -./message_definitions/v1.0/slugs.xml -./message_definitions/v1.0/test.xml -./message_definitions/v1.0/uAvionix.xml -./message_definitions/v1.0/ualberta.xml -mavnative/mavnative.c -pymavlink.egg-info/PKG-INFO -pymavlink.egg-info/SOURCES.txt -pymavlink.egg-info/dependency_links.txt -pymavlink.egg-info/top_level.txt -tools/MPU6KSearch.py -tools/magfit.py -tools/magfit_delta.py -tools/magfit_gps.py -tools/magfit_motors.py -tools/mavextract.py -tools/mavfft.py -tools/mavflightmodes.py -tools/mavflighttime.py -tools/mavgen.py -tools/mavgpslock.py -tools/mavgraph.py -tools/mavkml.py -tools/mavlogdump.py -tools/mavloss.py -tools/mavmission.py -tools/mavparmdiff.py -tools/mavparms.py -tools/mavplayback.py -tools/mavsearch.py -tools/mavsigloss.py -tools/mavsummarize.py -tools/mavtogpx.py -tools/mavtomfile.py \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/dependency_links.txt b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/dependency_links.txt deleted file mode 100644 index 8b1378917..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/dependency_links.txt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/top_level.txt b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/top_level.txt deleted file mode 100644 index af2f860b1..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/pymavlink.egg-info/top_level.txt +++ /dev/null @@ -1,2 +0,0 @@ -mavnative -pymavlink diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/quaternion.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/quaternion.py deleted file mode 100644 index 79bf9cd05..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/quaternion.py +++ /dev/null @@ -1,632 +0,0 @@ -#!/usr/bin/env python - - -""" -Quaternion implementation for use in pymavlink -""" - -from __future__ import absolute_import, division, print_function -import numpy as np -from .rotmat import Vector3, Matrix3 - -__author__ = "Thomas Gubler" -__copyright__ = "Copyright (C) 2014 Thomas Gubler" -__license__ = "GNU Lesser General Public License v3" -__email__ = "thomasgubler@gmail.com" - - -class QuaternionBase(object): - - """ - Quaternion class, this is the version which supports numpy arrays - If you need support for Matrix3 look at the Quaternion class - - Usage: - >>> from quaternion import QuaternionBase - >>> import numpy as np - >>> q = QuaternionBase([np.radians(20), np.radians(20), np.radians(20)]) - >>> print(q) - [ 0.9603483 0.13871646 0.19810763 0.13871646] - >>> print(q.dcm) - [[ 0.88302222 -0.21147065 0.41898917] - [ 0.3213938 0.92303098 -0.21147065] - [-0.34202014 0.3213938 0.88302222]] - >>> q = QuaternionBase([1, 0, 0, 0]) - >>> print(q.euler) - [ 0. -0. 0.] - >>> m = [[1, 0, 0], [0, 0, -1], [0, 1, 0]] - >>> q = QuaternionBase(m) - >>> vector = [0, 1, 0] - >>> vector2 = q.transform(vector) - """ - - def __init__(self, attitude=[1, 0, 0, 0]): - """ - Construct a quaternion from an attitude - - :param attitude: another QuaternionBase, - 3 element list [roll, pitch, yaw], - 4 element list [w, x, y ,z], DCM (3x3 array) - """ - if isinstance(attitude, QuaternionBase): - self.q = attitude.q - elif np.array(attitude).shape == (3, 3): - self.dcm = attitude - elif len(attitude) == 4: - self.q = attitude - elif len(attitude) == 3: - self.euler = attitude - else: - raise TypeError("attitude is not valid") - - @property - def q(self): - """ - Get the quaternion - :returns: array containing the quaternion elements - """ - if self._q is None: - if self._euler is not None: - # get q from euler - self._q = self._euler_to_q(self.euler) - elif self._dcm is not None: - # get q from DCM - self._q = self._dcm_to_q(self.dcm) - return self._q - - def __getitem__(self, index): - """Returns the quaternion entry at index""" - return self.q[index] - - @q.setter - def q(self, q): - """ - Set the quaternion - :param q: list or array of quaternion values [w, x, y, z] - """ - self._q = np.array(q) - - # mark other representations as outdated, will get generated on next - # read - self._euler = None - self._dcm = None - - @property - def euler(self): - """ - Get the euler angles. - The convention is Tait-Bryan (ZY'X'') - - :returns: array containing the euler angles [roll, pitch, yaw] - """ - if self._euler is None: - if self._q is not None: - # try to get euler angles from q via DCM - self._dcm = self._q_to_dcm(self.q) - self._euler = self._dcm_to_euler(self.dcm) - elif self._dcm is not None: - # get euler angles from DCM - self._euler = self._dcm_to_euler(self.dcm) - return self._euler - - @euler.setter - def euler(self, euler): - """ - Set the euler angles - :param euler: list or array of the euler angles [roll, pitch, yaw] - - """ - assert(len(euler) == 3) - self._euler = np.array(euler) - - # mark other representations as outdated, will get generated on next - # read - self._q = None - self._dcm = None - - @property - def dcm(self): - """ - Get the DCM - - :returns: 3x3 array - """ - if self._dcm is None: - if self._q is not None: - # try to get dcm from q - self._dcm = self._q_to_dcm(self.q) - elif self._euler is not None: - # try to get get dcm from euler - self._dcm = self._euler_to_dcm(self._euler) - return self._dcm - - @dcm.setter - def dcm(self, dcm): - """ - Set the DCM - :param dcm: 3x3 array - - """ - assert(len(dcm) == 3) - for sub in dcm: - assert(len(sub) == 3) - - self._dcm = np.array(dcm) - - # mark other representations as outdated, will get generated on next - # read - self._q = None - self._euler = None - - def transform(self, v): - """ - Calculates the vector transformed by this quaternion - :param v: array with len 3 to be transformed - :returns: transformed vector - """ - assert(len(v) == 3) - assert(np.allclose(self.norm, 1)) - # perform transformation t = q * [0, v] * q^-1 but avoid multiplication - # because terms cancel out - q0 = self.q[0] - qi = self.q[1:4] - ui = np.array(v) - a = q0 * ui + np.cross(qi, ui) - t = np.dot(qi, ui) * qi + q0 * a - np.cross(a, qi) - return t - - @property - def norm(self): - """ - Returns norm of quaternion - - :returns: norm (scalar) - """ - return QuaternionBase.norm_array(self.q) - - def normalize(self): - """Normalizes the quaternion""" - self.q = QuaternionBase.normalize_array(self.q) - - @property - def inversed(self): - """ - Get inversed quaternion - - :returns: inversed quaternion - """ - q_inv = self._q_inversed(self.q) - return QuaternionBase(q_inv) - - def __eq__(self, other): - """ - Equality test (same orientation, not necessarily same rotation) - - :param other: a QuaternionBase - :returns: true if the quaternions are equal - """ - if isinstance(other, QuaternionBase): - return abs(self.q.dot(other.q)) > 1 - np.finfo(float).eps - return NotImplemented - - def close(self, other): - """ - Equality test with tolerance - (same orientation, not necessarily same rotation) - - - :param other: a QuaternionBase - :returns: true if the quaternions are almost equal - """ - if isinstance(other, QuaternionBase): - return np.allclose(self.q, other.q) or np.allclose(self.q, -other.q) - return NotImplemented - - def __mul__(self, other): - """ - :param other: QuaternionBase - :returns: multiplaction of this Quaternion with other - """ - if isinstance(other, QuaternionBase): - o = other.q - elif len(other) == 4: - o = other - else: - return NotImplemented - - return QuaternionBase(self._mul_array(self.q, o)) - - def __truediv__(self, other): - """ - :param other: QuaternionBase - :returns: division of this Quaternion with other - """ - if isinstance(other, QuaternionBase): - o = other - elif len(other) == 4: - o = QuaternionBase(other) - else: - return NotImplemented - return self * o.inversed - - @staticmethod - def normalize_array(q): - """ - Normalizes the list with len 4 so that it can be used as quaternion - :param q: array of len 4 - :returns: normalized array - """ - assert(len(q) == 4) - q = np.array(q) - n = QuaternionBase.norm_array(q) - return q / n - - @staticmethod - def norm_array(q): - """ - Calculate quaternion norm on array q - :param quaternion: array of len 4 - :returns: norm (scalar) - """ - assert(len(q) == 4) - return np.sqrt(np.dot(q, q)) - - def _mul_array(self, p, q): - """ - Performs multiplication of the 2 quaterniona arrays p and q - :param p: array of len 4 - :param q: array of len 4 - :returns: array of len, result of p * q (with p, q quaternions) - """ - assert(len(q) == len(p) == 4) - p0 = p[0] - pi = p[1:4] - q0 = q[0] - qi = q[1:4] - - res = np.zeros(4) - res[0] = p0 * q0 - np.dot(pi, qi) - res[1:4] = p0 * qi + q0 * pi + np.cross(pi, qi) - - return res - - def _euler_to_q(self, euler): - """ - Create q array from euler angles - :param euler: array [roll, pitch, yaw] in rad - :returns: array q which represents a quaternion [w, x, y, z] - """ - assert(len(euler) == 3) - phi = euler[0] - theta = euler[1] - psi = euler[2] - c_phi_2 = np.cos(phi / 2) - s_phi_2 = np.sin(phi / 2) - c_theta_2 = np.cos(theta / 2) - s_theta_2 = np.sin(theta / 2) - c_psi_2 = np.cos(psi / 2) - s_psi_2 = np.sin(psi / 2) - q = np.zeros(4) - q[0] = (c_phi_2 * c_theta_2 * c_psi_2 + - s_phi_2 * s_theta_2 * s_psi_2) - q[1] = (s_phi_2 * c_theta_2 * c_psi_2 - - c_phi_2 * s_theta_2 * s_psi_2) - q[2] = (c_phi_2 * s_theta_2 * c_psi_2 + - s_phi_2 * c_theta_2 * s_psi_2) - q[3] = (c_phi_2 * c_theta_2 * s_psi_2 - - s_phi_2 * s_theta_2 * c_psi_2) - return q - - def _q_to_dcm(self, q): - """ - Create DCM from q - :param q: array q which represents a quaternion [w, x, y, z] - :returns: 3x3 dcm array - """ - assert(len(q) == 4) - assert(np.allclose(QuaternionBase.norm_array(q), 1)) - dcm = np.zeros([3, 3]) - a = q[0] - b = q[1] - c = q[2] - d = q[3] - a_sq = a * a - b_sq = b * b - c_sq = c * c - d_sq = d * d - dcm[0][0] = a_sq + b_sq - c_sq - d_sq - dcm[0][1] = 2 * (b * c - a * d) - dcm[0][2] = 2 * (a * c + b * d) - dcm[1][0] = 2 * (b * c + a * d) - dcm[1][1] = a_sq - b_sq + c_sq - d_sq - dcm[1][2] = 2 * (c * d - a * b) - dcm[2][0] = 2 * (b * d - a * c) - dcm[2][1] = 2 * (a * b + c * d) - dcm[2][2] = a_sq - b_sq - c_sq + d_sq - return dcm - - def _dcm_to_q(self, dcm): - """ - Create q from dcm - Reference: - - Shoemake, Quaternions, - http://www.cs.ucr.edu/~vbz/resources/quatut.pdf - - :param dcm: 3x3 dcm array - returns: quaternion array - """ - assert(dcm.shape == (3, 3)) - q = np.zeros(4) - - tr = np.trace(dcm) - if tr > 0: - s = np.sqrt(tr + 1.0) - q[0] = s * 0.5 - s = 0.5 / s - q[1] = (dcm[2][1] - dcm[1][2]) * s - q[2] = (dcm[0][2] - dcm[2][0]) * s - q[3] = (dcm[1][0] - dcm[0][1]) * s - else: - dcm_i = np.argmax(np.diag(dcm)) - dcm_j = (dcm_i + 1) % 3 - dcm_k = (dcm_i + 2) % 3 - - s = np.sqrt((dcm[dcm_i][dcm_i] - dcm[dcm_j][dcm_j] - - dcm[dcm_k][dcm_k]) + 1.0) - q[dcm_i + 1] = s * 0.5 - s = 0.5 / s - q[dcm_j + 1] = (dcm[dcm_i][dcm_j] + dcm[dcm_j][dcm_i]) * s - q[dcm_k + 1] = (dcm[dcm_k][dcm_i] + dcm[dcm_i][dcm_k]) * s - q[0] = (dcm[dcm_k][dcm_j] - dcm[dcm_j][dcm_k]) * s - - return q - - def _euler_to_dcm(self, euler): - """ - Create DCM from euler angles - :param euler: array [roll, pitch, yaw] in rad - :returns: 3x3 dcm array - """ - assert(len(euler) == 3) - phi = euler[0] - theta = euler[1] - psi = euler[2] - dcm = np.zeros([3, 3]) - c_phi = np.cos(phi) - s_phi = np.sin(phi) - c_theta = np.cos(theta) - s_theta = np.sin(theta) - c_psi = np.cos(psi) - s_psi = np.sin(psi) - - dcm[0][0] = c_theta * c_psi - dcm[0][1] = -c_phi * s_psi + s_phi * s_theta * c_psi - dcm[0][2] = s_phi * s_psi + c_phi * s_theta * c_psi - - dcm[1][0] = c_theta * s_psi - dcm[1][1] = c_phi * c_psi + s_phi * s_theta * s_psi - dcm[1][2] = -s_phi * c_psi + c_phi * s_theta * s_psi - - dcm[2][0] = -s_theta - dcm[2][1] = s_phi * c_theta - dcm[2][2] = c_phi * c_theta - return dcm - - def _dcm_to_euler(self, dcm): - """ - Create DCM from euler angles - :param dcm: 3x3 dcm array - :returns: array [roll, pitch, yaw] in rad - """ - assert(dcm.shape == (3, 3)) - theta = np.arcsin(min(1, max(-1, -dcm[2][0]))) - - if abs(theta - np.pi/2) < 1.0e-3: - phi = 0.0 - psi = (np.arctan2(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1]) + phi) - elif abs(theta + np.pi/2) < 1.0e-3: - phi = 0.0 - psi = np.arctan2(dcm[1][2] - dcm[0][1], - dcm[0][2] + dcm[1][1] - phi) - else: - phi = np.arctan2(dcm[2][1], dcm[2][2]) - psi = np.arctan2(dcm[1][0], dcm[0][0]) - - return np.array([phi, theta, psi]) - - def _q_inversed(self, q): - """ - Returns inversed quaternion q - :param q: array q which represents a quaternion [w, x, y, z] - :returns: inversed array q which is a quaternion [w, x, y ,z] - """ - assert(len(q) == 4) - return np.hstack([q[0], -q[1:4]]) - - def __str__(self): - """String of quaternion values""" - return str(self.q) - - -class Quaternion(QuaternionBase): - - """ - Quaternion class that supports pymavlink's Vector3 and Matrix3 - - Usage: - >>> from quaternion import Quaternion - >>> from rotmat import Vector3, Matrix3 - >>> m = Matrix3() - >>> m.from_euler(45, 0, 0) - >>> print(m) - Matrix3((1.00, 0.00, 0.00), (0.00, 0.53, -0.85), (-0.00, 0.85, 0.53)) - >>> q = Quaternion(m) - >>> print(q) - [ 0.87330464 0.48717451 0. 0. ] - >>> print(q.dcm) - Matrix3((1.00, 0.00, 0.00), (0.00, 0.53, -0.85), (-0.00, 0.85, 0.53)) - >>> v = Vector3(0, 1, 0) - >>> v2 = q.transform(v) - >>> print(v2) - Vector3(0.00, 0.53, 0.85) - """ - - def __init__(self, attitude): - """ - Construct a quaternion from an attitude - - :param attitude: another Quaternion, QuaternionBase, - 3 element list [roll, pitch, yaw], - 4 element list [w, x, y ,z], DCM (3x3 array or Matrix3) - """ - if isinstance(attitude, Quaternion): - self.q = attitude.q - if isinstance(attitude, Matrix3): - self.dcm = attitude - elif np.array(attitude).shape == (3, 3): - # convert dcm array to Matrix3 - self.dcm = self._dcm_array_to_matrix3(attitude) - elif isinstance(attitude, Vector3): - # provided euler angles - euler = [attitude.x, attitude.y, attitude.z] - super(Quaternion, self).__init__(euler) - else: - super(Quaternion, self).__init__(attitude) - - @property - def dcm(self): - """ - Get the DCM - - :returns: Matrix3 - """ - if self._dcm is None: - if self._q is not None: - # try to get dcm from q - self._dcm = self._q_to_dcm(self.q) - elif self._euler is not None: - # try to get get dcm from euler - self._dcm = self._euler_to_dcm(self._euler) - return self._dcm - - @dcm.setter - def dcm(self, dcm): - """ - Set the DCM - :param dcm: Matrix3 - - """ - assert(isinstance(dcm, Matrix3)) - self._dcm = dcm.copy() - - # mark other representations as outdated, will get generated on next - # read - self._q = None - self._euler = None - - @property - def inversed(self): - """ - Get inversed quaternion - - :returns: inversed quaternion - """ - return Quaternion(super(Quaternion, self).inversed) - - def transform(self, v3): - """ - Calculates the vector transformed by this quaternion - :param v3: Vector3 to be transformed - :returns: transformed vector - """ - if isinstance(v3, Vector3): - t = super(Quaternion, self).transform([v3.x, v3.y, v3.z]) - return Vector3(t[0], t[1], t[2]) - elif len(v3) == 3: - return super(Quaternion, self).transform(v3) - else: - raise TypeError("param v3 is not a vector type") - - def _dcm_array_to_matrix3(self, dcm): - """ - Converts dcm array into Matrix3 - :param dcm: 3x3 dcm array - :returns: Matrix3 - """ - assert(dcm.shape == (3, 3)) - a = Vector3(dcm[0][0], dcm[0][1], dcm[0][2]) - b = Vector3(dcm[1][0], dcm[1][1], dcm[1][2]) - c = Vector3(dcm[2][0], dcm[2][1], dcm[2][2]) - return Matrix3(a, b, c) - - def _matrix3_to_dcm_array(self, m): - """ - Converts Matrix3 in an array - :param m: Matrix3 - :returns: 3x3 array - """ - assert(isinstance(m, Matrix3)) - return np.array([[m.a.x, m.a.y, m.a.z], - [m.b.x, m.b.y, m.b.z], - [m.c.x, m.c.y, m.c.z]]) - - def _q_to_dcm(self, q): - """ - Create DCM (Matrix3) from q - :param q: array q which represents a quaternion [w, x, y, z] - :returns: Matrix3 - """ - assert(len(q) == 4) - arr = super(Quaternion, self)._q_to_dcm(q) - return self._dcm_array_to_matrix3(arr) - - def _dcm_to_q(self, dcm): - """ - Create q from dcm (Matrix3) - :param dcm: Matrix3 - :returns: array q which represents a quaternion [w, x, y, z] - """ - assert(isinstance(dcm, Matrix3)) - arr = self._matrix3_to_dcm_array(dcm) - return super(Quaternion, self)._dcm_to_q(arr) - - def _euler_to_dcm(self, euler): - """ - Create DCM (Matrix3) from euler angles - :param euler: array [roll, pitch, yaw] in rad - :returns: Matrix3 - """ - assert(len(euler) == 3) - m = Matrix3() - m.from_euler(*euler) - return m - - def _dcm_to_euler(self, dcm): - """ - Create DCM from euler angles - :param dcm: Matrix3 - :returns: array [roll, pitch, yaw] in rad - """ - assert(isinstance(dcm, Matrix3)) - return np.array(dcm.to_euler()) - - def __mul__(self, other): - """ - :param other: Quaternion - :returns: multiplaction of this Quaternion with other - """ - return Quaternion(super(Quaternion, self).__mul__(other)) - - def __truediv__(self, other): - """ - :param other: Quaternion - :returns: division of this Quaternion with other - """ - return Quaternion(super(Quaternion, self).__truediv__(other)) - -if __name__ == "__main__": - import doctest - doctest.testmod() - import unittest - unittest.main('quaterniontest') diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/rotmat.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/rotmat.py deleted file mode 100755 index f6c3955af..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/rotmat.py +++ /dev/null @@ -1,406 +0,0 @@ -#!/usr/bin/env python -# -# vector3 and rotation matrix classes -# This follows the conventions in the ArduPilot code, -# and is essentially a python version of the AP_Math library -# -# Andrew Tridgell, March 2012 -# -# This library is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by the -# Free Software Foundation; either version 2.1 of the License, or (at your -# option) any later version. -# -# This library 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 Lesser General Public License -# for more details. -# -# You should have received a copy of the GNU Lesser General Public License -# along with this library; if not, write to the Free Software Foundation, -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -'''rotation matrix class -''' - -from math import sin, cos, sqrt, asin, atan2, pi, radians, acos, degrees - -class Vector3: - '''a vector''' - def __init__(self, x=None, y=None, z=None): - if x != None and y != None and z != None: - self.x = float(x) - self.y = float(y) - self.z = float(z) - elif x != None and len(x) == 3: - self.x = float(x[0]) - self.y = float(x[1]) - self.z = float(x[2]) - elif x != None: - raise ValueError('bad initialiser') - else: - self.x = float(0) - self.y = float(0) - self.z = float(0) - - def __repr__(self): - return 'Vector3(%.2f, %.2f, %.2f)' % (self.x, - self.y, - self.z) - - def __eq__(self, v): - return self.x == v.x and self.y == v.y and self.z == v.z - - def __ne__(self, v): - return not self == v - - def close(self, v, tol=1e-7): - return abs(self.x - v.x) < tol and \ - abs(self.y - v.y) < tol and \ - abs(self.z - v.z) < tol - - def __add__(self, v): - return Vector3(self.x + v.x, - self.y + v.y, - self.z + v.z) - - __radd__ = __add__ - - def __sub__(self, v): - return Vector3(self.x - v.x, - self.y - v.y, - self.z - v.z) - - def __neg__(self): - return Vector3(-self.x, -self.y, -self.z) - - def __rsub__(self, v): - return Vector3(v.x - self.x, - v.y - self.y, - v.z - self.z) - - def __mul__(self, v): - if isinstance(v, Vector3): - '''dot product''' - return self.x*v.x + self.y*v.y + self.z*v.z - return Vector3(self.x * v, - self.y * v, - self.z * v) - - __rmul__ = __mul__ - - def __div__(self, v): - return Vector3(self.x / v, - self.y / v, - self.z / v) - - def __mod__(self, v): - '''cross product''' - return Vector3(self.y*v.z - self.z*v.y, - self.z*v.x - self.x*v.z, - self.x*v.y - self.y*v.x) - - def __copy__(self): - return Vector3(self.x, self.y, self.z) - - copy = __copy__ - - def length(self): - return sqrt(self.x**2 + self.y**2 + self.z**2) - - def zero(self): - self.x = self.y = self.z = 0 - - def angle(self, v): - '''return the angle between this vector and another vector''' - return acos((self * v) / (self.length() * v.length())) - - def normalized(self): - return self.__div__(self.length()) - - def normalize(self): - v = self.normalized() - self.x = v.x - self.y = v.y - self.z = v.z - -class Matrix3: - '''a 3x3 matrix, intended as a rotation matrix''' - def __init__(self, a=None, b=None, c=None): - if a is not None and b is not None and c is not None: - self.a = a.copy() - self.b = b.copy() - self.c = c.copy() - else: - self.identity() - - def __repr__(self): - return 'Matrix3((%.2f, %.2f, %.2f), (%.2f, %.2f, %.2f), (%.2f, %.2f, %.2f))' % ( - self.a.x, self.a.y, self.a.z, - self.b.x, self.b.y, self.b.z, - self.c.x, self.c.y, self.c.z) - - def identity(self): - self.a = Vector3(1,0,0) - self.b = Vector3(0,1,0) - self.c = Vector3(0,0,1) - - def transposed(self): - return Matrix3(Vector3(self.a.x, self.b.x, self.c.x), - Vector3(self.a.y, self.b.y, self.c.y), - Vector3(self.a.z, self.b.z, self.c.z)) - - - def from_euler(self, roll, pitch, yaw): - '''fill the matrix from Euler angles in radians''' - cp = cos(pitch) - sp = sin(pitch) - sr = sin(roll) - cr = cos(roll) - sy = sin(yaw) - cy = cos(yaw) - - self.a.x = cp * cy - self.a.y = (sr * sp * cy) - (cr * sy) - self.a.z = (cr * sp * cy) + (sr * sy) - self.b.x = cp * sy - self.b.y = (sr * sp * sy) + (cr * cy) - self.b.z = (cr * sp * sy) - (sr * cy) - self.c.x = -sp - self.c.y = sr * cp - self.c.z = cr * cp - - - def to_euler(self): - '''find Euler angles (321 convention) for the matrix''' - if self.c.x >= 1.0: - pitch = pi - elif self.c.x <= -1.0: - pitch = -pi - else: - pitch = -asin(self.c.x) - roll = atan2(self.c.y, self.c.z) - yaw = atan2(self.b.x, self.a.x) - return (roll, pitch, yaw) - - - def to_euler312(self): - '''find Euler angles (312 convention) for the matrix. - See http://www.atacolorado.com/eulersequences.doc - ''' - T21 = self.a.y - T22 = self.b.y - T23 = self.c.y - T13 = self.c.x - T33 = self.c.z - yaw = atan2(-T21, T22) - roll = asin(T23) - pitch = atan2(-T13, T33) - return (roll, pitch, yaw) - - def from_euler312(self, roll, pitch, yaw): - '''fill the matrix from Euler angles in radians in 312 convention''' - c3 = cos(pitch) - s3 = sin(pitch) - s2 = sin(roll) - c2 = cos(roll) - s1 = sin(yaw) - c1 = cos(yaw) - - self.a.x = c1 * c3 - s1 * s2 * s3 - self.b.y = c1 * c2 - self.c.z = c3 * c2 - self.a.y = -c2*s1 - self.a.z = s3*c1 + c3*s2*s1 - self.b.x = c3*s1 + s3*s2*c1 - self.b.z = s1*s3 - s2*c1*c3 - self.c.x = -s3*c2 - self.c.y = s2 - - def __add__(self, m): - return Matrix3(self.a + m.a, self.b + m.b, self.c + m.c) - - __radd__ = __add__ - - def __sub__(self, m): - return Matrix3(self.a - m.a, self.b - m.b, self.c - m.c) - - def __rsub__(self, m): - return Matrix3(m.a - self.a, m.b - self.b, m.c - self.c) - - def __mul__(self, other): - if isinstance(other, Vector3): - v = other - return Vector3(self.a.x * v.x + self.a.y * v.y + self.a.z * v.z, - self.b.x * v.x + self.b.y * v.y + self.b.z * v.z, - self.c.x * v.x + self.c.y * v.y + self.c.z * v.z) - elif isinstance(other, Matrix3): - m = other - return Matrix3(Vector3(self.a.x * m.a.x + self.a.y * m.b.x + self.a.z * m.c.x, - self.a.x * m.a.y + self.a.y * m.b.y + self.a.z * m.c.y, - self.a.x * m.a.z + self.a.y * m.b.z + self.a.z * m.c.z), - Vector3(self.b.x * m.a.x + self.b.y * m.b.x + self.b.z * m.c.x, - self.b.x * m.a.y + self.b.y * m.b.y + self.b.z * m.c.y, - self.b.x * m.a.z + self.b.y * m.b.z + self.b.z * m.c.z), - Vector3(self.c.x * m.a.x + self.c.y * m.b.x + self.c.z * m.c.x, - self.c.x * m.a.y + self.c.y * m.b.y + self.c.z * m.c.y, - self.c.x * m.a.z + self.c.y * m.b.z + self.c.z * m.c.z)) - v = other - return Matrix3(self.a * v, self.b * v, self.c * v) - - def __div__(self, v): - return Matrix3(self.a / v, self.b / v, self.c / v) - - def __neg__(self): - return Matrix3(-self.a, -self.b, -self.c) - - def __copy__(self): - return Matrix3(self.a, self.b, self.c) - - copy = __copy__ - - def rotate(self, g): - '''rotate the matrix by a given amount on 3 axes''' - temp_matrix = Matrix3() - a = self.a - b = self.b - c = self.c - temp_matrix.a.x = a.y * g.z - a.z * g.y - temp_matrix.a.y = a.z * g.x - a.x * g.z - temp_matrix.a.z = a.x * g.y - a.y * g.x - temp_matrix.b.x = b.y * g.z - b.z * g.y - temp_matrix.b.y = b.z * g.x - b.x * g.z - temp_matrix.b.z = b.x * g.y - b.y * g.x - temp_matrix.c.x = c.y * g.z - c.z * g.y - temp_matrix.c.y = c.z * g.x - c.x * g.z - temp_matrix.c.z = c.x * g.y - c.y * g.x - self.a += temp_matrix.a - self.b += temp_matrix.b - self.c += temp_matrix.c - - def normalize(self): - '''re-normalise a rotation matrix''' - error = self.a * self.b - t0 = self.a - (self.b * (0.5 * error)) - t1 = self.b - (self.a * (0.5 * error)) - t2 = t0 % t1 - self.a = t0 * (1.0 / t0.length()) - self.b = t1 * (1.0 / t1.length()) - self.c = t2 * (1.0 / t2.length()) - - def trace(self): - '''the trace of the matrix''' - return self.a.x + self.b.y + self.c.z - - def from_axis_angle(self, axis, angle): - '''create a rotation matrix from axis and angle''' - ux = axis.x - uy = axis.y - uz = axis.z - ct = cos(angle) - st = sin(angle) - self.a.x = ct + (1-ct) * ux**2 - self.a.y = ux*uy*(1-ct) - uz*st - self.a.z = ux*uz*(1-ct) + uy*st - self.b.x = uy*ux*(1-ct) + uz*st - self.b.y = ct + (1-ct) * uy**2 - self.b.z = uy*uz*(1-ct) - ux*st - self.c.x = uz*ux*(1-ct) - uy*st - self.c.y = uz*uy*(1-ct) + ux*st - self.c.z = ct + (1-ct) * uz**2 - - - def from_two_vectors(self, vec1, vec2): - '''get a rotation matrix from two vectors. - This returns a rotation matrix which when applied to vec1 - will produce a vector pointing in the same direction as vec2''' - angle = vec1.angle(vec2) - cross = vec1 % vec2 - if cross.length() == 0: - # the two vectors are colinear - return self.from_euler(0,0,angle) - cross.normalize() - return self.from_axis_angle(cross, angle) - - def close(self, m, tol=1e-7): - return self.a.close(m.a) and self.b.close(m.b) and self.c.close(m.c) - -class Plane: - '''a plane in 3 space, defined by a point and a vector normal''' - def __init__(self, point=None, normal=None): - if point is None: - point = Vector3(0,0,0) - if normal is None: - normal = Vector3(0, 0, 1) - self.point = point - self.normal = normal - -class Line: - '''a line in 3 space, defined by a point and a vector''' - def __init__(self, point=None, vector=None): - if point is None: - point = Vector3(0,0,0) - if vector is None: - vector = Vector3(0, 0, 1) - self.point = point - self.vector = vector - - def plane_intersection(self, plane, forward_only=False): - '''return point where line intersects with a plane''' - l_dot_n = self.vector * plane.normal - if l_dot_n == 0.0: - # line is parallel to the plane - return None - d = ((plane.point - self.point) * plane.normal) / l_dot_n - if forward_only and d < 0: - return None - return (self.vector * d) + self.point - - - -def test_euler(): - '''check that from_euler() and to_euler() are consistent''' - m = Matrix3() - from math import radians, degrees - for r in range(-179, 179, 3): - for p in range(-89, 89, 3): - for y in range(-179, 179, 3): - m.from_euler(radians(r), radians(p), radians(y)) - (r2, p2, y2) = m.to_euler() - v1 = Vector3(r,p,y) - v2 = Vector3(degrees(r2),degrees(p2),degrees(y2)) - diff = v1 - v2 - if diff.length() > 1.0e-12: - print('EULER ERROR:', v1, v2, diff.length()) - - -def test_two_vectors(): - '''test the from_two_vectors() method''' - import random - for i in range(1000): - v1 = Vector3(1, 0.2, -3) - v2 = Vector3(random.uniform(-5,5), random.uniform(-5,5), random.uniform(-5,5)) - m = Matrix3() - m.from_two_vectors(v1, v2) - v3 = m * v1 - diff = v3.normalized() - v2.normalized() - (r, p, y) = m.to_euler() - if diff.length() > 0.001: - print('err=%f' % diff.length()) - print("r/p/y = %.1f %.1f %.1f" % ( - degrees(r), degrees(p), degrees(y))) - print(v1.normalized(), v2.normalized(), v3.normalized()) - -def test_plane(): - '''testing line/plane intersection''' - print("testing plane/line maths") - plane = Plane(Vector3(0,0,0), Vector3(0,0,1)) - line = Line(Vector3(0,0,100), Vector3(10, 10, -90)) - p = line.plane_intersection(plane) - print(p) - -if __name__ == "__main__": - import doctest - doctest.testmod() - test_euler() - test_two_vectors() diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.cfg b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.cfg deleted file mode 100644 index 861a9f554..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.py deleted file mode 100644 index d0839bd6d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/setup.py +++ /dev/null @@ -1,133 +0,0 @@ -# Work around mbcs bug in distutils. -# http://bugs.python.org/issue10945 -import codecs -try: - codecs.lookup('mbcs') -except LookupError: - ascii = codecs.lookup('ascii') - func = lambda name, enc=ascii: {True: enc}.get(name=='mbcs') - codecs.register(func) - -from setuptools import setup, Extension -import glob, os, shutil, fnmatch, platform, sys - -version = '2.0.8' - -from generator import mavgen, mavparse - -# path to message_definitions directory -if os.getenv("MDEF",None) is not None: - mdef_paths = [os.getenv("MDEF")] -else: - mdef_paths = [os.path.join('..', 'message_definitions'), - os.path.join('mavlink', 'message_definitions'), - os.path.join('..', 'mavlink', 'message_definitions'), - os.path.join('message_definitions'), - ] - -for path in mdef_paths: - mdef_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), path) - if os.path.exists(mdef_path): - print("Using message definitions from %s" % mdef_path) - break - -dialects_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'dialects') - -v10_dialects = glob.glob(os.path.join(mdef_path, 'v1.0', '*.xml')) - -# for now v2.0 uses same XML files as v1.0 -v20_dialects = glob.glob(os.path.join(mdef_path, 'v1.0', '*.xml')) - -if len(v10_dialects) == 0: - print("No XML message definitions found") - sys.exit(1) - -if not "NOGEN" in os.environ: - for xml in v10_dialects: - shutil.copy(xml, os.path.join(dialects_path, 'v10')) - for xml in v20_dialects: - shutil.copy(xml, os.path.join(dialects_path, 'v20')) - - for xml in v10_dialects: - dialect = os.path.basename(xml)[:-4] - wildcard = os.getenv("MAVLINK_DIALECT",'*') - if not fnmatch.fnmatch(dialect, wildcard): - continue - print("Building %s for protocol 1.0" % xml) - if not mavgen.mavgen_python_dialect(dialect, mavparse.PROTOCOL_1_0): - print("Building failed %s for protocol 1.0" % xml) - sys.exit(1) - - for xml in v20_dialects: - dialect = os.path.basename(xml)[:-4] - wildcard = os.getenv("MAVLINK_DIALECT",'*') - if not fnmatch.fnmatch(dialect, wildcard): - continue - print("Building %s for protocol 2.0" % xml) - if not mavgen.mavgen_python_dialect(dialect, mavparse.PROTOCOL_2_0): - print("Building failed %s for protocol 2.0" % xml) - sys.exit(1) - -extensions = [] # Assume we might be unable to build native code -if platform.system() != 'Windows': - extensions = [ Extension('mavnative', - sources = ['mavnative/mavnative.c'], - include_dirs = [ - 'generator/C/include_v1.0', - 'generator/C/include_v2.0', - 'mavnative' - ] - ) ] -else: - print("Skipping mavnative due to Windows possibly missing a compiler...") - -setup (name = 'pymavlink', - version = version, - description = 'Python MAVLink code', - long_description = '''A Python library for handling MAVLink protocol streams and log files. This allows for the creation of simple scripts to analyse telemetry logs from autopilots such as ArduPilot which use the MAVLink protocol. See the scripts that come with the package for examples of small, useful scripts that use pymavlink. For more information about the MAVLink protocol see http://qgroundcontrol.org/mavlink/''', - url = 'http://github.com/mavlink/mavlink', - classifiers=['Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.7', - 'Topic :: Scientific/Engineering' - ], - license='LGPLv3', - package_dir = { 'pymavlink' : '.' }, - package_data = { 'pymavlink.dialects.v10' : ['*.xml'], - 'pymavlink.dialects.v20' : ['*.xml'], - 'pymavlink.generator' : [ '*.xsd', - 'java/lib/*.*', - 'java/lib/Messages/*.*', - 'C/include_v1.0/*.h', - 'C/include_v1.0/*.hpp', - 'C/include_v2.0/*.h', - 'C/include_v2.0/*.hpp' ], - 'pymavlink' : ['mavnative/*.h'], - 'pymavlink' : ['message_definitions/v*/*.xml'] }, - packages = ['pymavlink', - 'pymavlink.generator', - 'pymavlink.dialects', - 'pymavlink.dialects.v10', - 'pymavlink.dialects.v20'], - scripts = [ 'tools/magfit_delta.py', 'tools/mavextract.py', - 'tools/mavgraph.py', 'tools/mavparmdiff.py', - 'tools/mavtogpx.py', 'tools/magfit_gps.py', - 'tools/mavflightmodes.py', 'tools/mavlogdump.py', - 'tools/mavparms.py', 'tools/magfit_motors.py', - 'tools/mavflighttime.py', 'tools/mavloss.py', - 'tools/mavplayback.py', 'tools/magfit.py', - 'tools/mavgpslock.py', - 'tools/mavmission.py', - 'tools/mavsigloss.py', - 'tools/mavsearch.py', - 'tools/mavtomfile.py', - 'tools/mavgen.py', - 'tools/mavkml.py', - 'tools/mavfft.py', - 'tools/mavsummarize.py', - 'tools/MPU6KSearch.py'], - ext_modules = extensions - ) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/MPU6KSearch.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/MPU6KSearch.py deleted file mode 100755 index 75b6440d8..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/MPU6KSearch.py +++ /dev/null @@ -1,199 +0,0 @@ -#!/usr/bin/env python - -''' -search a set of log files for signs of inconsistent IMU data -''' - -import sys, time, os, glob -import zipfile - -from pymavlink import mavutil -from math import degrees - -# extra imports for pyinstaller -import json -from pymavlink.dialects.v10 import ardupilotmega - -search_dirs = ['c:\Program Files\APM Planner', - 'c:\Program Files\Mission Planner', - 'c:\Program Files (x86)\APM Planner', - 'c:\Program Files (x86)\Mission Planner'] -results = 'SearchResults.zip' -email = 'Craig Elder ' - -def IMUCheckFail(filename): - try: - mlog = mavutil.mavlink_connection(filename) - except Exception: - return False - - accel1 = None - accel2 = None - gyro1 = None - gyro2 = None - t1 = 0 - t2 = 0 - ecount_accel = [0]*3 - ecount_gyro = [0]*3 - athreshold = 3.0 - gthreshold = 30.0 - count_threshold = 100 - imu1_count = 0 - imu2_count = 0 - - while True: - try: - m = mlog.recv_match(type=['RAW_IMU','SCALED_IMU2','IMU','IMU2','PARM','PARAM_VALUE']) - except Exception as e: - print('Error: %s' % e) - break - if m is None: - break - mtype = m.get_type() - gotimu2 = False - if mtype == 'RAW_IMU': - accel1 = [m.xacc*9.81*0.001, m.yacc*9.81*0.001, m.zacc*9.81*0.001] - gyro1 = [degrees(m.xgyro*0.001), degrees(m.ygyro*0.001), degrees(m.zgyro*0.001)] - t1 = m.time_usec/1000 - imu1_count += 1 - elif mtype == 'SCALED_IMU2': - accel2 = [m.xacc*9.81*0.001, m.yacc*9.81*0.001, m.zacc*9.81*0.001] - gyro2 = [degrees(m.xgyro*0.001), degrees(m.ygyro*0.001), degrees(m.zgyro*0.001)] - gotimu2 = True - t2 = m.time_boot_ms - imu2_count += 1 - elif mtype == 'IMU': - accel1 = [m.AccX, m.AccY, m.AccZ] - gyro1 = [m.GyrX, m.GyrY, m.GyrZ] - t1 = m.TimeMS - imu1_count += 1 - elif mtype == 'IMU2': - accel2 = [m.AccX, m.AccY, m.AccZ] - gyro2 = [m.GyrX, m.GyrY, m.GyrZ] - gotimu2 = True - t2 = m.TimeMS - imu2_count += 1 - elif mtype == 'PARM': - if m.Name.startswith('INS_ACCOFFS_') or m.Name.startswith('INS_ACC2OFFS_'): - if m.Value == 0.0: - print('UNCALIBRATED: %s' % m) - return False - elif mtype == 'PARAM_VALUE': - if m.param_id.startswith('INS_ACCOFFS_') or m.param_id.startswith('INS_ACC2OFFS_'): - if m.param_value == 0.0: - print('UNCALIBRATED: %s' % m) - return False - - # skip out early if we don't have two IMUs - if imu1_count > imu2_count + 100: - return False - - if accel1 is not None and accel2 is not None and gotimu2 and t2 >= t1: - for i in range(3): - adiff = accel1[i] - accel2[i] - if adiff > athreshold: - if ecount_accel[i] < 0: - ecount_accel[i] = 0 - else: - ecount_accel[i] += 1 - elif adiff < -athreshold: - if ecount_accel[i] > 0: - ecount_accel[i] = 0 - else: - ecount_accel[i] -= 1 - else: - ecount_accel[i] = 0 - gdiff = gyro1[i] - gyro2[i] - if gdiff > gthreshold: - if ecount_gyro[i] < 0: - ecount_gyro[i] = 0 - else: - ecount_gyro[i] += 1 - elif gdiff < -gthreshold: - if ecount_gyro[i] > 0: - ecount_gyro[i] = 0 - else: - ecount_gyro[i] -= 1 - else: - ecount_gyro[i] = 0 - if abs(ecount_accel[i]) > count_threshold: - print("acceldiff[%u] %.1f" % (i, adiff)) - print(m) - return True - if abs(ecount_gyro[i]) > count_threshold: - print("gyrodiff[i] %.1f" % (i, adiff)) - print(m) - return True - - return False - -found = [] -directories = sys.argv[1:] -if not directories: - directories = search_dirs - -filelist = [] - -extensions = ['.tlog','.bin'] - -def match_extension(f): - '''see if the path matches a extension''' - (root,ext) = os.path.splitext(f) - return ext.lower() in extensions - -for d in directories: - if not os.path.exists(d): - continue - if os.path.isdir(d): - print("Searching in %s" % d) - for (root, dirs, files) in os.walk(d): - for f in files: - if not match_extension(f): - continue - path = os.path.join(root, f) - filelist.append(path) - elif match_extension(d): - filelist.append(d) - -for i in range(len(filelist)): - f = filelist[i] - print("Checking %s ... [found=%u i=%u/%u]" % (f, len(found), i, len(filelist))) - try: - if IMUCheckFail(f): - found.append(f) - except Exception as e: - print("Failed - %s" % e) - continue - sys.stdout.flush() - -if len(found) == 0: - print("No matching files found - all OK!") - raw_input('Press enter to close') - sys.exit(0) - -print("Creating zip file %s" % results) -try: - zip = zipfile.ZipFile(results, 'w') -except Exception: - print("Unable to create zip file %s" % results) - print("Please send matching files manually") - for f in found: - print('MATCHED: %s' % f) - raw_input('Press enter to close') - sys.exit(1) - -for f in found: - arcname=os.path.basename(f) - if not arcname.startswith('201'): - mtime = os.path.getmtime(f) - arcname = "%s-%s" % (time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime(mtime)), arcname) - zip.write(f, arcname=arcname) -zip.close() - -print('==============================================') -print("Created %s with %u of %u matching logs" % (results, len(found), len(filelist))) -print("Please send this file to %s" % email) -print('==============================================') - -raw_input('Press enter to close') -sys.exit(0) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit.py deleted file mode 100755 index 82a17a34d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit.py +++ /dev/null @@ -1,176 +0,0 @@ -#!/usr/bin/env python - -''' -fit best estimate of magnetometer offsets -''' - -import sys, time, os, math - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--noise", type=float, default=0, help="noise to add") -parser.add_argument("--mag2", action='store_true', help="use 2nd mag from DF log") -parser.add_argument("--radius", default=None, type=float, help="target radius") -parser.add_argument("--plot", action='store_true', help="plot points in 3D") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil -from pymavlink.rotmat import Vector3 - - -def noise(): - '''a noise vector''' - from random import gauss - v = Vector3(gauss(0, 1), gauss(0, 1), gauss(0, 1)) - v.normalize() - return v * args.noise - -def select_data(data): - ret = [] - counts = {} - for d in data: - mag = d - key = "%u:%u:%u" % (mag.x/20,mag.y/20,mag.z/20) - if key in counts: - counts[key] += 1 - else: - counts[key] = 1 - if counts[key] < 3: - ret.append(d) - print(len(data), len(ret)) - return ret - -def radius(mag, offsets): - '''return radius give data point and offsets''' - return (mag + offsets).length() - -def radius_cmp(a, b, offsets): - '''return +1 or -1 for for sorting''' - diff = radius(a, offsets) - radius(b, offsets) - if diff > 0: - return 1 - if diff < 0: - return -1 - return 0 - -def sphere_error(p, data): - from scipy import sqrt - x,y,z,r = p - if args.radius is not None: - r = args.radius - ofs = Vector3(x,y,z) - ret = [] - for d in data: - mag = d - err = r - radius(mag, ofs) - ret.append(err) - return ret - -def fit_data(data): - import numpy, scipy - from scipy import optimize - - p0 = [0.0, 0.0, 0.0, 0.0] - p1, ier = optimize.leastsq(sphere_error, p0[:], args=(data)) - if not ier in [1, 2, 3, 4]: - raise RuntimeError("Unable to find solution") - if args.radius is not None: - r = args.radius - else: - r = p1[3] - return (Vector3(p1[0], p1[1], p1[2]), r) - -def magfit(logfile): - '''find best magnetometer offset fit to a log file''' - - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps) - - data = [] - - last_t = 0 - offsets = Vector3(0,0,0) - - # now gather all the data - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - break - if m.get_type() == "SENSOR_OFFSETS": - # update current offsets - offsets = Vector3(m.mag_ofs_x, m.mag_ofs_y, m.mag_ofs_z) - if m.get_type() == "RAW_IMU": - mag = Vector3(m.xmag, m.ymag, m.zmag) - # add data point after subtracting the current offsets - data.append(mag - offsets + noise()) - if m.get_type() == "MAG" and not args.mag2: - offsets = Vector3(m.OfsX,m.OfsY,m.OfsZ) - mag = Vector3(m.MagX,m.MagY,m.MagZ) - data.append(mag - offsets + noise()) - if m.get_type() == "MAG2" and args.mag2: - offsets = Vector3(m.OfsX,m.OfsY,m.OfsZ) - mag = Vector3(m.MagX,m.MagY,m.MagZ) - data.append(mag - offsets + noise()) - - print("Extracted %u data points" % len(data)) - print("Current offsets: %s" % offsets) - - orig_data = data - - data = select_data(data) - - # remove initial outliers - data.sort(lambda a,b : radius_cmp(a,b,offsets)) - data = data[len(data)/16:-len(data)/16] - - # do an initial fit - (offsets, field_strength) = fit_data(data) - - for count in range(3): - # sort the data by the radius - data.sort(lambda a,b : radius_cmp(a,b,offsets)) - - print("Fit %u : %s field_strength=%6.1f to %6.1f" % ( - count, offsets, - radius(data[0], offsets), radius(data[-1], offsets))) - - # discard outliers, keep the middle 3/4 - data = data[len(data)/8:-len(data)/8] - - # fit again - (offsets, field_strength) = fit_data(data) - - print("Final : %s field_strength=%6.1f to %6.1f" % ( - offsets, - radius(data[0], offsets), radius(data[-1], offsets))) - - if args.plot: - plot_data(orig_data, data) - -def plot_data(orig_data, data): - '''plot data in 3D''' - import numpy as np - from mpl_toolkits.mplot3d import Axes3D - import matplotlib.pyplot as plt - - for dd, c in [(orig_data, 'r'), (data, 'b')]: - fig = plt.figure() - ax = fig.add_subplot(111, projection='3d') - - xs = [ d.x for d in dd ] - ys = [ d.y for d in dd ] - zs = [ d.z for d in dd ] - ax.scatter(xs, ys, zs, c=c, marker='o') - - ax.set_xlabel('X Label') - ax.set_ylabel('Y Label') - ax.set_zlabel('Z Label') - plt.show() - -total = 0.0 -for filename in args.logs: - magfit(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_delta.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_delta.py deleted file mode 100755 index fbba292f0..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_delta.py +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env python - -''' -fit best estimate of magnetometer offsets using the algorithm from -Bill Premerlani -''' - -import sys, time, os, math - -# command line option handling -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--verbose", action='store_true', default=False, help="verbose offset output") -parser.add_argument("--gain", type=float, default=0.01, help="algorithm gain") -parser.add_argument("--noise", type=float, default=0, help="noise to add") -parser.add_argument("--max-change", type=float, default=10, help="max step change") -parser.add_argument("--min-diff", type=float, default=50, help="min mag vector delta") -parser.add_argument("--history", type=int, default=20, help="how many points to keep") -parser.add_argument("--repeat", type=int, default=1, help="number of repeats through the data") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil -from pymavlink.rotmat import Vector3, Matrix3 - - -def noise(): - '''a noise vector''' - from random import gauss - v = Vector3(gauss(0, 1), gauss(0, 1), gauss(0, 1)) - v.normalize() - return v * args.noise - -def find_offsets(data, ofs): - '''find mag offsets by applying Bills "offsets revisited" algorithm - on the data - - This is an implementation of the algorithm from: - http://gentlenav.googlecode.com/files/MagnetometerOffsetNullingRevisited.pdf - ''' - - # a limit on the maximum change in each step - max_change = args.max_change - - # the gain factor for the algorithm - gain = args.gain - - data2 = [] - for d in data: - d = d.copy() + noise() - d.x = float(int(d.x + 0.5)) - d.y = float(int(d.y + 0.5)) - d.z = float(int(d.z + 0.5)) - data2.append(d) - data = data2 - - history_idx = 0 - mag_history = data[0:args.history] - - for i in range(args.history, len(data)): - B1 = mag_history[history_idx] + ofs - B2 = data[i] + ofs - - diff = B2 - B1 - diff_length = diff.length() - if diff_length <= args.min_diff: - # the mag vector hasn't changed enough - we don't get any - # information from this - history_idx = (history_idx+1) % args.history - continue - - mag_history[history_idx] = data[i] - history_idx = (history_idx+1) % args.history - - # equation 6 of Bills paper - delta = diff * (gain * (B2.length() - B1.length()) / diff_length) - - # limit the change from any one reading. This is to prevent - # single crazy readings from throwing off the offsets for a long - # time - delta_length = delta.length() - if max_change != 0 and delta_length > max_change: - delta *= max_change / delta_length - - # set the new offsets - ofs = ofs - delta - - if args.verbose: - print(ofs) - return ofs - - -def magfit(logfile): - '''find best magnetometer offset fit to a log file''' - - print("Processing log %s" % filename) - - # open the log file - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps) - - data = [] - mag = None - offsets = Vector3(0,0,0) - - # now gather all the data - while True: - # get the next MAVLink message in the log - m = mlog.recv_match(condition=args.condition) - if m is None: - break - if m.get_type() == "SENSOR_OFFSETS": - # update offsets that were used during this flight - offsets = Vector3(m.mag_ofs_x, m.mag_ofs_y, m.mag_ofs_z) - if m.get_type() == "RAW_IMU" and offsets != None: - # extract one mag vector, removing the offsets that were - # used during that flight to get the raw sensor values - mag = Vector3(m.xmag, m.ymag, m.zmag) - offsets - data.append(mag) - - print("Extracted %u data points" % len(data)) - print("Current offsets: %s" % offsets) - - # run the fitting algorithm - ofs = offsets - ofs = Vector3(0,0,0) - for r in range(args.repeat): - ofs = find_offsets(data, ofs) - print('Loop %u offsets %s' % (r, ofs)) - sys.stdout.flush() - print("New offsets: %s" % ofs) - -total = 0.0 -for filename in args.logs: - magfit(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_gps.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_gps.py deleted file mode 100755 index 4cb95b14a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_gps.py +++ /dev/null @@ -1,165 +0,0 @@ -#!/usr/bin/env python - -''' -fit best estimate of magnetometer offsets -''' - -import sys, time, os, math - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--minspeed", type=float, default=5.0, help="minimum ground speed to use") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--declination", type=float, default=None, help="force declination") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - - -class vec3(object): - def __init__(self, x, y, z): - self.x = x - self.y = y - self.z = z - def __str__(self): - return "%.1f %.1f %.1f" % (self.x, self.y, self.z) - -def heading_error1(parm, data): - from math import sin, cos, atan2, degrees - from numpy import dot - xofs,yofs,zofs,a1,a2,a3,a4,a5,a6,a7,a8,a9,declination = parm - - if args.declination is not None: - declination = args.declination - - ret = [] - for d in data: - x = d[0] + xofs - y = d[1] + yofs - z = d[2] + zofs - r = d[3] - p = d[4] - h = d[5] - - headX = x*cos(p) + y*sin(r)*sin(p) + z*cos(r)*sin(p) - headY = y*cos(r) - z*sin(r) - heading = degrees(atan2(-headY,headX)) + declination - if heading < 0: - heading += 360 - herror = h - heading - if herror > 180: - herror -= 360 - if herror < -180: - herror += 360 - ret.append(herror) - return ret - -def heading_error(parm, data): - from math import sin, cos, atan2, degrees - from numpy import dot - xofs,yofs,zofs,a1,a2,a3,a4,a5,a6,a7,a8,a9,declination = parm - - if args.declination is not None: - declination = args.declination - - a = [[1.0,a2,a3],[a4,a5,a6],[a7,a8,a9]] - - ret = [] - for d in data: - x = d[0] + xofs - y = d[1] + yofs - z = d[2] + zofs - r = d[3] - p = d[4] - h = d[5] - mv = [x, y, z] - mv2 = dot(a, mv) - x = mv2[0] - y = mv2[1] - z = mv2[2] - - headX = x*cos(p) + y*sin(r)*sin(p) + z*cos(r)*sin(p) - headY = y*cos(r) - z*sin(r) - heading = degrees(atan2(-headY,headX)) + declination - if heading < 0: - heading += 360 - herror = h - heading - if herror > 180: - herror -= 360 - if herror < -180: - herror += 360 - ret.append(herror) - return ret - -def fit_data(data): - import numpy, scipy - from scipy import optimize - - p0 = [0.0, 0.0, 0.0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0] - if args.declination is not None: - p0[-1] = args.declination - p1, ier = optimize.leastsq(heading_error1, p0[:], args=(data)) - -# p0 = p1[:] -# p1, ier = optimize.leastsq(heading_error, p0[:], args=(data)) - - print(p1) - if not ier in [1, 2, 3, 4]: - raise RuntimeError("Unable to find solution") - return p1 - -def magfit(logfile): - '''find best magnetometer offset fit to a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps) - - flying = False - gps_heading = 0.0 - - data = [] - - # get the current mag offsets - m = mlog.recv_match(type='SENSOR_OFFSETS',condition=args.condition) - offsets = vec3(m.mag_ofs_x, m.mag_ofs_y, m.mag_ofs_z) - - attitude = mlog.recv_match(type='ATTITUDE',condition=args.condition) - - # now gather all the data - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - break - if m.get_type() == "GPS_RAW": - # flying if groundspeed more than 5 m/s - flying = (m.v > args.minspeed and m.fix_type == 2) - gps_heading = m.hdg - if m.get_type() == "GPS_RAW_INT": - # flying if groundspeed more than 5 m/s - flying = (m.vel/100 > args.minspeed and m.fix_type == 3) - gps_heading = m.cog/100 - if m.get_type() == "ATTITUDE": - attitude = m - if m.get_type() == "SENSOR_OFFSETS": - # update current offsets - offsets = vec3(m.mag_ofs_x, m.mag_ofs_y, m.mag_ofs_z) - if not flying: - continue - if m.get_type() == "RAW_IMU": - data.append((m.xmag - offsets.x, m.ymag - offsets.y, m.zmag - offsets.z, attitude.roll, attitude.pitch, gps_heading)) - print("Extracted %u data points" % len(data)) - print("Current offsets: %s" % offsets) - ofs2 = fit_data(data) - print("Declination estimate: %.1f" % ofs2[-1]) - new_offsets = vec3(ofs2[0], ofs2[1], ofs2[2]) - a = [[ofs2[3], ofs2[4], ofs2[5]], - [ofs2[6], ofs2[7], ofs2[8]], - [ofs2[9], ofs2[10], ofs2[11]]] - print(a) - print("New offsets : %s" % new_offsets) - -total = 0.0 -for filename in args.logs: - magfit(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_motors.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_motors.py deleted file mode 100755 index 738c0384d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/magfit_motors.py +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env python - -''' -fit best estimate of magnetometer offsets, trying to take into account motor interference -''' - -import sys, time, os, math - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps",dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--condition",dest="condition", default=None, help="select packets by condition") -parser.add_argument("--noise", type=float, default=0, help="noise to add") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil -from pymavlink.rotmat import Vector3 - - -def noise(): - '''a noise vector''' - from random import gauss - v = Vector3(gauss(0, 1), gauss(0, 1), gauss(0, 1)) - v.normalize() - return v * args.noise - -def select_data(data): - ret = [] - counts = {} - for d in data: - (mag,motor) = d - key = "%u:%u:%u" % (mag.x/20,mag.y/20,mag.z/20) - if key in counts: - counts[key] += 1 - else: - counts[key] = 1 - if counts[key] < 3: - ret.append(d) - print(len(data), len(ret)) - return ret - -def radius(d, offsets, motor_ofs): - '''return radius give data point and offsets''' - (mag, motor) = d - return (mag + offsets + motor*motor_ofs).length() - -def radius_cmp(a, b, offsets, motor_ofs): - '''return radius give data point and offsets''' - diff = radius(a, offsets, motor_ofs) - radius(b, offsets, motor_ofs) - if diff > 0: - return 1 - if diff < 0: - return -1 - return 0 - -def sphere_error(p, data): - from scipy import sqrt - x,y,z,mx,my,mz,r = p - ofs = Vector3(x,y,z) - motor_ofs = Vector3(mx,my,mz) - ret = [] - for d in data: - (mag,motor) = d - err = r - radius((mag,motor), ofs, motor_ofs) - ret.append(err) - return ret - -def fit_data(data): - import numpy, scipy - from scipy import optimize - - p0 = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - p1, ier = optimize.leastsq(sphere_error, p0[:], args=(data)) - if not ier in [1, 2, 3, 4]: - raise RuntimeError("Unable to find solution") - return (Vector3(p1[0], p1[1], p1[2]), Vector3(p1[3], p1[4], p1[5]), p1[6]) - -def magfit(logfile): - '''find best magnetometer offset fit to a log file''' - - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps) - - data = [] - - last_t = 0 - offsets = Vector3(0,0,0) - motor_ofs = Vector3(0,0,0) - motor = 0.0 - - # now gather all the data - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - break - if m.get_type() == "PARAM_VALUE" and m.param_id == "RC3_MIN": - rc3_min = float(m.param_value) - if m.get_type() == "SENSOR_OFFSETS": - # update current offsets - offsets = Vector3(m.mag_ofs_x, m.mag_ofs_y, m.mag_ofs_z) - if m.get_type() == "SERVO_OUTPUT_RAW": - motor_pwm = m.servo1_raw + m.servo2_raw + m.servo3_raw + m.servo4_raw - motor_pwm *= 0.25 - rc3_min = mlog.param('RC3_MIN', 1100) - rc3_max = mlog.param('RC3_MAX', 1900) - motor = (motor_pwm - rc3_min) / (rc3_max - rc3_min) - if motor > 1.0: - motor = 1.0 - if motor < 0.0: - motor = 0.0 - if m.get_type() == "RAW_IMU": - mag = Vector3(m.xmag, m.ymag, m.zmag) - # add data point after subtracting the current offsets - data.append((mag - offsets + noise(), motor)) - - print("Extracted %u data points" % len(data)) - print("Current offsets: %s" % offsets) - - data = select_data(data) - - # do an initial fit with all data - (offsets, motor_ofs, field_strength) = fit_data(data) - - for count in range(3): - # sort the data by the radius - data.sort(lambda a,b : radius_cmp(a,b,offsets,motor_ofs)) - - print("Fit %u : %s %s field_strength=%6.1f to %6.1f" % ( - count, offsets, motor_ofs, - radius(data[0], offsets, motor_ofs), radius(data[-1], offsets, motor_ofs))) - - # discard outliers, keep the middle 3/4 - data = data[len(data)/8:-len(data)/8] - - # fit again - (offsets, motor_ofs, field_strength) = fit_data(data) - - print("Final : %s %s field_strength=%6.1f to %6.1f" % ( - offsets, motor_ofs, - radius(data[0], offsets, motor_ofs), radius(data[-1], offsets, motor_ofs))) - print("mavgraph.py '%s' 'mag_field(RAW_IMU)' 'mag_field_motors(RAW_IMU,SENSOR_OFFSETS,(%f,%f,%f),SERVO_OUTPUT_RAW,(%f,%f,%f))'" % ( - filename, - offsets.x,offsets.y,offsets.z, - motor_ofs.x, motor_ofs.y, motor_ofs.z)) - -total = 0.0 -for filename in args.logs: - magfit(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavextract.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavextract.py deleted file mode 100755 index bc33871be..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavextract.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python - -''' -extract one mode type from a log -''' - -import sys, time, os, struct - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) - -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--robust", action='store_true', help="Enable robust parsing (skip over bad data)") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--mode", default='auto', help="mode to extract") -parser.add_argument("--link", default=None, type=int, help="only extract specific comms link") -parser.add_argument("logs", metavar="LOG", nargs="+") -args = parser.parse_args() - -from pymavlink import mavutil - -def older_message(m, lastm): - '''return true if m is older than lastm by timestamp''' - atts = {'time_boot_ms' : 1.0e-3, - 'time_unix_usec' : 1.0e-6, - 'time_usec' : 1.0e-6} - for a in atts.keys(): - if hasattr(m, a): - mul = atts[a] - t1 = m.getattr(a) * mul - t2 = lastm.getattr(a) * mul - if t2 >= t1 and t2 - t1 < 60: - return True - return False - -def process(filename): - '''process one logfile''' - print("Processing %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps, - robust_parsing=args.robust) - - - ext = os.path.splitext(filename)[1] - isbin = ext in ['.bin', '.BIN'] - islog = ext in ['.log', '.LOG'] - output = None - count = 1 - dirname = os.path.dirname(filename) - - if isbin or islog: - extension = "bin" - else: - extension = "tlog" - - file_header = '' - - messages = [] - - # we allow a list of modes that map to one mode number. This allows for --mode=AUTO,RTL and consider the RTL as part of AUTO - modes = args.mode.upper().split(',') - flightmode = None - - while True: - m = mlog.recv_match() - if m is None: - break - if args.link is not None and m._link != args.link: - continue - - mtype = m.get_type() - if mtype in messages: - if older_message(m, messages[mtype]): - continue - - # we don't use mlog.flightmode as that can be wrong if we are extracting a single link - if mtype == 'HEARTBEAT' and m.get_srcComponent() != mavutil.mavlink.MAV_COMP_ID_GIMBAL and m.type != mavutil.mavlink.MAV_TYPE_GCS: - flightmode = mavutil.mode_string_v10(m).upper() - if mtype == 'MODE': - flightmode = mlog.flightmode - - if (isbin or islog) and m.get_type() in ["FMT", "PARM", "CMD"]: - file_header += m.get_msgbuf() - if (isbin or islog) and m.get_type() == 'MSG' and m.Message.startswith("Ardu"): - file_header += m.get_msgbuf() - if m.get_type() in ['PARAM_VALUE','MISSION_ITEM']: - timestamp = getattr(m, '_timestamp', None) - file_header += struct.pack('>Q', timestamp*1.0e6) + m.get_msgbuf() - - if not mavutil.evaluate_condition(args.condition, mlog.messages): - continue - - if flightmode in modes: - if output is None: - path = os.path.join(dirname, "%s%u.%s" % (modes[0], count, extension)) - count += 1 - print("Creating %s" % path) - output = open(path, mode='wb') - output.write(file_header) - else: - if output is not None: - output.close() - output = None - - if output and m.get_type() != 'BAD_DATA': - timestamp = getattr(m, '_timestamp', None) - if not isbin: - output.write(struct.pack('>Q', timestamp*1.0e6)) - output.write(m.get_msgbuf()) - -for filename in args.logs: - process(filename) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavfft.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavfft.py deleted file mode 100755 index f166566bb..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavfft.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python - -''' -fit best estimate of magnetometer offsets -''' - -import sys, time, os, math, numpy -import matplotlib.pyplot as plt -import pylab - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--sample-length", type=int, default=0, help="number of samples to run FFT over") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - -def fft(logfile): - '''display fft for raw ACC data in logfile''' - - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename) - - data = {'ACC1.rate' : 1000, - 'ACC2.rate' : 1600, - 'ACC3.rate' : 1000, - 'GYR1.rate' : 1000, - 'GYR2.rate' : 800, - 'GYR3.rate' : 1000} - for acc in ['ACC1','ACC2','ACC3']: - for ax in ['AccX', 'AccY', 'AccZ']: - data[acc+'.'+ax] = [] - for gyr in ['GYR1','GYR2','GYR3']: - for ax in ['GyrX', 'GyrY', 'GyrZ']: - data[gyr+'.'+ax] = [] - - # now gather all the data - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - break - type = m.get_type() - if type.startswith("ACC"): - data[type+'.AccX'].append(m.AccX) - data[type+'.AccY'].append(m.AccY) - data[type+'.AccZ'].append(m.AccZ) - if type.startswith("GYR"): - data[type+'.GyrX'].append(m.GyrX) - data[type+'.GyrY'].append(m.GyrY) - data[type+'.GyrZ'].append(m.GyrZ) - - print("Extracted %u data points" % len(data['ACC1.AccX'])) - - for msg in ['ACC1', 'ACC2', 'ACC3', 'GYR1', 'GYR2', 'GYR3']: - pylab.figure() - - if msg.startswith('ACC'): - prefix = 'Acc' - else: - prefix = 'Gyr' - for axis in ['X', 'Y', 'Z']: - field = msg + '.' + prefix + axis - d = data[field] - if args.sample_length != 0: - d = d[0:args.sample_length] - d = numpy.array(d) - if len(d) == 0: - continue - avg = numpy.sum(d) / len(d) - d -= avg - d_fft = numpy.fft.rfft(d) - freq = numpy.fft.rfftfreq(len(d), 1.0 / data[msg+'.rate']) - pylab.plot( freq, numpy.abs(d_fft), label=field ) - pylab.legend(loc='upper right') - -for filename in args.logs: - fft(filename) - -pylab.show() diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflightmodes.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflightmodes.py deleted file mode 100755 index 94736798f..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflightmodes.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python - -''' -show changes in flight modes -''' - -import sys, time, datetime, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - - -def flight_modes(logfile): - '''show flight modes for a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename) - - mode = "" - previous_mode = "" - mode_start_timestamp = -1 - time_in_mode = {} - previous_percent = -1 - seconds_per_percent = -1 - - filesize = os.path.getsize(filename) - - while True: - m = mlog.recv_match(type=['SYS_STATUS','HEARTBEAT','MODE'], - condition='MAV.flightmode!="%s"' % mlog.flightmode) - if m is None: - break - print('%s MAV.flightmode=%-12s (MAV.timestamp=%u %u%%)' % ( - time.asctime(time.localtime(m._timestamp)), - mlog.flightmode, - m._timestamp, mlog.percent)) - - mode = mlog.flightmode - if (mode not in time_in_mode): - time_in_mode[mode] = 0 - - if (mode_start_timestamp == -1): - mode_start_timestamp = m._timestamp - elif (previous_mode != "" and previous_mode != mode): - time_in_mode[previous_mode] = time_in_mode[previous_mode] + (m._timestamp - mode_start_timestamp) - - #figure out how many seconds per percentage point so I can - #caculate how many seconds for the final mode - if (seconds_per_percent == -1 and previous_percent != -1 - and previous_percent != mlog.percent): - seconds_per_percent = (m._timestamp - mode_start_timestamp) / (mlog.percent - previous_percent) - - mode_start_timestamp = m._timestamp - - previous_mode = mode - previous_percent = mlog.percent - - #put a whitespace line before the per-mode report - print() - print("Time per mode:") - - #need to get the time in the final mode - if (seconds_per_percent != -1): - seconds_remaining = (100.0 - previous_percent) * seconds_per_percent - - time_in_mode[previous_mode] = time_in_mode[previous_mode] + seconds_remaining - - total_flight_time = 0 - for key, value in time_in_mode.iteritems(): - total_flight_time = total_flight_time + value - - for key, value in time_in_mode.iteritems(): - print('%-12s %s %.2f%%' % (key, str(datetime.timedelta(seconds=int(value))), (value / total_flight_time) * 100.0)) - else: - #can't print time in mode if only one mode during flight - print(previous_mode, " 100% of flight time") - -for filename in args.logs: - flight_modes(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflighttime.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflighttime.py deleted file mode 100755 index 6243b8732..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavflighttime.py +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env python - -''' -work out total flight time for a mavlink log -''' - -import sys, time, os, glob - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--condition", default=None, help="condition for packets") -parser.add_argument("--groundspeed", type=float, default=3.0, help="groundspeed threshold") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil -from pymavlink.mavextra import distance_two - - -def flight_time(logfile): - '''work out flight time for a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename) - - in_air = False - start_time = 0.0 - total_time = 0.0 - total_dist = 0.0 - t = None - last_msg = None - last_time_usec = None - - while True: - m = mlog.recv_match(type=['GPS','GPS_RAW_INT'], condition=args.condition) - if m is None: - if in_air: - total_time += time.mktime(t) - start_time - if total_time > 0: - print("Flight time : %u:%02u" % (int(total_time)/60, int(total_time)%60)) - return (total_time, total_dist) - if m.get_type() == 'GPS_RAW_INT': - groundspeed = m.vel*0.01 - status = m.fix_type - time_usec = m.time_usec - else: - groundspeed = m.Spd - status = m.Status - time_usec = m.TimeUS - if status < 3: - continue - t = time.localtime(m._timestamp) - if groundspeed > args.groundspeed and not in_air: - print("In air at %s (percent %.0f%% groundspeed %.1f)" % (time.asctime(t), mlog.percent, groundspeed)) - in_air = True - start_time = time.mktime(t) - elif groundspeed < args.groundspeed and in_air: - print("On ground at %s (percent %.1f%% groundspeed %.1f time=%.1f seconds)" % ( - time.asctime(t), mlog.percent, groundspeed, time.mktime(t) - start_time)) - in_air = False - total_time += time.mktime(t) - start_time - - if last_msg is None or time_usec > last_time_usec or time_usec+30e6 < last_time_usec: - if last_msg is not None: - total_dist += distance_two(last_msg, m) - last_msg = m - last_time_usec = time_usec - return (total_time, total_dist) - -total_time = 0.0 -total_dist = 0.0 -for filename in args.logs: - for f in glob.glob(filename): - (ftime, fdist) = flight_time(f) - total_time += ftime - total_dist += fdist - -print("Total time in air: %u:%02u" % (int(total_time)/60, int(total_time)%60)) -print("Total distance travelled: %.1f meters" % total_dist) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgen.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgen.py deleted file mode 100755 index 6962da6ba..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgen.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python - -''' -parse a MAVLink protocol XML file and generate a python implementation - -Copyright Andrew Tridgell 2011 -Released under GNU GPL version 3 or later - -''' - -# allow running mavgen from within the tree without installing -if __name__ == "__main__" and __package__ is None: - from os import sys, path - sys.path.insert(0, path.dirname(path.dirname(path.dirname(path.abspath(__file__))))) - -from pymavlink.generator import mavgen -from pymavlink.generator import mavparse - -from argparse import ArgumentParser - -parser = ArgumentParser(description="This tool generate implementations from MAVLink message definitions") -parser.add_argument("-o", "--output", default="mavlink", help="output directory.") -parser.add_argument("--lang", dest="language", choices=mavgen.supportedLanguages, default=mavgen.DEFAULT_LANGUAGE, help="language of generated code [default: %(default)s]") -parser.add_argument("--wire-protocol", choices=[mavparse.PROTOCOL_0_9, mavparse.PROTOCOL_1_0, mavparse.PROTOCOL_2_0], default=mavgen.DEFAULT_WIRE_PROTOCOL, help="MAVLink protocol version. [default: %(default)s]") -parser.add_argument("--no-validate", action="store_false", dest="validate", default=mavgen.DEFAULT_VALIDATE, help="Do not perform XML validation. Can speed up code generation if XML files are known to be correct.") -parser.add_argument("--error-limit", default=mavgen.DEFAULT_ERROR_LIMIT, help="maximum number of validation errors to display") -parser.add_argument("definitions", metavar="XML", nargs="+", help="MAVLink definitions") -args = parser.parse_args() - -mavgen.mavgen(args, args.definitions) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgpslock.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgpslock.py deleted file mode 100755 index c5fac1c3a..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgpslock.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python - -''' -show GPS lock events in a MAVLink log -''' - -import sys, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--condition", default=None, help="condition for packets") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - - -def lock_time(logfile): - '''work out gps lock times for a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename) - - locked = False - start_time = 0.0 - total_time = 0.0 - t = None - m = mlog.recv_match(type=['GPS_RAW_INT','GPS_RAW'], condition=args.condition) - if m is None: - return 0 - - unlock_time = time.mktime(time.localtime(m._timestamp)) - - while True: - m = mlog.recv_match(type=['GPS_RAW_INT','GPS_RAW'], condition=args.condition) - if m is None: - if locked: - total_time += time.mktime(t) - start_time - if total_time > 0: - print("Lock time : %u:%02u" % (int(total_time)/60, int(total_time)%60)) - return total_time - t = time.localtime(m._timestamp) - if m.fix_type >= 2 and not locked: - print("Locked at %s after %u seconds" % (time.asctime(t), - time.mktime(t) - unlock_time)) - locked = True - start_time = time.mktime(t) - elif m.fix_type == 1 and locked: - print("Lost GPS lock at %s" % time.asctime(t)) - locked = False - total_time += time.mktime(t) - start_time - unlock_time = time.mktime(t) - elif m.fix_type == 0 and locked: - print("Lost protocol lock at %s" % time.asctime(t)) - locked = False - total_time += time.mktime(t) - start_time - unlock_time = time.mktime(t) - return total_time - -total = 0.0 -for filename in args.logs: - total += lock_time(filename) - -print("Total time locked: %u:%02u" % (int(total)/60, int(total)%60)) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgraph.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgraph.py deleted file mode 100755 index cb43cec41..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavgraph.py +++ /dev/null @@ -1,311 +0,0 @@ -#!/usr/bin/env python -''' -graph a MAVLink log file -Andrew Tridgell August 2011 -''' - -import sys, struct, time, os, datetime -import math, re -import matplotlib -from math import * - -try: - from pymavlink.mavextra import * -except: - print("WARNING: Numpy missing, mathematical notation will not be supported.") - -# cope with rename of raw_input in python3 -try: - input = raw_input -except NameError: - pass - -colourmap = { - 'apm' : { - 'MANUAL' : (1.0, 0, 0), - 'AUTO' : ( 0, 1.0, 0), - 'LOITER' : ( 0, 0, 1.0), - 'FBWA' : (1.0, 0.5, 0), - 'RTL' : ( 1, 0, 0.5), - 'STABILIZE' : (0.5, 1.0, 0), - 'LAND' : ( 0, 1.0, 0.5), - 'STEERING' : (0.5, 0, 1.0), - 'HOLD' : ( 0, 0.5, 1.0), - 'ALT_HOLD' : (1.0, 0.5, 0.5), - 'CIRCLE' : (0.5, 1.0, 0.5), - 'POSITION' : (1.0, 0.0, 1.0), - 'GUIDED' : (0.5, 0.5, 1.0), - 'ACRO' : (1.0, 1.0, 0), - 'CRUISE' : ( 0, 1.0, 1.0) - }, - 'px4' : { - 'MANUAL' : (1.0, 0, 0), - 'SEATBELT' : ( 0.5, 0.5, 0), - 'EASY' : ( 0, 1.0, 0), - 'AUTO' : ( 0, 0, 1.0), - 'UNKNOWN' : ( 1.0, 1.0, 1.0) - } - } - -edge_colour = (0.1, 0.1, 0.1) - -lowest_x = None -highest_x = None - -def plotit(x, y, fields, colors=[]): - '''plot a set of graphs using date for x axis''' - global lowest_x, highest_x - pylab.ion() - fig = pylab.figure(num=1, figsize=(12,6)) - ax1 = fig.gca() - ax2 = None - xrange = 0.0 - for i in range(0, len(fields)): - if len(x[i]) == 0: continue - if lowest_x is None or x[i][0] < lowest_x: - lowest_x = x[i][0] - if highest_x is None or x[i][-1] > highest_x: - highest_x = x[i][-1] - if highest_x is None or lowest_x is None: - return - xrange = highest_x - lowest_x - xrange *= 24 * 60 * 60 - formatter = matplotlib.dates.DateFormatter('%H:%M:%S') - interval = 1 - intervals = [ 1, 2, 5, 10, 15, 30, 60, 120, 240, 300, 600, - 900, 1800, 3600, 7200, 5*3600, 10*3600, 24*3600 ] - for interval in intervals: - if xrange / interval < 15: - break - locator = matplotlib.dates.SecondLocator(interval=interval) - if not args.xaxis: - ax1.xaxis.set_major_locator(locator) - ax1.xaxis.set_major_formatter(formatter) - empty = True - ax1_labels = [] - ax2_labels = [] - for i in range(0, len(fields)): - if len(x[i]) == 0: - print("Failed to find any values for field %s" % fields[i]) - continue - if i < len(colors): - color = colors[i] - else: - color = 'red' - (tz, tzdst) = time.tzname - if axes[i] == 2: - if ax2 == None: - ax2 = ax1.twinx() - ax = ax2 - if not args.xaxis: - ax2.xaxis.set_major_locator(locator) - ax2.xaxis.set_major_formatter(formatter) - label = fields[i] - if label.endswith(":2"): - label = label[:-2] - ax2_labels.append(label) - else: - ax1_labels.append(fields[i]) - ax = ax1 - if args.xaxis: - if args.marker is not None: - marker = args.marker - else: - marker = '+' - if args.linestyle is not None: - linestyle = args.linestyle - else: - linestyle = 'None' - ax.plot(x[i], y[i], color=color, label=fields[i], - linestyle=linestyle, marker=marker) - else: - if args.marker is not None: - marker = args.marker - else: - marker = 'None' - if args.linestyle is not None: - linestyle = args.linestyle - else: - linestyle = '-' - ax.plot_date(x[i], y[i], color=color, label=fields[i], - linestyle=linestyle, marker=marker, tz=None) - empty = False - if args.flightmode is not None: - for i in range(len(modes)-1): - c = colourmap[args.flightmode].get(modes[i][1], edge_colour) - ax1.axvspan(modes[i][0], modes[i+1][0], fc=c, ec=edge_colour, alpha=0.1) - c = colourmap[args.flightmode].get(modes[-1][1], edge_colour) - ax1.axvspan(modes[-1][0], ax1.get_xlim()[1], fc=c, ec=edge_colour, alpha=0.1) - if ax1_labels != []: - ax1.legend(ax1_labels,loc=args.legend) - if ax2_labels != []: - ax2.legend(ax2_labels,loc=args.legend2) - if empty: - print("No data to graph") - return - return fig - - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) - -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--planner", action='store_true', help="use planner file format") -parser.add_argument("--condition", default=None, help="select packets by a condition") -parser.add_argument("--labels", default=None, help="comma separated field labels") -parser.add_argument("--legend", default='upper left', help="default legend position") -parser.add_argument("--legend2", default='upper right', help="default legend2 position") -parser.add_argument("--marker", default=None, help="point marker") -parser.add_argument("--linestyle", default=None, help="line style") -parser.add_argument("--xaxis", default=None, help="X axis expression") -parser.add_argument("--multi", action='store_true', help="multiple files with same colours") -parser.add_argument("--zero-time-base", action='store_true', help="use Z time base for DF logs") -parser.add_argument("--flightmode", default=None, - help="Choose the plot background according to the active flight mode of the specified type, e.g. --flightmode=apm for ArduPilot or --flightmode=px4 for PX4 stack logs. Cannot be specified with --xaxis.") -parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") -parser.add_argument("--output", default=None, help="provide an output format") -parser.add_argument("--timeshift", type=float, default=0, help="shift time on first graph in seconds") -parser.add_argument("logs_fields", metavar="", nargs="+") -args = parser.parse_args() - -from pymavlink import mavutil - -if args.flightmode is not None and args.xaxis: - print("Cannot request flightmode backgrounds with an x-axis expression") - sys.exit(1) - -if args.flightmode is not None and args.flightmode not in colourmap: - print("Unknown flight controller '%s' in specification of --flightmode" % args.flightmode) - sys.exit(1) - - -if args.output is not None: - matplotlib.use('Agg') - -import pylab - -filenames = [] -fields = [] -for f in args.logs_fields: - if os.path.exists(f): - filenames.append(f) - else: - fields.append(f) -msg_types = set() -multiplier = [] -field_types = [] - -colors = [ 'red', 'green', 'blue', 'orange', 'olive', 'black', 'grey', 'yellow', 'brown', 'darkcyan', 'cornflowerblue', 'darkmagenta', 'deeppink', 'darkred'] - -# work out msg types we are interested in -x = [] -y = [] -modes = [] -axes = [] -first_only = [] -re_caps = re.compile('[A-Z_][A-Z0-9_]+') -for f in fields: - caps = set(re.findall(re_caps, f)) - msg_types = msg_types.union(caps) - field_types.append(caps) - y.append([]) - x.append([]) - axes.append(1) - first_only.append(False) - -def add_data(t, msg, vars, flightmode): - '''add some data''' - mtype = msg.get_type() - if args.flightmode is not None and (len(modes) == 0 or modes[-1][1] != flightmode): - modes.append((t, flightmode)) - if mtype not in msg_types: - return - for i in range(0, len(fields)): - if mtype not in field_types[i]: - continue - f = fields[i] - if f.endswith(":2"): - axes[i] = 2 - f = f[:-2] - if f.endswith(":1"): - first_only[i] = True - f = f[:-2] - v = mavutil.evaluate_expression(f, vars) - if v is None: - continue - if args.xaxis is None: - xv = t - else: - xv = mavutil.evaluate_expression(args.xaxis, vars) - if xv is None: - continue - y[i].append(v) - x[i].append(xv) - -def process_file(filename, timeshift): - '''process one file''' - print("Processing %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps, zero_time_base=args.zero_time_base, dialect=args.dialect) - vars = {} - - while True: - msg = mlog.recv_match(args.condition) - if msg is None: break - try: - tdays = matplotlib.dates.date2num(datetime.datetime.fromtimestamp(msg._timestamp+timeshift)) - except ValueError: - # this can happen if the log is corrupt - # ValueError: year is out of range - break - add_data(tdays, msg, mlog.messages, mlog.flightmode) - -if len(filenames) == 0: - print("No files to process") - sys.exit(1) - -if args.labels is not None: - labels = args.labels.split(',') - if len(labels) != len(fields)*len(filenames): - print("Number of labels (%u) must match number of fields (%u)" % ( - len(labels), len(fields)*len(filenames))) - sys.exit(1) -else: - labels = None - -timeshift = args.timeshift - -for fi in range(0, len(filenames)): - f = filenames[fi] - process_file(f, timeshift) - timeshift = 0 - for i in range(0, len(x)): - if first_only[i] and fi != 0: - x[i] = [] - y[i] = [] - if labels: - lab = labels[fi*len(fields):(fi+1)*len(fields)] - else: - lab = fields[:] - if args.multi: - col = colors[:] - else: - col = colors[fi*len(fields):] - fig = plotit(x, y, lab, colors=col) - for i in range(0, len(x)): - x[i] = [] - y[i] = [] -if args.output is None: - pylab.show() - pylab.draw() - input('press enter to exit....') -else: - fname, fext = os.path.splitext(args.output) - if fext == '.html': - import mpld3 - html = mpld3.fig_to_html(fig) - f_out = open(args.output, 'w') - f_out.write(html) - f_out.close() - else: - pylab.legend(loc=2,prop={'size':8}) - pylab.savefig(args.output, bbox_inches='tight', dpi=200) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavkml.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavkml.py deleted file mode 100755 index cf2cfb5cd..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavkml.py +++ /dev/null @@ -1,200 +0,0 @@ -#!/usr/bin/python - -''' -simple kml export for logfiles -Thomas Gubler -''' - -from argparse import ArgumentParser -import simplekml -from pymavlink.mavextra import * -from pymavlink import mavutil -import time -import re - -mainstate_field = 'STAT.MainState' -position_field_types = [ # Order must be lon, lat, alt to match KML - ['Lon', 'Lat', 'Alt'], # PX4 - ['Lng', 'Lat', 'Alt'] # APM > 3 -] - -colors = [simplekml.Color.red, simplekml.Color.green, simplekml.Color.blue, - simplekml.Color.violet, simplekml.Color.yellow, simplekml.Color.orange, - simplekml.Color.burlywood, simplekml.Color.azure, simplekml.Color.lightblue, - simplekml.Color.lawngreen, simplekml.Color.indianred, simplekml.Color.hotpink] - -kml = simplekml.Kml() -kml_linestrings = [] - - -def add_to_linestring(position_data, kml_linestring): - '''add a point to the kml file''' - global kml - - # add altitude offset - position_data[2] += float(args.aoff) - kml_linestring.coords.addcoordinates([position_data]) - - -def save_kml(filename): - '''saves the kml file''' - global kml - kml.save(filename) - print("KML written to %s" % filename) - - -def add_data(t, msg, msg_types, vars, fields, field_types, position_field_type): - '''add some data''' - - mtype = msg.get_type() - if mtype not in msg_types: - return - - for i in range(0, len(fields)): - if mtype not in field_types[i]: - continue - f = fields[i] - v = mavutil.evaluate_expression(f, vars) - if v is None: - continue - - # Check if we have position or state information - if f == mainstate_field: - # Handle main state information - # add_data.mainstate_current >= 0 : avoid starting a new linestring - # when mainstate comes after the first position data in the log - if (v != add_data.mainstate_current and - add_data.mainstate_current >= 0): - add_data.new_linestring = True - add_data.mainstate_current = v - else: - # Handle position information - # make sure lon, lat, alt is saved in the correct order in - # position_data (the same as in position_field_types) - add_data.position_data[i] = v - - # check if we have a full gps measurement - gps_measurement_ready = True - for v in add_data.position_data: - if v is None: - gps_measurement_ready = False - if not gps_measurement_ready: - return - - # if new line string is needed (because of state change): add previous - # linestring to kml_linestrings list, add a new linestring to the kml - # multigeometry and append to the new linestring - # else: append to current linestring - if add_data.new_linestring: - if add_data.current_kml_linestring is not None: - kml_linestrings.append(add_data.current_kml_linestring) - - name = "".join([args.source, ":", str(add_data.mainstate_current)]) - add_data.current_kml_linestring = \ - kml.newlinestring(name=name, altitudemode='absolute') - - # set rendering options - if args.extrude: - add_data.current_kml_linestring.extrude = 1 - add_data.current_kml_linestring.style.linestyle.color = \ - colors[max([add_data.mainstate_current, 0])] - - add_data.new_linestring = False - - add_to_linestring(add_data.position_data, - add_data.current_kml_linestring) - add_data.last_time = msg._timestamp - - else: - if (msg._timestamp - add_data.last_time) > 0.1: - add_to_linestring(add_data.position_data, - add_data.current_kml_linestring) - add_data.last_time = msg._timestamp - - # reset position_data - add_data.position_data = [None for n in position_field_type] - - -def process_file(filename, source): - '''process one file''' - print("Processing %s" % filename) - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps) - - position_field_type = sniff_field_spelling(mlog, source) - - # init fields and field_types lists - fields = [args.source + "." + s for s in position_field_type] - fields.append(mainstate_field) - field_types = [] - - msg_types = set() - re_caps = re.compile('[A-Z_][A-Z0-9_]+') - - for f in fields: - caps = set(re.findall(re_caps, f)) - msg_types = msg_types.union(caps) - field_types.append(caps) - - add_data.new_linestring = True - add_data.mainstate_current = -1 - add_data.current_kml_linestring = None - add_data.position_data = [None for n in position_field_type] - add_data.last_time = 0 - - while True: - msg = mlog.recv_match(args.condition) - if msg is None: - break - tdays = (msg._timestamp - time.timezone) / (24 * 60 * 60) - tdays += 719163 # pylab wants it since 0001-01-01 - add_data(tdays, msg, msg_types, mlog.messages, fields, field_types, position_field_type) - - -def sniff_field_spelling(mlog, source): - '''attempt to detect whether APM or PX4 attributes names are in use''' - position_field_type_default = position_field_types[0] # Default to PX4 spelling - - msg = mlog.recv_match(source) - mlog._rewind() # Unfortunately it's either call this or return a mutated object - - position_field_selection = [spelling for spelling in position_field_types if hasattr(msg, spelling[0])] - - return position_field_selection[0] if position_field_selection else position_field_type_default - - -if __name__ == '__main__': - parser = ArgumentParser(description=__doc__) - parser.add_argument("--no-timestamps", dest="notimestamps", - action='store_true', help="Log doesn't have timestamps") - parser.add_argument("--condition", default=None, - help="select packets by a condition [default: %(default)s]") - parser.add_argument("--aoff", default=0., - help="Altitude offset for paths that go through the" - "ground in google earth [default: %(default)s]") - parser.add_argument("-o", "--output", dest="filename_out", default="mav.kml", - help="Output filename [default: %(default)s] ") - parser.add_argument("-s", "--source", default="GPOS", - help="Select position data source" - "(GPOS or GPS) [default: %(default)s]") - parser.add_argument("-e", "--extrude", default=False, - action='store_true', - help="Extrude paths to ground [default: %(default)s]") - parser.add_argument("logs", metavar="LOG", nargs="+") - - args = parser.parse_args() - - filenames = [] - for f in args.logs: - if os.path.exists(f): - filenames.append(f) - - if len(filenames) == 0: - print("No files to process") - sys.exit(1) - - for fi in range(0, len(filenames)): - f = filenames[fi] - process_file(f, args.source) - - save_kml(args.filename_out) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavlogdump.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavlogdump.py deleted file mode 100755 index b72bb199c..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavlogdump.py +++ /dev/null @@ -1,228 +0,0 @@ -#!/usr/bin/env python - -''' -example program that dumps a Mavlink log file. The log file is -assumed to be in the format that qgroundcontrol uses, which consists -of a series of MAVLink packets, each with a 64 bit timestamp -header. The timestamp is in microseconds since 1970 (unix epoch) -''' - -import sys, time, os, struct, json, fnmatch - -try: - from pymavlink.mavextra import * -except: - print("WARNING: Numpy missing, mathematical notation will not be supported..") - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) - -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--planner", action='store_true', help="use planner file format") -parser.add_argument("--robust", action='store_true', help="Enable robust parsing (skip over bad data)") -parser.add_argument("-f", "--follow", action='store_true', help="keep waiting for more data at end of file") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("-q", "--quiet", action='store_true', help="don't display packets") -parser.add_argument("-o", "--output", default=None, help="output matching packets to give file") -parser.add_argument("-p", "--parms", action='store_true', help="preserve parameters in output with -o") -parser.add_argument("--format", default=None, help="Change the output format between 'standard', 'json', and 'csv'. For the CSV output, you must supply types that you want.") -parser.add_argument("--csv_sep", dest="csv_sep", default=",", help="Select the delimiter between columns for the output CSV file. Use 'tab' to specify tabs. Only applies when --format=csv") -parser.add_argument("--types", default=None, help="types of messages (comma separated with wildcard)") -parser.add_argument("--nottypes", default=None, help="types of messages not to include (comma separated with wildcard)") -parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") -parser.add_argument("--zero-time-base", action='store_true', help="use Z time base for DF logs") -parser.add_argument("--no-bad-data", action='store_true', help="Don't output corrupted messages") -parser.add_argument("--show-source", action='store_true', help="Show source system ID and component ID") -parser.add_argument("--show-seq", action='store_true', help="Show sequence numbers") -parser.add_argument("--source-system", type=int, default=None, help="filter by source system ID") -parser.add_argument("--source-component", type=int, default=None, help="filter by source component ID") -parser.add_argument("--link", type=int, default=None, help="filter by comms link ID") -parser.add_argument("log", metavar="LOG") -args = parser.parse_args() - -import inspect - -from pymavlink import mavutil - - -filename = args.log -mlog = mavutil.mavlink_connection(filename, planner_format=args.planner, - notimestamps=args.notimestamps, - robust_parsing=args.robust, - dialect=args.dialect, - zero_time_base=args.zero_time_base) - -output = None -if args.output: - output = open(args.output, mode='wb') - -types = args.types -if types is not None: - types = types.split(',') - -nottypes = args.nottypes -if nottypes is not None: - nottypes = nottypes.split(',') - -ext = os.path.splitext(filename)[1] -isbin = ext in ['.bin', '.BIN'] -islog = ext in ['.log', '.LOG'] # NOTE: "islog" does not mean a tlog - -if args.csv_sep == "tab": - args.csv_sep = "\t" - -def match_type(mtype, patterns): - '''return True if mtype matches pattern''' - for p in patterns: - if fnmatch.fnmatch(mtype, p): - return True - return False - -# Write out a header row as we're outputting in CSV format. -fields = ['timestamp'] -offsets = {} -if islog and args.format == 'csv': # we know our fields from the get-go - try: - currentOffset = 1 # Store how many fields in we are for each message. - for type in types: - try: - typeClass = "MAVLink_{0}_message".format(type.lower()) - fields += [type + '.' + x for x in inspect.getargspec(getattr(mavutil.mavlink, typeClass).__init__).args[1:]] - offsets[type] = currentOffset - currentOffset += len(fields) - except IndexError: - quit() - except TypeError: - print("You must specify a list of message types if outputting CSV format via the --types argument.") - exit() - - # The first line output are names for all columns - csv_out = ["" for x in fields] - print(','.join(fields)) - -if isbin and args.format == 'csv': # need to accumulate columns from message - if types is None or len(types) != 1: - print("Need exactly one type when dumping CSV from bin file") - quit() - -# Track the last timestamp value. Used for compressing data for the CSV output format. -last_timestamp = None - -# Keep track of data from the current timestep. If the following timestep has the same data, it's stored in here as well. Output should therefore have entirely unique timesteps. -while True: - m = mlog.recv_match(blocking=args.follow) - if m is None: - # FIXME: Make sure to output the last CSV message before dropping out of this loop - break - if isbin and m.get_type() == "FMT" and args.format == 'csv': - if m.Name == types[0]: - fields += m.Columns.split(',') - csv_out = ["" for x in fields] - print(','.join(fields)) - - if output is not None: - if (isbin or islog) and m.get_type() == "FMT": - output.write(m.get_msgbuf()) - continue - if (isbin or islog) and (m.get_type() == "PARM" and args.parms): - output.write(m.get_msgbuf()) - continue - if m.get_type() == 'PARAM_VALUE' and args.parms: - timestamp = getattr(m, '_timestamp', None) - output.write(struct.pack('>Q', timestamp*1.0e6) + m.get_msgbuf()) - continue - - if not mavutil.evaluate_condition(args.condition, mlog.messages): - continue - if args.source_system is not None and args.source_system != m.get_srcSystem(): - continue - if args.source_component is not None and args.source_component != m.get_srcComponent(): - continue - if args.link is not None and args.link != m._link: - continue - - if types is not None and m.get_type() != 'BAD_DATA' and not match_type(m.get_type(), types): - continue - - if nottypes is not None and match_type(m.get_type(), nottypes): - continue - - # Ignore BAD_DATA messages is the user requested or if they're because of a bad prefix. The - # latter case is normally because of a mismatched MAVLink version. - if m.get_type() == 'BAD_DATA' and (args.no_bad_data is True or m.reason == "Bad prefix"): - continue - - # Grab the timestamp. - timestamp = getattr(m, '_timestamp', 0.0) - - # If we're just logging, pack in the timestamp and data into the output file. - if output: - if not (isbin or islog): - output.write(struct.pack('>Q', timestamp*1.0e6)) - try: - output.write(m.get_msgbuf()) - except Exception as ex: - print("Failed to write msg %s" % m.get_type()) - pass - - # If quiet is specified, don't display output to the terminal. - if args.quiet: - continue - - # If JSON was ordered, serve it up. Split it nicely into metadata and data. - if args.format == 'json': - # Format our message as a Python dict, which gets us almost to proper JSON format - data = m.to_dict() - - # Remove the mavpackettype value as we specify that later. - del data['mavpackettype'] - - # Also, if it's a BAD_DATA message, make it JSON-compatible by removing array objects - if 'data' in data and type(data['data']) is not dict: - data['data'] = list(data['data']) - - # Prepare the message as a single object with 'meta' and 'data' keys holding - # the message's metadata and actual data respectively. - outMsg = {"meta": {"type": m.get_type(), "timestamp": timestamp}, "data": data} - - # Now print out this object with stringified properly. - print(json.dumps(outMsg)) - # CSV format outputs columnar data with a user-specified delimiter - elif args.format == 'csv': - data = m.to_dict() - type = m.get_type() - - # If this message has a duplicate timestamp, copy its data into the existing data list. Also - # do this if it's the first message encountered. - if timestamp == last_timestamp or last_timestamp is None: - if isbin: - newData = [str(data[y]) if y != "timestamp" else "" for y in fields] - else: - newData = [str(data[y.split('.')[-1]]) if y.split('.')[0] == type and y.split('.')[-1] in data else "" for y in fields] - - for i, val in enumerate(newData): - if val: - csv_out[i] = val - - # Otherwise if this is a new timestamp, print out the old output data, and store the current message for later output. - else: - csv_out[0] = "{:.8f}".format(last_timestamp) - print(args.csv_sep.join(csv_out)) - if isbin: - csv_out = [str(data[y]) if y != "timestamp" else "" for y in fields] - else: - csv_out = [str(data[y.split('.')[-1]]) if y.split('.')[0] == type and y.split('.')[-1] in data else "" for y in fields] - # Otherwise we output in a standard Python dict-style format - else: - s = "%s.%02u: %s" % (time.strftime("%Y-%m-%d %H:%M:%S", - time.localtime(timestamp)), - int(timestamp*100.0)%100, m) - if args.show_source: - s += " srcSystem=%u srcComponent=%u" % (m.get_srcSystem(), m.get_srcComponent()) - if args.show_seq: - s += " seq=%u" % m.get_seq() - print(s) - - # Update our last timestamp value. - last_timestamp = timestamp - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavloss.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavloss.py deleted file mode 100755 index 8e88a764d..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavloss.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python - -''' -show MAVLink packet loss -''' - -import sys, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--planner", action='store_true', help="use planner file format") -parser.add_argument("--robust", action='store_true', help="Enable robust parsing (skip over bad data)") -parser.add_argument("--condition", default=None, help="condition for packets") -parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - - -def mavloss(logfile): - '''work out signal loss times for a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename, - planner_format=args.planner, - notimestamps=args.notimestamps, - dialect=args.dialect, - robust_parsing=args.robust) - - # Track the reasons for MAVLink parsing errors and print them all out at the end. - reason_ids = set() - reasons = [] - - while True: - m = mlog.recv_match(condition=args.condition) - - # Stop parsing the file once we've reached the end - if m is None: - break - - # Save the parsing failure reason for this message if it's a new one - if m.get_type() == 'BAD_DATA': - reason_id = ''.join(m.reason.split(' ')[0:3]) - if reason_id not in reason_ids: - reason_ids.add(reason_id) - reasons.append(m.reason) - - # Print out the final packet loss results - print("%u packets, %u lost %.1f%%" % ( - mlog.mav_count, mlog.mav_loss, mlog.packet_loss())) - - # Also print out the reasons why losses occurred - if len(reasons) > 0: - print("Packet loss at least partially attributed to the following:") - for r in reasons: - print(" * " + r) - -for filename in args.logs: - mavloss(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavmission.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavmission.py deleted file mode 100755 index c1d2f9063..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavmission.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python - -''' -extract mavlink mission from log -''' - -import sys, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--output", default='mission.txt', help="output file") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil, mavwp - -parms = {} - -def mavmission(logfile): - '''extract mavlink mission''' - mlog = mavutil.mavlink_connection(filename) - - wp = mavwp.MAVWPLoader() - - while True: - m = mlog.recv_match(type=['MISSION_ITEM','CMD','WAYPOINT']) - if m is None: - break - if m.get_type() == 'CMD': - m = mavutil.mavlink.MAVLink_mission_item_message(0, - 0, - m.CNum, - mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT, - m.CId, - 0, 1, - m.Prm1, m.Prm2, m.Prm3, m.Prm4, - m.Lat, m.Lng, m.Alt) - if m.current >= 2: - continue - - while m.seq > wp.count(): - print("Adding dummy WP %u" % wp.count()) - wp.set(m, wp.count()) - wp.set(m, m.seq) - wp.save(args.output) - print("Saved %u waypoints to %s" % (wp.count(), args.output)) - - -total = 0.0 -for filename in args.logs: - mavmission(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparmdiff.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparmdiff.py deleted file mode 100755 index 040c74b06..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparmdiff.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python -''' -compare two MAVLink parameter files -''' - -import sys, os - -from pymavlink import mavutil, mavparm - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("file1", metavar="FILE1") -parser.add_argument("file2", metavar="FILE2") -args = parser.parse_args() - -file1 = args.file1 -file2 = args.file2 - -p1 = mavparm.MAVParmDict() -p2 = mavparm.MAVParmDict() -p1.load(file2) -p1.diff(file1) - diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparms.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparms.py deleted file mode 100755 index f3ef623ea..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavparms.py +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python - -''' -extract mavlink parameter values -''' - -import sys, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("-c", "--changes", dest="changesOnly", default=False, action="store_true", help="Show only changes to parameters.") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - -parms = {} - -def mavparms(logfile): - '''extract mavlink parameters''' - mlog = mavutil.mavlink_connection(filename) - - while True: - try: - m = mlog.recv_match(type=['PARAM_VALUE', 'PARM']) - if m is None: - return - except Exception: - return - if m.get_type() == 'PARAM_VALUE': - pname = str(m.param_id).strip() - value = m.param_value - else: - pname = m.Name - value = m.Value - if len(pname) > 0: - if args.changesOnly is True and pname in parms and parms[pname] != value: - print("%s %-15s %.6f -> %.6f" % (time.asctime(time.localtime(m._timestamp)), pname, parms[pname], value)) - - parms[pname] = value - -total = 0.0 -for filename in args.logs: - mavparms(filename) - -if (args.changesOnly is False): - keys = parms.keys() - keys.sort() - for p in keys: - print("%-15s %.6f" % (p, parms[p])) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavplayback.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavplayback.py deleted file mode 100755 index 0eca78d9b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavplayback.py +++ /dev/null @@ -1,249 +0,0 @@ -#!/usr/bin/env python - -''' -play back a mavlink log as a FlightGear FG NET stream, and as a -realtime mavlink stream - -Useful for visualising flights -''' - -import sys, time, os, struct -import Tkinter - -from pymavlink import fgFDM - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) - -parser.add_argument("--planner", action='store_true', help="use planner file format") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--gpsalt", action='store_true', default=False, help="Use GPS altitude") -parser.add_argument("--mav10", action='store_true', default=False, help="Use MAVLink protocol 1.0") -parser.add_argument("--out", help="MAVLink output port (IP:port)", - action='append', default=['127.0.0.1:14550']) -parser.add_argument("--fgout", action='append', default=['127.0.0.1:5503'], - help="flightgear FDM NET output (IP:port)") -parser.add_argument("--baudrate", type=int, default=57600, help='baud rate') -parser.add_argument("log", metavar="LOG") -args = parser.parse_args() - -if args.mav10: - os.environ['MAVLINK10'] = '1' -from pymavlink import mavutil - -filename = args.log - - -def LoadImage(filename): - '''return an image from the images/ directory''' - app_dir = os.path.dirname(os.path.realpath(__file__)) - path = os.path.join(app_dir, 'images', filename) - return Tkinter.PhotoImage(file=path) - - -class App(): - def __init__(self, filename): - self.root = Tkinter.Tk() - - self.filesize = os.path.getsize(filename) - self.filepos = 0.0 - - self.mlog = mavutil.mavlink_connection(filename, planner_format=args.planner, - robust_parsing=True) - self.mout = [] - for m in args.out: - self.mout.append(mavutil.mavlink_connection(m, input=False, baud=args.baudrate)) - - self.fgout = [] - for f in args.fgout: - self.fgout.append(mavutil.mavudp(f, input=False)) - - self.fdm = fgFDM.fgFDM() - - self.msg = self.mlog.recv_match(condition=args.condition) - if self.msg is None: - sys.exit(1) - self.last_timestamp = getattr(self.msg, '_timestamp') - - self.paused = False - - self.topframe = Tkinter.Frame(self.root) - self.topframe.pack(side=Tkinter.TOP) - - self.frame = Tkinter.Frame(self.root) - self.frame.pack(side=Tkinter.LEFT) - - self.slider = Tkinter.Scale(self.topframe, from_=0, to=1.0, resolution=0.01, - orient=Tkinter.HORIZONTAL, command=self.slew) - self.slider.pack(side=Tkinter.LEFT) - - self.clock = Tkinter.Label(self.topframe,text="") - self.clock.pack(side=Tkinter.RIGHT) - - self.playback = Tkinter.Spinbox(self.topframe, from_=0, to=20, increment=0.1, width=3) - self.playback.pack(side=Tkinter.BOTTOM) - self.playback.delete(0, "end") - self.playback.insert(0, 1) - - self.buttons = {} - self.button('quit', 'gtk-quit.gif', self.frame.quit) - self.button('pause', 'media-playback-pause.gif', self.pause) - self.button('rewind', 'media-seek-backward.gif', self.rewind) - self.button('forward', 'media-seek-forward.gif', self.forward) - self.button('status', 'Status', self.status) - self.flightmode = Tkinter.Label(self.frame,text="") - self.flightmode.pack(side=Tkinter.RIGHT) - - self.next_message() - self.root.mainloop() - - def button(self, name, filename, command): - '''add a button''' - try: - img = LoadImage(filename) - b = Tkinter.Button(self.frame, image=img, command=command) - b.image = img - except Exception: - b = Tkinter.Button(self.frame, text=filename, command=command) - b.pack(side=Tkinter.LEFT) - self.buttons[name] = b - - - def pause(self): - '''pause playback''' - self.paused = not self.paused - - def rewind(self): - '''rewind 10%''' - pos = int(self.mlog.f.tell() - 0.1*self.filesize) - if pos < 0: - pos = 0 - self.mlog.f.seek(pos) - self.find_message() - - def forward(self): - '''forward 10%''' - pos = int(self.mlog.f.tell() + 0.1*self.filesize) - if pos > self.filesize: - pos = self.filesize - 2048 - self.mlog.f.seek(pos) - self.find_message() - - def status(self): - '''show status''' - for m in sorted(self.mlog.messages.keys()): - print(str(self.mlog.messages[m])) - - - - def find_message(self): - '''find the next valid message''' - while True: - self.msg = self.mlog.recv_match(condition=args.condition) - if self.msg is not None and self.msg.get_type() != 'BAD_DATA': - break - if self.mlog.f.tell() > self.filesize - 10: - self.paused = True - break - self.last_timestamp = getattr(self.msg, '_timestamp') - - def slew(self, value): - '''move to a given position in the file''' - if float(value) != self.filepos: - pos = float(value) * self.filesize - self.mlog.f.seek(int(pos)) - self.find_message() - - - def next_message(self): - '''called as each msg is ready''' - - msg = self.msg - if msg is None: - self.paused = True - - if self.paused: - self.root.after(100, self.next_message) - return - - try: - speed = float(self.playback.get()) - except: - speed = 0.0 - timestamp = getattr(msg, '_timestamp') - - now = time.strftime("%H:%M:%S", time.localtime(timestamp)) - self.clock.configure(text=now) - - if speed == 0.0: - self.root.after(200, self.next_message) - else: - self.root.after(int(1000*(timestamp - self.last_timestamp) / speed), self.next_message) - self.last_timestamp = timestamp - - while True: - self.msg = self.mlog.recv_match(condition=args.condition) - if self.msg is None and self.mlog.f.tell() > self.filesize - 10: - self.paused = True - return - if self.msg is not None and self.msg.get_type() != "BAD_DATA": - break - - pos = float(self.mlog.f.tell()) / self.filesize - self.slider.set(pos) - self.filepos = self.slider.get() - - if msg.get_type() != "BAD_DATA": - for m in self.mout: - m.write(msg.get_msgbuf()) - - if msg.get_type() == "GPS_RAW": - self.fdm.set('latitude', msg.lat, units='degrees') - self.fdm.set('longitude', msg.lon, units='degrees') - if args.gpsalt: - self.fdm.set('altitude', msg.alt, units='meters') - - if msg.get_type() == "GPS_RAW_INT": - self.fdm.set('latitude', msg.lat/1.0e7, units='degrees') - self.fdm.set('longitude', msg.lon/1.0e7, units='degrees') - if args.gpsalt: - self.fdm.set('altitude', msg.alt/1.0e3, units='meters') - - if msg.get_type() == "VFR_HUD": - if not args.gpsalt: - self.fdm.set('altitude', msg.alt, units='meters') - self.fdm.set('num_engines', 1) - self.fdm.set('vcas', msg.airspeed, units='mps') - - if msg.get_type() == "ATTITUDE": - self.fdm.set('phi', msg.roll, units='radians') - self.fdm.set('theta', msg.pitch, units='radians') - self.fdm.set('psi', msg.yaw, units='radians') - self.fdm.set('phidot', msg.rollspeed, units='rps') - self.fdm.set('thetadot', msg.pitchspeed, units='rps') - self.fdm.set('psidot', msg.yawspeed, units='rps') - - if msg.get_type() == "RC_CHANNELS_SCALED": - self.fdm.set("right_aileron", msg.chan1_scaled*0.0001) - self.fdm.set("left_aileron", -msg.chan1_scaled*0.0001) - self.fdm.set("rudder", msg.chan4_scaled*0.0001) - self.fdm.set("elevator", msg.chan2_scaled*0.0001) - self.fdm.set('rpm', msg.chan3_scaled*0.01) - - if msg.get_type() == 'STATUSTEXT': - print("APM: %s" % msg.text) - - if msg.get_type() == 'SYS_STATUS': - self.flightmode.configure(text=self.mlog.flightmode) - - if msg.get_type() == "BAD_DATA": - if mavutil.all_printable(msg.data): - sys.stdout.write(msg.data) - sys.stdout.flush() - - if self.fdm.get('latitude') != 0: - for f in self.fgout: - f.write(self.fdm.pack()) - - -app=App(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsearch.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsearch.py deleted file mode 100755 index 217dd5250..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsearch.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python - -''' -search a set of log files for a condition -''' - -import sys, time, os - -from pymavlink import mavutil - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--condition", default=None, help="conditional check on log") -parser.add_argument("--types", default=None, help="message types to look for (comma separated)") -parser.add_argument("--stop", action='store_true', help="stop when message type found") -parser.add_argument("--stopcondition", action='store_true', help="stop when condition met") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -def mavsearch(filename): - print("Loading %s ..." % filename) - mlog = mavutil.mavlink_connection(filename) - if args.types is not None: - types = args.types.split(',') - else: - types = None - while True: - m = mlog.recv_match(type=types) - if m is None: - break - if mlog.check_condition(args.condition): - print(m) - if args.stopcondition: - break - if args.stop: - break - - -for f in args.logs: - mavsearch(f) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsigloss.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsigloss.py deleted file mode 100755 index 32bcac1ba..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsigloss.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python - -''' -show times when signal is lost -''' - -import sys, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--planner", action='store_true', help="use planner file format") -parser.add_argument("--robust", action='store_true', help="Enable robust parsing (skip over bad data)") -parser.add_argument("--deltat", type=float, default=1.0, help="loss threshold in seconds") -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("--types", default=None, help="types of messages (comma separated)") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil - - -def sigloss(logfile): - '''work out signal loss times for a log file''' - print("Processing log %s" % filename) - mlog = mavutil.mavlink_connection(filename, - planner_format=args.planner, - notimestamps=args.notimestamps, - robust_parsing=args.robust) - - last_t = 0 - - types = args.types - if types is not None: - types = types.split(',') - - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - return - if types is not None and m.get_type() not in types: - continue - if args.notimestamps: - if not 'usec' in m._fieldnames: - continue - t = m.usec / 1.0e6 - else: - t = m._timestamp - if last_t != 0: - if t - last_t > args.deltat: - print("Sig lost for %.1fs at %s" % (t-last_t, time.asctime(time.localtime(t)))) - last_t = t - -total = 0.0 -for filename in args.logs: - sigloss(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsummarize.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsummarize.py deleted file mode 100644 index 5ae33e204..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavsummarize.py +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env python - -''' -Summarize MAVLink logs. Useful for identifying which log is of interest in a large set. -''' - -import sys, time, os, glob - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps") -parser.add_argument("--condition", default=None, help="condition for packets") -parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") -parser.add_argument("logs", metavar="LOG", nargs="+") - -args = parser.parse_args() - -from pymavlink import mavutil -from pymavlink.mavextra import distance_two - - -class Totals: - def __init__(self): - self.time = 0 - self.distance = 0 - self.flights = 0 - - def print_summary(self): - print("===============================") - print("Num Flights : %u" % self.flights) - print("Total distance : {:0.2f}m".format(self.distance)) - print("Total time (mm:ss): {:3.0f}:{:02.0f}".format(self.time / 60, self.time % 60)) - - -totals = Totals() - -def PrintSummary(logfile): - '''Calculate some interesting datapoints of the file''' - # Open the log file - mlog = mavutil.mavlink_connection(filename, notimestamps=args.notimestamps, dialect=args.dialect) - - autonomous_sections = 0 # How many different autonomous sections there are - autonomous = False # Whether the vehicle is currently autonomous at this point in the logfile - auto_time = 0.0 # The total time the vehicle was autonomous/guided (seconds) - start_time = None # The datetime of the first received message (seconds since epoch) - total_dist = 0.0 # The total ground distance travelled (meters) - last_gps_msg = None # The first GPS message received - first_gps_msg = None # The last GPS message received - true_time = None # Track the first timestamp found that corresponds to a UNIX timestamp - - while True: - m = mlog.recv_match(condition=args.condition) - - # If there's no match, it means we're done processing the log. - if m is None: - break - - # Ignore any failed messages - if m.get_type() == 'BAD_DATA': - continue - - # Keep track of the latest timestamp for various calculations - timestamp = getattr(m, '_timestamp', 0.0) - - # Log the first message time - if start_time is None: - start_time = timestamp - - # Log the first timestamp found that is a true timestamp. We first try - # to get the groundstation timestamp from the log directly. If that fails - # we try to find a message that outputs a Unix time-since-epoch. - if true_time is None: - if not args.notimestamps and timestamp >= 1230768000: - true_time = timestamp - elif 'time_unix_usec' in m.__dict__ and m.time_unix_usec >= 1230768000: - true_time = m.time_unix_usec * 1.0e-6 - elif 'time_usec' in m.__dict__ and m.time_usec >= 1230768000: - true_time = m.time_usec * 1.0e-6 - - # Track the vehicle's speed and status - if m.get_type() == 'GPS_RAW_INT': - - # Ignore GPS messages without a proper fix - if m.fix_type < 3 or m.lat == 0 or m.lon == 0: - continue - - # Log the first GPS location found, being sure to skip GPS fixes - # that are bad (at lat/lon of 0,0) - if first_gps_msg is None: - first_gps_msg = m - - # Track the distance travelled, being sure to skip GPS fixes - # that are bad (at lat/lon of 0,0) - if last_gps_msg is None or m.time_usec > last_gps_msg.time_usec or m.time_usec+30e6 < last_gps_msg.time_usec: - if last_gps_msg is not None: - total_dist += distance_two(last_gps_msg, m) - - # Save this GPS message to do simple distance calculations with - last_gps_msg = m - - elif m.get_type() == 'HEARTBEAT': - if m.type == mavutil.mavlink.MAV_TYPE_GCS: - continue - if (m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_GUIDED_ENABLED or - m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_AUTO_ENABLED) and autonomous == False: - autonomous = True - autonomous_sections += 1 - start_auto_time = timestamp - elif (not m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_GUIDED_ENABLED and - not m.base_mode & mavutil.mavlink.MAV_MODE_FLAG_AUTO_ENABLED) and autonomous == True: - autonomous = False - auto_time += timestamp - start_auto_time - - # If there were no messages processed, say so - if start_time is None: - print("ERROR: No messages found.") - return - - # If the vehicle ends in autonomous mode, make sure we log the total time - if autonomous == True: - auto_time += timestamp - start_auto_time - - # Compute the total logtime, checking that timestamps are 2009 or newer for validity - # (MAVLink didn't exist until 2009) - if true_time: - start_time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(true_time)) - print("Log started at about {}".format(start_time_str)) - else: - print("Warning: No absolute timestamp found in datastream. No starting time can be provided for this log.") - - # Print location data - if last_gps_msg is not None: - first_gps_position = (first_gps_msg.lat / 1e7, first_gps_msg.lon / 1e7) - last_gps_position = (last_gps_msg.lat / 1e7, last_gps_msg.lon / 1e7) - print("Travelled from ({0[0]}, {0[1]}) to ({1[0]}, {1[1]})".format(first_gps_position, last_gps_position)) - print("Total distance : {:0.2f}m".format(total_dist)) - else: - print("Warning: No GPS data found, can't give position summary.") - - # Print out the rest of the results. - total_time = timestamp - start_time - print("Total time (mm:ss): {:3.0f}:{:02.0f}".format(total_time / 60, total_time % 60)) - # The autonomous time should be good, as a steady HEARTBEAT is required for MAVLink operation - print("Autonomous sections: {}".format(autonomous_sections)) - if autonomous_sections > 0: - print("Autonomous time (mm:ss): {:3.0f}:{:02.0f}".format(auto_time / 60, auto_time % 60)) - - totals.time += total_time - totals.distance += total_dist - totals.flights += 1 - -for filename in args.logs: - for f in glob.glob(filename): - print("Processing log %s" % filename) - PrintSummary(f) - -totals.print_summary() diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtogpx.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtogpx.py deleted file mode 100755 index 4825e5561..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtogpx.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python - -''' -example program to extract GPS data from a mavlink log, and create a GPX -file, for loading into google earth -''' - -import sys, struct, time, os - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) -parser.add_argument("--condition", default=None, help="select packets by a condition") -parser.add_argument("--nofixcheck", default=False, action='store_true', help="don't check for GPS fix") -parser.add_argument("logs", metavar="LOG", nargs="+") -args = parser.parse_args() - -from pymavlink import mavutil - - -def mav_to_gpx(infilename, outfilename): - '''convert a mavlink log file to a GPX file''' - - mlog = mavutil.mavlink_connection(infilename) - outf = open(outfilename, mode='w') - - def process_packet(timestamp, lat, lon, alt, hdg, v): - t = time.localtime(timestamp) - outf.write(''' - %s - - %s - %s - 3d - -''' % (lat, lon, alt, - time.strftime("%Y-%m-%dT%H:%M:%SZ", t), - hdg, v)) - - def add_header(): - outf.write(''' - - - -''') - - def add_footer(): - outf.write(''' - - -''') - - add_header() - - count=0 - lat=0 - lon=0 - fix=0 - while True: - m = mlog.recv_match(type=['GPS_RAW', 'GPS_RAW_INT', 'GPS', 'GPS2'], condition=args.condition) - if m is None: - break - if m.get_type() == 'GPS_RAW_INT': - lat = m.lat/1.0e7 - lon = m.lon/1.0e7 - alt = m.alt/1.0e3 - v = m.vel/100.0 - hdg = m.cog/100.0 - timestamp = m._timestamp - fix = m.fix_type - elif m.get_type() == 'GPS_RAW': - lat = m.lat - lon = m.lon - alt = m.alt - v = m.v - hdg = m.hdg - timestamp = m._timestamp - fix = m.fix_type - elif m.get_type() == 'GPS' or m.get_type() == 'GPS2': - lat = m.Lat - lon = m.Lng - alt = m.Alt - v = m.Spd - hdg = m.GCrs - timestamp = m._timestamp - fix = m.Status - else: - pass - - if fix < 2 and not args.nofixcheck: - continue - if lat == 0.0 or lon == 0.0: - continue - process_packet(timestamp, lat, lon, alt, hdg, v) - count += 1 - add_footer() - print("Created %s with %u points" % (outfilename, count)) - - -for infilename in args.logs: - outfilename = infilename + '.gpx' - mav_to_gpx(infilename, outfilename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtomfile.py b/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtomfile.py deleted file mode 100755 index 000a86640..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/pymavlink/tools/mavtomfile.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python - -''' -convert a MAVLink tlog file to a MATLab mfile -''' - -import sys, os -import re -from pymavlink import mavutil - -def process_tlog(filename): - '''convert a tlog to a .m file''' - - print("Processing %s" % filename) - - mlog = mavutil.mavlink_connection(filename, dialect=args.dialect, zero_time_base=True) - - # first walk the entire file, grabbing all messages into a hash of lists, - #and the first message of each type into a hash - msg_types = {} - msg_lists = {} - - types = args.types - if types is not None: - types = types.split(',') - - # note that Octave doesn't like any extra '.', '*', '-', characters in the filename - (head, tail) = os.path.split(filename) - basename = '.'.join(tail.split('.')[:-1]) - mfilename = re.sub('[\.\-\+\*]','_', basename) + '.m' - # Octave also doesn't like files that don't start with a letter - if (re.match('^[a-zA-z]', mfilename) == None): - mfilename = 'm_' + mfilename - - if head is not None: - mfilename = os.path.join(head, mfilename) - print("Creating %s" % mfilename) - - f = open(mfilename, "w") - - type_counters = {} - - while True: - m = mlog.recv_match(condition=args.condition) - if m is None: - break - - if types is not None and m.get_type() not in types: - continue - if m.get_type() == 'BAD_DATA': - continue - - fieldnames = m._fieldnames - mtype = m.get_type() - if mtype in ['FMT', 'PARM']: - continue - - if mtype not in type_counters: - type_counters[mtype] = 0 - f.write("%s.columns = {'timestamp'" % mtype) - for field in fieldnames: - val = getattr(m, field) - if not isinstance(val, str): - if type(val) is not list: - f.write(",'%s'" % field) - else: - for i in range(0, len(val)): - f.write(",'%s%d'" % (field, i + 1)) - f.write("};\n") - - type_counters[mtype] += 1 - f.write("%s.data(%u,:) = [%f" % (mtype, type_counters[mtype], m._timestamp)) - for field in m._fieldnames: - val = getattr(m, field) - if not isinstance(val, str): - if type(val) is not list: - f.write(",%.20g" % val) - else: - for i in range(0, len(val)): - f.write(",%.20g" % val[i]) - f.write("];\n") - f.close() - -from argparse import ArgumentParser -parser = ArgumentParser(description=__doc__) - -parser.add_argument("--condition", default=None, help="select packets by condition") -parser.add_argument("-o", "--output", default=None, help="output filename") -parser.add_argument("--types", default=None, help="types of messages (comma separated)") -parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect") -parser.add_argument("logs", metavar="LOG", nargs="+") -args = parser.parse_args() - - -for filename in args.logs: - process_tlog(filename) diff --git a/src/drivers/MAVLinkServer/MAVProxy/tools/MAVExplorer.py b/src/drivers/MAVLinkServer/MAVProxy/tools/MAVExplorer.py deleted file mode 100755 index 8f417e87b..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/tools/MAVExplorer.py +++ /dev/null @@ -1,462 +0,0 @@ -#!/usr/bin/env python -''' -log analysis program -Andrew Tridgell December 2014 -''' - -import sys, struct, time, os, datetime -import math, re -import Queue -import fnmatch -import threading, multiprocessing -from math import * -from MAVProxy.modules.lib import rline -from MAVProxy.modules.lib import wxconsole -from MAVProxy.modules.lib import grapher -from MAVProxy.modules.lib import mavmemlog -from pymavlink.mavextra import * -from MAVProxy.modules.lib.mp_menu import * -import MAVProxy.modules.lib.mp_util as mp_util -from pymavlink import mavutil -from MAVProxy.modules.lib.mp_settings import MPSettings, MPSetting -from MAVProxy.modules.lib import wxsettings -from MAVProxy.modules.lib.graphdefinition import GraphDefinition -from lxml import objectify -import pkg_resources - -if __name__ == "__main__": - multiprocessing.freeze_support() - -class MEStatus(object): - '''status object to conform with mavproxy structure for modules''' - def __init__(self): - self.msgs = {} - -class MEState(object): - '''holds state of MAVExplorer''' - def __init__(self): - self.input_queue = Queue.Queue() - self.rl = None - self.console = wxconsole.MessageConsole(title='MAVExplorer') - self.exit = False - self.status = MEStatus() - self.settings = MPSettings( - [ MPSetting('marker', str, '+', 'data marker', tab='Graph'), - MPSetting('condition', str, None, 'condition'), - MPSetting('xaxis', str, None, 'xaxis'), - MPSetting('linestyle', str, None, 'linestyle'), - MPSetting('flightmode', str, None, 'flightmode', choice=['apm','px4']), - MPSetting('legend', str, 'upper left', 'legend position'), - MPSetting('legend2', str, 'upper right', 'legend2 position') - ] - ) - - self.mlog = None - self.command_map = command_map - self.completions = { - "set" : ["(SETTING)"], - "condition" : ["(VARIABLE)"], - "graph" : ['(VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE)'], - "map" : ['(VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE) (VARIABLE)'] - } - self.aliases = {} - self.graphs = [] - self.flightmode_selections = [] - self.last_graph = GraphDefinition('Untitled', '', '', [], None) - -def have_graph(name): - '''return true if we have a graph of the given name''' - for g in mestate.graphs: - if g.name == name: - return True - return False - -def menu_callback(m): - '''called on menu selection''' - if m.returnkey.startswith('# '): - cmd = m.returnkey[2:] - if m.handler is not None: - if m.handler_result is None: - return - cmd += m.handler_result - process_stdin(cmd) - elif m.returnkey == 'menuSettings': - wxsettings.WXSettings(mestate.settings) - elif m.returnkey.startswith("mode-"): - idx = int(m.returnkey[5:]) - mestate.flightmode_selections[idx] = m.IsChecked() - else: - print('Unknown menu selection: %s' % m.returnkey) - - -def flightmode_menu(): - '''construct flightmode menu''' - modes = mestate.mlog.flightmode_list() - ret = [] - idx = 0 - for (mode,t1,t2) in modes: - modestr = "%s %us" % (mode, (t2-t1)) - ret.append(MPMenuCheckbox(modestr, modestr, 'mode-%u' % idx)) - idx += 1 - mestate.flightmode_selections.append(False) - return ret - - -def graph_menus(): - '''return menu tree for graphs (recursive)''' - ret = MPMenuSubMenu('Graphs', []) - for i in range(len(mestate.graphs)): - g = mestate.graphs[i] - path = g.name.split('/') - name = path[-1] - path = path[:-1] - ret.add_to_submenu(path, MPMenuItem(name, name, '# graph :%u' % i)) - return ret - -def setup_menus(): - '''setup console menus''' - menu = MPMenuTop([]) - menu.add(MPMenuSubMenu('MAVExplorer', - items=[MPMenuItem('Settings', 'Settings', 'menuSettings'), - MPMenuItem('Map', 'Map', '# map'), - MPMenuItem('Save Graph', 'Save', '# save'), - MPMenuItem('Reload Graphs', 'Reload', '# reload')])) - menu.add(graph_menus()) - menu.add(MPMenuSubMenu('FlightMode', items=flightmode_menu())) - - mestate.console.set_menu(menu, menu_callback) - -def expression_ok(expression): - '''return True if an expression is OK with current messages''' - expression_ok = True - fields = expression.split() - for f in fields: - try: - if f.endswith(':2'): - f = f[:-2] - if mavutil.evaluate_expression(f, mestate.status.msgs) is None: - expression_ok = False - except Exception: - expression_ok = False - break - return expression_ok - -def load_graph_xml(xml, filename, load_all=False): - '''load a graph from one xml string''' - ret = [] - try: - root = objectify.fromstring(xml) - except Exception: - return [] - if root.tag != 'graphs': - return [] - if not hasattr(root, 'graph'): - return [] - for g in root.graph: - name = g.attrib['name'] - expressions = [e.text for e in g.expression] - if load_all: - ret.append(GraphDefinition(name, e, g.description.text, expressions, filename)) - continue - if have_graph(name): - continue - for e in expressions: - if expression_ok(e): - ret.append(GraphDefinition(name, e, g.description.text, expressions, filename)) - break - return ret - -def load_graphs(): - '''load graphs from mavgraphs.xml''' - mestate.graphs = [] - gfiles = ['mavgraphs.xml'] - if 'HOME' in os.environ: - for dirname, dirnames, filenames in os.walk(os.path.join(os.environ['HOME'], ".mavproxy")): - for filename in filenames: - - if filename.lower().endswith('.xml'): - gfiles.append(os.path.join(dirname, filename)) - for file in gfiles: - if not os.path.exists(file): - continue - graphs = load_graph_xml(open(file).read(), file) - if graphs: - mestate.graphs.extend(graphs) - mestate.console.writeln("Loaded %s" % file) - # also load the built in graphs - dlist = pkg_resources.resource_listdir("MAVProxy", "tools/graphs") - for f in dlist: - raw = pkg_resources.resource_stream("MAVProxy", "tools/graphs/%s" % f).read() - graphs = load_graph_xml(raw, None) - if graphs: - mestate.graphs.extend(graphs) - mestate.console.writeln("Loaded %s" % f) - mestate.graphs = sorted(mestate.graphs, key=lambda g: g.name) - -def graph_process(fields): - '''process for a graph''' - mestate.mlog.reduce_by_flightmodes(mestate.flightmode_selections) - - mg = grapher.MavGraph() - mg.set_marker(mestate.settings.marker) - mg.set_condition(mestate.settings.condition) - mg.set_xaxis(mestate.settings.xaxis) - mg.set_linestyle(mestate.settings.linestyle) - mg.set_flightmode(mestate.settings.flightmode) - mg.set_legend(mestate.settings.legend) - mg.add_mav(mestate.mlog) - for f in fields: - mg.add_field(f) - mg.process() - mg.show() - -def display_graph(graphdef): - '''display a graph''' - mestate.console.write("Expression: %s\n" % ' '.join(graphdef.expression.split())) - child = multiprocessing.Process(target=graph_process, args=[graphdef.expression.split()]) - child.start() - -def cmd_graph(args): - '''graph command''' - usage = "usage: graph " - if len(args) < 1: - print(usage) - return - if args[0][0] == ':': - i = int(args[0][1:]) - g = mestate.graphs[i] - expression = g.expression - args = expression.split() - mestate.console.write("Added graph: %s\n" % g.name) - if g.description: - mestate.console.write("%s\n" % g.description, fg='blue') - mestate.rl.add_history("graph %s" % ' '.join(expression.split())) - mestate.last_graph = g - else: - expression = ' '.join(args) - mestate.last_graph = GraphDefinition('Untitled', expression, '', [expression], None) - display_graph(mestate.last_graph) - -def map_process(args): - '''process for a graph''' - from mavflightview import mavflightview_mav, mavflightview_options - mestate.mlog.reduce_by_flightmodes(mestate.flightmode_selections) - - options = mavflightview_options() - options.condition = mestate.settings.condition - if len(args) > 0: - options.types = ','.join(args) - mavflightview_mav(mestate.mlog, options) - -def cmd_map(args): - '''map command''' - child = multiprocessing.Process(target=map_process, args=[args]) - child.start() - -def cmd_set(args): - '''control MAVExporer options''' - mestate.settings.command(args) - -def cmd_condition(args): - '''control MAVExporer conditions''' - if len(args) == 0: - print("condition is: %s" % mestate.settings.condition) - return - mestate.settings.condition = ' '.join(args) - if len(mestate.settings.condition) == 0 or mestate.settings.condition == 'clear': - mestate.settings.condition = None - -def cmd_reload(args): - '''reload graphs''' - mestate.console.writeln('Reloading graphs', fg='blue') - load_graphs() - setup_menus() - mestate.console.write("Loaded %u graphs\n" % len(mestate.graphs)) - -def save_graph(graphdef): - '''save a graph as XML''' - if graphdef.filename is None: - if 'HOME' in os.environ: - dname = os.path.join(os.environ['HOME'], '.mavproxy') - mp_util.mkdir_p(dname) - graphdef.filename = os.path.join(dname, 'mavgraphs.xml') - else: - graphdef.filename = 'mavgraphs.xml' - if graphdef.filename is None: - mestate.console.writeln("No file to save graph to", fg='red') - return - graphs = load_graph_xml(open(graphdef.filename).read(), graphdef.filename, load_all=True) - found_name = False - for i in range(len(graphs)): - if graphs[i].name == graphdef.name: - graphs[i] = graphdef - found_name = True - break - if not found_name: - graphs.append(graphdef) - mestate.console.writeln("Saving %u graphs to %s" % (len(graphs), graphdef.filename)) - f = open(graphdef.filename, "w") - f.write("\n\n") - for g in graphs: - f.write(" \n" % g.name.strip()) - if g.description is None: - g.description = '' - f.write(" %s\n" % g.description.strip()) - for e in g.expressions: - f.write(" %s\n" % e.strip()) - f.write(" \n\n") - f.write("\n") - f.close() - -def save_callback(operation, graphdef): - '''callback from save thread''' - if operation == 'test': - for e in graphdef.expressions: - if expression_ok(e): - graphdef.expression = e - display_graph(graphdef) - return - mestate.console.writeln('Invalid graph expressions', fg='red') - return - if operation == 'save': - save_graph(graphdef) - -def save_process(): - '''process for saving a graph''' - from MAVProxy.modules.lib import wx_processguard - from MAVProxy.modules.lib.wx_loader import wx - from MAVProxy.modules.lib.wxgrapheditor import GraphDialog - app = wx.App(False) - frame = GraphDialog('Graph Editor', - mestate.last_graph, - save_callback) - frame.ShowModal() - frame.Destroy() - - -def cmd_save(args): - '''save a graph''' - child = multiprocessing.Process(target=save_process) - child.start() - -def cmd_param(args): - '''show parameters''' - if len(args) > 0: - wildcard = args[0] - else: - wildcard = '*' - k = sorted(mestate.mlog.params.keys()) - for p in k: - if fnmatch.fnmatch(str(p).upper(), wildcard.upper()): - print("%-16.16s %f" % (str(p), mestate.mlog.params[p])) - -def process_stdin(line): - '''handle commands from user''' - if line is None: - sys.exit(0) - - line = line.strip() - if not line: - return - - args = line.split() - cmd = args[0] - if cmd == 'help': - k = command_map.keys() - k.sort() - for cmd in k: - (fn, help) = command_map[cmd] - print("%-15s : %s" % (cmd, help)) - return - if cmd == 'exit': - mestate.exit = True - return - - if not cmd in command_map: - print("Unknown command '%s'" % line) - return - (fn, help) = command_map[cmd] - try: - fn(args[1:]) - except Exception as e: - print("ERROR in command %s: %s" % (args[1:], str(e))) - -def input_loop(): - '''wait for user input''' - while mestate.exit != True: - try: - if mestate.exit != True: - line = raw_input(mestate.rl.prompt) - except EOFError: - mestate.exit = True - sys.exit(1) - mestate.input_queue.put(line) - -def main_loop(): - '''main processing loop, display graphs and maps''' - while True: - if mestate is None or mestate.exit: - return - while not mestate.input_queue.empty(): - line = mestate.input_queue.get() - cmds = line.split(';') - for c in cmds: - process_stdin(c) - time.sleep(0.1) - -command_map = { - 'graph' : (cmd_graph, 'display a graph'), - 'set' : (cmd_set, 'control settings'), - 'reload' : (cmd_reload, 'reload graphs'), - 'save' : (cmd_save, 'save a graph'), - 'condition' : (cmd_condition, 'set graph conditions'), - 'param' : (cmd_param, 'show parameters'), - 'map' : (cmd_map, 'show map view'), - } - -def progress_bar(pct): - if pct % 2 == 0: - mestate.console.write('#') - -if __name__ == "__main__": - mestate = MEState() - mestate.rl = rline.rline("MAV> ", mestate) - - from argparse import ArgumentParser - parser = ArgumentParser(description=__doc__) - parser.add_argument("files", metavar="", nargs="+") - args = parser.parse_args() - - if len(args.files) == 0: - print("Usage: MAVExplorer FILE") - sys.exit(1) - - mestate.console.write("Loading %s...\n" % args.files[0]) - t0 = time.time() - mlog = mavutil.mavlink_connection(args.files[0], notimestamps=False, - zero_time_base=False) - mestate.mlog = mavmemlog.mavmemlog(mlog, progress_bar) - mestate.status.msgs = mlog.messages - t1 = time.time() - mestate.console.write("\ndone (%u messages in %.1fs)\n" % (mestate.mlog._count, t1-t0)) - - load_graphs() - setup_menus() - - # run main loop as a thread - mestate.thread = threading.Thread(target=main_loop, name='main_loop') - mestate.thread.daemon = True - mestate.thread.start() - - # input loop - while True: - try: - try: - line = raw_input(mestate.rl.prompt) - except EOFError: - mestate.exit = True - break - mestate.input_queue.put(line) - except KeyboardInterrupt: - mestate.exit = True - break diff --git a/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/ekfGraphs.xml b/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/ekfGraphs.xml deleted file mode 100644 index 0f167e37c..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/ekfGraphs.xml +++ /dev/null @@ -1,304 +0,0 @@ - - - Normalised GPS Innovations - NKF4.SV NKF4.SP NKF9.SV NKF9.SP - EKF4.SV EKF4.SP NKF4.SV NKF4.SP - EKF4.SV EKF4.SP - - - - Normalised GPS Innovations - EKF1 - EKF4.SV EKF4.SP - - - - NKF4.SV NKF4.SP NKF9.SV NKF9.SP - Normalised GPS Innovations - EKF2 - NKF4.SV NKF4.SP - - - - Normalised Innovations - EKF1 - EKF4.SV EKF4.SP EKF4.SH sqrt(EKF4.SMX*EKF4.SMX+EKF4.SMY*EKF4.SMY+EKF4.SMZ*EKF4.SMZ) EKF4.SVT - - - - Normalised Innovations - EKF2 - NKF4.SV NKF4.SP NKF4.SH NKF4.SM NKF4.SVT NKF9.SV NKF9.SP NKF9.SH NKF9.SM NKF9.SVT - NKF4.SV NKF4.SP NKF4.SH NKF4.SM NKF4.SVT - - - - Normalised Altimeter Innovations - NKF4.SH NKF9.SH - EKF4.SH NKF4.SH - EKF4.SH - - - - Normalised Airspeed Innovations - EKF4.SVT NKF4.SVT - EKF4.SVT - NKF4.SVT NKF9.SVT - - - - NKF4.SMX NKF4.SMY EKF9.SMZ NKF9.SM - Normalised Magnetometer Innovations - EKF4.SMX EKF4.SMY EKF4.SMZ NKF4.SM - EKF4.SMX EKF4.SMY EKF4.SMZ - - - - Normalised Magnetometer Innovations - EKF1 - EKF4.SMX EKF4.SMY EKF4.SMZ - - - - Normalised Magnetometer Innovations - EKF2 - NKF4.SM NKF9.SM - NKF4.SM - - - - Angular Alignment - EKF2 - NKF4.errRP NKF3.IYAW:2 - NKF4.errRP NKF3.IYAW:2 NKF9.errRP NKF8.IYAW:2 - - - - NKF3.IVT NKF8.IVT - Airspeed Innovation - EKF3.IVT NKF3.IVT - EKF3.IVT - - - - Velocity NE - NKF1.VN NKF1.VE NKF6.VN NKF6.VE - EKF1.VN EKF1.VE NKF1.VN NKF1.VE - EKF1.VN EKF1.V - - - - Velocity NE - NKF1.PN NKF1.PE NKF6.PN NKF6.PE - EKF1.PN EKF1.PE NKF1.PN NKF1.PE - EKF1.PN EKF1.PE - - - - Vertical Pos Vel - CTUN.BarAlt NKF1.PD*-1 NKF1.VD*-1:2 NKF6.PD*-1 NKF6.VD*-1:2 - CTUN.BarAlt EKF1.PD*-1 EKF1.VD*-1:2 NKF1.PD*-1 NKF1.VD*-1:2 - CTUN.BarAlt EKF1.PD*-1 EKF1.VD*-1:2 - - - - Roll and Pitch - AHR2.Roll AHR2.Pitch NKF1.Roll NKF1.Pitch NKF6.Roll NKF6.Pitch - EKF1.Roll EKF1.Pitch AHR2.Roll AHR2.Pitch NKF1.Roll NKF1.Pitch - EKF1.Roll EKF1.Pitch AHR2.Roll AHR2.Pitch - - - - Euler Roll - AHR2.Roll NKF1.Roll NKF6.Roll - EKF1.Roll AHR2.Roll NKF1.Roll - EKF1.Roll AHR2.Roll - - - - Euler Pitch - AHR2.Pitch NKF1.Pitch NKF6.Pitch - EKF1.Pitch AHR2.Pitch NKF1.Pitch - EKF1.Pitch AHR2.Pitch - - - - Euler Yaw - AHR2.Yaw ATT.Yaw NKF1.Yaw NKF6.Yaw - EKF1.Yaw AHR2.Yaw ATT.Yaw NKF1.Yaw - EKF1.Yaw AHR2.Yaw ATT.Yaw - - - - Velocity Innovations - NKF3.IVN NKF3.IVE NKF3.IVD NKF8.IVN NKF8.IVE NKF8.IVD - EKF3.IVN EKF3.IVE EKF3.IVD NKF3.IVN NKF3.IVE NKF3.IVD - EKF3.IVN EKF3.IVE EKF3.IVD - - - - Position Innovations - NKF3.IPN NKF3.IPE NKF8.IPN NKF8.IPE - EKF3.IPN EKF3.IPE NKF3.IPN NKF3.IPE - EKF3.IPN EKF3.IPE - - - - Height Innovations - NKF3.IPD NKF8.IPD - EKF3.IPD NKF3.IPD - EKF3.IPD - - - - Magnetometer Innovations - NKF3.IMX NKF3.IMY NKF3.IMZ NKF3.IYAW:2 NKF8.IMX NKF8.IMY NKF8.IMZ NKF8.IYAW:2 - EKF3.IMX EKF3.IMY EKF3.IMZ NKF3.IMX NKF3.IMY NKF3.IMZ NKF3.IYAW:2 - EKF3.IMX EKF3.IMY EKF3.IMZ - - - - Magnetometer Innovation X - NKF3.IMX NKF8.IMX - EKF3.IMX NKF3.IMX - EKF3.IMX - - - - Magnetometer Innovation Y - NKF3.IMY NKF8.IMY - EKF3.IMY NKF3.IMY - EKF3.IMY - - - - Magnetometer Innovation Z - NKF3.IMZ NKF8.IMZ - EKF3.IMZ NKF3.IMZ - EKF3.IMZ - - - - Magnetometer Innovations - EKF1 - EKF3.IMX EKF3.IMY EKF3.IMZ - - - - Magnetometer Innovations - EKF2 - NKF3.IMX NKF3.IMY NKF3.IMZ NKF3.IYAW:2 NKF8.IMX NKF8.IMY NKF8.IMZ NKF8.IYAW:2 - NKF3.IMX NKF3.IMY NKF3.IMZ NKF3.IYAW:2 - - - - Magnetometer Body Field - NKF2.MX NKF2.MY NKF2.MZ NKF7.MX NKF7.MY NKF7.MZ - EKF2.MX EKF2.MY EKF2.MZ NKF2.MX NKF2.MY NKF2.MZ - EKF2.MX EKF2.MY EKF2.MZ - - - - Magnetometer Earth Field - NKF2.MN NKF2.ME NKF2.MD NKF7.MN NKF7.ME NKF7.MD - EKF2.MN EKF2.ME EKF2.MD NKF2.MN NKF2.ME NKF2.MD - EKF2.MN EKF2.ME EKF2.MD - - - - Magnetic Declination - degrees(atan2(NKF2.ME,NKF2.MN)) degrees(atan2(NKF7.ME,NKF7.MN)) - degrees(atan2(EKF2.ME,EKF2.MN)) degrees(atan2(NKF2.ME,NKF2.MN)) - degrees(atan2(EKF2.ME,EKF2.MN)) - - - - Gyro Bias - NKF1.GX NKF1.GY NKF1.GZ NKF6.GX NKF6.GY NKF6.GZ - EKF1.GX EKF1.GY EKF1.GZ NKF1.GX NKF1.GY NKF1.GZ - EKF1.GX EKF1.GY EKF1.GZ - - - - Gyro Scale Factor - NKF2.GSX NKF2.GSY NKF2.GSZ NKF7.GSX NKF7.GSY NKF7.GSZ - NKF2.GSX NKF2.GSY NKF2.GSZ - - - - Wind Velocity NE - NKF2.VWN NKF2.VWE NKF7.VWN NKF7.VWE - EKF2.VWN EKF2.VWE NKF2.VWN NKF2.VWE - EKF2.VWN EKF2.VWE - - - - Wind Velocity NE - sqrt(sqrt(NKF2.VWN**2+NKF2.VWE**2) wrap_360(degrees(atan2(-NKF2.VWE,-NKF2.VWN))):2 sqrt(NKF7.VWN**2+NKF7.VWE**2) wrap_360(degrees(atan2(-NKF7.VWE,-NKF7.VWN))):2 - sqrt(EKF2.VWN**2+EKF2.VWE**2) wrap_360(degrees(atan2(-EKF2.VWE,-EKF2.VWN))):2 sqrt(NKF2.VWN**2+NKF2.VWE**2) wrap_360(degrees(atan2(-NKF2.VWE,-NKF2.VWN))):2 - sqrt(EKF2.VWN**2+EKF2.VWE**2) wrap_360(degrees(atan2(-EKF2.VWE,-EKF2.VWN))):2 - - - - Accel Bias - NKF2.AZbias NKF7.AZbias - EKF2.AZ1bias EKF2.AZ2bias EKF2.Ratio:2 NKF2.AZbias - EKF2.AZ1bias EKF2.AZ2bias EKF2.Ratio:2 - - - - Solution Status - NKF4.SS NKF9.SS - EKF4.SS NKF4.SS - EKF4.SS - - - - GPS Check Status - NKF4.GPS NKF9.GPS - EKF4.GPS NKF4.GPS - EKF4.GPS - - - - Vertical Position Derivative - NKF1.dPD NKF1.VD NKF6.dPD NKF6.VD - EKF1.dPD EKF1.VD NKF1.dPD NKF1.VD - EKF1.dPD EKF1.VD - - - - Optical Flow Innovations - EKF5.FIX EKF5.FIY EKF5.AFI NKF5.FIX NKF5.FIY NKF5.AFI - NKF5.FIX NKF5.FIY NKF5.AFI - EKF5.FIX EKF5.FIY EKF5.AFI - - - - Normalised Optical Flow Innovations - EKF5.normInnov NKF5.normInnov - NKF5.normInnov - EKF5.normInnov - - - - Range Innovations - EKF5.RI NKF5.RI - NKF5.RI - EKF5.RI - - - - Height Above Ground - EKF5.HAGL EKF5.errHAGL EKF5.meaRng EKF5.offset - - - - Height Above Ground - NKF5.HAGL NKF5.errHAGL NKF5.meaRng NKF5.offset - - - - Magnetometer Selection - NKF2.MI NKF7.MI - NKF2.MI - - - - Magnetometer Selection - NKF4.PI NKF9.PI - NKF4.PI - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/mavgraphs.xml b/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/mavgraphs.xml deleted file mode 100644 index 502dd6e89..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/tools/graphs/mavgraphs.xml +++ /dev/null @@ -1,244 +0,0 @@ - - - VFR_HUD.groundspeed VFR_HUD.airspeed - GPS.Spd ARSP.Airspeed - - This shows the ground speed of the vehicle versus its air speed - - - - - VFR_HUD.groundspeed - GPS.Spd - - This shows the ground speed of the vehicle - - - - - Roll and Pitch - degrees(ATTITUDE.roll) degrees(ATTITUDE.pitch) - ATT.Roll ATT.Pitch - - - - Roll and pitch comparison between primary and secondary attitude estimator - degrees(ATTITUDE.roll) degrees(ATTITUDE.pitch) degrees(AHRS2.roll) degrees(AHRS2.pitch) - ATT.Roll ATT.Pitch AHR2.Roll AHR2.Pitch - - - - Desired versus achieved roll and pitch. This shows you how well the attitude controller are for your aircraft. In a well tuned aircraft the desired and achieved roll and pitch should match to within a couple of degrees for any portion of the flight where stabilisation is enabled. - NAV_CONTROLLER_OUTPUT.nav_roll NAV_CONTROLLER_OUTPUT.nav_pitch degrees(ATTITUDE.roll) degrees(ATTITUDE.pitch) - ATT.DesRoll ATT.Roll ATT.DesPitch ATT.Pitch - CTUN.NavRoll CTUN.Roll CTUN.NavPitch CTUN.Pitch - - - - Accelerometer Output - RAW_IMU.xacc*9.81*0.001 RAW_IMU.yacc*9.81*0.001 RAW_IMU.zacc*9.81*0.001 gravity(RAW_IMU) - IMU.AccX IMU.AccY IMU.AccZ sqrt(IMU.AccX**2+IMU.AccY**2+IMU.AccZ**2) - - - - Accelerometer Two Output - SCALED_IMU2.xacc*9.81*0.001 SCALED_IMU2.yacc*9.81*0.001 SCALED_IMU2.zacc*9.81*0.001 - IMU2.AccX IMU2.AccY IMU2.AccZ sqrt(IMU2.AccX**2+IMU2.AccY**2+IMU2.AccZ**2) - - - - Accelerometer Three Output - SCALED_IMU3.xacc*9.81*0.001 SCALED_IMU3.yacc*9.81*0.001 SCALED_IMU3.zacc*9.81*0.001 - IMU3.AccX IMU3.AccY IMU3.AccZ sqrt(IMU3.AccX**2+IMU3.AccY**2+IMU3.AccZ**2) - - - - Accelerometer Comparison - - RAW_IMU.xacc*9.81*0.001 RAW_IMU.yacc*9.81*0.001 RAW_IMU.zacc*9.81*0.001 - SCALED_IMU2.xacc*9.81*0.001 SCALED_IMU2.yacc*9.81*0.001 SCALED_IMU2.zacc*9.81*0.001 - SCALED_IMU3.xacc*9.81*0.001 SCALED_IMU3.yacc*9.81*0.001 SCALED_IMU3.zacc*9.81*0.001 - - - RAW_IMU.xacc*9.81*0.001 RAW_IMU.yacc*9.81*0.001 RAW_IMU.zacc*9.81*0.001 - SCALED_IMU2.xacc*9.81*0.001 SCALED_IMU2.yacc*9.81*0.001 SCALED_IMU2.zacc*9.81*0.001 - - IMU.AccX IMU.AccY IMU.AccZ IMU2.AccX IMU2.AccY IMU2.AccZ IMU3.AccX IMU3.AccY IMU3.AccZ - IMU.AccX IMU.AccY IMU.AccZ IMU2.AccX IMU2.AccY IMU2.AccZ - - - - Gyroscope Output - degrees(RAW_IMU.xgyro*0.001) degrees(RAW_IMU.ygyro*0.001) degrees(RAW_IMU.zgyro*0.001) - IMU.GyrX IMU.GyrY IMU.GyrZ - - - - Gyroscope Two Output - degrees(SCALED_IMU2.xgyro*0.001) degrees(SCALED_IMU2.ygyro*0.001) degrees(SCALED_IMU2.zgyro*0.001) - IMU2.GyrX IMU2.GyrY IMU2.GyrZ - - - - Gyroscope Three Output - degrees(SCALED_IMU3.xgyro*0.001) degrees(SCALED_IMU3.ygyro*0.001) degrees(SCALED_IMU3.zgyro*0.001) - IMU3.GyrX IMU3.GyrY IMU3.GyrZ - - - - Gyroscope Comparison - - degrees(RAW_IMU.xgyro*0.001) degrees(RAW_IMU.ygyro*0.001) degrees(RAW_IMU.zgyro*0.001) - degrees(SCALED_IMU2.xgyro*0.001) degrees(SCALED_IMU2.ygyro*0.001) degrees(SCALED_IMU2.zgyro*0.001) - degrees(SCALED_IMU3.xgyro*0.001) degrees(SCALED_IMU3.ygyro*0.001) degrees(SCALED_IMU3.zgyro*0.001) - - - degrees(RAW_IMU.xgyro*0.001) degrees(RAW_IMU.ygyro*0.001) degrees(RAW_IMU.zgyro*0.001) - degrees(SCALED_IMU2.xgyro*0.001) degrees(SCALED_IMU2.ygyro*0.001) degrees(SCALED_IMU2.zgyro*0.001) - - - IMU.GyrX IMU.GyrY IMU.GyrZ - IMU2.GyrX IMU2.GyrY IMU2.GyrZ - IMU3.GyrX IMU3.GyrY IMU3.GyrZ - - - IMU.GyrX IMU.GyrY IMU.GyrZ - IMU2.GyrX IMU2.GyrY IMU2.GyrZ - - - - - Barometer - altitude(SCALED_PRESSURE) SCALED_PRESSURE.temperature*0.01:2 - BARO.Alt BARO.Temp:2 - - - - Barometric Altitude - altitude(SCALED_PRESSURE2) SCALED_PRESSURE2.temperature*0.01:2 - BAR2.Alt BAR2.Temp:2 - - - - Barometric Altitude - altitude(SCALED_PRESSURE3) SCALED_PRESSURE3.temperature*0.01:2 - BAR3.Alt BAR3.Temp:2 - - - - Barometer Comparison - - altitude(SCALED_PRESSURE) SCALED_PRESSURE.temperature*0.01:2 - altitude(SCALED_PRESSURE2) SCALED_PRESSURE2.temperature*0.01:2 - altitude(SCALED_PRESSURE3) SCALED_PRESSURE3.temperature*0.01:2 - - - altitude(SCALED_PRESSURE) SCALED_PRESSURE.temperature*0.01:2 - altitude(SCALED_PRESSURE2) SCALED_PRESSURE2.temperature*0.01:2 - - - BARO.Alt BARO.Temp:2 - BAR2.Alt BAR2.Temp:2 - BAR3.Alt BAR3.Temp:2 - - - BARO.Alt BARO.Temp:2 - BAR2.Alt BAR2.Temp:2 - - - - - Barometric Pressure - SCALED_PRESSURE.press_abs - BARO.Press - - - - Primary Compass - RAW_IMU.xmag RAW_IMU.ymag RAW_IMU.zmag mag_field(RAW_IMU) - MAG.MagX MAG.MagY MAG.MagZ sqrt(MAG.MagX**2+MAG.MagY**2+MAG.MagZ**2) - - - - Second Compass - SCALED_IMU2.xmag SCALED_IMU2.ymag SCALED_IMU2.zmag mag_field(SCALED_IMU2) - MAG2.MagX MAG2.MagY MAG2.MagZ sqrt(MAG2.MagX**2+MAG2.MagY**2+MAG2.MagZ**2) - - - - Third Compass - SCALED_IMU3.xmag SCALED_IMU3.ymag SCALED_IMU3.zmag mag_field(SCALED_IMU2) - MAG3.MagX MAG3.MagY MAG3.MagZ sqrt(MAG3.MagX**2+MAG3.MagY**2+MAG3.MagZ**2) - - - - Primary Compass vs Yaw - mag_heading(RAW_IMU,ATTITUDE) degrees(ATTITUDE.yaw) - mag_heading_df(MAG,ATT) ATT.Yaw - - - - First 4 servo outputs - - SERVO_OUTPUT_RAW.servo1_raw SERVO_OUTPUT_RAW.servo2_raw SERVO_OUTPUT_RAW.servo3_raw SERVO_OUTPUT_RAW.servo4_raw - - - RCOU.Ch1 RCOU.Ch2 RCOU.Ch3 RCOU.Ch4 - - - - - First 8 servo outputs - - SERVO_OUTPUT_RAW.servo1_raw SERVO_OUTPUT_RAW.servo2_raw SERVO_OUTPUT_RAW.servo3_raw SERVO_OUTPUT_RAW.servo4_raw - SERVO_OUTPUT_RAW.servo5_raw SERVO_OUTPUT_RAW.servo6_raw SERVO_OUTPUT_RAW.servo7_raw SERVO_OUTPUT_RAW.servo8_raw - - - RCOU.Ch1 RCOU.Ch2 RCOU.Ch3 RCOU.Ch4 - RCOU.Ch5 RCOU.Ch6 RCOU.Ch7 RCOU.Ch8 - - - - - First 4 RC inputs - - RC_CHANNELS_RAW.chan1_raw RC_CHANNELS_RAW.chan2_raw RC_CHANNELS_RAW.chan3_raw RC_CHANNELS_RAW.chan4_raw - - - RCIN.C1 RCIN.C2 RCIN.C3 RCIN.C4 - - - - - First 8 RC inputs - - RC_CHANNELS_RAW.chan1_raw RC_CHANNELS_RAW.chan2_raw RC_CHANNELS_RAW.chan3_raw RC_CHANNELS_RAW.chan4_raw - RC_CHANNELS_RAW.chan5_raw RC_CHANNELS_RAW.chan6_raw RC_CHANNELS_RAW.chan7_raw RC_CHANNELS_RAW.chan8_raw - - - RCIN.C1 RCIN.C2 RCIN.C3 RCIN.C4 - RCIN.C5 RCIN.C6 RCIN.C7 RCIN.C8 - - - - - Rangefinders vs Barometric Altitude - BARO.Alt RFND.Dist1 RFND.Dist2 - - - - This shows how well the pitch controller is tracking the desired pitch rate. -For a well tuned aircraft PIDP.Des should match the smoothed IMU.GyrY value. -If PIDP.I has a constant positive value then it means the aircraft is a bit tail heavy, and the integrator is learning the elevator offset needed to keep the aircraft level. If PIDP.I has a constant negative value then the aircraft is a bit nose heavy. -You should also check PIDP.D and look for signs of oscillation, in which case PTCH2SRV_D is too high. - PIDP.Des PIDP.P PIDP.I PIDP.D lowpass(degrees(IMU.GyrY),"gy",0.9) - - - - This shows how well the roll controller is tracking the desired roll rate. -For a well tuned aircraft PIDR.Des should match the smoothed IMU.GyrX value. -If PIDR.I has a constant positive value then it means the aircraft is trimmed to roll to the left side, and the integrator is learning the aileron offset needed to keep the aircraft level. If PIDR.I has a constant negative value then the aircraft is trimmed a bit to the right. - PIDR.Des PIDR.P PIDR.I PIDR.D lowpass(degrees(IMU.GyrX),"gx",0.9) - - - diff --git a/src/drivers/MAVLinkServer/MAVProxy/tools/mavflightview.py b/src/drivers/MAVLinkServer/MAVProxy/tools/mavflightview.py deleted file mode 100755 index 8d729aefe..000000000 --- a/src/drivers/MAVLinkServer/MAVProxy/tools/mavflightview.py +++ /dev/null @@ -1,348 +0,0 @@ -#!/usr/bin/env python - -''' -view a mission log on a map -''' - -import sys, time, os - -from pymavlink import mavutil, mavwp, mavextra -from MAVProxy.modules.mavproxy_map import mp_slipmap, mp_tile -from MAVProxy.modules.lib import mp_util -import functools - -try: - import cv2.cv as cv -except ImportError: - import cv - -def create_map(title): - '''create map object''' - -def pixel_coords(latlon, ground_width=0, mt=None, topleft=None, width=None): - '''return pixel coordinates in the map image for a (lat,lon)''' - (lat,lon) = (latlon[0], latlon[1]) - return mt.coord_to_pixel(topleft[0], topleft[1], width, ground_width, lat, lon) - -def create_imagefile(options, filename, latlon, ground_width, path_objs, mission_obj, fence_obj, width=600, height=600): - '''create path and mission as an image file''' - mt = mp_tile.MPTile(service=options.service) - - map_img = mt.area_to_image(latlon[0], latlon[1], - width, height, ground_width) - while mt.tiles_pending() > 0: - print("Waiting on %u tiles" % mt.tiles_pending()) - time.sleep(1) - map_img = mt.area_to_image(latlon[0], latlon[1], - width, height, ground_width) - # a function to convert from (lat,lon) to (px,py) on the map - pixmapper = functools.partial(pixel_coords, ground_width=ground_width, mt=mt, topleft=latlon, width=width) - for path_obj in path_objs: - path_obj.draw(map_img, pixmapper, None) - if mission_obj is not None: - for m in mission_obj: - m.draw(map_img, pixmapper, None) - if fence_obj is not None: - fence_obj.draw(map_img, pixmapper, None) - cv.CvtColor(map_img, map_img, cv.CV_BGR2RGB) - cv.SaveImage(filename, map_img) - -colourmap = { - 'MANUAL' : (255, 0, 0), - 'AUTO' : ( 0, 255, 0), - 'LOITER' : ( 0, 0, 255), - 'FBWA' : (255, 100, 0), - 'RTL' : (255, 0, 100), - 'STABILIZE' : (100, 255, 0), - 'LAND' : ( 0, 255, 100), - 'STEERING' : (100, 0, 255), - 'HOLD' : ( 0, 100, 255), - 'ALT_HOLD' : (255, 100, 100), - 'CIRCLE' : (100, 255, 100), - 'GUIDED' : (100, 100, 255), - 'ACRO' : (255, 255, 0), - 'CRUISE' : (0, 255, 255), - 'UNKNOWN' : (230, 70, 40) - } - - -def display_waypoints(wploader, map): - '''display the waypoints''' - mission_list = wploader.view_list() - polygons = wploader.polygon_list() - map.add_object(mp_slipmap.SlipClearLayer('Mission')) - for i in range(len(polygons)): - p = polygons[i] - if len(p) > 1: - map.add_object(mp_slipmap.SlipPolygon('mission %u' % i, p, - layer='Mission', linewidth=2, colour=(255,255,255))) - labeled_wps = {} - for i in range(len(mission_list)): - next_list = mission_list[i] - for j in range(len(next_list)): - #label already printed for this wp? - if (next_list[j] not in labeled_wps): - map.add_object(mp_slipmap.SlipLabel( - 'miss_cmd %u/%u' % (i,j), polygons[i][j], str(next_list[j]), 'Mission', colour=(0,255,255))) - labeled_wps[next_list[j]] = (i,j) - -def mavflightview_mav(mlog, options=None, title=None): - '''create a map for a log file''' - if not title: - title='MAVFlightView' - wp = mavwp.MAVWPLoader() - if options.mission is not None: - wp.load(options.mission) - fen = mavwp.MAVFenceLoader() - if options.fence is not None: - fen.load(options.fence) - path = [[]] - instances = {} - ekf_counter = 0 - types = ['MISSION_ITEM','CMD'] - if options.types is not None: - types.extend(options.types.split(',')) - else: - types.extend(['GPS','GLOBAL_POSITION_INT']) - if options.rawgps or options.dualgps: - types.extend(['GPS', 'GPS_RAW_INT']) - if options.rawgps2 or options.dualgps: - types.extend(['GPS2_RAW','GPS2']) - if options.ekf: - types.extend(['EKF1', 'GPS']) - if options.ahr2: - types.extend(['AHR2', 'AHRS2', 'GPS']) - print("Looking for types %s" % str(types)) - - last_timestamps = {} - - while True: - try: - m = mlog.recv_match(type=types) - if m is None: - break - except Exception: - break - - type = m.get_type() - - if type == 'MISSION_ITEM': - try: - while m.seq > wp.count(): - print("Adding dummy WP %u" % wp.count()) - wp.set(m, wp.count()) - wp.set(m, m.seq) - except Exception: - pass - continue - if type == 'CMD': - m = mavutil.mavlink.MAVLink_mission_item_message(0, - 0, - m.CNum, - mavutil.mavlink.MAV_FRAME_GLOBAL_RELATIVE_ALT, - m.CId, - 0, 1, - m.Prm1, m.Prm2, m.Prm3, m.Prm4, - m.Lat, m.Lng, m.Alt) - try: - while m.seq > wp.count(): - print("Adding dummy WP %u" % wp.count()) - wp.set(m, wp.count()) - wp.set(m, m.seq) - except Exception: - pass - continue - if not mlog.check_condition(options.condition): - continue - if options.mode is not None and mlog.flightmode.lower() != options.mode.lower(): - continue - if type in ['GPS','GPS2']: - status = getattr(m, 'Status', None) - if status is None: - status = getattr(m, 'FixType', None) - if status is None: - print("Can't find status on GPS message") - print(m) - break - if status < 2: - continue - # flash log - lat = m.Lat - lng = getattr(m, 'Lng', None) - if lng is None: - lng = getattr(m, 'Lon', None) - if lng is None: - print("Can't find longitude on GPS message") - print(m) - break - elif type in ['EKF1', 'ANU1']: - pos = mavextra.ekf1_pos(m) - if pos is None: - continue - ekf_counter += 1 - if ekf_counter % options.ekf_sample != 0: - continue - (lat, lng) = pos - elif type in ['ANU5']: - (lat, lng) = (m.Alat*1.0e-7, m.Alng*1.0e-7) - elif type in ['AHR2', 'POS', 'CHEK']: - (lat, lng) = (m.Lat, m.Lng) - elif type == 'AHRS2': - (lat, lng) = (m.lat*1.0e-7, m.lng*1.0e-7) - else: - lat = m.lat * 1.0e-7 - lng = m.lon * 1.0e-7 - - # automatically add new types to instances - if type not in instances: - instances[type] = len(instances) - while len(instances) >= len(path): - path.append([]) - instance = instances[type] - - if abs(lat)>0.01 or abs(lng)>0.01: - fmode = getattr(mlog, 'flightmode','') - if fmode in colourmap: - colour = colourmap[fmode] - else: - colour = colourmap['UNKNOWN'] - (r,g,b) = colour - (r,g,b) = (r+instance*80,g+instance*50,b+instance*70) - if r > 255: - r = 205 - if g > 255: - g = 205 - if g < 0: - g = 0 - if b > 255: - b = 205 - colour = (r,g,b) - point = (lat, lng, colour) - - if options.rate == 0 or not type in last_timestamps or m._timestamp - last_timestamps[type] > 1.0/options.rate: - last_timestamps[type] = m._timestamp - path[instance].append(point) - if len(path[0]) == 0: - print("No points to plot") - return - bounds = mp_util.polygon_bounds(path[0]) - (lat, lon) = (bounds[0]+bounds[2], bounds[1]) - (lat, lon) = mp_util.gps_newpos(lat, lon, -45, 50) - ground_width = mp_util.gps_distance(lat, lon, lat-bounds[2], lon+bounds[3]) - while (mp_util.gps_distance(lat, lon, bounds[0], bounds[1]) >= ground_width-20 or - mp_util.gps_distance(lat, lon, lat, bounds[1]+bounds[3]) >= ground_width-20): - ground_width += 10 - - path_objs = [] - for i in range(len(path)): - if len(path[i]) != 0: - path_objs.append(mp_slipmap.SlipPolygon('FlightPath[%u]-%s' % (i,title), path[i], layer='FlightPath', - linewidth=2, colour=(255,0,180))) - plist = wp.polygon_list() - mission_obj = None - if len(plist) > 0: - mission_obj = [] - for i in range(len(plist)): - mission_obj.append(mp_slipmap.SlipPolygon('Mission-%s-%u' % (title,i), plist[i], layer='Mission', - linewidth=2, colour=(255,255,255))) - else: - mission_obj = None - - fence = fen.polygon() - if len(fence) > 1: - fence_obj = mp_slipmap.SlipPolygon('Fence-%s' % title, fen.polygon(), layer='Fence', - linewidth=2, colour=(0,255,0)) - else: - fence_obj = None - - if options.imagefile: - create_imagefile(options, options.imagefile, (lat,lon), ground_width, path_objs, mission_obj, fence_obj) - else: - global multi_map - if options.multi and multi_map is not None: - map = multi_map - else: - map = mp_slipmap.MPSlipMap(title=title, - service=options.service, - elevation=True, - width=600, - height=600, - ground_width=ground_width, - lat=lat, lon=lon, - debug=options.debug) - if options.multi: - multi_map = map - for path_obj in path_objs: - map.add_object(path_obj) - if mission_obj is not None: - display_waypoints(wp, map) - if fence_obj is not None: - map.add_object(fence_obj) - - for flag in options.flag: - a = flag.split(',') - lat = a[0] - lon = a[1] - icon = 'flag.png' - if len(a) > 2: - icon = a[2] + '.png' - icon = map.icon(icon) - map.add_object(mp_slipmap.SlipIcon('icon - %s' % str(flag), (float(lat),float(lon)), icon, layer=3, rotation=0, follow=False)) - -def mavflightview(filename, options): - print("Loading %s ..." % filename) - mlog = mavutil.mavlink_connection(filename) - mavflightview_mav(mlog, options, title=filename) - -class mavflightview_options(object): - def __init__(self): - self.service = "MicrosoftHyb" - self.mode = None - self.condition = None - self.mission = None - self.fence = None - self.imagefile = None - self.flag = [] - self.rawgps = False - self.rawgps2 = False - self.dualgps = False - self.ekf = False - self.ahr2 = False - self.debug = False - self.multi = False - self.types = None - self.ekf_sample = 1 - self.rate = 0 - -if __name__ == "__main__": - from optparse import OptionParser - parser = OptionParser("mavflightview.py [options]") - parser.add_option("--service", default="MicrosoftSat", help="tile service") - parser.add_option("--mode", default=None, help="flight mode") - parser.add_option("--condition", default=None, help="conditional check on log") - parser.add_option("--mission", default=None, help="mission file (defaults to logged mission)") - parser.add_option("--fence", default=None, help="fence file") - parser.add_option("--imagefile", default=None, help="output to image file") - parser.add_option("--flag", default=[], type='str', action='append', help="flag positions") - parser.add_option("--rawgps", action='store_true', default=False, help="use GPS_RAW_INT") - parser.add_option("--rawgps2", action='store_true', default=False, help="use GPS2_RAW") - parser.add_option("--dualgps", action='store_true', default=False, help="use GPS_RAW_INT and GPS2_RAW") - parser.add_option("--ekf", action='store_true', default=False, help="use EKF1 pos") - parser.add_option("--ahr2", action='store_true', default=False, help="use AHR2 pos") - parser.add_option("--debug", action='store_true', default=False, help="show debug info") - parser.add_option("--multi", action='store_true', default=False, help="show multiple flights on one map") - parser.add_option("--types", default=None, help="types of position messages to show") - parser.add_option("--ekf-sample", type='int', default=1, help="sub-sampling of EKF messages") - parser.add_option("--rate", type='int', default=0, help="maximum message rate to display (0 means all points)") - - (opts, args) = parser.parse_args() - - if len(args) < 1: - print("Usage: mavflightview.py [options] ") - sys.exit(1) - - if opts.multi: - multi_map = None - - for f in args: - mavflightview(f, opts) diff --git a/src/drivers/MAVLinkServer/README.md b/src/drivers/MAVLinkServer/README.md deleted file mode 100644 index c529068ff..000000000 --- a/src/drivers/MAVLinkServer/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Example of execution: - -In the first run, MAVProxyWinLAN.sh script must be launched in MavProxy folder. - -In the following executions you must launch: - -python3.5 mavproxy.py --master=0.0.0.0:14550 (ipDrone) diff --git a/src/drivers/MAVLinkServer/make b/src/drivers/MAVLinkServer/make deleted file mode 100755 index 871f99295..000000000 --- a/src/drivers/MAVLinkServer/make +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -dir=$(dirname "$0") -cd $dir -python setup.py build -python setup.py install --user diff --git a/src/drivers/MAVLinkServer/mav.parm b/src/drivers/MAVLinkServer/mav.parm deleted file mode 100644 index ef90f0d12..000000000 --- a/src/drivers/MAVLinkServer/mav.parm +++ /dev/null @@ -1,495 +0,0 @@ -b'ACCEL_Z_D\x00\ 0.000000 -b'ACCEL_Z_FILT_H 20.000000 -b'ACCEL_Z_IMAX\x 800.000000 -b'ACCEL_Z_I\x00\ 1.500000 -b'ACCEL_Z_P\x00\ 0.750000 -b'ACRO_BAL_PITCH 1.000000 -b'ACRO_BAL_ROLL\ 1.000000 -b'ACRO_EXPO\x00\ 0.300000 -b'ACRO_RP_P\x00\ 4.000000 -b'ACRO_TRAINER\x 2.000000 -b'ACRO_YAW_P\x00 1.000000 -b'AHRS_COMP_BETA 0.100000 -b'AHRS_GPS_GAIN\ 1.000000 -b'AHRS_GPS_MINSA 6.000000 -b'AHRS_GPS_USE\x 1.000000 -b'AHRS_ORIENTATI 12.000000 -b'AHRS_RP_P\x00\ 0.100000 -b'AHRS_TRIM_X\x0 0.009756 -b'AHRS_TRIM_Y\x0 0.007071 -b'AHRS_TRIM_Z\x0 0.000000 -b'AHRS_WIND_MAX\ 0.000000 -b'AHRS_YAW_P\x00 0.100000 -b'ANGLE_MAX\x00\ 2000.000000 -b'ARMING_CHECK\x 119.000000 -b'ATC_ACCEL_P_MA 36000.000000 -b'ATC_ACCEL_R_MA 36000.000000 -b'ATC_ACCEL_Y_MA 7000.000000 -b'ATC_LEAD_PIT_R 1.000000 -b'ATC_LEAD_PIT_W 0.000000 -b'ATC_LEAD_RLL_R 4.000000 -b'ATC_LEAD_RLL_W 15.000000 -b'ATC_RATE_FF_EN 1.000000 -b'ATC_SLEW_YAW\x 1000.000000 -b'AUTOTUNE_AGGR\ 0.100000 -b'AUTOTUNE_AXES\ 7.000000 -b'BATT2_AMP_OFFS 0.000000 -b'BATT2_AMP_PERV 17.000000 -b'BATT2_CAPACITY 3300.000000 -b'BATT2_CURR_PIN 3.000000 -b'BATT2_MONITOR\ 0.000000 -b'BATT2_VOLT_MUL 10.100000 -b'BATT2_VOLT_PIN 2.000000 -b'BATT_AMP_OFFSE 0.000000 -b'BATT_AMP_PERVO 17.000000 -b'BATT_CAPACITY\ 5200.000000 -b'BATT_CURR_PIN\ 3.000000 -b'BATT_MONITOR\x 5.000000 -b'BATT_VOLT_MULT 10.100000 -b'BATT_VOLT_PIN\ 2.000000 -b'BRD_PWM_COUNT\ 4.000000 -b'BRD_SAFETYENAB 0.000000 -b'BRD_SBUS_OUT\x 0.000000 -b'BRD_SER1_RTSCT 1.000000 -b'BRD_SER2_RTSCT 2.000000 -b'CAM_DURATION\x 10.000000 -b'CAM_SERVO_OFF\ 1100.000000 -b'CAM_SERVO_ON\x 1300.000000 -b'CAM_TRIGG_DIST 0.000000 -b'CAM_TRIGG_TYPE 0.000000 -b'CH10_OPT\x00\x 0.000000 -b'CH11_OPT\x00\x 0.000000 -b'CH12_OPT\x00\x 0.000000 -b'CH7_OPT\x00\x0 0.000000 -b'CH8_OPT\x00\x0 0.000000 -b'CH9_OPT\x00\x0 0.000000 -b'CHUTE_ALT_MIN\ 10.000000 -b'CHUTE_ENABLED\ 0.000000 -b'CHUTE_SERVO_OF 1100.000000 -b'CHUTE_SERVO_ON 1300.000000 -b'CHUTE_TYPE\x00 0.000000 -b'CIRCLE_RADIUS\ 1000.000000 -b'CIRCLE_RATE\x0 20.000000 -b'CLI_ENABLED\x0 0.000000 -b'COMPASS_AUTODE 1.000000 -b'COMPASS_DEC\x0 -0.014093 -b'COMPASS_DEV_ID 66826.000000 -b'COMPASS_DIA2_X 0.973857 -b'COMPASS_DIA2_Y 1.006992 -b'COMPASS_DIA2_Z 1.043458 -b'COMPASS_DIA3_X 1.000000 -b'COMPASS_DIA3_Y 1.000000 -b'COMPASS_DIA3_Z 1.000000 -b'COMPASS_DIA_X\ 1.027986 -b'COMPASS_DIA_Y\ 1.020255 -b'COMPASS_DIA_Z\ 0.920527 -b'COMPASS_EXTERN 0.000000 -b'COMPASS_LEARN\ 0.000000 -b'COMPASS_MOT2_X 0.000000 -b'COMPASS_MOT2_Y 0.000000 -b'COMPASS_MOT2_Z 0.000000 -b'COMPASS_MOT3_X 0.000000 -b'COMPASS_MOT3_Y 0.000000 -b'COMPASS_MOT3_Z 0.000000 -b'COMPASS_MOTCT\ 0.000000 -b'COMPASS_MOT_X\ 0.000000 -b'COMPASS_MOT_Y\ 0.000000 -b'COMPASS_MOT_Z\ 0.000000 -b'COMPASS_ODI2_X -0.078261 -b'COMPASS_ODI2_Y 0.019758 -b'COMPASS_ODI2_Z -0.014983 -b'COMPASS_ODI3_X 0.000000 -b'COMPASS_ODI3_Y 0.000000 -b'COMPASS_ODI3_Z 0.000000 -b'COMPASS_ODI_X\ 0.026693 -b'COMPASS_ODI_Y\ 0.012649 -b'COMPASS_ODI_Z\ -0.032334 -b'COMPASS_OFS2_X -246.821381 -b'COMPASS_OFS2_Y 37.114498 -b'COMPASS_OFS2_Z -59.822403 -b'COMPASS_OFS3_X 0.000000 -b'COMPASS_OFS3_Y 0.000000 -b'COMPASS_OFS3_Z 0.000000 -b'COMPASS_OFS_X\ -83.513435 -b'COMPASS_OFS_Y\ 133.191055 -b'COMPASS_OFS_Z\ 249.285370 -b'COMPASS_ORIENT 0.000000 -b'COMPASS_PRIMAR 0.000000 -b'COMPASS_USE2\x 1.000000 -b'COMPASS_USE3\x 0.000000 -b'COMPASS_USE\x0 1.000000 -b'EKF_ABIAS_PNOI 0.000050 -b'EKF_ACC_PNOISE 0.250000 -b'EKF_ALT_NOISE\ 2.000000 -b'EKF_ALT_SOURCE 1.000000 -b'EKF_EAS_GATE\x 10.000000 -b'EKF_EAS_NOISE\ 1.400000 -b'EKF_FALLBACK\x 1.000000 -b'EKF_FLOW_DELAY 10.000000 -b'EKF_FLOW_GATE\ 3.000000 -b'EKF_FLOW_NOISE 0.250000 -b'EKF_GBIAS_PNOI 0.000001 -b'EKF_GLITCH_ACC 100.000000 -b'EKF_GLITCH_RAD 25.000000 -b'EKF_GND_GRADIE 2.000000 -b'EKF_GPS_CHECK\ 127.000000 -b'EKF_GPS_LIM_HD 0.300000 -b'EKF_GPS_LIM_HE 5.000000 -b'EKF_GPS_LIM_HS 0.300000 -b'EKF_GPS_LIM_NS 6.000000 -b'EKF_GPS_LIM_SE 1.000000 -b'EKF_GPS_LIM_VS 0.300000 -b'EKF_GPS_TYPE\x 0.000000 -b'EKF_GYRO_PNOIS 0.015000 -b'EKF_HGT_GATE\x 10.000000 -b'EKF_MAGB_PNOIS 0.000600 -b'EKF_MAGE_PNOIS 0.000600 -b'EKF_MAG_CAL\x0 3.000000 -b'EKF_MAG_GATE\x 3.000000 -b'EKF_MAG_NOISE\ 0.050000 -b'EKF_MAX_FLOW\x 2.500000 -b'EKF_POSNE_NOIS 0.500000 -b'EKF_POS_DELAY\ 200.000000 -b'EKF_POS_GATE\x 5.000000 -b'EKF_RNG_GATE\x 5.000000 -b'EKF_VELD_NOISE 0.700000 -b'EKF_VELNE_NOIS 0.500000 -b'EKF_VEL_DELAY\ 200.000000 -b'EKF_VEL_GATE\x 4.000000 -b'EKF_WIND_PNOIS 0.100000 -b'EKF_WIND_PSCAL 0.500000 -b'EPM_ENABLE\x00 0.000000 -b'EPM_GRAB\x00\x 1900.000000 -b'EPM_NEUTRAL\x0 1500.000000 -b'EPM_REGRAB\x00 0.000000 -b'EPM_RELEASE\x0 1100.000000 -b'ESC\x00\x00\x0 0.000000 -b'FENCE_ACTION\x 0.000000 -b'FENCE_ALT_MAX\ 45.720001 -b'FENCE_ENABLE\x 1.000000 -b'FENCE_MARGIN\x 0.000000 -b'FENCE_RADIUS\x 300.000000 -b'FENCE_TYPE\x00 1.000000 -b'FLOW_ENABLE\x0 0.000000 -b'FLOW_FXSCALER\ 0.000000 -b'FLOW_FYSCALER\ 0.000000 -b'FLOW_ORIENT_YA 0.000000 -b'FLTMODE1\x00\x 5.000000 -b'FLTMODE2\x00\x 5.000000 -b'FLTMODE3\x00\x 5.000000 -b'FLTMODE4\x00\x 5.000000 -b'FLTMODE5\x00\x 5.000000 -b'FLTMODE6\x00\x 5.000000 -b'FRAME\x00\x00\ 1.000000 -b'FS_BATT_CURR_R 0.000000 -b'FS_BATT_ENABLE 2.000000 -b'FS_BATT_MAH\x0 520.000000 -b'FS_BATT_VOLTAG 14.000000 -b'FS_EKF_ACTION\ 2.000000 -b'FS_EKF_THRESH\ 0.800000 -b'FS_GCS_ENABLE\ 0.000000 -b'FS_THR_ENABLE\ 1.000000 -b'FS_THR_VALUE\x 910.000000 -b'GND_ABS_PRESS\ 93451.992188 -b'GND_ALT_OFFSET 0.000000 -b'GND_TEMP\x00\x 40.160286 -b'GPS_AUTO_SWITC 1.000000 -b'GPS_INJECT_TO\ 127.000000 -b'GPS_MIN_DGPS\x 100.000000 -b'GPS_MIN_ELEV\x -100.000000 -b'GPS_NAVFILTER\ 6.000000 -b'GPS_SBAS_MODE\ 2.000000 -b'GPS_SBP_LOGMAS -256.000000 -b'GPS_TYPE2\x00\ 0.000000 -b'GPS_TYPE\x00\x 2.000000 -b'INS_ACC2OFFS_X 0.000270 -b'INS_ACC2OFFS_Y -0.007218 -b'INS_ACC2OFFS_Z 1.486737 -b'INS_ACC2SCAL_X 1.019099 -b'INS_ACC2SCAL_Y 0.989331 -b'INS_ACC2SCAL_Z 1.049657 -b'INS_ACC3OFFS_X 0.166762 -b'INS_ACC3OFFS_Y 0.020417 -b'INS_ACC3OFFS_Z -0.701632 -b'INS_ACC3SCAL_X 1.003736 -b'INS_ACC3SCAL_Y 0.995630 -b'INS_ACC3SCAL_Z 0.984779 -b'INS_ACCEL_FILT 20.000000 -b'INS_ACCOFFS_X\ 0.071313 -b'INS_ACCOFFS_Y\ -0.044823 -b'INS_ACCOFFS_Z\ 0.195376 -b'INS_ACCSCAL_X\ 0.997250 -b'INS_ACCSCAL_Y\ 0.997433 -b'INS_ACCSCAL_Z\ 0.986688 -b'INS_GYR2OFFS_X -0.020907 -b'INS_GYR2OFFS_Y 0.005205 -b'INS_GYR2OFFS_Z -0.016540 -b'INS_GYR3OFFS_X 0.043293 -b'INS_GYR3OFFS_Y -0.022708 -b'INS_GYR3OFFS_Z 0.189789 -b'INS_GYROFFS_X\ -0.029760 -b'INS_GYROFFS_Y\ -0.041224 -b'INS_GYROFFS_Z\ -0.015703 -b'INS_GYRO_FILTE 20.000000 -b'INS_PRODUCT_ID 5.000000 -b'LAND_REPOSITIO 1.000000 -b'LAND_SPEED\x00 50.000000 -b'LGR_SERVO_DEPL 1750.000000 -b'LGR_SERVO_RTRA 1250.000000 -b'LOG_BACKEND_TY 3.000000 -b'LOG_BITMASK\x0 131070.000000 -b'MAG_ENABLE\x00 1.000000 -b'MIS_RESTART\x0 0.000000 -b'MIS_TOTAL\x00\ 0.000000 -b'MNT_ANGMAX_PAN 4500.000000 -b'MNT_ANGMAX_ROL 4500.000000 -b'MNT_ANGMAX_TIL 0.000000 -b'MNT_ANGMIN_PAN -4500.000000 -b'MNT_ANGMIN_ROL -4500.000000 -b'MNT_ANGMIN_TIL -9000.000000 -b'MNT_DEFLT_MODE 3.000000 -b'MNT_JSTICK_SPD 0.000000 -b'MNT_LEAD_PTCH\ 0.000000 -b'MNT_LEAD_RLL\x 0.000000 -b'MNT_NEUTRAL_X\ 0.000000 -b'MNT_NEUTRAL_Y\ 0.000000 -b'MNT_NEUTRAL_Z\ 0.000000 -b'MNT_RC_IN_PAN\ 0.000000 -b'MNT_RC_IN_ROLL 0.000000 -b'MNT_RC_IN_TILT 6.000000 -b'MNT_RETRACT_X\ 0.000000 -b'MNT_RETRACT_Y\ 0.000000 -b'MNT_RETRACT_Z\ 0.000000 -b'MNT_STAB_PAN\x 0.000000 -b'MNT_STAB_ROLL\ 0.000000 -b'MNT_STAB_TILT\ 0.000000 -b'MNT_TYPE\x00\x 2.000000 -b'MOT_CURR_MAX\x 42.000000 -b'MOT_SPIN_ARMED 75.000000 -b'MOT_THR_MIX_MI 0.150000 -b'MOT_THST_BAT_M 12.000000 -b'MOT_THST_EXPO\ 0.800000 -b'MOT_THST_MAX\x 0.940000 -b'MOT_YAW_HEADRO 200.000000 -b'PHLD_BRAKE_ANG 3000.000000 -b'PHLD_BRAKE_RAT 8.000000 -b'PILOT_ACCEL_Z\ 100.000000 -b'PILOT_THR_BHV\ 1.000000 -b'PILOT_THR_FILT 2.000000 -b'PILOT_TKOFF_AL 75.000000 -b'PILOT_TKOFF_DZ 250.000000 -b'PILOT_VELZ_MAX 133.000000 -b'POS_XY_P\x00\x 0.700000 -b'POS_Z_P\x00\x0 1.000000 -b'PSC_ACC_XY_FIL 2.000000 -b'RALLY_LIMIT_KM 0.000000 -b'RALLY_TOTAL\x0 0.000000 -b'RATE_PIT_D\x00 0.008000 -b'RATE_PIT_FILT_ 40.000000 -b'RATE_PIT_IMAX\ 3000.000000 -b'RATE_PIT_I\x00 0.168000 -b'RATE_PIT_P\x00 0.168000 -b'RATE_RLL_D\x00 0.007200 -b'RATE_RLL_FILT_ 40.000000 -b'RATE_RLL_IMAX\ 3000.000000 -b'RATE_RLL_I\x00 0.116000 -b'RATE_RLL_P\x00 0.116000 -b'RATE_YAW_D\x00 0.000000 -b'RATE_YAW_FILT_ 7.600000 -b'RATE_YAW_IMAX\ 1000.000000 -b'RATE_YAW_I\x00 0.066000 -b'RATE_YAW_P\x00 0.660000 -b'RC10_DZ\x00\x0 0.000000 -b'RC10_FUNCTION\ 0.000000 -b'RC10_MAX\x00\x 1900.000000 -b'RC10_MIN\x00\x 1100.000000 -b'RC10_REV\x00\x 1.000000 -b'RC10_TRIM\x00\ 1500.000000 -b'RC11_DZ\x00\x0 0.000000 -b'RC11_FUNCTION\ 0.000000 -b'RC11_MAX\x00\x 1900.000000 -b'RC11_MIN\x00\x 1100.000000 -b'RC11_REV\x00\x 1.000000 -b'RC11_TRIM\x00\ 1500.000000 -b'RC12_DZ\x00\x0 0.000000 -b'RC12_FUNCTION\ 0.000000 -b'RC12_MAX\x00\x 1900.000000 -b'RC12_MIN\x00\x 1100.000000 -b'RC12_REV\x00\x 1.000000 -b'RC12_TRIM\x00\ 1500.000000 -b'RC13_DZ\x00\x0 0.000000 -b'RC13_FUNCTION\ 0.000000 -b'RC13_MAX\x00\x 1900.000000 -b'RC13_MIN\x00\x 1100.000000 -b'RC13_REV\x00\x 1.000000 -b'RC13_TRIM\x00\ 1500.000000 -b'RC14_DZ\x00\x0 0.000000 -b'RC14_FUNCTION\ 0.000000 -b'RC14_MAX\x00\x 1900.000000 -b'RC14_MIN\x00\x 1100.000000 -b'RC14_REV\x00\x 1.000000 -b'RC14_TRIM\x00\ 1500.000000 -b'RC1_DZ\x00\x00 10.000000 -b'RC1_MAX\x00\x0 2000.000000 -b'RC1_MIN\x00\x0 1000.000000 -b'RC1_REV\x00\x0 1.000000 -b'RC1_TRIM\x00\x 1500.000000 -b'RC2_DZ\x00\x00 10.000000 -b'RC2_MAX\x00\x0 2000.000000 -b'RC2_MIN\x00\x0 1000.000000 -b'RC2_REV\x00\x0 1.000000 -b'RC2_TRIM\x00\x 1500.000000 -b'RC3_DZ\x00\x00 30.000000 -b'RC3_MAX\x00\x0 1900.000000 -b'RC3_MIN\x00\x0 1000.000000 -b'RC3_REV\x00\x0 1.000000 -b'RC3_TRIM\x00\x 1500.000000 -b'RC4_DZ\x00\x00 10.000000 -b'RC4_MAX\x00\x0 2000.000000 -b'RC4_MIN\x00\x0 1000.000000 -b'RC4_REV\x00\x0 1.000000 -b'RC4_TRIM\x00\x 1500.000000 -b'RC5_DZ\x00\x00 0.000000 -b'RC5_FUNCTION\x 0.000000 -b'RC5_MAX\x00\x0 1900.000000 -b'RC5_MIN\x00\x0 1100.000000 -b'RC5_REV\x00\x0 1.000000 -b'RC5_TRIM\x00\x 1500.000000 -b'RC6_DZ\x00\x00 0.000000 -b'RC6_FUNCTION\x 0.000000 -b'RC6_MAX\x00\x0 1520.000000 -b'RC6_MIN\x00\x0 1000.000000 -b'RC6_REV\x00\x0 1.000000 -b'RC6_TRIM\x00\x 1000.000000 -b'RC7_DZ\x00\x00 0.000000 -b'RC7_FUNCTION\x 0.000000 -b'RC7_MAX\x00\x0 1900.000000 -b'RC7_MIN\x00\x0 1100.000000 -b'RC7_REV\x00\x0 1.000000 -b'RC7_TRIM\x00\x 1500.000000 -b'RC8_DZ\x00\x00 0.000000 -b'RC8_FUNCTION\x 0.000000 -b'RC8_MAX\x00\x0 1900.000000 -b'RC8_MIN\x00\x0 1100.000000 -b'RC8_REV\x00\x0 1.000000 -b'RC8_TRIM\x00\x 1500.000000 -b'RC9_DZ\x00\x00 0.000000 -b'RC9_FUNCTION\x 0.000000 -b'RC9_MAX\x00\x0 1900.000000 -b'RC9_MIN\x00\x0 1100.000000 -b'RC9_REV\x00\x0 1.000000 -b'RC9_TRIM\x00\x 1500.000000 -b'RCMAP_PITCH\x0 2.000000 -b'RCMAP_ROLL\x00 1.000000 -b'RCMAP_THROTTLE 3.000000 -b'RCMAP_YAW\x00\ 4.000000 -b'RC_FEEL_RP\x00 20.000000 -b'RC_SPEED\x00\x 490.000000 -b'RELAY_DEFAULT\ 0.000000 -b'RELAY_PIN2\x00 55.000000 -b'RELAY_PIN3\x00 -1.000000 -b'RELAY_PIN4\x00 -1.000000 -b'RELAY_PIN\x00\ 54.000000 -b'RNGFND2_FUNCTI 0.000000 -b'RNGFND2_GNDCLE 10.000000 -b'RNGFND2_MAX_CM 700.000000 -b'RNGFND2_MIN_CM 20.000000 -b'RNGFND2_OFFSET 0.000000 -b'RNGFND2_PIN\x0 -1.000000 -b'RNGFND2_RMETRI 1.000000 -b'RNGFND2_SCALIN 3.000000 -b'RNGFND2_SETTLE 0.000000 -b'RNGFND2_STOP_P -1.000000 -b'RNGFND2_TYPE\x 0.000000 -b'RNGFND_FUNCTIO 0.000000 -b'RNGFND_GAIN\x0 0.800000 -b'RNGFND_GNDCLEA 10.000000 -b'RNGFND_MAX_CM\ 700.000000 -b'RNGFND_MIN_CM\ 20.000000 -b'RNGFND_OFFSET\ 0.000000 -b'RNGFND_PIN\x00 -1.000000 -b'RNGFND_PWRRNG\ 0.000000 -b'RNGFND_RMETRIC 1.000000 -b'RNGFND_SCALING 3.000000 -b'RNGFND_SETTLE\ 0.000000 -b'RNGFND_STOP_PI -1.000000 -b'RNGFND_TYPE\x0 0.000000 -b'RSSI_PIN\x00\x -1.000000 -b'RSSI_RANGE\x00 5.000000 -b'RTL_ALT\x00\x0 2500.000000 -b'RTL_ALT_FINAL\ 0.000000 -b'RTL_CLIMB_MIN\ 1000.000000 -b'RTL_CONE_SLOPE 3.000000 -b'RTL_LOIT_TIME\ 5000.000000 -b'RTL_SPEED\x00\ 1000.000000 -b'SCHED_DEBUG\x0 0.000000 -b'SERIAL0_BAUD\x 115.000000 -b'SERIAL1_BAUD\x 921.000000 -b'SERIAL1_PROTOC 1.000000 -b'SERIAL2_BAUD\x 57.000000 -b'SERIAL2_PROTOC 0.000000 -b'SERIAL3_BAUD\x 38.000000 -b'SERIAL3_PROTOC 5.000000 -b'SERIAL4_BAUD\x 230.000000 -b'SERIAL4_PROTOC 1.000000 -b'SIMPLE\x00\x00 0.000000 -b'SR0_EXTRA1\x00 0.000000 -b'SR0_EXTRA2\x00 0.000000 -b'SR0_EXTRA3\x00 0.000000 -b'SR0_EXT_STAT\x 0.000000 -b'SR0_PARAMS\x00 0.000000 -b'SR0_POSITION\x 0.000000 -b'SR0_RAW_CTRL\x 0.000000 -b'SR0_RAW_SENS\x 20.000000 -b'SR0_RC_CHAN\x0 0.000000 -b'SR1_EXTRA1\x00 4.000000 -b'SR1_EXTRA2\x00 4.000000 -b'SR1_EXTRA3\x00 4.000000 -b'SR1_EXT_STAT\x 4.000000 -b'SR1_PARAMS\x00 10.000000 -b'SR1_POSITION\x 4.000000 -b'SR1_RAW_CTRL\x 4.000000 -b'SR1_RAW_SENS\x 4.000000 -b'SR1_RC_CHAN\x0 4.000000 -b'SR2_EXTRA1\x00 0.000000 -b'SR2_EXTRA2\x00 0.000000 -b'SR2_EXTRA3\x00 0.000000 -b'SR2_EXT_STAT\x 0.000000 -b'SR2_PARAMS\x00 0.000000 -b'SR2_POSITION\x 0.000000 -b'SR2_RAW_CTRL\x 0.000000 -b'SR2_RAW_SENS\x 0.000000 -b'SR2_RC_CHAN\x0 0.000000 -b'STB_PIT_P\x00\ 8.000000 -b'STB_RLL_P\x00\ 9.500000 -b'STB_YAW_P\x00\ 7.000000 -b'SUPER_SIMPLE\x 0.000000 -b'SYSID_MYGCS\x0 255.000000 -b'SYSID_SW_MREV\ 120.000000 -b'SYSID_SW_TYPE\ 10.000000 -b'SYSID_THISMAV\ 1.000000 -b'TELEM_DELAY\x0 0.000000 -b'TERRAIN_ENABLE 1.000000 -b'TERRAIN_SPACIN 100.000000 -b'THR_DZ\x00\x00 10.000000 -b'THR_MID\x00\x0 400.000000 -b'THR_MIN\x00\x0 130.000000 -b'TUNE\x00\x00\x 0.000000 -b'TUNE_HIGH\x00\ 1000.000000 -b'TUNE_LOW\x00\x 0.000000 -b'VEL_XY_FILT_HZ 5.000000 -b'VEL_XY_IMAX\x0 1000.000000 -b'VEL_XY_I\x00\x 0.500000 -b'VEL_XY_P\x00\x 1.400000 -b'VEL_Z_P\x00\x0 5.000000 -b'WPNAV_ACCEL\x0 340.000000 -b'WPNAV_ACCEL_Z\ 160.000000 -b'WPNAV_LOIT_JER 1000.000000 -b'WPNAV_LOIT_MAX 229.000000 -b'WPNAV_LOIT_MIN 108.000000 -b'WPNAV_LOIT_SPE 500.000000 -b'WPNAV_RADIUS\x 200.000000 -b'WPNAV_SPEED\x0 1100.000000 -b'WPNAV_SPEED_DN 240.000000 -b'WPNAV_SPEED_UP 320.000000 -b'WP_YAW_BEHAVIO 2.000000 diff --git a/src/drivers/MAVLinkServer/mav.tlog b/src/drivers/MAVLinkServer/mav.tlog deleted file mode 100644 index 1a7e79278..000000000 --- a/src/drivers/MAVLinkServer/mav.tlog +++ /dev/null @@ -1 +0,0 @@ -b'\x00\x05N\xb1v\xa3,W\xfe\t\x00\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa1\xdf'b'\x00\x05N\xb1v\xa3-\x1c\xfe\t\xff\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03&\x01'b'\x00\x05N\xb1v\xa3/\xc3\xfe\x06\x01\xff\x00B\x04\x00\x01\x00\x00\x01\x12,'b'\x00\x05N\xb1v\xa3\xc1\x84\xfe\x1c\x00\x01\x01!g2\x03\x00\xed\xa5\x02\x18\xf3\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfe\xff\x02\x00\x00\x00\xa4\x04\x1f;'b'\x00\x05N\xb1v\xa3\xc2\x1c\xfe\x1c\x01\x01\x01\x1e\x0f3\x03\x00&F|\xbd\x04^\x81\xba\xdcyT>\xcb\xda\x9f:\x9c\xdbP\xba\x96y\x19\xba\x06\xa5'b'\x00\x05N\xb1v\xa3\xc2\x80\xfe\x18\x02\x01\x01\xb2\x98\xa7\x82\xbd%\x05\x1b\xbb\xbe\xf8P>\x8f\xb2)D\xed\xa5\x02\x18\xf3\xe7\xb8\xfd\x1d\x91'b'\x00\x05N\xb1v\xa3\xc2\xd4\xfe\x14\x03\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\xd8\x9e$\xb9F\xfe\xc3\xb9\x8ce\x03:\x0e\xb6'b'\x00\x05N\xb1v\xa3\xc4\xd0\xfe\x18\x08\x01\x01\xb2V\x94\x82\xbd\xb3c\x17\xbbf\xf6P>G\xb1)D\xed\xa5\x02\x18\xf3\xe7\xb8\xfdd\x86'b'\x00\x05N\xb1v\xa3\xc5\x1c\xfe\x14\t\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\n\xd7#\xbc\x0b\x00\x00\x00G\x17'b'\x00\x05N\xb1v\xa5+\xa8\xfe\x1c\n\x01\x01!03\x03\x00\xed\xa5\x02\x18\xf3\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfe\xff\x02\x00\xff\xff\xa5\x04\xadm'b'\x00\x05N\xb1v\xa5,$\xfe\x1c\x0b\x01\x01\x1e\xd83\x03\x001\x16|\xbd\xd0\x9a~\xbax\x96T>\xaa\xcfq7\t\xd2$\xba2\x8d\x11:Gr'b'\x00\x05N\xb1v\xa5,|\xfe\x18\x0c\x01\x01\xb2\x87\x8c\x82\xbd\xc3\x9d\x19\xbb\x0c\xffP>\n\xa7)D\xed\xa5\x02\x18\xf3\xe7\xb8\xfd\x10\x82'b'\x00\x05N\xb1v\xa5,\xdc\xfe\x1c\r\x01\x01\xa3\x8ei\xfd\xb3\x8c\xf7P\xb9\x8e\xf1\xea\xb8\x00\x00\x00\x00\x00\x00\x00\x006\x06\xe3:n\x06\xaa;\xf9\x92'b'\x00\x05N\xb1v\xa5-4\xfe\x03\x0e\x01\x01\xa5\xc5\x14\x00*\x0b'b'\x00\x05N\xb1v\xa5-\x84\xfe\x0c\x0f\x01\x01\x02\xe0\xc2\xeav\xb1N\x05\x00\xed3\x03\x00;p'b'\x00\x05N\xb1v\xa5-\xdc\xfe\x16\x10\x01\x01\x88\xed\xa5\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x07'b'\x00\x05N\xb1v\xa5.0\xfe\x16\x11\x01\x01\xc1\xaa\xd0$<^/o7\xcf$\x8a;\xc0\xf1\xa6=\x00\x00\x00\x00\xa5\x03ND'b'\x00\x05N\xb1v\xa5D\xfb\xfe5\x02\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\rX'b'\x00\x05N\xb1v\xa5\x80\x03\xfe!\x03\xff\x00L\x8d\x1d\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00`\xe0'b'\x00\x05N\xb1v\xa6\xd1\xe4\xfe\x03\x12\x01\x01Ms\x00\x00\xd7\xed'b'\x00\x05N\xb1v\xa6\xe6\xcc\xfe\x1a\x13\x01\x01\x1bA\xc2\x83\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01{\x9e'b'\x00\x05N\xb1v\xa6\xe7@\xfe\x16\x14\x01\x01t)4\x03\x00\x03\x007\x00)\xfc\x02\x00\xff\xff\x00\x00\x07\x01\xa0\xff4\x02u~'b'\x00\x05N\xb1v\xa6\xe7\xa4\xfe\x16\x15\x01\x01\x81)4\x03\x00\x01\x00@\x00\x1e\xfc\xfd\xff\x02\x00\xfe\xff+\x03\x88\x00n\x02f\x98'b'\x00\x05N\xb1v\xa6\xe8\x04\xfe\x0e\x16\x01\x01\x1d)4\x03\x00\xbe\xa3iD{\x14\x1e= \x10\x12\xfc'b'\x00\x05N\xb1v\xa6\xe8`\xfe\x0e\x17\x01\x01\x89)4\x03\x00}\xe6iD\xb8\x1e\xa9>\xe5\x14\xeb\xc4'b'\x00\x05N\xb1v\xa6\xe8\xd0\xfe\x1f\x18\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00v\x00#?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T"]'b'\x00\x05N\xb1v\xa6\xfdh\xfe\x06\x19\x01\x01}\xc8\x14\x00\x00\x03\x00\xbc\t'b'\x00\x05N\xb1v\xa6\xfe\x08\xfe\x04\x1a\x01\x01\x98\x00\x00\xa0\x8ay\xe7'b'\x00\x05N\xb1v\xa6\xfe\x9c\xfe\x02\x1b\x01\x01*\x00\x00\xd72'b'\x00\x05N\xb1v\xa6\xffP\xfe\x1e\x1c\x01\x01\x18\xa8\x04\x83\x0c\x00\x00\x00\x00\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xfbd'b'\x00\x05N\xb1v\xa6\xff\xfc\xfe\x1a\x1d\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00M\x80'b'\x00\x05N\xb1v\xa7\x00\x8c\xfe\x08\x1e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x07;'b'\x00\x05N\xb1v\xa7\x01(\xfe\x15\x1f\x01\x01$\x0b\xc5\x83\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e\xf9'b'\x00\x05N\xb1v\xa7\x01\xcc\xfe\x16 \x01\x01#*4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00`5'b'\x00\x05N\xb1v\xa7Yk\xfe5\x04\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x93w'b'\x00\x05N\xb1v\xa7\x83\x87\xfe!\x05\xff\x00L\x8d\x1d\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe3\x06'b'\x00\x05N\xb1v\xa8r\x10\xfe\x14!\x01\x01J\n\xd7#<\n\xd7#\x83\x1f\xd4\xb8\xc2\x136\xb91P1\xb83='b'\x00\x05N\xb1v\xa9\xf4\\\xfe\x18%\x01\x01\xb2\x87\x86\x82\xbdn\x8c\x1e\xbb\xd2\xe4P>\xcd\xac)D\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\xf0\xbc'b'\x00\x05N\xb1v\xa9\xf4\xb4\xfe\x1c&\x01\x01\xa3B\x10\x1f\xb6\xda\xbfL\xb9\xfd\x8e\xe8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x14)\xdd:\x1e\x18\xbc;\x9e\xc7'b"\x00\x05N\xb1v\xa9\xf4\xfc\xfe\x03'\x01\x01\xa5\xc8\x14\x00V\x9a"b'\x00\x05N\xb1v\xa9\xf5D\xfe\x0c(\x01\x01\x02`l\xeev\xb1N\x05\x00\xde4\x03\x00N\x9f'b'\x00\x05N\xb1v\xa9\xf5\x98\xfe\x16)\x01\x01\x88\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3Q'b'\x00\x05N\xb1v\xa9\xf5\xe8\xfe\x16*\x01\x01\xc1\xfdX2\xe6\x14!\xdb'b'\x00\x05N\xb1v\xa9\xf7\xdc\xfe\x1f0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc0\x8c'b'\x00\x05N\xb1v\xa9\xf8D\xfe\x061\x01\x01}\xc6\x14\x00\x00\x03\x00\xbd\xd1'b'\x00\x05N\xb1v\xa9\xf8\x98\xfe\x042\x01\x01\x98\x00\x00\xa0\x8a\x8ao'b'\x00\x05N\xb1v\xa9\xf8\xd8\xfe\x023\x01\x01*\x00\x00\xb8\x8f'b'\x00\x05N\xb1v\xa9\xf9,\xfe\x1e4\x01\x01\x18\xd0\x15\x86\x0c\x00\x00\x00\x00\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cG\x1b'b'\x00\x05N\xb1v\xa9\xf9|\xfe\x1a5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x93\xfe'b'\x00\x05N\xb1v\xa9\xf9\xc4\xfe\x086\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xa3'b'\x00\x05N\xb1v\xa9\xfa\x10\xfe\x157\x01\x01$\x8dp\x87\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Hg'b'\x00\x05N\xb1v\xa9\xfa`\xfe\x168\x01\x01#\x1a5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb3~'b'\x00\x05N\xb1v\xa9\xfa\xa4\xfe\x039\x01\x01Ms\x00\x00K\xfc'b'\x00\x05N\xb1v\xabaX\xfe\x14:\x01\x01J\n\xd7#<\n\xd7#\xceT\xc0:\x19\r\x87\xba\xee$\x839i\xeb'b'\x00\x05N\xb1v\xad\x04X\xfe\x18>\x01\x01\xb2\x87Q\x82\xbd\x10\x8c\x1e\xbb\xf0\xefP>\x14\xae)D\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x9e\xf4'b'\x00\x05N\xb1v\xad\x04\xac\xfe\x1c?\x01\x01\xa3\xf2\r\x9b\xb6\xad\x8aH\xb9B%\xe6\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf29\xda:\xcf\x97\xbd;\x95,'b'\x00\x05N\xb1v\xad\x04\xf0\xfe\x03@\x01\x01\xa5\xc8\x14\x00Y\xd5'b'\x00\x05N\xb1v\xad\x05<\xfe\x0cA\x01\x01\x02\xe0\x15\xf2v\xb1N\x05\x00\xce5\x03\x00-&'b'\x00\x05N\xb1v\xad\x05\x8c\xfe\x16B\x01\x01\x88\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00g 'b'\x00\x05N\xb1v\xad\x05\xd8\xfe\x16C\x01\x01\xc1\xbfP7<\x1a\xc4q7}\xa8\xb0:\xed\xc1\xbc=\x00\x00\x00\x00\xa5\x03!/'b'\x00\x05N\xb1v\xad\x8d\x87\xfe5\n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01*\xca'b'\x00\x05N\xb1v\xad\x90\x03\xfe!\x0b\xff\x00LY$\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00}\xaf'b'\x00\x05N\xb1v\xaes\x1c\xfe\x1aD\x01\x01\x1b*\x1b\x8b\x0c\x00\x00\x00\x00\x03\x002\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01@\x08'b'\x00\x05N\xb1v\xaes\x8c\xfe\x16E\x01\x01t\x0b6\x03\x00\r\x007\x00%\xfc\x00\x00\x02\x00\x04\x00\x07\x01\xa0\xff4\x02A='b'\x00\x05N\xb1v\xaes\xf8\xfe\x16F\x01\x01\x81\x0b6\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x8e\x00k\x02$\xca'b'\x00\x05N\xb1v\xaetH\xfe\x0eG\x01\x01\x1d\x0b6\x03\x00K\xa4iD\xaeGA=!\x10\xf1\xc5'b'\x00\x05N\xb1v\xaet\x98\xfe\x0eH\x01\x01\x89\x0b6\x03\x007\xe6iD\x85\xeb\xa6>\xe6\x14zI'b'\x00\x05N\xb1v\xaet\xf0\xfe\x1fI\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x8a\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T|\x00'b'\x00\x05N\xb1v\xaeuD\xfe\x06J\x01\x01}\xc5\x14\x00\x00\x03\x00\x00e'b'\x00\x05N\xb1v\xaeu\x90\xfe\x04K\x01\x01\x98\x00\x00\xa0\x8as\xb3'b'\x00\x05N\xb1v\xaeu\xd4\xfe\x02L\x01\x01*\x00\x00\x00\x87'b'\x00\x05N\xb1v\xaev(\xfe\x1eM\x01\x01\x18\x10#\x89\x0c\x00\x00\x00\x00\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf3\xcd'b'\x00\x05N\xb1v\xaevx\xfe\x1aN\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbc:'b'\x00\x05N\xb1v\xaev\xc0\xfe\x08O\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00+\x07'b'\x00\x05N\xb1v\xaew\x10\xfe\x15P\x01\x01$\xe7\x1d\x8b\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x9e'b'\x00\x05N\xb1v\xaew\\\xfe\x16Q\x01\x01#\x0b6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00@"'b'\x00\x05N\xb1v\xaew\xa4\xfe\x03R\x01\x01Ms\x00\x00&\x88'b'\x00\x05N\xb1v\xaf\x90\xe3\xfe5\x0c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb4\xe5'b'\x00\x05N\xb1v\xaf\xcf?\xfe!\r\xff\x00LY$\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfeI'b'\x00\x05N\xb1v\xaf\xf9\x08\xfe\x14S\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x85\xe6'b'\x00\x05N\xb1v\xaf\xf9\x8c\xfe\x1cT\x01\x01!S6\x03\x00\xee\xa5\x02\x18\xf0\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfe\xff\x03\x00\xff\xff\xa6\x04\x84\xb7'b'\x00\x05N\xb1v\xaf\xfa\x00\xfe\x1cU\x01\x01\x1e\xab6\x03\x00\x15\xac{\xbd\xf4\xc8\x83\xba\xbf\xadT>h\x875:y\xff\xa5\xba\x8d\xa5\x839\x7f\xbd'b'\x00\x05N\xb1v\xaf\xfad\xfe\x18V\x01\x01\xb2]]\x82\xbd\xe0D\x1e\xbb\xe6\xeaP>p\xad)D\xee\xa5\x02\x18\xf0\xe7\xb8\xfd^\x19'b'\x00\x05N\xb1v\xaf\xfa\xf8\xfe\x12W\x01\x01\xfc\xb76\x03\x004\x00\x01\x00ARMMASK\x00Wr\xba\xe3'b'\x00\x05N\xb1v\xb0\xf8\x1f\xfe\t\x0e\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xaf>'b'\x00\x05N\xb1v\xb1\x88\xaf\xfe\x02\x0f\xff\x00\x15\x01\x01\xb1\x11'b'\x00\x05N\xb1v\xb1\x89l\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae'b'\x00\x05N\xb1v\xb1\x9d\xdc\xfe\tY\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03*,'b'\x00\x05N\xb1v\xb1\x9eD\xfe\x1cZ\x01\x01\xa3\xc3]\xe6\xb6\xc9WD\xb9\xc6\xc1\xe3\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf3/\xcd:d+\xb7;b\x96'b'\x00\x05N\xb1v\xb1\x9e\x8c\xfe\x03[\x01\x01\xa5\xc5\x14\x00\xc2\xa2'b'\x00\x05N\xb1v\xb1\x9e\xd4\xfe\x0c\\\x01\x01\x02`\xbf\xf5v\xb1N\x05\x00\xbf6\x03\x00\x9e.'b'\x00\x05N\xb1v\xb1\x9f(\xfe\x16]\x01\x01\x88\xee\xa5\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00p\x8a'b'\x00\x05N\xb1v\xb1\x9fx\xfe\x12^\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00*\x9c'b'\x00\x05N\xb1v\xb1\x9f\xc8\xfe\x16_\x01\x01\xc1B\xf9:<\x80\xadt79x\x8b;\x1d\x81\xb0=\x00\x00\x00\x00\xa5\x03\x82\xbb'b'\x00\x05N\xb1v\xb1\xa0P\xfe\x1aa\x01\x01\x1b8\xc6\x8e\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffl\x01\x9f\x00'b'\x00\x05N\xb1v\xb1\xa0\xac\xfe\x16b\x01\x01t\xfb6\x03\x00\x08\x00:\x002\xfc\x00\x00\x01\x00\x00\x00\x07\x01\xa0\xff3\x02\xbaF'b'\x00\x05N\xb1v\xb1\xa1\x00\xfe\x16c\x01\x01\x81\xfb6\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff*\x03\x86\x00i\x02\xcd\x17'b'\x00\x05N\xb1v\xb1\xa1H\xfe\x0ed\x01\x01\x1d\xfb6\x03\x00O\xa3iDp=\x02=!\x10a\x13'b'\x00\x05N\xb1v\xb1\xa1\x94\xfe\x0ee\x01\x01\x89\xfb6\x03\x00\x81\xe6iDp=\xa9>\xe7\x14\x99p'b'\x00\x05N\xb1v\xb1\xa1\xe8\xfe\x1ff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc1\x96'b'\x00\x05N\xb1v\xb1\xa28\xfe\x06g\x01\x01}\xc8\x14\x00\x00\x03\x00\xab\x1e'b'\x00\x05N\xb1v\xb1\xa2\x80\xfe\x04h\x01\x01\x98\x00\x00\xa0\x8aM\x92'b'\x00\x05N\xb1v\xb1\xa2\xc0\xfe\x02i\x01\x01*\x00\x00 \x14'b'\x00\x05N\xb1v\xb1\xa3\x14\xfe\x1ej\x01\x01\x1884\x8c\x0c\x00\x00\x00\x00\xee\xa5\x02\x18\xf0\xe7\xb8\xfd\x1ca\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x06\x15'b'\x00\x05N\xb1v\xb1\xa3d\xfe\x1ak\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00s\x94'b'\x00\x05N\xb1v\xb1\xa3\xa8\xfe\x08l\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00|\xbc'b'\x00\x05N\xb1v\xb1\xa3\xf4\xfe\x15m\x01\x01$S\xc8\x8e\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xf9'b'\x00\x05N\xb1v\xb1\xa4@\xfe\x16n\x01\x01#\xfc6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x004s'b'\x00\x05N\xb1v\xb2\x1c\xc3\xfe5\x0f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01{\xf2'b'\x00\x05N\xb1v\xb2ok\xfe!\x11\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x10V'b'\x00\x05N\xb1v\xb2\xf3\x0c\xfe3o\x01\x01\xfd\x01APM:Copter solo-1.3.1 (7e9206cc)\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80R'b'\x00\x05N\xb1v\xb2\xf3\xb0\xfe3p\x01\x01\xfd\x01PX4: 5e693274 NuttX: d48fa307\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xd1'b'\x00\x05N\xb1v\xb3/\xfc\xfe3q\x01\x01\xfd\x01Frame: QUAD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P|'b'\x00\x05N\xb1v\xb30\xbc\xfe3r\x01\x01\xfd\x01PX4v2 003E002D 33345115 32353634\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xad'b'\x00\x05N\xb1v\xb31T\xfe\t\xb6\n\x00m\x1f\x00\x00\x00\x00\xd3\x00\x00\x00\x1d*'b'\x00\x05N\xb1v\xb31\xac\xfe\x03s\x01\x01Ms\x00\x00i\xbf'b"\x00\x05N\xb1v\xb3\xc0\xe3\xfe%\x12\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x0b\x9f"b'\x00\x05N\xb1v\xb453\xfe5\x13\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x18\x81'b'\x00\x05N\xb1v\xb4s\x1b\xfe!\x14\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdaG'b'\x00\x05N\xb1v\xb4t\x14\xfe\x19t\x01\x01\x16\x00\x00\xf0B\xf7\x01\x00\x00SYSID_SW_MREV\x00\x00\x00\x04\xb4\x84'b'\x00\x05N\xb1v\xb4t\x8c\xfe\x19u\x01\x01\x16\x00\x00 A\xf7\x01\x01\x00SYSID_SW_TYPE\x00\x00\x00\x02l\xe0'b'\x00\x05N\xb1v\xb4t\xe0\xfe\x19v\x01\x01\x16\x00\x00\x80?\xf7\x01\x02\x00SYSID_THISMAV\x00\x00\x00\x04\xf2\x1f'b'\x00\x05N\xb1v\xb4u0\xfe\x19w\x01\x01\x16\x00\x00\x7fC\xf7\x01\x03\x00SYSID_MYGCS\x00\x00\x00\x00\x00\x04\xabX'b'\x00\x05N\xb1v\xb4u|\xfe\x19x\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x04\x00CLI_ENABLED\x00\x00\x00\x00\x00\x02t\xab'b'\x00\x05N\xb1v\xb4u\xc8\xfe\x19y\x01\x01\x16\x00\x00\x00@\xf7\x01\x05\x00PILOT_THR_FILT\x00\x00\t\x01\xa0'b'\x00\x05N\xb1v\xb4v$\xfe\x19z\x01\x01\x16\x00\x00\x96B\xf7\x01\x06\x00PILOT_TKOFF_ALT\x00\t\x9d\xb9'b'\x00\x05N\xb1v\xb4v|\xfe\x19{\x01\x01\x16\x00\x00zC\xf7\x01\x07\x00PILOT_TKOFF_DZ\x00\x00\x04\x8e|'b'\x00\x05N\xb1v\xb4v\xcc\xfe\x19|\x01\x01\x16\x00\x00\x80?\xf7\x01\x08\x00PILOT_THR_BHV\x00\x00\x00\x04\xacv'b'\x00\x05N\xb1v\xb4w\x1c\xfe\x19}\x01\x01\x16\x00\x00\xe6B\xf7\x01\t\x00SERIAL0_BAUD\x00\x00\x00\x00\x06\x98&'b'\x00\x05N\xb1v\xb4wp\xfe\x19~\x01\x01\x16\x00\x00\x80?\xf7\x01\n\x00SERIAL1_PROTOCOL\x02\xfe\x14'b'\x00\x05N\xb1v\xb4w\xc0\xfe\x19\x7f\x01\x01\x16\x00@fD\xf7\x01\x0b\x00SERIAL1_BAUD\x00\x00\x00\x00\x06.\xae'b'\x00\x05N\xb1v\xb4x\x14\xfe\x19\x80\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x0c\x00SERIAL2_PROTOCOL\x02\x1eO'b'\x00\x05N\xb1v\xb4x`\xfe\x19\x81\x01\x01\x16\x00\x00dB\xf7\x01\r\x00SERIAL2_BAUD\x00\x00\x00\x00\x06\x87\x1e'b'\x00\x05N\xb1v\xb4x\xb0\xfe\x19\x82\x01\x01\x16\x00\x00\xa0@\xf7\x01\x0e\x00SERIAL3_PROTOCOL\x02\x94\xa5'b'\x00\x05N\xb1v\xb4y\x00\xfe\x19\x83\x01\x01\x16\x00\x00\x18B\xf7\x01\x0f\x00SERIAL3_BAUD\x00\x00\x00\x00\x06\xd2\x0f'b'\x00\x05N\xb1v\xb4yP\xfe\x19\x84\x01\x01\x16\x00\x00\x80?\xf7\x01\x10\x00SERIAL4_PROTOCOL\x02\x8a\x9e'b'\x00\x05N\xb1v\xb4y\xa0\xfe\x19\x85\x01\x01\x16\x00\x00fC\xf7\x01\x11\x00SERIAL4_BAUD\x00\x00\x00\x00\x06\xc7\x97'b'\x00\x05N\xb1v\xb4y\xf0\xfe\x03\x86\x01\x01/\xff\x00\x00E\x13'b'\x00\x05N\xb1v\xb4z\x80\xfe\x03\x87\x01\x01Ms\x00\x00,\xea'b'\x00\x05N\xb1v\xb6\x17\xe8\xfe\x19\x88\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x12\x00TELEM_DELAY\x00\x00\x00\x00\x00\x02\xb5W'b'\x00\x05N\xb1v\xb6\x18l\xfe\x19\x89\x01\x01\x16\x00@\x1cE\xf7\x01\x13\x00RTL_ALT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf9\\'b'\x00\x05N\xb1v\xb6\x18\xc8\xfe\x19\x8a\x01\x01\x16\x00\x00@@\xf7\x01\x14\x00RTL_CONE_SLOPE\x00\x00\tt\x94'b'\x00\x05N\xb1v\xb6\x19 \xfe\x19\x8b\x01\x01\x16\x00\x00zD\xf7\x01\x15\x00RTL_SPEED\x00\x00\x00\x00\x00\x00\x00\x04\xb1/'b'\x00\x05N\xb1v\xb6\x19\x80\xfe\x19\x8c\x01\x01\x16\xcd\xccL?\xf7\x01\x16\x00RNGFND_GAIN\x00\x00\x00\x00\x00\t6\xeb'b'\x00\x05N\xb1v\xb6\x19\xd4\xfe\x19\x8d\x01\x01\x16\x00\x00\x00@\xf7\x01\x17\x00FS_BATT_ENABLE\x00\x00\x02EG'b'\x00\x05N\xb1v\xb6\x1a<\xfe\x19\x8e\x01\x01\x16\x00\x00`A\xf7\x01\x18\x00FS_BATT_VOLTAGE\x00\t\x82:'b'\x00\x05N\xb1v\xb6\x1a\x98\xfe\x19\x8f\x01\x01\x16\x00\x00\x02D\xf7\x01\x19\x00FS_BATT_MAH\x00\x00\x00\x00\x00\ti\r'b'\x00\x05N\xb1v\xb6\x1a\xf0\xfe\x19\x90\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1a\x00FS_BATT_CURR_RTL\te\x1c'b'\x00\x05N\xb1v\xb6\x1bD\xfe\x19\x91\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1b\x00FS_GCS_ENABLE\x00\x00\x00\x02\xab8'b'\x00\x05N\xb1v\xb6\x1b\x94\xfe\x19\x92\x01\x01\x16\x00\x00\x80?\xf7\x01\x1c\x00MAG_ENABLE\x00\x00\x00\x00\x00\x00\x02\xd5]'b'\x00\x05N\xb1v\xb6\x1b\xe8\xfe\x19\x93\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1d\x00SUPER_SIMPLE\x00\x00\x00\x00\x02K\x92'b'\x00\x05N\xb1v\xb6\x1c8\xfe\x19\x94\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1e\x00RTL_ALT_FINAL\x00\x00\x00\x04\x16\x9f'b'\x00\x05N\xb1v\xb6\x1c\x88\xfe\x19\x95\x01\x01\x16\x00\x00zD\xf7\x01\x1f\x00RTL_CLIMB_MIN\x00\x00\x00\x04\xed\x80'b'\x00\x05N\xb1v\xb6\x1c\xdc\xfe\x19\x96\x01\x01\x16\x00\x00\x80\xbf\xf7\x01 \x00RSSI_PIN\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0f\x1d'b'\x00\x05N\xb1v\xb6\x1d,\xfe\x19\x97\x01\x01\x16\x00\x00\xa0@\xf7\x01!\x00RSSI_RANGE\x00\x00\x00\x00\x00\x00\t\xf6)'b'\x00\x05N\xb1v\xb6\x1d\x80\xfe\x19\x98\x01\x01\x16\x00\x00\x00@\xf7\x01"\x00WP_YAW_BEHAVIOR\x00\x02#u'b'\x00\x05N\xb1v\xb6\x1d\xd0\xfe\x19\x99\x01\x01\x16\x00@\x9cE\xf7\x01#\x00RTL_LOIT_TIME\x00\x00\x00\x06\xae1'b'\x00\x05N\xb1v\xb6Y\xef\xfe5\x15\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x86\xae'b'\x00\x05N\xb1v\xb6\x98\x07\xfe!\x16\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\x1a'b'\x00\x05N\xb1v\xb7\x9a\xe8\xfe\x19\x9a\x01\x01\x16\x00\x00HB\xf7\x01$\x00LAND_SPEED\x00\x00\x00\x00\x00\x00\x04?I'b'\x00\x05N\xb1v\xb7\x9bX\xfe\x19\x9b\x01\x01\x16\x00\x00\x05C\xf7\x01%\x00PILOT_VELZ_MAX\x00\x00\x04\x81:'b'\x00\x05N\xb1v\xb7\x9b\xb8\xfe\x19\x9c\x01\x01\x16\x00\x00\xc8B\xf7\x01&\x00PILOT_ACCEL_Z\x00\x00\x00\x04\xfd\xd9'b"\x00\x05N\xb1v\xb7\x9c\x0c\xfe\x19\x9d\x01\x01\x16\x00\x00\x02C\xf7\x01'\x00THR_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd6\xa1"b'\x00\x05N\xb1v\xb7\x9cX\xfe\x19\x9e\x01\x01\x16\x00\x00\x80?\xf7\x01(\x00FS_THR_ENABLE\x00\x00\x00\x029f'b'\x00\x05N\xb1v\xb7\x9c\xa4\xfe\x19\x9f\x01\x01\x16\x00\x80cD\xf7\x01)\x00FS_THR_VALUE\x00\x00\x00\x00\x04N\xda'b'\x00\x05N\xb1v\xb7\x9c\xf0\xfe\x19\xa0\x01\x01\x16\x00\x00\xc8C\xf7\x01*\x00THR_MID\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xfa\x88'b'\x00\x05N\xb1v\xb7\x9d@\xfe\x19\xa1\x01\x01\x16\x00\x00 A\xf7\x01+\x00THR_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc7\xa1'b'\x00\x05N\xb1v\xb7\x9d\x8c\xfe\x19\xa2\x01\x01\x16\x00\x00\xa0@\xf7\x01,\x00FLTMODE1\x00\x00\x00\x00\x00\x00\x00\x00\x02>\x87'b'\x00\x05N\xb1v\xb7\x9d\xd8\xfe\x19\xa3\x01\x01\x16\x00\x00\xa0@\xf7\x01-\x00FLTMODE2\x00\x00\x00\x00\x00\x00\x00\x00\x02(\x86'b'\x00\x05N\xb1v\xb7\x9e$\xfe\x19\xa4\x01\x01\x16\x00\x00\xa0@\xf7\x01.\x00FLTMODE3\x00\x00\x00\x00\x00\x00\x00\x00\x02\x8bX'b'\x00\x05N\xb1v\xb7\x9ep\xfe\x19\xa5\x01\x01\x16\x00\x00\xa0@\xf7\x01/\x00FLTMODE4\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc8\x07'b'\x00\x05N\xb1v\xb7\x9e\xb8\xfe\x19\xa6\x01\x01\x16\x00\x00\xa0@\xf7\x010\x00FLTMODE5\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa7h'b'\x00\x05N\xb1v\xb7\x9f\x04\xfe\x19\xa7\x01\x01\x16\x00\x00\xa0@\xf7\x011\x00FLTMODE6\x00\x00\x00\x00\x00\x00\x00\x00\x02\xb1i'b'\x00\x05N\xb1v\xb7\x9fL\xfe\x19\xa8\x01\x01\x16\x00\x00\x00\x00\xf7\x012\x00SIMPLE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02K\x0b'b'\x00\x05N\xb1v\xb7\x9f\x98\xfe\x19\xa9\x01\x01\x16\x00\xff\xffG\xf7\x013\x00LOG_BITMASK\x00\x00\x00\x00\x00\x06\x83<'b'\x00\x05N\xb1v\xb7\x9f\xe0\xfe\x19\xaa\x01\x01\x16\x00\x00\x00\x00\xf7\x014\x00ESC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02?\xbf'b'\x00\x05N\xb1v\xb7\xa08\xfe\x19\xab\x01\x01\x16\x00\x00\x00\x00\xf7\x015\x00TUNE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02G#'b'\x00\x05N\xb1v\xb7\xa0\x84\xfe\x03\xac\x01\x01Ms\x00\x00\xb0\xfb'b'\x00\x05N\xb1v\xb8]o\xfe5\x17\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x03L'b'\x00\x05N\xb1v\xb8t_\xfe!\x18\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcd\x82'b'\x00\x05N\xb1v\xb9$\xe4\xfe\x19\xad\x01\x01\x16\x00\x00\x00\x00\xf7\x016\x00TUNE_LOW\x00\x00\x00\x00\x00\x00\x00\x00\x045M'b'\x00\x05N\xb1v\xb9%d\xfe\x19\xae\x01\x01\x16\x00\x00zD\xf7\x017\x00TUNE_HIGH\x00\x00\x00\x00\x00\x00\x00\x04\x9fD'b'\x00\x05N\xb1v\xb9%\xdc\xfe\x19\xaf\x01\x01\x16\x00\x00\x80?\xf7\x018\x00FRAME\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02A\xb5'b'\x00\x05N\xb1v\xb9&@\xfe\x19\xb0\x01\x01\x16\x00\x00\x00\x00\xf7\x019\x00CH7_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9fJ'b'\x00\x05N\xb1v\xb9&\xa4\xfe\x19\xb1\x01\x01\x16\x00\x00\x00\x00\xf7\x01:\x00CH8_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xe1'b"\x00\x05N\xb1v\xb9'\x1c\xfe\x19\xb2\x01\x01\x16\x00\x00\x00\x00\xf7\x01;\x00CH9_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02S\xd1"b"\x00\x05N\xb1v\xb9'\x84\xfe\x19\xb3\x01\x01\x16\x00\x00\x00\x00\xf7\x01<\x00CH10_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02u\x84"b"\x00\x05N\xb1v\xb9'\xe8\xfe\x19\xb4\x01\x01\x16\x00\x00\x00\x00\xf7\x01=\x00CH11_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd0\xf1"b'\x00\x05N\xb1v\xb9(L\xfe\x19\xb5\x01\x01\x16\x00\x00\x00\x00\xf7\x01>\x00CH12_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02\xb6`'b'\x00\x05N\xb1v\xb9(\xac\xfe\x19\xb6\x01\x01\x16\x00\x00\xeeB\xf7\x01?\x00ARMING_CHECK\x00\x00\x00\x00\x02\xf7\xa2'b'\x00\x05N\xb1v\xb9)\x0c\xfe\x19\xb7\x01\x01\x16\x00\x00\xfaD\xf7\x01@\x00ANGLE_MAX\x00\x00\x00\x00\x00\x00\x00\x04\xf8^'b'\x00\x05N\xb1v\xb9)p\xfe\x19\xb8\x01\x01\x16\x00\x00\xa0A\xf7\x01A\x00RC_FEEL_RP\x00\x00\x00\x00\x00\x00\x02!\xf8'b'\x00\x05N\xb1v\xb9)\xd0\xfe\x19\xb9\x01\x01\x16\x00\x00\x00A\xf7\x01B\x00PHLD_BRAKE_RATE\x00\x04\xc0\xfd'b'\x00\x05N\xb1v\xb9* \xfe\x19\xba\x01\x01\x16\x00\x80;E\xf7\x01C\x00PHLD_BRAKE_ANGLE\x04\xcd\x9d'b'\x00\x05N\xb1v\xb9*l\xfe\x19\xbb\x01\x01\x16\x00\x00\x80?\xf7\x01D\x00LAND_REPOSITION\x00\x02\xb0\xc5'b'\x00\x05N\xb1v\xb9*\xc8\xfe\x19\xbc\x01\x01\x16\x00\x00\x00@\xf7\x01E\x00FS_EKF_ACTION\x00\x00\x00\x02\x93\x12'b'\x00\x05N\xb1v\xb9+<\xfe\x19\xbd\x01\x01\x16\xcd\xccL?\xf7\x01F\x00FS_EKF_THRESH\x00\x00\x00\t\xcc\xa9'b'\x00\x05N\xb1v\xb9+\x9c\xfe\x19\xbe\x01\x01\x16\x00\x00zD\xf7\x01G\x00RC1_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04w\xfd'b'\x00\x05N\xb1v\xb9,\x14\xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b'\x00\x05N\xb1v\xba\x1e_\xfe5\x19\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xba\xf1'b'\x00\x05N\xb1v\xba5\x0f\xfe!\x1a\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00L\xdf'b'\x00\x05N\xb1v\xba\x94\xcc\xfe\x19\xc0\x01\x01\x16\x00\x80\xbbD\xf7\x01H\x00RC1_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04b\xbb'b'\x00\x05N\xb1v\xba\x95L\xfe\x19\xc1\x01\x01\x16\x00\x00\xfaD\xf7\x01I\x00RC1_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc8\xab'b'\x00\x05N\xb1v\xba\x95\xa0\xfe\x19\xc2\x01\x01\x16\x00\x00\x80?\xf7\x01J\x00RC1_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xbe\xed'b'\x00\x05N\xb1v\xba\x95\xf0\xfe\x19\xc3\x01\x01\x16\x00\x00 A\xf7\x01K\x00RC1_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xcb\x02'b'\x00\x05N\xb1v\xba\x96<\xfe\x19\xc4\x01\x01\x16\x00\x00zD\xf7\x01L\x00RC2_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04z\xd7'b'\x00\x05N\xb1v\xba\x96\x88\xfe\x19\xc5\x01\x01\x16\x00\x80\xbbD\xf7\x01M\x00RC2_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04A8'b'\x00\x05N\xb1v\xba\x96\xd4\xfe\x19\xc6\x01\x01\x16\x00\x00\xfaD\xf7\x01N\x00RC2_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0\xdf'b'\x00\x05N\xb1v\xba\x97$\xfe\x19\xc7\x01\x01\x16\x00\x00\x80?\xf7\x01O\x00RC2_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9dn'b'\x00\x05N\xb1v\xba\x97p\xfe\x19\xc8\x01\x01\x16\x00\x00 A\xf7\x01P\x00RC2_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf6\xc8'b'\x00\x05N\xb1v\xba\x97\xbc\xfe\x19\xc9\x01\x01\x16\x00\x00zD\xf7\x01Q\x00RC3_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8a\x18'b'\x00\x05N\xb1v\xba\x98\x08\xfe\x19\xca\x01\x01\x16\x00\x80\xbbD\xf7\x01R\x00RC3_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xea\x00'b'\x00\x05N\xb1v\xba\x98T\xfe\x19\xcb\x01\x01\x16\x00\x80\xedD\xf7\x01S\x00RC3_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04:)'b'\x00\x05N\xb1v\xba\x98\xa0\xfe\x19\xcc\x01\x01\x16\x00\x00\x80?\xf7\x01T\x00RC3_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x91\xb0'b'\x00\x05N\xb1v\xba\x98\xf0\xfe\x19\xcd\x01\x01\x16\x00\x00\xf0A\xf7\x01U\x00RC3_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04kc'b'\x00\x05N\xb1v\xba\x99D\xfe\x19\xce\x01\x01\x16\x00\x00zD\xf7\x01V\x00RC4_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x90D'b'\x00\x05N\xb1v\xba\x99\x9c\xfe\x19\xcf\x01\x01\x16\x00\x80\xbbD\xf7\x01W\x00RC4_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xab\xab'b'\x00\x05N\xb1v\xba\x99\xe4\xfe\x19\xd0\x01\x01\x16\x00\x00\xfaD\xf7\x01X\x00RC4_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0p'b'\x00\x05N\xb1v\xba\x9a0\xfe\x19\xd1\x01\x01\x16\x00\x00\x80?\xf7\x01Y\x00RC4_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9d\xc1'b'\x00\x05N\xb1v\xba\x9a|\xfe\x19\xd2\x01\x01\x16\x00\x00 A\xf7\x01Z\x00RC4_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb3\xd9'b'\x00\x05N\xb1v\xba\x9a\xc4\xfe\x19\xd3\x01\x01\x16\x00\x80\x89D\xf7\x01[\x00RC5_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x15\xc5'b'\x00\x05N\xb1v\xba\x9b\x10\xfe\x19\xd4\x01\x01\x16\x00\x80\xbbD\xf7\x01\\\x00RC5_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\xf7'b'\x00\x05N\xb1v\xba\x9bX\xfe\x19\xd5\x01\x01\x16\x00\x80\xedD\xf7\x01]\x00RC5_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd8\xde'b'\x00\x05N\xb1v\xba\x9b\xa4\xfe\x19\xd6\x01\x01\x16\x00\x00\x80?\xf7\x01^\x00RC5_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd4\xa1'b'\x00\x05N\xb1v\xba\x9b\xec\xfe\x19\xd7\x01\x01\x16\x00\x00\x00\x00\xf7\x01_\x00RC5_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x9f'b'\x00\x05N\xb1v\xba\x9c0\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\x00\x05N\xb1v\xbb\xfa\x83\xfe5\x1b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01?\x13'b'\x00\x05N\xb1v\xbc0+\xfe!\x1c\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcf9'b'\x00\x05N\xb1v\xbc1\x04\xfe\x19\xd9\x01\x01\x16\x00\x00\x00\x00\xf7\x01`\x00RC5_FUNCTION\x00\x00\x00\x00\x02~\xbd'b'\x00\x05N\xb1v\xbc1\x90\xfe\x19\xda\x01\x01\x16\x00\x00zD\xf7\x01a\x00RC6_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04)n'b'\x00\x05N\xb1v\xbc1\xf4\xfe\x19\xdb\x01\x01\x16\x00\x00zD\xf7\x01b\x00RC6_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd3\xe1'b'\x00\x05N\xb1v\xbc2P\xfe\x19\xdc\x01\x01\x16\x00\x00\xbeD\xf7\x01c\x00RC6_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04X\xe0'b'\x00\x05N\xb1v\xbc2\xa8\xfe\x19\xdd\x01\x01\x16\x00\x00\x80?\xf7\x01d\x00RC6_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd4\x87'b'\x00\x05N\xb1v\xbc3\x08\xfe\x19\xde\x01\x01\x16\x00\x00\x00\x00\xf7\x01e\x00RC6_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xe6\xf8'b'\x00\x05N\xb1v\xbc3`\xfe\x19\xdf\x01\x01\x16\x00\x00\x00\x00\xf7\x01f\x00RC6_FUNCTION\x00\x00\x00\x00\x02\xa36'b'\x00\x05N\xb1v\xbc3\xbc\xfe\x19\xe0\x01\x01\x16\x00\x80\x89D\xf7\x01g\x00RC7_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04l\x90'b'\x00\x05N\xb1v\xbc4\x14\xfe\x19\xe1\x01\x01\x16\x00\x80\xbbD\xf7\x01h\x00RC7_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8d\xaa'b'\x00\x05N\xb1v\xbc4l\xfe\x19\xe2\x01\x01\x16\x00\x80\xedD\xf7\x01i\x00RC7_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xbb\xc2'b'\x00\x05N\xb1v\xbc4\xc0\xfe\x19\xe3\x01\x01\x16\x00\x00\x80?\xf7\x01j\x00RC7_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02Q\xfc'b'\x00\x05N\xb1v\xbc5\x18\xfe\x19\xe4\x01\x01\x16\x00\x00\x00\x00\xf7\x01k\x00RC7_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xaf\x00'b'\x00\x05N\xb1v\xbc5p\xfe\x19\xe5\x01\x01\x16\x00\x00\x00\x00\xf7\x01l\x00RC7_FUNCTION\x00\x00\x00\x00\x02\x81\xab'b'\x00\x05N\xb1v\xbc5\xb8\xfe\x19\xe6\x01\x01\x16\x00\x80\x89D\xf7\x01m\x00RC8_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xaa\xcc'b'\x00\x05N\xb1v\xbc6\x04\xfe\x19\xe7\x01\x01\x16\x00\x80\xbbD\xf7\x01n\x00RC8_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf6Y'b'\x00\x05N\xb1v\xbc6L\xfe\x19\xe8\x01\x01\x16\x00\x80\xedD\xf7\x01o\x00RC8_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x85\xbd'b'\x00\x05N\xb1v\xbc6\x98\xfe\x19\xe9\x01\x01\x16\x00\x00\x80?\xf7\x01p\x00RC8_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02o\xb1'b'\x00\x05N\xb1v\xbc6\xe0\xfe\x19\xea\x01\x01\x16\x00\x00\x00\x00\xf7\x01q\x00RC8_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04]\xce'b'\x00\x05N\xb1v\xbd\xc3\xd4\xfe\x19\xeb\x01\x01\x16\x00\x00\x00\x00\xf7\x01r\x00RC8_FUNCTION\x00\x00\x00\x00\x02\x18\x00'b'\x00\x05N\xb1v\xbd\xc4H\xfe\x19\xec\x01\x01\x16\x00\x80\x89D\xf7\x01s\x00RC9_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04h\x88'b'\x00\x05N\xb1v\xbd\xc4\x9c\xfe\x19\xed\x01\x01\x16\x00\x80\xbbD\xf7\x01t\x00RC9_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04_x'b'\x00\x05N\xb1v\xbd\xc4\xec\xfe\x19\xee\x01\x01\x16\x00\x80\xedD\xf7\x01u\x00RC9_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04i\x10'b'\x00\x05N\xb1v\xbd\xc58\xfe\x19\xef\x01\x01\x16\x00\x00\x80?\xf7\x01v\x00RC9_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x83.'b'\x00\x05N\xb1v\xbd\xc5\x84\xfe\x19\xf0\x01\x01\x16\x00\x00\x00\x00\xf7\x01w\x00RC9_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xe6\xc2'b'\x00\x05N\xb1v\xbd\xc5\xd8\xfe\x19\xf1\x01\x01\x16\x00\x00\x00\x00\xf7\x01x\x00RC9_FUNCTION\x00\x00\x00\x00\x02\x1e\xa3'b'\x00\x05N\xb1v\xbd\xc6(\xfe\x19\xf2\x01\x01\x16\x00\x80\x89D\xf7\x01y\x00RC10_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04_:'b'\x00\x05N\xb1v\xbd\xc6t\xfe\x19\xf3\x01\x01\x16\x00\x80\xbbD\xf7\x01z\x00RC10_TRIM\x00\x00\x00\x00\x00\x00\x00\x04!\x87'b'\x00\x05N\xb1v\xbd\xc6\xd4\xfe\x19\xf4\x01\x01\x16\x00\x80\xedD\xf7\x01{\x00RC10_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04Z\xf5'b'\x00\x05N\xb1v\xbd\xc7 \xfe\x19\xf5\x01\x01\x16\x00\x00\x80?\xf7\x01|\x00RC10_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02-\xdf'b'\x00\x05N\xb1v\xbd\xc7l\xfe\x19\xf6\x01\x01\x16\x00\x00\x00\x00\xf7\x01}\x00RC10_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8e\xc1'b'\x00\x05N\xb1v\xbd\xc7\xb8\xfe\x19\xf7\x01\x01\x16\x00\x00\x00\x00\xf7\x01~\x00RC10_FUNCTION\x00\x00\x00\x02\xc3\xf4'b'\x00\x05N\xb1v\xbd\xc8\x04\xfe\x19\xf8\x01\x01\x16\x00\x80\x89D\xf7\x01\x7f\x00RC11_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\xcc\xef'b'\x00\x05N\xb1v\xbd\xc8L\xfe\x19\xf9\x01\x01\x16\x00\x80\xbbD\xf7\x01\x80\x00RC11_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xa3\xf8'b'\x00\x05N\xb1v\xbd\xc8\x98\xfe\x19\xfa\x01\x01\x16\x00\x80\xedD\xf7\x01\x81\x00RC11_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\x14\t'b'\x00\x05N\xb1v\xbd\xc8\xe4\xfe\x19\xfb\x01\x01\x16\x00\x00\x80?\xf7\x01\x82\x00RC11_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08F'b'\x00\x05N\xb1v\xbd\xc9,\xfe\x19\xfc\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x83\x00RC11_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04g\xdb'b'\x00\x05N\xb1v\xbd\xc9x\xfe\x19\xfd\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x84\x00RC11_FUNCTION\x00\x00\x00\x02A\x8b'b'\x00\x05N\xb1v\xbd\xc9\xc4\xfe\x19\xfe\x01\x01\x16\x00\x80\x89D\xf7\x01\x85\x00RC12_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04_\x8c'b'\x00\x05N\xb1v\xbd\xca\x0c\xfe\x19\xff\x01\x01\x16\x00\x80\xbbD\xf7\x01\x86\x00RC12_TRIM\x00\x00\x00\x00\x00\x00\x00\x04!1'b'\x00\x05N\xb1v\xbd\xcaX\xfe\x19\x00\x01\x01\x16\x00\x80\xedD\xf7\x01\x87\x00RC12_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04=\xe9'b'\x00\x05N\xb1v\xbd\xca\xa0\xfe\x19\x01\x01\x01\x16\x00\x00\x80?\xf7\x01\x88\x00RC12_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9c\t'b'\x00\x05N\xb1v\xbd\xca\xec\xfe\x19\x02\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x89\x00RC12_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04?\x17'b'\x00\x05N\xb1v\xbd\xcb0\xfe\x03\x03\x01\x01Ms\x00\x00\x107'b'\x00\x05N\xb1v\xbe\t\x13\xfe5\x1d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa1<'b'\x00\x05N\xb1v\xbe2\xfb\xfe!\x1e\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Nd'b'\x00\x05N\xb1v\xbfGl\xfe\x19\x04\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x8a\x00RC12_FUNCTION\x00\x00\x00\x02\xab\xc0'b'\x00\x05N\xb1v\xbfH\x10\xfe\x19\x05\x01\x01\x16\x00\x80\x89D\xf7\x01\x8b\x00RC13_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\x07\x16'b'\x00\x05N\xb1v\xbfH|\xfe\x19\x06\x01\x01\x16\x00\x80\xbbD\xf7\x01\x8c\x00RC13_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xf4\x8f'b'\x00\x05N\xb1v\xbfH\xdc\xfe\x19\x07\x01\x01\x16\x00\x80\xedD\xf7\x01\x8d\x00RC13_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\xa5?'b'\x00\x05N\xb1v\xbfIL\xfe\x19\x08\x01\x01\x16\x00\x00\x80?\xf7\x01\x8e\x00RC13_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x1a\xbd'b'\x00\x05N\xb1v\xbfI\xb0\xfe\x19\t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x8f\x00RC13_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04_\xe2'b'\x00\x05N\xb1v\xbfJ\x14\xfe\x19\n\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x90\x00RC13_FUNCTION\x00\x00\x00\x02\xf4\xa4'b'\x00\x05N\xb1v\xbfJx\xfe\x19\x0b\x01\x01\x16\x00\x80\x89D\xf7\x01\x91\x00RC14_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb5\xca'b'\x00\x05N\xb1v\xbfJ\xd8\xfe\x19\x0c\x01\x01\x16\x00\x80\xbbD\xf7\x01\x92\x00RC14_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xe1\xb5'b'\x00\x05N\xb1v\xbfK4\xfe\x19\r\x01\x01\x16\x00\x80\xedD\xf7\x01\x93\x00RC14_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0\x05'b'\x00\x05N\xb1v\xbfK\x90\xfe\x19\x0e\x01\x01\x16\x00\x00\x80?\xf7\x01\x94\x00RC14_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02!n'b'\x00\x05N\xb1v\xbfK\xf0\xfe\x19\x0f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x95\x00RC14_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04d1'b'\x00\x05N\xb1v\xbfLL\xfe\x19\x10\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x96\x00RC14_FUNCTION\x00\x00\x00\x02\x98\xd6'b'\x00\x05N\xb1v\xbfL\xd0\xfe\x19\x11\x01\x01\x16\x00\x00\xf5C\xf7\x01\x97\x00RC_SPEED\x00\x00\x00\x00\x00\x00\x00\x00\x04\r\x9e'b'\x00\x05N\xb1v\xbfM<\xfe\x19\x12\x01\x01\x16\x00\x00\x80@\xf7\x01\x98\x00ACRO_RP_P\x00\x00\x00\x00\x00\x00\x00\t\xb6\xcb'b'\x00\x05N\xb1v\xbfM\x88\xfe\x19\x13\x01\x01\x16\x00\x00\x80?\xf7\x01\x99\x00ACRO_YAW_P\x00\x00\x00\x00\x00\x00\t\xaa@'b'\x00\x05N\xb1v\xbfM\xd8\xfe\x19\x14\x01\x01\x16\x00\x00\x80?\xf7\x01\x9a\x00ACRO_BAL_ROLL\x00\x00\x00\t\x8b\x8b'b'\x00\x05N\xb1v\xbfN$\xfe\x19\x15\x01\x01\x16\x00\x00\x80?\xf7\x01\x9b\x00ACRO_BAL_PITCH\x00\x00\t\xcb?'b'\x00\x05N\xb1v\xbfNl\xfe\x03\x16\x01\x01Ms\x00\x00\t\xfb'b'\x00\x05N\xb1v\xbfO\x00\xfe\x12\x17\x01\x01\xfc\xa2:\x03\x004\x00\x01\x00ARMMASK\x00WrO='b'\x00\x05N\xb1v\xc0\x19\xf7\xfe5\x1f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01$\xde'b'\x00\x05N\xb1v\xc0D\x03\xfe! \xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb7\xf0'b'\x00\x05N\xb1v\xc0}\x13\xfe\t!\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf4\x04'b'\x00\x05N\xb1v\xc0\xd0\xc8\xfe\t\x18\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xaf\x11'b'\x00\x05N\xb1v\xc0\xd1H\xfe\x19\x19\x01\x01\x16\x00\x00\x00@\xf7\x01\x9c\x00ACRO_TRAINER\x00\x00\x00\x00\x02\xc6\xde'b'\x00\x05N\xb1v\xc0\xd1\xa4\xfe\x19\x1a\x01\x01\x16\x9a\x99\x99>\xf7\x01\x9d\x00ACRO_EXPO\x00\x00\x00\x00\x00\x00\x00\t\x10\xa8'b'\x00\x05N\xb1v\xc0\xd1\xf4\xfe\x19\x1b\x01\x01\x16h\x91\xed=\xf7\x01\x9e\x00RATE_RLL_P\x00\x00\x00\x00\x00\x00\t\xee\xdc'b'\x00\x05N\xb1v\xc0\xd2@\xfe\x19\x1c\x01\x01\x16h\x91\xed=\xf7\x01\x9f\x00RATE_RLL_I\x00\x00\x00\x00\x00\x00\t\xc2,'b'\x00\x05N\xb1v\xc0\xd2\x8c\xfe\x19\x1d\x01\x01\x16\xfa\xed\xeb;\xf7\x01\xa0\x00RATE_RLL_D\x00\x00\x00\x00\x00\x00\t\x12\xdb'b'\x00\x05N\xb1v\xc0\xd2\xe4\xfe\x19\x1e\x01\x01\x16\x00\x80;E\xf7\x01\xa1\x00RATE_RLL_IMAX\x00\x00\x00\t\xe2\x04'b'\x00\x05N\xb1v\xc0\xd3\x9c\xfe\x19\x1f\x01\x01\x16\x00\x00 B\xf7\x01\xa2\x00RATE_RLL_FILT_HZ\t\xea\xfd'b'\x00\x05N\xb1v\xc0\xd4 \xfe\x19 \x01\x01\x161\x08,>\xf7\x01\xa3\x00RATE_PIT_P\x00\x00\x00\x00\x00\x00\t\xa2\xca'b'\x00\x05N\xb1v\xc0\xd4\x80\xfe\x19!\x01\x01\x161\x08,>\xf7\x01\xa4\x00RATE_PIT_I\x00\x00\x00\x00\x00\x00\tr+'b'\x00\x05N\xb1v\xc0\xd4\xdc\xfe\x19"\x01\x01\x16o\x12\x03<\xf7\x01\xa5\x00RATE_PIT_D\x00\x00\x00\x00\x00\x00\t\xf0\n'b'\x00\x05N\xb1v\xc0\xd58\xfe\x19#\x01\x01\x16\x00\x80;E\xf7\x01\xa6\x00RATE_PIT_IMAX\x00\x00\x00\tt\xc3'b'\x00\x05N\xb1v\xc0\xd5\x94\xfe\x19$\x01\x01\x16\x00\x00 B\xf7\x01\xa7\x00RATE_PIT_FILT_HZ\t\xebN'b'\x00\x05N\xb1v\xc0\xd5\xec\xfe\x19%\x01\x01\x16\xc3\xf5(?\xf7\x01\xa8\x00RATE_YAW_P\x00\x00\x00\x00\x00\x00\t\xcd:'b'\x00\x05N\xb1v\xc0\xd6D\xfe\x19&\x01\x01\x16\x02+\x87=\xf7\x01\xa9\x00RATE_YAW_I\x00\x00\x00\x00\x00\x00\t\xc0*'b"\x00\x05N\xb1v\xc0\xd6\x9c\xfe\x19'\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xaa\x00RATE_YAW_D\x00\x00\x00\x00\x00\x00\tU\xa8"b'\x00\x05N\xb1v\xc0\xd7\x00\xfe\x19(\x01\x01\x16\x00\x00zD\xf7\x01\xab\x00RATE_YAW_IMAX\x00\x00\x00\t\xc0\x9e'b'\x00\x05N\xb1v\xc0\xd7P\xfe\x19)\x01\x01\x1633\xf3@\xf7\x01\xac\x00RATE_YAW_FILT_HZ\t\xc3\x1a'b'\x00\x05N\xb1v\xc0\xd7\x98\xfe\x03*\x01\x01Ms\x00\x00\xe3-'b'\x00\x05N\xb1v\xc2\x17O\xfe5"\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb3\x00'b'\x00\x05N\xb1v\xc2B\xc0\xfe\x19+\x01\x01\x1633\xb3?\xf7\x01\xad\x00VEL_XY_P\x00\x00\x00\x00\x00\x00\x00\x00\t\xe8U'b'\x00\x05N\xb1v\xc2C\\\xfe\x19,\x01\x01\x16\x00\x00\x00?\xf7\x01\xae\x00VEL_XY_I\x00\x00\x00\x00\x00\x00\x00\x00\tS\x8a'b'\x00\x05N\xb1v\xc2C\xcc\xfe\x19-\x01\x01\x16\x00\x00zD\xf7\x01\xaf\x00VEL_XY_IMAX\x00\x00\x00\x00\x00\tJ!'b'\x00\x05N\xb1v\xc2DL\xfe\x19.\x01\x01\x16\x00\x00\xa0@\xf7\x01\xb0\x00VEL_XY_FILT_HZ\x00\x00\t\xaf\x87'b'\x00\x05N\xb1v\xc2D\xb8\xfe\x19/\x01\x01\x16\x00\x00\xa0@\xf7\x01\xb1\x00VEL_Z_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\t \xc3'b'\x00\x05N\xb1v\xc2E$\xfe\x190\x01\x01\x16\x00\x00@?\xf7\x01\xb2\x00ACCEL_Z_P\x00\x00\x00\x00\x00\x00\x00\t\xb5\x19'b'\x00\x05N\xb1v\xc2E\xbc\xfe\x191\x01\x01\x16\x00\x00\xc0?\xf7\x01\xb3\x00ACCEL_Z_I\x00\x00\x00\x00\x00\x00\x00\t\xa0\xb1'b'\x00\x05N\xb1v\xc2F \xfe\x192\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xb4\x00ACCEL_Z_D\x00\x00\x00\x00\x00\x00\x00\tD.'b'\x00\x05N\xb1v\xc2Fl\xfe\x193\x01\x01\x16\x00\x00HD\xf7\x01\xb5\x00ACCEL_Z_IMAX\x00\x00\x00\x00\t\x8er'b'\x00\x05N\xb1v\xc2F\xb8\xfe\x194\x01\x01\x16\x00\x00\xa0A\xf7\x01\xb6\x00ACCEL_Z_FILT_HZ\x00\t\xfck'b'\x00\x05N\xb1v\xc2G\x08\xfe\x195\x01\x01\x16\x00\x00\x18A\xf7\x01\xb7\x00STB_RLL_P\x00\x00\x00\x00\x00\x00\x00\t\x90\x9b'b'\x00\x05N\xb1v\xc2GP\xfe\x196\x01\x01\x16\x00\x00\x00A\xf7\x01\xb8\x00STB_PIT_P\x00\x00\x00\x00\x00\x00\x00\t=\x9b'b'\x00\x05N\xb1v\xc2G\x9c\xfe\x197\x01\x01\x16\x00\x00\xe0@\xf7\x01\xb9\x00STB_YAW_P\x00\x00\x00\x00\x00\x00\x00\t\xffF'b'\x00\x05N\xb1v\xc2G\xe8\xfe\x198\x01\x01\x16\x00\x00\x80?\xf7\x01\xba\x00POS_Z_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\xde\x83'b'\x00\x05N\xb1v\xc2H0\xfe\x199\x01\x01\x16333?\xf7\x01\xbb\x00POS_XY_P\x00\x00\x00\x00\x00\x00\x00\x00\t\x82d'b'\x00\x05N\xb1v\xc2H|\xfe\x19:\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xbc\x00CAM_TRIGG_TYPE\x00\x00\x02;\xc6'b'\x00\x05N\xb1v\xc2H\xc8\xfe\x19;\x01\x01\x16\x00\x00 A\xf7\x01\xbd\x00CAM_DURATION\x00\x00\x00\x00\x02d\x9f'b'\x00\x05N\xb1v\xc2I\x10\xfe\x19<\x01\x01\x16\x00\x80\xa2D\xf7\x01\xbe\x00CAM_SERVO_ON\x00\x00\x00\x00\x045\x1c'b"\x00\x05N\xb1v\xc2I\\\xfe\t\xb7\n\x00m\x0c\x00\x00\x00\x00\xcd\x00\x00\x004'"b'\x00\x05N\xb1v\xc2i\xaf\xfe!#\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfe\x07'b'\x00\x05N\xb1v\xc3\xe5\x98\xfe\x19=\x01\x01\x16\x00\x80\x89D\xf7\x01\xbf\x00CAM_SERVO_OFF\x00\x00\x00\x04\xa20'b'\x00\x05N\xb1v\xc3\xe6\x14\xfe\x19>\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc0\x00CAM_TRIGG_DIST\x00\x00\t*\x9b'b'\x00\x05N\xb1v\xc3\xe6h\xfe\x19?\x01\x01\x16\x00\x00XB\xf7\x01\xc1\x00RELAY_PIN\x00\x00\x00\x00\x00\x00\x00\x02\xfb\xea'b'\x00\x05N\xb1v\xc3\xe6\xb8\xfe\x19@\x01\x01\x16\x00\x00\\B\xf7\x01\xc2\x00RELAY_PIN2\x00\x00\x00\x00\x00\x00\x02h\xc5'b'\x00\x05N\xb1v\xc3\xe7\x04\xfe\x19A\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xc3\x00RELAY_PIN3\x00\x00\x00\x00\x00\x00\x02\xb3\xe0'b'\x00\x05N\xb1v\xc3\xe7P\xfe\x19B\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xc4\x00RELAY_PIN4\x00\x00\x00\x00\x00\x00\x02\xc4d'b'\x00\x05N\xb1v\xc3\xe7\x9c\xfe\x19C\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc5\x00RELAY_DEFAULT\x00\x00\x00\x02E\xa4'b'\x00\x05N\xb1v\xc3\xe7\xe8\xfe\x19D\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc6\x00EPM_ENABLE\x00\x00\x00\x00\x00\x00\x02X\x8a'b'\x00\x05N\xb1v\xc3\xe88\xfe\x19E\x01\x01\x16\x00\x80\xedD\xf7\x01\xc7\x00EPM_GRAB\x00\x00\x00\x00\x00\x00\x00\x00\x04Q\xb7'b'\x00\x05N\xb1v\xc3\xe8\x80\xfe\x19F\x01\x01\x16\x00\x80\x89D\xf7\x01\xc8\x00EPM_RELEASE\x00\x00\x00\x00\x00\x04\\V'b'\x00\x05N\xb1v\xc3\xe8\xcc\xfe\x19G\x01\x01\x16\x00\x80\xbbD\xf7\x01\xc9\x00EPM_NEUTRAL\x00\x00\x00\x00\x00\x04\xb1\xa9'b'\x00\x05N\xb1v\xc3\xe9\x18\xfe\x19H\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xca\x00EPM_REGRAB\x00\x00\x00\x00\x00\x00\x02\x97F'b'\x00\x05N\xb1v\xc3\xe9`\xfe\x19I\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xcb\x00CHUTE_ENABLED\x00\x00\x00\x02c{'b'\x00\x05N\xb1v\xc3\xe9\xac\xfe\x19J\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xcc\x00CHUTE_TYPE\x00\x00\x00\x00\x00\x00\x02\x04;'b'\x00\x05N\xb1v\xc3\xe9\xf8\xfe\x19K\x01\x01\x16\x00\x80\xa2D\xf7\x01\xcd\x00CHUTE_SERVO_ON\x00\x00\x04\x9c\xe4'b'\x00\x05N\xb1v\xc3\xea@\xfe\x19L\x01\x01\x16\x00\x80\x89D\xf7\x01\xce\x00CHUTE_SERVO_OFF\x00\x04V\x7f'b'\x00\x05N\xb1v\xc3\xea\x88\xfe\x19M\x01\x01\x16\x00\x00 A\xf7\x01\xcf\x00CHUTE_ALT_MIN\x00\x00\x00\x04e\x13'b'\x00\x05N\xb1v\xc3\xea\xd0\xfe\x19N\x01\x01\x16\x00@\x9cD\xf7\x01\xd0\x00LGR_SERVO_RTRACT\x04\xa1\x08'b'\x00\x05N\xb1v\xc3\xeb\x18\xfe\x03O\x01\x01Ms\x00\x00\x83i'b"\x00\x05N\xb1v\xc4\x1d\x83\xfe%$\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00n\xc6"b'\x00\x05N\xb1v\xc44+\xfe5%\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01g\xda'b'\x00\x05N\xb1v\xc4r\x93\xfe!&\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x004\x16'b'\x00\x05N\xb1v\xc5b\xc0\xfe\x19P\x01\x01\x16\x00\xc0\xdaD\xf7\x01\xd1\x00LGR_SERVO_DEPLOY\x04\xa7\xeb'b'\x00\x05N\xb1v\xc5c0\xfe\x19Q\x01\x01\x16\xe1\x06\xa7\xc2\xf7\x01\xd2\x00COMPASS_OFS_X\x00\x00\x00\t\x97\x06'b'\x00\x05N\xb1v\xc5c\x84\xfe\x19R\x01\x01\x16\xe90\x05C\xf7\x01\xd3\x00COMPASS_OFS_Y\x00\x00\x00\t\xe3('b'\x00\x05N\xb1v\xc5c\xd0\xfe\x19S\x01\x01\x16\x0eIyC\xf7\x01\xd4\x00COMPASS_OFS_Z\x00\x00\x00\t(\xc2'b'\x00\x05N\xb1v\xc5d \xfe\x19T\x01\x01\x16s\xe7f\xbc\xf7\x01\xd5\x00COMPASS_DEC\x00\x00\x00\x00\x00\t\x08\x9f'b'\x00\x05N\xb1v\xc5dt\xfe\x19U\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd6\x00COMPASS_LEARN\x00\x00\x00\x02l\xaf'b'\x00\x05N\xb1v\xc5d\xd0\xfe\x19V\x01\x01\x16\x00\x00\x80?\xf7\x01\xd7\x00COMPASS_USE\x00\x00\x00\x00\x00\x02\xb4\xd2'b'\x00\x05N\xb1v\xc5e,\xfe\x19W\x01\x01\x16\x00\x00\x80?\xf7\x01\xd8\x00COMPASS_AUTODEC\x00\x02\x840'b'\x00\x05N\xb1v\xc5e\x84\xfe\x19X\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd9\x00COMPASS_MOTCT\x00\x00\x00\x02 \x80'b'\x00\x05N\xb1v\xc5e\xe0\xfe\x19Y\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xda\x00COMPASS_MOT_X\x00\x00\x00\t7\x18'b'\x00\x05N\xb1v\xc5f8\xfe\x19Z\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdb\x00COMPASS_MOT_Y\x00\x00\x00\t_\xa2'b'\x00\x05N\xb1v\xc5f\x90\xfe\x19[\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdc\x00COMPASS_MOT_Z\x00\x00\x00\tQ\x82'b'\x00\x05N\xb1v\xc5f\xf8\xfe\x19\\\x01\x01\x16\x00\x00\x18B\xf7\x01\xdd\x00COMPASS_ORIENT\x00\x00\x02\xecc'b'\x00\x05N\xb1v\xc5gT\xfe\x19]\x01\x01\x16\x00\x00\x80?\xf7\x01\xde\x00COMPASS_EXTERNAL\x02!~'b'\x00\x05N\xb1v\xc5g\xac\xfe\x19^\x01\x01\x16F\xd2v\xc3\xf7\x01\xdf\x00COMPASS_OFS2_X\x00\x00\tv6'b'\x00\x05N\xb1v\xc5h\x04\xfe\x19_\x01\x01\x16?u\x14B\xf7\x01\xe0\x00COMPASS_OFS2_Y\x00\x00\t\xa9\xf3'b'\x00\x05N\xb1v\xc5h\\\xfe\x19`\x01\x01\x16$Jo\xc2\xf7\x01\xe1\x00COMPASS_OFS2_Z\x00\x00\t\xc7\x80'b'\x00\x05N\xb1v\xc5h\xb4\xfe\x19a\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe2\x00COMPASS_MOT2_X\x00\x00\t\xd1\xeb'b'\x00\x05N\xb1v\xc5h\xfc\xfe\x03b\x01\x01/\xff\x00\x00x\x1d'b'\x00\x05N\xb1v\xc5i\x8c\xfe\x03c\x01\x01Ms\x00\x00\x11\xe4'b"\x00\x05N\xb1v\xc65\x9f\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe28"b'\x00\x05N\xb1v\xc6L\x8b\xfe!(\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa2\x8e'b'\x00\x05N\xb1v\xc7\x03\xbc\xfe\x19d\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe3\x00COMPASS_MOT2_Y\x00\x00\t\xfc\x9c'b'\x00\x05N\xb1v\xc7\x04D\xfe\x19e\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe4\x00COMPASS_MOT2_Z\x00\x00\tC\xad'b'\x00\x05N\xb1v\xc7\x04\xa4\xfe\x19f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe5\x00COMPASS_PRIMARY\x00\x02t\xc6'b'\x00\x05N\xb1v\xc7\x04\xfc\xfe\x19g\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe6\x00COMPASS_OFS3_X\x00\x00\t2%'b'\x00\x05N\xb1v\xc7\x05P\xfe\x19h\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe7\x00COMPASS_OFS3_Y\x00\x00\tp\x1c'b'\x00\x05N\xb1v\xc7\x05\xa0\xfe\x19i\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe8\x00COMPASS_OFS3_Z\x00\x00\t\x19\xe7'b'\x00\x05N\xb1v\xc7\x05\xf4\xfe\x19j\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe9\x00COMPASS_MOT3_X\x00\x00\t\xa5\xb9'b'\x00\x05N\xb1v\xc7\x06H\xfe\x19k\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xea\x00COMPASS_MOT3_Y\x00\x00\t\xf9\xfb'b'\x00\x05N\xb1v\xc7\x06\x9c\xfe\x19l\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xeb\x00COMPASS_MOT3_Z\x00\x00\t\xba\xdb'b'\x00\x05N\xb1v\xc7\x06\xf0\xfe\x19m\x01\x01\x16\x80\x04\x8fG\xf7\x01\xec\x00COMPASS_DEV_ID\x00\x00\x06\x18\x9c'b'\x00\x05N\xb1v\xc7\x07@\xfe\x19n\x01\x01\x16\x80\xc8\x00H\xf7\x01\xed\x00COMPASS_DEV_ID2\x00\x06\xfb\x17'b'\x00\x05N\xb1v\xc7\x07\x94\xfe\x19o\x01\x01\x16\x00\x85\x82G\xf7\x01\xee\x00COMPASS_DEV_ID3\x00\x06\xd7Y'b'\x00\x05N\xb1v\xc7\x07\xe4\xfe\x19p\x01\x01\x16\x00\x00\x80?\xf7\x01\xef\x00COMPASS_USE2\x00\x00\x00\x00\x02K\xab'b'\x00\x05N\xb1v\xc7\x084\xfe\x19q\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf0\x00COMPASS_ORIENT2\x00\x02\xbd\xe2'b'\x00\x05N\xb1v\xc7\x08\x88\xfe\x19r\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf1\x00COMPASS_EXTERN2\x00\x02\xa0\xe3'b'\x00\x05N\xb1v\xc7\x08\xd8\xfe\x19s\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf2\x00COMPASS_USE3\x00\x00\x00\x00\x02H\xdf'b'\x00\x05N\xb1v\xc7\t(\xfe\x19t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf3\x00COMPASS_ORIENT3\x00\x02\xd24'b'\x00\x05N\xb1v\xc7\t|\xfe\x19u\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf4\x00COMPASS_EXTERN3\x00\x02\xff\xa7'b'\x00\x05N\xb1v\xc7\t\xc8\xfe\x03v\x01\x01Ms\x00\x00\x08('b'\x00\x05N\xb1v\xc8\x0c3\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01[\x85'b'\x00\x05N\xb1v\xc8"k\xfe!*\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00#\xd3'b'\x00\x05N\xb1v\xc8t0\xfe\x19w\x01\x01\x16\x08\x95\x83?\xf7\x01\xf5\x00COMPASS_DIA_X\x00\x00\x00\t\xbf\x9c'b'\x00\x05N\xb1v\xc8t\xa4\xfe\x19x\x01\x01\x16\xba\x97\x82?\xf7\x01\xf6\x00COMPASS_DIA_Y\x00\x00\x00\t\\\x8d'b'\x00\x05N\xb1v\xc8t\xf8\xfe\x19y\x01\x01\x16\xab\xa7k?\xf7\x01\xf7\x00COMPASS_DIA_Z\x00\x00\x00\t/\xcf'b'\x00\x05N\xb1v\xc8ul\xfe\x19z\x01\x01\x16f\xab\xda<\xf7\x01\xf8\x00COMPASS_ODI_X\x00\x00\x00\t\x0e1'b'\x00\x05N\xb1v\xc8u\xd4\xfe\x19{\x01\x01\x16(?O<\xf7\x01\xf9\x00COMPASS_ODI_Y\x00\x00\x00\t\xf4\xf1'b'\x00\x05N\xb1v\xc8v<\xfe\x19|\x01\x01\x16\xe9p\x04\xbd\xf7\x01\xfa\x00COMPASS_ODI_Z\x00\x00\x00\ts\xcc'b'\x00\x05N\xb1v\xc8v\xa0\xfe\x19}\x01\x01\x16\xb1Ny?\xf7\x01\xfb\x00COMPASS_DIA2_X\x00\x00\t\xe7\x96'b'\x00\x05N\xb1v\xc8w,\xfe\x19~\x01\x01\x16\x1c\xe5\x80?\xf7\x01\xfc\x00COMPASS_DIA2_Y\x00\x00\t*\xbf'b'\x00\x05N\xb1v\xc8w\xec\xfe\x19\x7f\x01\x01\x16\t\x90\x85?\xf7\x01\xfd\x00COMPASS_DIA2_Z\x00\x00\t\x7f\xfd'b'\x00\x05N\xb1v\xc8x\x88\xfe\x19\x80\x01\x01\x164G\xa0\xbd\xf7\x01\xfe\x00COMPASS_ODI2_X\x00\x00\t\xf5?'b'\x00\x05N\xb1v\xc8x\xfc\xfe\x19\x81\x01\x01\x16\xc6\xda\xa1<\xf7\x01\xff\x00COMPASS_ODI2_Y\x00\x00\t\xb1\x90'b'\x00\x05N\xb1v\xc8y`\xfe\x19\x82\x01\x01\x16N|u\xbc\xf7\x01\x00\x01COMPASS_ODI2_Z\x00\x00\t\xf8R'b'\x00\x05N\xb1v\xc8y\xb4\xfe\x19\x83\x01\x01\x16\x00\x00\x80?\xf7\x01\x01\x01COMPASS_DIA3_X\x00\x00\t0\xa7'b"\x00\x05N\xb1v\xc8z\x0c\xfe\x19\x84\x01\x01\x16\x00\x00\x80?\xf7\x01\x02\x01COMPASS_DIA3_Y\x00\x00\tF'"b'\x00\x05N\xb1v\xc8z\\\xfe\x19\x85\x01\x01\x16\x00\x00\x80?\xf7\x01\x03\x01COMPASS_DIA3_Z\x00\x00\t/\xc5'b'\x00\x05N\xb1v\xc8z\xb0\xfe\x19\x86\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x04\x01COMPASS_ODI3_X\x00\x00\t\x89\xe4'b'\x00\x05N\xb1v\xc8{\x04\xfe\x19\x87\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x05\x01COMPASS_ODI3_Y\x00\x00\th\x10'b'\x00\x05N\xb1v\xc8{X\xfe\x19\x88\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x06\x01COMPASS_ODI3_Z\x00\x00\t\x1f\x89'b'\x00\x05N\xb1v\xc8{\xa4\xfe\x03\x89\x01\x01Ms\x00\x00!\xda'b'\x00\x05N\xb1v\xc9\xe8\x8f\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdeg'b'\x00\x05N\xb1v\xc9\xecH\xfe\x19\x8a\x01\x01\x16\x00\x00\xa0@\xf7\x01\x07\x01INS_PRODUCT_ID\x00\x00\x047\xb0'b"\x00\x05N\xb1v\xc9\xec\xe8\xfe\x19\x8b\x01\x01\x16\xa0\xca\xf3\xbc\xf7\x01\x08\x01INS_GYROFFS_X\x00\x00\x00\t'5"b'\x00\x05N\xb1v\xc9\xedh\xfe\x19\x8c\x01\x01\x16\xb6\xda(\xbd\xf7\x01\t\x01INS_GYROFFS_Y\x00\x00\x00\t\xb5\xd3'b'\x00\x05N\xb1v\xc9\xee\x00\xfe\x19\x8d\x01\x01\x16\xcf\xa3\x80\xbc\xf7\x01\n\x01INS_GYROFFS_Z\x00\x00\x00\t\x8fZ'b'\x00\x05N\xb1v\xc9\xee\x80\xfe\x19\x8e\x01\x01\x16"E\xab\xbc\xf7\x01\x0b\x01INS_GYR2OFFS_X\x00\x00\t\xb7,'b'\x00\x05N\xb1v\xc9\xee\xe4\xfe\x19\x8f\x01\x01\x16\xca\x8d\xaa;\xf7\x01\x0c\x01INS_GYR2OFFS_Y\x00\x00\t\xcdE'b'\x00\x05N\xb1v\xc9\xef0\xfe\x19\x90\x01\x01\x16\x0f\x7f\x87\xbc\xf7\x01\r\x01INS_GYR2OFFS_Z\x00\x00\t\xd2\x9e'b'\x00\x05N\xb1v\xc9\xef|\xfe\x19\x91\x01\x01\x16\xeaS1=\xf7\x01\x0e\x01INS_GYR3OFFS_X\x00\x00\t.\r'b'\x00\x05N\xb1v\xc9\xef\xc8\xfe\x19\x92\x01\x01\x16e\x05\xba\xbc\xf7\x01\x0f\x01INS_GYR3OFFS_Y\x00\x00\t^\xe0'b'\x00\x05N\xb1v\xc9\xf0\x14\xfe\x19\x93\x01\x01\x16\xf2WB>\xf7\x01\x10\x01INS_GYR3OFFS_Z\x00\x00\t\xe5\x93'b'\x00\x05N\xb1v\xc9\xf0\\\xfe\x19\x94\x01\x01\x16\xc5K\x7f?\xf7\x01\x11\x01INS_ACCSCAL_X\x00\x00\x00\t\x11\xe1'b'\x00\x05N\xb1v\xc9\xf0\xa8\xfe\x19\x95\x01\x01\x16\xbeW\x7f?\xf7\x01\x12\x01INS_ACCSCAL_Y\x00\x00\x00\t\xf6\xcd'b'\x00\x05N\xb1v\xc9\xf0\xf4\xfe\x19\x96\x01\x01\x16\x9d\x97|?\xf7\x01\x13\x01INS_ACCSCAL_Z\x00\x00\x00\t\x1f\x95'b'\x00\x05N\xb1v\xc9\xf1D\xfe\x19\x97\x01\x01\x16p\x0c\x92=\xf7\x01\x14\x01INS_ACCOFFS_X\x00\x00\x00\t\x96\xf2'b'\x00\x05N\xb1v\xc9\xf1\xa4\xfe\x19\x98\x01\x01\x16\xcb\x987\xbd\xf7\x01\x15\x01INS_ACCOFFS_Y\x00\x00\x00\t\x06\xf4'b'\x00\x05N\xb1v\xc9\xf1\xf0\xfe\x19\x99\x01\x01\x16\xbb\x10H>\xf7\x01\x16\x01INS_ACCOFFS_Z\x00\x00\x00\t5b'b'\x00\x05N\xb1v\xc9\xf2<\xfe\x19\x9a\x01\x01\x16\xd2q\x82?\xf7\x01\x17\x01INS_ACC2SCAL_X\x00\x00\th\x84'b'\x00\x05N\xb1v\xc9\xf2\x84\xfe\x19\x9b\x01\x01\x16\xc6D}?\xf7\x01\x18\x01INS_ACC2SCAL_Y\x00\x00\t\nb'b'\x00\x05N\xb1v\xca\x13\xb3\xfe!,\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa05'b'\x00\x05N\xb1v\xcb\x88H\xfe\x19\x9c\x01\x01\x16)[\x86?\xf7\x01\x19\x01INS_ACC2SCAL_Z\x00\x00\t\xe0\x1a'b'\x00\x05N\xb1v\xcb\x88\xd0\xfe\x19\x9d\x01\x01\x16\x8f\xa5\x8d9\xf7\x01\x1a\x01INS_ACC2OFFS_X\x00\x00\t\xe8\x94'b'\x00\x05N\xb1v\xcb\x89,\xfe\x19\x9e\x01\x01\x16\xa6\x86\xec\xbb\xf7\x01\x1b\x01INS_ACC2OFFS_Y\x00\x00\t\x11\x96'b'\x00\x05N\xb1v\xcb\x89\x84\xfe\x19\x9f\x01\x01\x16iM\xbe?\xf7\x01\x1c\x01INS_ACC2OFFS_Z\x00\x00\t\x90w'b'\x00\x05N\xb1v\xcb\x89\xdc\xfe\x19\xa0\x01\x01\x16kz\x80?\xf7\x01\x1d\x01INS_ACC3SCAL_X\x00\x00\t\xd0\x9c'b'\x00\x05N\xb1v\xcb\x8a0\xfe\x19\xa1\x01\x01\x16\x97\xe1~?\xf7\x01\x1e\x01INS_ACC3SCAL_Y\x00\x00\t\x03n'b'\x00\x05N\xb1v\xcb\x8a\x84\xfe\x19\xa2\x01\x01\x16t\x1a|?\xf7\x01\x1f\x01INS_ACC3SCAL_Z\x00\x00\t\xbd\xda'b'\x00\x05N\xb1v\xcb\x8a\xd8\xfe\x19\xa3\x01\x01\x16\xa3\xc3*>\xf7\x01 \x01INS_ACC3OFFS_X\x00\x00\t\xb0\xb6'b'\x00\x05N\xb1v\xcb\x8b(\xfe\x19\xa4\x01\x01\x16*B\xa7<\xf7\x01!\x01INS_ACC3OFFS_Y\x00\x00\t\t\x97'b'\x00\x05N\xb1v\xcb\x8b|\xfe\x19\xa5\x01\x01\x16*\x9e3\xbf\xf7\x01"\x01INS_ACC3OFFS_Z\x00\x00\t>\xf6'b'\x00\x05N\xb1v\xcb\x8b\xcc\xfe\x19\xa6\x01\x01\x16\x00\x00\xa0A\xf7\x01#\x01INS_GYRO_FILTER\x00\x02\xb8\xfe'b'\x00\x05N\xb1v\xcb\x8c \xfe\x19\xa7\x01\x01\x16\x00\x00\xa0A\xf7\x01$\x01INS_ACCEL_FILTER\x02\xffs'b'\x00\x05N\xb1v\xcb\x8ct\xfe\x19\xa8\x01\x01\x16\x00\x80\x89D\xf7\x01%\x01WPNAV_SPEED\x00\x00\x00\x00\x00\t\x1c6'b'\x00\x05N\xb1v\xcb\x8c\xc8\xfe\x19\xa9\x01\x01\x16\x00\x00HC\xf7\x01&\x01WPNAV_RADIUS\x00\x00\x00\x00\t\xdb\xc1'b"\x00\x05N\xb1v\xcb\x8d\x10\xfe\x19\xaa\x01\x01\x16\x00\x00\xa0C\xf7\x01'\x01WPNAV_SPEED_UP\x00\x00\tk\xa2"b'\x00\x05N\xb1v\xcb\x8d\\\xfe\x19\xab\x01\x01\x16\x00\x00pC\xf7\x01(\x01WPNAV_SPEED_DN\x00\x00\t"\xeb'b'\x00\x05N\xb1v\xcb\x8d\xa4\xfe\x19\xac\x01\x01\x16\x00\x00\xfaC\xf7\x01)\x01WPNAV_LOIT_SPEED\t;\xb4'b'\x00\x05N\xb1v\xcb\x8d\xf0\xfe\x19\xad\x01\x01\x16\x00\x00\xaaC\xf7\x01*\x01WPNAV_ACCEL\x00\x00\x00\x00\x00\t\x97['b'\x00\x05N\xb1v\xcb\x8e8\xfe\x19\xae\x01\x01\x16\x00\x00 C\xf7\x01+\x01WPNAV_ACCEL_Z\x00\x00\x00\t\xe6['b'\x00\x05N\xb1v\xcb\x8e\x84\xfe\x19\xaf\x01\x01\x16\x00\x00zD\xf7\x01,\x01WPNAV_LOIT_JERK\x00\t\xbd\xe7'b'\x00\x05N\xb1v\xcb\x8e\xcc\xfe\x19\xb0\x01\x01\x16\x00\x00eC\xf7\x01-\x01WPNAV_LOIT_MAXA\x00\t\x8d\xf6'b'\x00\x05N\xb1v\xcb\x8f\x14\xfe\x19\xb1\x01\x01\x16\x00\x00\xd8B\xf7\x01.\x01WPNAV_LOIT_MINA\x00\tY\x00'b'\x00\x05N\xb1v\xcb\x8f`\xfe\x19\xb2\x01\x01\x16\x00\x00zD\xf7\x01/\x01CIRCLE_RADIUS\x00\x00\x00\t\xea\x9e'b'\x00\x05N\xb1v\xcb\x8f\xa8\xfe\x19\xb3\x01\x01\x16\x00\x00\xa0A\xf7\x010\x01CIRCLE_RATE\x00\x00\x00\x00\x00\t\xbe\x11'b'\x00\x05N\xb1v\xcb\x8f\xec\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d'b'\x00\x05N\xb1v\xcb\xd0\x1b\xfe5-\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01@H'b'\x00\x05N\xb1v\xcb\xf9\xe7\xfe!.\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00!h'b'\x00\x05N\xb1v\xcd\x0b\xa4\xfe\x19\xb5\x01\x01\x16\x00\x00zD\xf7\x011\x01ATC_SLEW_YAW\x00\x00\x00\x00\t\x05\xad'b'\x00\x05N\xb1v\xcd\x0c\x18\xfe\x19\xb6\x01\x01\x16\x00\xc0\xdaE\xf7\x012\x01ATC_ACCEL_Y_MAX\x00\t\xbeC'b'\x00\x05N\xb1v\xcd\x0cl\xfe\x19\xb7\x01\x01\x16\x00\x00\x80?\xf7\x013\x01ATC_RATE_FF_ENAB\x02\xc5\x18'b'\x00\x05N\xb1v\xcd\x0c\xbc\xfe\x19\xb8\x01\x01\x16\x00\xa0\x0cG\xf7\x014\x01ATC_ACCEL_R_MAX\x00\t\x93\x97'b'\x00\x05N\xb1v\xcd\r\x0c\xfe\x19\xb9\x01\x01\x16\x00\xa0\x0cG\xf7\x015\x01ATC_ACCEL_P_MAX\x00\tYc'b'\x00\x05N\xb1v\xcd\rX\xfe\x19\xba\x01\x01\x16\x00\x00pA\xf7\x016\x01ATC_LEAD_RLL_W\x00\x00\t\xeb\x8d'b'\x00\x05N\xb1v\xcd\r\xa0\xfe\x19\xbb\x01\x01\x16\x00\x00\x80@\xf7\x017\x01ATC_LEAD_RLL_R\x00\x00\tg\xd1'b'\x00\x05N\xb1v\xcd\r\xec\xfe\x19\xbc\x01\x01\x16\x00\x00\x00\x00\xf7\x018\x01ATC_LEAD_PIT_W\x00\x00\t\xbd\x1c'b'\x00\x05N\xb1v\xcd\x0e8\xfe\x19\xbd\x01\x01\x16\x00\x00\x80?\xf7\x019\x01ATC_LEAD_PIT_R\x00\x00\t\xd9\xa2'b'\x00\x05N\xb1v\xcd\x0e\x80\xfe\x19\xbe\x01\x01\x16\x00\x00\x00@\xf7\x01:\x01PSC_ACC_XY_FILT\x00\t\xac\x8f'b'\x00\x05N\xb1v\xcd\x0e\xcc\xfe\x19\xbf\x01\x01\x16\x00\x00\xa0A\xf7\x01;\x01SR0_RAW_SENS\x00\x00\x00\x00\x04\xf3\x0b'b'\x00\x05N\xb1v\xcd\x0f\x18\xfe\x19\xc0\x01\x01\x16\x00\x00\x00\x00\xf7\x01<\x01SR0_EXT_STAT\x00\x00\x00\x00\x04x1'b'\x00\x05N\xb1v\xcd\x0f`\xfe\x19\xc1\x01\x01\x16\x00\x00\x00\x00\xf7\x01=\x01SR0_RC_CHAN\x00\x00\x00\x00\x00\x04\xef\xe1'b'\x00\x05N\xb1v\xcd\x0f\xac\xfe\x19\xc2\x01\x01\x16\x00\x00\x00\x00\xf7\x01>\x01SR0_RAW_CTRL\x00\x00\x00\x00\x04W\xfd'b'\x00\x05N\xb1v\xcd\x0f\xf4\xfe\x19\xc3\x01\x01\x16\x00\x00\x00\x00\xf7\x01?\x01SR0_POSITION\x00\x00\x00\x00\x04\x1b|'b'\x00\x05N\xb1v\xcd\x10<\xfe\x19\xc4\x01\x01\x16\x00\x00\x00\x00\xf7\x01@\x01SR0_EXTRA1\x00\x00\x00\x00\x00\x00\x04\xcer'b'\x00\x05N\xb1v\xcd\x10\x88\xfe\x19\xc5\x01\x01\x16\x00\x00\x00\x00\xf7\x01A\x01SR0_EXTRA2\x00\x00\x00\x00\x00\x00\x04l['b'\x00\x05N\xb1v\xcd\x10\xd0\xfe\x19\xc6\x01\x01\x16\x00\x00\x00\x00\xf7\x01B\x01SR0_EXTRA3\x00\x00\x00\x00\x00\x00\x04o\x1e'b'\x00\x05N\xb1v\xcd\x11\x1c\xfe\x19\xc7\x01\x01\x16\x00\x00\x00\x00\xf7\x01C\x01SR0_PARAMS\x00\x00\x00\x00\x00\x00\x04\x8f\x88'b'\x00\x05N\xb1v\xcd\x11h\xfe\x19\xc8\x01\x01\x16\x00\x00\x80@\xf7\x01D\x01SR1_RAW_SENS\x00\x00\x00\x00\x04\xe0\x8d'b'\x00\x05N\xb1v\xcd\x11\xb0\xfe\x19\xc9\x01\x01\x16\x00\x00\x80@\xf7\x01E\x01SR1_EXT_STAT\x00\x00\x00\x00\x04-\xe5'b'\x00\x05N\xb1v\xcd\x11\xfc\xfe\x19\xca\x01\x01\x16\x00\x00\x80@\xf7\x01F\x01SR1_RC_CHAN\x00\x00\x00\x00\x00\x04\xe1\xc2'b'\x00\x05N\xb1v\xcd\x12D\xfe\x19\xcb\x01\x01\x16\x00\x00\x80@\xf7\x01G\x01SR1_RAW_CTRL\x00\x00\x00\x00\x04\x02)'b'\x00\x05N\xb1v\xcd\x12\x8c\xfe\x19\xcc\x01\x01\x16\x00\x00\x80@\xf7\x01H\x01SR1_POSITION\x00\x00\x00\x00\x04ds'b'\x00\x05N\xb1v\xcd\x12\xd4\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\x00\x05N\xb1v\xcd\xbd\xc3\xfe5/\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc5\xaa'b'\x00\x05N\xb1v\xcd\xe7\x9b\xfe!0\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9d\x0c'b'\x00\x05N\xb1v\xce\x94\x90\xfe\x19\xce\x01\x01\x16\x00\x00\x80@\xf7\x01I\x01SR1_EXTRA1\x00\x00\x00\x00\x00\x00\x04\x8e\x0f'b'\x00\x05N\xb1v\xce\x95\x0c\xfe\x19\xcf\x01\x01\x16\x00\x00\x80@\xf7\x01J\x01SR1_EXTRA2\x00\x00\x00\x00\x00\x00\x04\x91\x90'b'\x00\x05N\xb1v\xce\x95d\xfe\x19\xd0\x01\x01\x16\x00\x00\x80@\xf7\x01K\x01SR1_EXTRA3\x00\x00\x00\x00\x00\x00\x04x\xf0'b'\x00\x05N\xb1v\xce\x95\xb8\xfe\x19\xd1\x01\x01\x16\x00\x00 A\xf7\x01L\x01SR1_PARAMS\x00\x00\x00\x00\x00\x00\x04P\xcc'b'\x00\x05N\xb1v\xce\x96\x14\xfe\x19\xd2\x01\x01\x16\x00\x00\x00\x00\xf7\x01M\x01SR2_RAW_SENS\x00\x00\x00\x00\x04\x83\xfb'b'\x00\x05N\xb1v\xce\x96`\xfe\x19\xd3\x01\x01\x16\x00\x00\x00\x00\xf7\x01N\x01SR2_EXT_STAT\x00\x00\x00\x00\x04\xf3%'b'\x00\x05N\xb1v\xce\x96\xb0\xfe\x19\xd4\x01\x01\x16\x00\x00\x00\x00\xf7\x01O\x01SR2_RC_CHAN\x00\x00\x00\x00\x00\x04N7'b'\x00\x05N\xb1v\xce\x96\xfc\xfe\x19\xd5\x01\x01\x16\x00\x00\x00\x00\xf7\x01P\x01SR2_RAW_CTRL\x00\x00\x00\x00\x04\x10X'b'\x00\x05N\xb1v\xce\x97L\xfe\x19\xd6\x01\x01\x16\x00\x00\x00\x00\xf7\x01Q\x01SR2_POSITION\x00\x00\x00\x00\x04\xba\x98'b'\x00\x05N\xb1v\xce\x97\x98\xfe\x19\xd7\x01\x01\x16\x00\x00\x00\x00\xf7\x01R\x01SR2_EXTRA1\x00\x00\x00\x00\x00\x00\x04\xf83'b'\x00\x05N\xb1v\xce\x97\xe8\xfe\x19\xd8\x01\x01\x16\x00\x00\x00\x00\xf7\x01S\x01SR2_EXTRA2\x00\x00\x00\x00\x00\x00\x04\xf9\xd7'b'\x00\x05N\xb1v\xce\x984\xfe\x19\xd9\x01\x01\x16\x00\x00\x00\x00\xf7\x01T\x01SR2_EXTRA3\x00\x00\x00\x00\x00\x00\x04w\xb6'b'\x00\x05N\xb1v\xce\x98\x90\xfe\x19\xda\x01\x01\x16\x00\x00\x00\x00\xf7\x01U\x01SR2_PARAMS\x00\x00\x00\x00\x00\x00\x04qa'b'\x00\x05N\xb1v\xce\x98\xf4\xfe\x19\xdb\x01\x01\x16\x00\x00\x80?\xf7\x01V\x01AHRS_GPS_GAIN\x00\x00\x00\t"\xb5'b'\x00\x05N\xb1v\xce\x99<\xfe\x19\xdc\x01\x01\x16\x00\x00\x80?\xf7\x01W\x01AHRS_GPS_USE\x00\x00\x00\x00\x02\x95\xd2'b'\x00\x05N\xb1v\xce\x99\x88\xfe\x19\xdd\x01\x01\x16\xcd\xcc\xcc=\xf7\x01X\x01AHRS_YAW_P\x00\x00\x00\x00\x00\x00\t\xa1\xa3'b'\x00\x05N\xb1v\xce\x99\xd0\xfe\x19\xde\x01\x01\x16\xcd\xcc\xcc=\xf7\x01Y\x01AHRS_RP_P\x00\x00\x00\x00\x00\x00\x00\tq\xa6'b'\x00\x05N\xb1v\xce\x9a\x1c\xfe\x19\xdf\x01\x01\x16\x00\x00\x00\x00\xf7\x01Z\x01AHRS_WIND_MAX\x00\x00\x00\x02|\xec'b'\x00\x05N\xb1v\xce\x9a`\xfe\x03\xe0\x01\x01Ms\x00\x00#\xa5'b'\x00\x05N\xb1v\xce\x9a\xec\xfe\x12\xe1\x01\x01\xfc\x8c>\x03\x004\x00\x01\x00ARMMASK\x00Wr2\x0f'b'\x00\x05N\xb1v\xcf\xa0\xf7\xfe51\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01#;'b'\x00\x05N\xb1v\xcf\xca\xdb\xfe!2\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1cQ'b'\x00\x05N\xb1v\xcf\xe0\x93\xfe\t3\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf7/'b'\x00\x05N\xb1v\xd0\x1b\x08\xfe\t\xe2\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc1\xb5'b'\x00\x05N\xb1v\xd0\x1b\x9c\xfe\x19\xe3\x01\x01\x16\xb3\xd7\x1f<\xf7\x01[\x01AHRS_TRIM_X\x00\x00\x00\x00\x00\t\x1dy'b'\x00\x05N\xb1v\xd0\x1c \xfe\x19\xe4\x01\x01\x16\xc7\xb7\xe7;\xf7\x01\\\x01AHRS_TRIM_Y\x00\x00\x00\x00\x00\t\x94\xd0'b'\x00\x05N\xb1v\xd0\x1c\x84\xfe\x19\xe5\x01\x01\x16\x00\x00\x00\x00\xf7\x01]\x01AHRS_TRIM_Z\x00\x00\x00\x00\x00\tT\xe6'b'\x00\x05N\xb1v\xd0\x1c\xdc\xfe\x19\xe6\x01\x01\x16\x00\x00@A\xf7\x01^\x01AHRS_ORIENTATION\x02\x973'b'\x00\x05N\xb1v\xd0\x1d8\xfe\x19\xe7\x01\x01\x16\xcd\xcc\xcc=\xf7\x01_\x01AHRS_COMP_BETA\x00\x00\t\x12/'b'\x00\x05N\xb1v\xd0\x1d\x90\xfe\x19\xe8\x01\x01\x16\x00\x00\xc0@\xf7\x01`\x01AHRS_GPS_MINSATS\x02\x15\xbb'b'\x00\x05N\xb1v\xd0\x1d\xec\xfe\x19\xe9\x01\x01\x16\x00\x00@@\xf7\x01a\x01MNT_DEFLT_MODE\x00\x00\x02\xe3#'b'\x00\x05N\xb1v\xd0\x1eD\xfe\x19\xea\x01\x01\x16\x00\x00\x00\x00\xf7\x01b\x01MNT_RETRACT_X\x00\x00\x00\t\x03\x17'b'\x00\x05N\xb1v\xd0\x1e\x9c\xfe\x19\xeb\x01\x01\x16\x00\x00\x00\x00\xf7\x01c\x01MNT_RETRACT_Y\x00\x00\x00\t\x8d\xec'b'\x00\x05N\xb1v\xd0\x1e\xf4\xfe\x19\xec\x01\x01\x16\x00\x00\x00\x00\xf7\x01d\x01MNT_RETRACT_Z\x00\x00\x00\t\xa9\x0e'b'\x00\x05N\xb1v\xd0\x1fH\xfe\x19\xed\x01\x01\x16\x00\x00\x00\x00\xf7\x01e\x01MNT_NEUTRAL_X\x00\x00\x00\tp\x08'b'\x00\x05N\xb1v\xd0\x1f\x98\xfe\x19\xee\x01\x01\x16\x00\x00\x00\x00\xf7\x01f\x01MNT_NEUTRAL_Y\x00\x00\x00\t\xa5\x04'b'\x00\x05N\xb1v\xd0\x1f\xe8\xfe\x19\xef\x01\x01\x16\x00\x00\x00\x00\xf7\x01g\x01MNT_NEUTRAL_Z\x00\x00\x00\t}\xf7'b'\x00\x05N\xb1v\xd0 8\xfe\x19\xf0\x01\x01\x16\x00\x00\x00\x00\xf7\x01h\x01MNT_STAB_ROLL\x00\x00\x00\x02\xfbI'b'\x00\x05N\xb1v\xd0 \x88\xfe\x19\xf1\x01\x01\x16\x00\x00\x00\x00\xf7\x01i\x01MNT_STAB_TILT\x00\x00\x00\x02\x18l'b'\x00\x05N\xb1v\xd0 \xdc\xfe\x19\xf2\x01\x01\x16\x00\x00\x00\x00\xf7\x01j\x01MNT_STAB_PAN\x00\x00\x00\x00\x02\xc9\x11'b'\x00\x05N\xb1v\xd0!(\xfe\x19\xf3\x01\x01\x16\x00\x00\x00\x00\xf7\x01k\x01MNT_RC_IN_ROLL\x00\x00\x02\xe2+'b'\x00\x05N\xb1v\xd0!x\xfe\x19\xf4\x01\x01\x16\x00\xa0\x8c\xc5\xf7\x01l\x01MNT_ANGMIN_ROL\x00\x00\x04?+'b'\x00\x05N\xb1v\xd0!\xc8\xfe\x19\xf5\x01\x01\x16\x00\xa0\x8cE\xf7\x01m\x01MNT_ANGMAX_ROL\x00\x00\x04\x9e6'b'\x00\x05N\xb1v\xd0"\x18\xfe\x19\xf6\x01\x01\x16\x00\x00\xc0@\xf7\x01n\x01MNT_RC_IN_TILT\x00\x00\x025Q'b'\x00\x05N\xb1v\xd0"d\xfe\x19\xf7\x01\x01\x16\x00\xa0\x0c\xc6\xf7\x01o\x01MNT_ANGMIN_TIL\x00\x00\x04P1'b'\x00\x05N\xb1v\xd0"\xb4\xfe\x19\xf8\x01\x01\x16\x00\x00\x00\x00\xf7\x01p\x01MNT_ANGMAX_TIL\x00\x00\x04\xf8,'b'\x00\x05N\xb1v\xd0#\x00\xfe\x19\xf9\x01\x01\x16\x00\x00\x00\x00\xf7\x01q\x01MNT_RC_IN_PAN\x00\x00\x00\x02Q\xb7'b'\x00\x05N\xb1v\xd0#L\xfe\x19\xfa\x01\x01\x16\x00\xa0\x8c\xc5\xf7\x01r\x01MNT_ANGMIN_PAN\x00\x00\x04\xb0z'b'\x00\x05N\xb1v\xd0#\x9c\xfe\x03\xfb\x01\x01Ms\x00\x007Y'b'\x00\x05N\xb1v\xd1\x8a\xd3\xfe54\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01r\x03'b'\x00\x05N\xb1v\xd1\x8d\xd0\xfe\x19\xfc\x01\x01\x16\x00\xa0\x8cE\xf7\x01s\x01MNT_ANGMAX_PAN\x00\x00\x04\xc8\x85'b'\x00\x05N\xb1v\xd1\x8eh\xfe\x19\xfd\x01\x01\x16\x00\x00\x00\x00\xf7\x01t\x01MNT_JSTICK_SPD\x00\x00\x02\xc5\xf1'b'\x00\x05N\xb1v\xd1\x8e\xe8\xfe\x19\xfe\x01\x01\x16\x00\x00\x00\x00\xf7\x01u\x01MNT_LEAD_RLL\x00\x00\x00\x00\tj\xd7'b'\x00\x05N\xb1v\xd1\x8f\x80\xfe\x19\xff\x01\x01\x16\x00\x00\x00\x00\xf7\x01v\x01MNT_LEAD_PTCH\x00\x00\x00\t1I'b'\x00\x05N\xb1v\xd1\x8f\xf4\xfe\x19\x00\x01\x01\x16\x00\x00\x00@\xf7\x01w\x01MNT_TYPE\x00\x00\x00\x00\x00\x00\x00\x00\x022\x9c'b'\x00\x05N\xb1v\xd1\x90`\xfe\x19\x01\x01\x01\x16\x00\x00@@\xf7\x01x\x01LOG_BACKEND_TYPE\x02=\xcb'b'\x00\x05N\xb1v\xd1\x90\xcc\xfe\x19\x02\x01\x01\x16\x00\x00\xa0@\xf7\x01y\x01BATT_MONITOR\x00\x00\x00\x00\x02^\x14'b'\x00\x05N\xb1v\xd1\x91$\xfe\x19\x03\x01\x01\x16\x00\x00\x00@\xf7\x01z\x01BATT_VOLT_PIN\x00\x00\x00\x02\x03\xe3'b'\x00\x05N\xb1v\xd1\x91|\xfe\x19\x04\x01\x01\x16\x00\x00@@\xf7\x01{\x01BATT_CURR_PIN\x00\x00\x00\x02\xf6:'b'\x00\x05N\xb1v\xd1\x91\xd8\xfe\x19\x05\x01\x01\x16\x9a\x99!A\xf7\x01|\x01BATT_VOLT_MULT\x00\x00\t,\xf7'b'\x00\x05N\xb1v\xd1\x92,\xfe\x19\x06\x01\x01\x16\x00\x00\x88A\xf7\x01}\x01BATT_AMP_PERVOLT\t\xac\xd5'b'\x00\x05N\xb1v\xd1\x92\x84\xfe\x19\x07\x01\x01\x16\x00\x00\x00\x00\xf7\x01~\x01BATT_AMP_OFFSET\x00\t\xc7\xd0'b'\x00\x05N\xb1v\xd1\x92\xd8\xfe\x19\x08\x01\x01\x16\x00\x80\xa2E\xf7\x01\x7f\x01BATT_CAPACITY\x00\x00\x00\x06l\x91'b'\x00\x05N\xb1v\xd1\x93,\xfe\x19\t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x80\x01BATT2_MONITOR\x00\x00\x00\x02'b'\x00\x05N\xb1v\xd3T \xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\x00\x05N\xb1v\xd3\x8a\xab\xfe56\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf7\xe1'b'\x00\x05N\xb1v\xd3\xa0\xeb\xfe!7\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd6@'b"\x00\x05N\xb1v\xd4c\x03\xfe%8\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa3\x1b"b'\x00\x05N\xb1v\xd4\xb3\x94\xfe\x19!\x01\x01\x16\x00\x00\x80\xc3\xf7\x01\x97\x01GPS_SBP_LOGMASK\x00\x04\x8c\xaf'b'\x00\x05N\xb1v\xd4\xb4\x04\xfe\x19"\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x98\x01SCHED_DEBUG\x00\x00\x00\x00\x00\x02A\xf4'b'\x00\x05N\xb1v\xd4\xb4X\xfe\x19#\x01\x01\x16\x00\x00\x80?\xf7\x01\x99\x01FENCE_ENABLE\x00\x00\x00\x00\x02Z6'b'\x00\x05N\xb1v\xd4\xb4\xbc\xfe\x19$\x01\x01\x16\x00\x00\x80?\xf7\x01\x9a\x01FENCE_TYPE\x00\x00\x00\x00\x00\x00\x02\xe7\x82'b'\x00\x05N\xb1v\xd4\xb5 \xfe\x19%\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9b\x01FENCE_ACTION\x00\x00\x00\x00\x026\x8c'b'\x00\x05N\xb1v\xd4\xb5\x84\xfe\x19&\x01\x01\x16H\xe16B\xf7\x01\x9c\x01FENCE_ALT_MAX\x00\x00\x00\t\x85\x10'b"\x00\x05N\xb1v\xd4\xb5\xe8\xfe\x19'\x01\x01\x16\x00\x00\x96C\xf7\x01\x9d\x01FENCE_RADIUS\x00\x00\x00\x00\t\xac\x82"b'\x00\x05N\xb1v\xd4\xb6H\xfe\x19(\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9e\x01FENCE_MARGIN\x00\x00\x00\x00\t\x1b\xf4'b'\x00\x05N\xb1v\xd4\xb6\xac\xfe\x19)\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9f\x01RALLY_TOTAL\x00\x00\x00\x00\x00\x02\xb4\x94'b'\x00\x05N\xb1v\xd4\xb7\x0c\xfe\x19*\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xa0\x01RALLY_LIMIT_KM\x00\x00\t\x01\xf4'b'\x00\x05N\xb1v\xd4\xb7l\xfe\x19+\x01\x01\x16\x00\x00\x96B\xf7\x01\xa1\x01MOT_SPIN_ARMED\x00\x00\x04-\xda'b'\x00\x05N\xb1v\xd4\xb7\xcc\xfe\x19,\x01\x01\x16\x00\x00HC\xf7\x01\xa2\x01MOT_YAW_HEADROOM\x04,q'b'\x00\x05N\xb1v\xd4\xb8,\xfe\x19-\x01\x01\x16\xcd\xccL?\xf7\x01\xa3\x01MOT_THST_EXPO\x00\x00\x00\t:C'b'\x00\x05N\xb1v\xd4\xb8\x90\xfe\x19.\x01\x01\x16\xd7\xa3p?\xf7\x01\xa4\x01MOT_THST_MAX\x00\x00\x00\x00\t\x14\x9e'b'\x00\x05N\xb1v\xd4\xb8\xec\xfe\x19/\x01\x01\x16ff\x86A\xf7\x01\xa5\x01MOT_THST_BAT_MAX\t\x8a\xe3'b'\x00\x05N\xb1v\xd4\xb9<\xfe\x190\x01\x01\x16\x00\x00@A\xf7\x01\xa6\x01MOT_THST_BAT_MIN\tV&'b'\x00\x05N\xb1v\xd4\xb9\x84\xfe\x191\x01\x01\x16\x00\x00(B\xf7\x01\xa7\x01MOT_CURR_MAX\x00\x00\x00\x00\t\x90}'b'\x00\x05N\xb1v\xd4\xb9\xd0\xfe\x192\x01\x01\x16\x9a\x99\x19>\xf7\x01\xa8\x01MOT_THR_MIX_MIN\x00\t~)'b'\x00\x05N\xb1v\xd4\xba\x18\xfe\x033\x01\x01Ms\x00\x00\x98\xda'b'\x00\x05N\xb1v\xd4\xba\x98\xfe\x034\x01\x01/\xff\x00\x00@>'b'\x00\x05N\xb1v\xd5e\xff\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x04\xa9'b'\x00\x05N\xb1v\xd5|G\xfe!:\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\t/'b'\x00\x05N\xb1v\xd6/\xfc\xfe\x195\x01\x01\x16\x00\x00\x80?\xf7\x01\xa9\x01RCMAP_ROLL\x00\x00\x00\x00\x00\x00\x02\xe7\xfc'b'\x00\x05N\xb1v\xd60\x84\xfe\x196\x01\x01\x16\x00\x00\x00@\xf7\x01\xaa\x01RCMAP_PITCH\x00\x00\x00\x00\x00\x02\ri'b'\x00\x05N\xb1v\xd60\xec\xfe\x197\x01\x01\x16\x00\x00@@\xf7\x01\xab\x01RCMAP_THROTTLE\x00\x00\x024\xa7'b'\x00\x05N\xb1v\xd61H\xfe\x198\x01\x01\x16\x00\x00\x80@\xf7\x01\xac\x01RCMAP_YAW\x00\x00\x00\x00\x00\x00\x00\x02\xc7\x88'b'\x00\x05N\xb1v\xd61\xa4\xfe\x199\x01\x01\x16\x00\x00\x00?\xf7\x01\xad\x01EKF_VELNE_NOISE\x00\t\xeb\xd3'b'\x00\x05N\xb1v\xd61\xf8\xfe\x19:\x01\x01\x16333?\xf7\x01\xae\x01EKF_VELD_NOISE\x00\x00\t.\xd4'b'\x00\x05N\xb1v\xd62L\xfe\x19;\x01\x01\x16\x00\x00\x00?\xf7\x01\xaf\x01EKF_POSNE_NOISE\x00\tC\x91'b'\x00\x05N\xb1v\xd62\xa0\xfe\x19<\x01\x01\x16\x00\x00\x00@\xf7\x01\xb0\x01EKF_ALT_NOISE\x00\x00\x00\t\xee\xbc'b'\x00\x05N\xb1v\xd62\xf0\xfe\x19=\x01\x01\x16\xcd\xccL=\xf7\x01\xb1\x01EKF_MAG_NOISE\x00\x00\x00\t\xaf\x1a'b'\x00\x05N\xb1v\xd63D\xfe\x19>\x01\x01\x1633\xb3?\xf7\x01\xb2\x01EKF_EAS_NOISE\x00\x00\x00\t8\x07'b'\x00\x05N\xb1v\xd63\x90\xfe\x19?\x01\x01\x16\xcd\xcc\xcc=\xf7\x01\xb3\x01EKF_WIND_PNOISE\x00\t\xdbV'b'\x00\x05N\xb1v\xd63\xe0\xfe\x19@\x01\x01\x16\x00\x00\x00?\xf7\x01\xb4\x01EKF_WIND_PSCALE\x00\t\x11\xa3'b'\x00\x05N\xb1v\xd64,\xfe\x19A\x01\x01\x16\x8f\xc2u<\xf7\x01\xb5\x01EKF_GYRO_PNOISE\x00\t\xa0\xda'b'\x00\x05N\xb1v\xd64x\xfe\x19B\x01\x01\x16\x00\x00\x80>\xf7\x01\xb6\x01EKF_ACC_PNOISE\x00\x00\t\xc69'b'\x00\x05N\xb1v\xd64\xc8\xfe\x19C\x01\x01\x16\xbd7\x865\xf7\x01\xb7\x01EKF_GBIAS_PNOISE\t\x11\xcd'b'\x00\x05N\xb1v\xd65\x14\xfe\x19D\x01\x01\x16\x17\xb7Q8\xf7\x01\xb8\x01EKF_ABIAS_PNOISE\t;\x83'b'\x00\x05N\xb1v\xd65`\xfe\x19E\x01\x01\x16RI\x1d:\xf7\x01\xb9\x01EKF_MAGE_PNOISE\x00\t\xbe\xeb'b'\x00\x05N\xb1v\xd65\xac\xfe\x19F\x01\x01\x16RI\x1d:\xf7\x01\xba\x01EKF_MAGB_PNOISE\x00\t\xa6C'b'\x00\x05N\xb1v\xd65\xf8\xfe\x03G\x01\x01Ms\x00\x00?D'b'\x00\x05N\xb1v\xd7Uk\xfe5;\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x81K'b'\x00\x05N\xb1v\xd7k\xaf\xfe!<\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8a\xc9'b'\x00\x05N\xb1v\xd7\xdb8\xfe\x19H\x01\x01\x16\x00\x00HC\xf7\x01\xbb\x01EKF_VEL_DELAY\x00\x00\x00\x04\x86k'b'\x00\x05N\xb1v\xd7\xdb\xdc\xfe\x19I\x01\x01\x16\x00\x00HC\xf7\x01\xbc\x01EKF_POS_DELAY\x00\x00\x00\x04\x06\xf2'b'\x00\x05N\xb1v\xd7\xdcH\xfe\x19J\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xbd\x01EKF_GPS_TYPE\x00\x00\x00\x00\x02\xc4\x86'b'\x00\x05N\xb1v\xd7\xdc\xac\xfe\x19K\x01\x01\x16\x00\x00\x80@\xf7\x01\xbe\x01EKF_VEL_GATE\x00\x00\x00\x00\x02\x80+'b'\x00\x05N\xb1v\xd7\xdd\x08\xfe\x19L\x01\x01\x16\x00\x00\xa0@\xf7\x01\xbf\x01EKF_POS_GATE\x00\x00\x00\x00\x02\xc7\x93'b'\x00\x05N\xb1v\xd7\xdd`\xfe\x19M\x01\x01\x16\x00\x00 A\xf7\x01\xc0\x01EKF_HGT_GATE\x00\x00\x00\x00\x02\x03b'b'\x00\x05N\xb1v\xd7\xdd\xcc\xfe\x19N\x01\x01\x16\x00\x00@@\xf7\x01\xc1\x01EKF_MAG_GATE\x00\x00\x00\x00\x02O\x07'b'\x00\x05N\xb1v\xd7\xde(\xfe\x19O\x01\x01\x16\x00\x00 A\xf7\x01\xc2\x01EKF_EAS_GATE\x00\x00\x00\x00\x02\x1eh'b'\x00\x05N\xb1v\xd7\xde\x88\xfe\x19P\x01\x01\x16\x00\x00@@\xf7\x01\xc3\x01EKF_MAG_CAL\x00\x00\x00\x00\x00\x02\xbe\x92'b'\x00\x05N\xb1v\xd7\xde\xe4\xfe\x19Q\x01\x01\x16\x00\x00\xc8B\xf7\x01\xc4\x01EKF_GLITCH_ACCEL\x04\xb5*'b'\x00\x05N\xb1v\xd7\xdf@\xfe\x19R\x01\x01\x16\x00\x00\xc8A\xf7\x01\xc5\x01EKF_GLITCH_RAD\x00\x00\x02t\xac'b'\x00\x05N\xb1v\xd7\xdf\x9c\xfe\x19S\x01\x01\x16\x00\x00\x00@\xf7\x01\xc6\x01EKF_GND_GRADIENT\x02\x93\x9a'b'\x00\x05N\xb1v\xd7\xdf\xf4\xfe\x19T\x01\x01\x16\x00\x00\x80>\xf7\x01\xc7\x01EKF_FLOW_NOISE\x00\x00\t\xe8\xa8'b'\x00\x05N\xb1v\xd7\xe0P\xfe\x19U\x01\x01\x16\x00\x00@@\xf7\x01\xc8\x01EKF_FLOW_GATE\x00\x00\x00\x02\x1ch'b'\x00\x05N\xb1v\xd7\xe0\xa8\xfe\x19V\x01\x01\x16\x00\x00 A\xf7\x01\xc9\x01EKF_FLOW_DELAY\x00\x00\x02\x8d\x90'b'\x00\x05N\xb1v\xd7\xe1\x00\xfe\x19W\x01\x01\x16\x00\x00\xa0@\xf7\x01\xca\x01EKF_RNG_GATE\x00\x00\x00\x00\x02\xa3x'b'\x00\x05N\xb1v\xd7\xe1`\xfe\x19X\x01\x01\x16\x00\x00 @\xf7\x01\xcb\x01EKF_MAX_FLOW\x00\x00\x00\x00\t\xc6\xd0'b'\x00\x05N\xb1v\xd7\xe1\xac\xfe\x19Y\x01\x01\x16\x00\x00\x80?\xf7\x01\xcc\x01EKF_FALLBACK\x00\x00\x00\x00\x02\x9aV'b'\x00\x05N\xb1v\xd7\xe1\xf8\xfe\x19Z\x01\x01\x16\x00\x00\x80?\xf7\x01\xcd\x01EKF_ALT_SOURCE\x00\x00\x02\xaeH'b'\x00\x05N\xb1v\xd7\xe2@\xfe\x19[\x01\x01\x16\x00\x00\xfeB\xf7\x01\xce\x01EKF_GPS_CHECK\x00\x00\x00\x02\xcfa'b'\x00\x05N\xb1v\xd7\xe2\x8c\xfe\x19\\\x01\x01\x16\x00\x00\xc0@\xf7\x01\xcf\x01EKF_GPS_LIM_NSAT\x02\x0f\xad'b'\x00\x05N\xb1v\xd7\xe2\xd8\xfe\x19]\x01\x01\x16\x00\x00pC\xf7\x01\xd0\x01EKF_GPS_LIM_HDOP\x04\n-'b'\x00\x05N\xb1v\xd7\xe3$\xfe\x19^\x01\x01\x16\x00\x00\x80?\xf7\x01\xd1\x01EKF_GPS_LIM_SERR\t\xa2\xeb'b'\x00\x05N\xb1v\xd7\xe3l\xfe\x19_\x01\x01\x16\x00\x00\xa0@\xf7\x01\xd2\x01EKF_GPS_LIM_HERR\t>2'b'\x00\x05N\xb1v\xd7\xe3\xb4\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b'\x00\x05N\xb1v\xd9%\x93\xfe5=\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1fd'b'\x00\x05N\xb1v\xd9;\xcf\xfe!>\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0b\x94'b'\x00\x05N\xb1v\xd9Q\x10\xfe\x19a\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd3\x01EKF_GPS_LIM_HDFT\t\xb9\xa0'b'\x00\x05N\xb1v\xd9Q\xbc\xfe\x19b\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd4\x01EKF_GPS_LIM_VSPD\t\x0c?'b'\x00\x05N\xb1v\xd9R\x14\xfe\x19c\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd5\x01EKF_GPS_LIM_HSPD\t\xbb\xbb'b'\x00\x05N\xb1v\xd9Rd\xfe\x19d\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd6\x01MIS_TOTAL\x00\x00\x00\x00\x00\x00\x00\x04=\x16'b'\x00\x05N\xb1v\xd9R\xb4\xfe\x19e\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd7\x01MIS_RESTART\x00\x00\x00\x00\x00\x02\xc62'b'\x00\x05N\xb1v\xd9S\x00\xfe\x19f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd8\x01RNGFND_TYPE\x00\x00\x00\x00\x00\x02\xd5\x1e'b'\x00\x05N\xb1v\xd9Sd\xfe\x19g\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xd9\x01RNGFND_PIN\x00\x00\x00\x00\x00\x00\x02\x95\x0c'b'\x00\x05N\xb1v\xd9S\xc8\xfe\x19h\x01\x01\x16\x00\x00@@\xf7\x01\xda\x01RNGFND_SCALING\x00\x00\tM\x98'b'\x00\x05N\xb1v\xd9T,\xfe\x19i\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdb\x01RNGFND_OFFSET\x00\x00\x00\t>H'b'\x00\x05N\xb1v\xd9T\x8c\xfe\x19j\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdc\x01RNGFND_FUNCTION\x00\x02\xe9\xe4'b'\x00\x05N\xb1v\xd9T\xf0\xfe\x19k\x01\x01\x16\x00\x00\xa0A\xf7\x01\xdd\x01RNGFND_MIN_CM\x00\x00\x00\x04c\x06'b'\x00\x05N\xb1v\xd9UP\xfe\x19l\x01\x01\x16\x00\x00/D\xf7\x01\xde\x01RNGFND_MAX_CM\x00\x00\x00\x04\x1f\x83'b'\x00\x05N\xb1v\xd9U\xb0\xfe\x19m\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xdf\x01RNGFND_STOP_PIN\x00\x02\xc28'b'\x00\x05N\xb1v\xd9V0\xfe\x19n\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe0\x01RNGFND_SETTLE\x00\x00\x00\x04e\x0f'b'\x00\x05N\xb1v\xd9V\x98\xfe\x19o\x01\x01\x16\x00\x00\x80?\xf7\x01\xe1\x01RNGFND_RMETRIC\x00\x00\x02\xa6\x93'b'\x00\x05N\xb1v\xd9W\x1c\xfe\x19p\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe2\x01RNGFND_PWRRNG\x00\x00\x00\x04\x85\x99'b'\x00\x05N\xb1v\xd9Wt\xfe\x19q\x01\x01\x16\x00\x00 A\xf7\x01\xe3\x01RNGFND_GNDCLEAR\x00\x02\t='b'\x00\x05N\xb1v\xd9W\xcc\xfe\x19r\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe4\x01RNGFND2_TYPE\x00\x00\x00\x00\x02\x7f\x0b'b'\x00\x05N\xb1v\xda\xed\xb7\xfe5?\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9a\x86'b'\x00\x05N\xb1v\xda\xee\xb0\xfe\x19s\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xe5\x01RNGFND2_PIN\x00\x00\x00\x00\x00\x021P'b'\x00\x05N\xb1v\xda\xef(\xfe\x19t\x01\x01\x16\x00\x00@@\xf7\x01\xe6\x01RNGFND2_SCALING\x00\td\x11'b"\x00\x05N\xb1v\xda\xef|\xfe\x19u\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe7\x01RNGFND2_OFFSET\x00\x00\t\xa2'"b'\x00\x05N\xb1v\xda\xef\xcc\xfe\x19v\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe8\x01RNGFND2_FUNCTION\x02-\xac'b'\x00\x05N\xb1v\xda\xf0\x18\xfe\x19w\x01\x01\x16\x00\x00\xa0A\xf7\x01\xe9\x01RNGFND2_MIN_CM\x00\x00\x04\xefq'b'\x00\x05N\xb1v\xda\xf0d\xfe\x19x\x01\x01\x16\x00\x00/D\xf7\x01\xea\x01RNGFND2_MAX_CM\x00\x00\x04\xbb\xf0'b'\x00\x05N\xb1v\xda\xf0\xb0\xfe\x19y\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xeb\x01RNGFND2_STOP_PIN\x022\x83'b'\x00\x05N\xb1v\xda\xf1\x0c\xfe\x19z\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xec\x01RNGFND2_SETTLE\x00\x00\x04/\t'b'\x00\x05N\xb1v\xda\xf1`\xfe\x19{\x01\x01\x16\x00\x00\x80?\xf7\x01\xed\x01RNGFND2_RMETRIC\x00\x02\xbds'b'\x00\x05N\xb1v\xda\xf1\xb4\xfe\x19|\x01\x01\x16\x00\x00 A\xf7\x01\xee\x01RNGFND2_GNDCLEAR\x024&'b'\x00\x05N\xb1v\xda\xf2\x08\xfe\x19}\x01\x01\x16\x00\x00\x80?\xf7\x01\xef\x01TERRAIN_ENABLE\x00\x00\x02\xb1\xfb'b'\x00\x05N\xb1v\xda\xf2\\\xfe\x19~\x01\x01\x16\x00\x00\xc8B\xf7\x01\xf0\x01TERRAIN_SPACING\x00\x04\xabx'b'\x00\x05N\xb1v\xda\xf2\xc4\xfe\x19\x7f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf1\x01FLOW_ENABLE\x00\x00\x00\x00\x00\x02W\xa8'b'\x00\x05N\xb1v\xda\xf3\x18\xfe\x19\x80\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf2\x01FLOW_FXSCALER\x00\x00\x00\x043\xe9'b'\x00\x05N\xb1v\xda\xf3l\xfe\x19\x81\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf3\x01FLOW_FYSCALER\x00\x00\x00\x04\xc3\x93'b'\x00\x05N\xb1v\xda\xf3\xbc\xfe\x19\x82\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf4\x01FLOW_ORIENT_YAW\x00\x04\x88\x0c'b'\x00\x05N\xb1v\xda\xf4\x10\xfe\x19\x83\x01\x01\x16\x00\x00\xe0@\xf7\x01\xf5\x01AUTOTUNE_AXES\x00\x00\x00\x02I>'b'\x00\x05N\xb1v\xda\xf4d\xfe\x19\x84\x01\x01\x16\xcd\xcc\xcc=\xf7\x01\xf6\x01AUTOTUNE_AGGR\x00\x00\x00\t\xbd1'b'\x00\x05N\xb1v\xdb+W\xfe!@\xff\x00L\xb2-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00i\xe8'b'\x00\x05N\xb1v\xdb\x97\x10\xfe\x03\x85\x01\x01Ms\x00\x00C\xe1'b'\x00\x05N\xb1v\xdb\x97\xd4\xfe\x14\x86\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00R\x1d'b'\x00\x05N\xb1v\xdb\x98H\xfe\x1c\x87\x01\x01!8A\x03\x00\xf6\xa5\x02\x18\xe8\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x03\x00\x00\x00\xa4\x042W'b"\x00\x05N\xb1v\xdcu@\xfe\x1c\x88\x01\x01\x1e\xccA\x03\x00\xed\xc6|\xbd\xb8\x8d'\xba\xab|T>rtJ:z\x8209?\x02\xcf8\xba\x96"b'\x00\x05N\xb1v\xdcu\xc4\xfe\x18\x89\x01\x01\xb2F\x8c\x82\xbd\x8d\xcc\x15\xbbFUP>\x1e\xa5)D\xf6\xa5\x02\x18\xe8\xe7\xb8\xfd\x0b\xec'b'\x00\x05N\xb1v\xdcv \xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P'b'\x00\x05N\xb1v\xdcv\xcc\xfe\x1c\x8b\x01\x01\xa38\xd7\r\xb8\xed\xb0\x13\xb9\xf2\x17\xc8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc9T\xc4:-\xac\xe5;:\xd9'b'\x00\x05N\xb1v\xdcwL\xfe\x03\x8c\x01\x01\xa5\xc6\x14\x00j\xee'b'\x00\x05N\xb1v\xdcw\xc4\xfe\x0c\x8d\x01\x01\x02\x08\x19!w\xb1N\x05\x00\xe0A\x03\x00\x0be'b'\x00\x05N\xb1v\xdcxL\xfe\x16\x8e\x01\x01\x88\xf6\xa5\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90Q'b'\x00\x05N\xb1v\xdcx\xc8\xfe\x12\x8f\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x0eq'b'\x00\x05N\xb1v\xdcyT\xfe\x16\x90\x01\x01\xc1\x99\x1d@<\xc9 ~7\x16\xa8\x8a;_G\xb2=\x00\x00\x00\x00\xa5\x03\xda\xa2'b'\x00\x05N\xb1v\xdc\xf0\xbf\xfe5A\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbe\xfe'b'\x00\x05N\xb1v\xdd\x1a\xcf\xfe!B\xff\x00LH\r\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd2\xe8'b'\x00\x05N\xb1v\xdd\xe6\x10\xfe\x1a\x92\x01\x01\x1b\xee@\xba\x0c\x00\x00\x00\x00\x04\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffn\x01\xae\xc4'b'\x00\x05N\xb1v\xdd\xe6\x84\xfe\x16\x93\x01\x01t\x1cB\x03\x00\x07\x004\x00&\xfc\x00\x00\x02\x00\x02\x00\x07\x01\xa0\xff3\x02uS'b'\x00\x05N\xb1v\xdd\xe6\xe0\xfe\x16\x94\x01\x01\x81\x1dB\x03\x00\x03\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff+\x03\x88\x00q\x02\xa4\x02'b'\x00\x05N\xb1v\xdd\xe74\xfe\x0e\x95\x01\x01\x1d\x1dB\x03\x00\xbe\xa3iD{\x14\x1e=$\x10,#'b'\x00\x05N\xb1v\xdd\xe7\x80\xfe\x0e\x96\x01\x01\x89\x1dB\x03\x00\xdd\xe7iD\xb8\x1e\xb4>\xf1\x14A$'b"\x00\x05N\xb1v\xdd\xe7\xdc\xfe\x1f\x97\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x00'?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TW\x7f"b'\x00\x05N\xb1v\xdd\xe84\xfe\x06\x98\x01\x01}\xc5\x14\x00\x00\x03\x00y\xe0'b'\x00\x05N\xb1v\xdd\xe8\x8c\xfe\x04\x99\x01\x01\x98\x00\x00\xa0\x8a\xa9\xf5'b'\x00\x05N\xb1v\xdd\xe8\xd4\xfe\x02\x9a\x01\x01*\x00\x00\x1f+'b'\x00\x05N\xb1v\xdd\xe9,\xfe\x1e\x9b\x01\x01\x18\x00\xd0\xb9\x0c\x00\x00\x00\x00\xf7\xa5\x02\x18\xe7\xe7\xb8\xfd\xd0a\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c \x96'b'\x00\x05N\xb1v\xdd\xe9\x80\xfe\x1a\x9c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x08\xd1'b'\x00\x05N\xb1v\xdd\xe9\xc8\xfe\x08\x9d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00R\xf3'b'\x00\x05N\xb1v\xdd\xea\x1c\xfe\x15\x9e\x01\x01$\xa4C\xba\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdbh'b'\x00\x05N\xb1v\xdd\xeap\xfe\x16\x9f\x01\x01#\x1dB\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf0\x1f'b'\x00\x05N\xb1v\xdd\xea\xb8\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b'\x00\x05N\xb1v\xdd\xebH\xfe\x14\xa1\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x90\xc2'b'\x00\x05N\xb1v\xdd\xeb\x98\xfe\x12\xa2\x01\x01\xfcyB\x03\x004\x00\x01\x00ARMMASK\x00Wr^j'b'\x00\x05N\xb1v\xde\xd2\x8f\xfe5C\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\x1c'b'\x00\x05N\xb1v\xde\xfc\x7f\xfe!D\xff\x00LH\r\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Q\x0e'b"\x00\x05N\xb1v\xdfN'\xfe\tE\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9d\x11"b'\x00\x05N\xb1v\xdfoX\xfe\t\xa3\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03D\x88'b'\x00\x05N\xb1v\xdfo\xec\xfe\x1c\xa4\x01\x01!\x00B\x03\x00\xf7\xa5\x02\x18\xe7\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa5\x04\xcd&'b'\x00\x05N\xb1v\xdfpX\xfe\x1c\xa5\x01\x01\x1e\xbdB\x03\x00W\xcd|\xbd\x00f"\xbae\x87T>\xa5.\x0e90%Y\xbaD\xf8 :~\t'b'\x00\x05N\xb1v\xdfp\xb0\xfe\x18\xa6\x01\x01\xb2\x96\x83\x82\xbd\x10"\x14\xbb8[P>\x99\xa9)D\xf7\xa5\x02\x18\xe7\xe7\xb8\xfd?\t'b'\x00\x05N\xb1v\xdfp\xfc\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\'b'\x00\x05N\xb1v\xdfq\x90\xfe\x1c\xa8\x01\x01\xa3=\x81\x17\xb8\xcd\xb9\x0f\xb9@\xd7\xc5\xb8\x00\x00\x00\x00\x00\x00\x00\x002\xd2\xc8:\x02\x9a\xcc;\x18\xdb'b'\x00\x05N\xb1v\xdfq\xd4\xfe\x03\xa9\x01\x01\xa5\xc5\x14\x006\xea'b'\x00\x05N\xb1v\xdfr \xfe\x0c\xaa\x01\x01\x02\xb8\xba$w\xb1N\x05\x00\xd1B\x03\x004\xde'b'\x00\x05N\xb1v\xdfrp\xfe\x16\xab\x01\x01\x88\xf7\xa5\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x03\x1b'b'\x00\x05N\xb1v\xdfr\xc0\xfe\x16\xac\x01\x01\xc1\xac\xd1;\xf1\x14z\xdf'b'\x00\x05N\xb1v\xe1\n\xec\xfe*\xb2\x01\x01\x96s\xe7f\xbc\x0em\x01\x00$\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00lO'b'\x00\x05N\xb1v\xe1\x0bL\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\\\xd6'b'\x00\x05N\xb1v\xe1\x0b\xa4\xfe\x06\xb4\x01\x01}\xc8\x14\x00\x00\x03\x00C\xce'b'\x00\x05N\xb1v\xe1\x0b\xf4\xfe\x04\xb5\x01\x01\x98\x00\x00\xa0\x8a\xbfB'b'\x00\x05N\xb1v\xe1\x0c<\xfe\x02\xb6\x01\x01*\x00\x00\x06\xf9'b'\x00\x05N\xb1v\xe1\x0c\x94\xfe\x1e\xb7\x01\x01\x18(\xe1\xbc\x0c\x00\x00\x00\x00\xf7\xa5\x02\x18\xe6\xe7\xb8\xfd\xeea\n\x00F\x00\xff\xff\x03\x00|J\x03\x0ce#'b'\x00\x05N\xb1v\xe1\x0c\xe8\xfe\x1a\xb8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf3\xba'b'\x00\x05N\xb1v\xe1\r@\xfe\x08\xb9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00FP'b'\x00\x05N\xb1v\xe1\r\x94\xfe\x15\xba\x01\x01$R\xf0\xbd\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x11'b'\x00\x05N\xb1v\xe1\r\xec\xfe\x16\xbb\x01\x01#\x0eC\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00d\xa0'b'\x00\x05N\xb1v\xe2}P\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0'b'\x00\x05N\xb1v\xe2\x95\x98\xfe\x14\xbd\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00\xcc\xec'b'\x00\x05N\xb1v\xe2\x96L\xfe\x1c\xbe\x01\x01!\xc9B\x03\x00\xf7\xa5\x02\x18\xe6\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x03\x00\xff\xff\xa5\x04:\xd3'b'\x00\x05N\xb1v\xe2\x97\xf7\xfe5H\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd3\x99'b'\x00\x05N\xb1v\xe2\xc3\x1f\xfe!I\xff\x00L\xe3\x14\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00=\xb7'b'\x00\x05N\xb1v\xe4\x1bd\xfe\x1c\xbf\x01\x01\x1e\xaeC\x03\x00c5}\xbd\x80\xd5\x1d\xba\xc0\xa9T>\x83\x81V:\xc5\x1f\xce\xb9\x11\xf98\xba\xbc\xac'b'\x00\x05N\xb1v\xe4\x1b\xe4\xfe\x18\xc0\x01\x01\xb2\xc2\x9b\x82\xbd\xcd\x05\x16\xbb\xd7~P>\\\xaf)D\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd3\x9f'b'\x00\x05N\xb1v\xe4\x1c@\xfe\x1c\xc1\x01\x01\xa3B.!\xb8\xf1\xc7\x0b\xb9p\x94\xc3\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x91X\xd0:oy\xc3;\xe7\x8b'b'\x00\x05N\xb1v\xe4\x1c\x88\xfe\x03\xc2\x01\x01\xa5\xc5\x14\x00[\x9e'b'\x00\x05N\xb1v\xe4\x1c\xe4\xfe\x0c\xc3\x01\x01\x02\x08l(w\xb1N\x05\x00\xc3C\x03\x00\xee\xe2'b'\x00\x05N\xb1v\xe4\x1d\xb4\xfe\x16\xc4\x01\x01\x88\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x005\xfb'b'\x00\x05N\xb1v\xe4\x1eh\xfe\x16\xc5\x01\x01\xc1\xb8\x9e5<\r\xb5{7\xcc\xc2v;E\xe9\xaf=\x00\x00\x00\x00\xa5\x03#\x98'b'\x00\x05N\xb1v\xe4\x1f\x1c\xfe\x03\xc6\x01\x01Ms\x00\x00b\x0e'b'\x00\x05N\xb1v\xe43\xfc\xfe\x1a\xc7\x01\x01\x1b\x9f\x9b\xc1\x0c\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01\x0c\xef'b'\x00\x05N\xb1v\xe44l\xfe\x16\xc8\x01\x01t\xfeC\x03\x00\x03\x00:\x00/\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\x986'b'\x00\x05N\xb1v\xe44\xdc\xfe\x16\xc9\x01\x01\x81\xfeC\x03\x00\x03\x00?\x00"\xfc\xfd\xff\x00\x00\xfd\xff*\x03\x89\x00r\x02\\t'b'\x00\x05N\xb1v\xe45<\xfe\x0e\xca\x01\x01\x1d\xfeC\x03\x00\x85\xa3iD\x14\xae\x0f=$\x10\x85\x8a'b"\x00\x05N\xb1v\xe45\xa0\xfe\x0e\xcb\x01\x01\x89\xfeC\x03\x00\n\xe7iD\x1e\x85\xad>\xf1\x14I'"b'\x00\x05N\xb1v\xe46\x0c\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf1o'b'\x00\x05N\xb1v\xe46x\xfe\x06\xcd\x01\x01}\xc5\x14\x00\x00\x03\x00\xfdW'b'\x00\x05N\xb1v\xe46\xf8\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05'b'\x00\x05N\xb1v\xe47X\xfe\x02\xcf\x01\x01*\x00\x00s\xa9'b'\x00\x05N\xb1v\xe47\xc4\xfe\x1e\xd0\x01\x01\x18P\xf2\xbf\x0c\x00\x00\x00\x00\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd\x02b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd2t'b'\x00\x05N\xb1v\xe48,\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf'b'\x00\x05N\xb1v\xe48\x84\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5'b'\x00\x05N\xb1v\xe48\xe8\xfe\x15\xd3\x01\x01$J\x9e\xc1\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x8c'b'\x00\x05N\xb1v\xe498\xfe\x16\xd4\x01\x01#\xffC\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x14\xe2'b'\x00\x05N\xb1v\xe4\x8a\xf3\xfe5J\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01V{'b"\x00\x05N\xb1v\xe4\xa1\xf7\xfe%K\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00A\x9b"b'\x00\x05N\xb1v\xe4\xcb\xfb\xfe!L\xff\x00L\xf0,\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb3\x18'b'\x00\x05N\xb1v\xe5\xe5l\xfe\x03\xd5\x01\x01/\xff\x00\x00\x1c\xa7'b'\x00\x05N\xb1v\xe5\xe6l\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU'b'\x00\x05N\xb1v\xe5\xe7<\xfe\x14\xd7\x01\x01J\n\xd7\xa3<\n\xd7\xa3<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00g\x9a'b'\x00\x05N\xb1v\xe6v\xcb\xfe5M\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x82\xa1'b'\x00\x05N\xb1v\xe6\xa1\x03\xfe!N\xff\x00L\xf0,\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x002E'b'\x00\x05N\xb1v\xe7*\xa8\xfe\x1c\xd8\x01\x01!oD\x03\x00\xf9\xa5\x02\x18\xe4\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04\xb4N'b'\x00\x05N\xb1v\xe7+H\xfe\x1c\xd9\x01\x01\x1e\x9fD\x03\x00v\x89}\xbd\xa8V\x1b\xba>\x9fT>\xf4\xb9\xda95\xeb?6\xc8\x9e\xe69\x94\x96'b'\x00\x05N\xb1v\xe7+\xd0\xfe\x18\xda\x01\x01\xb2\xd8\xae\x82\xbd\x92\x02\x14\xbb\xdd\x82P>\n\xa7)D\xf9\xa5\x02\x18\xe4\xe7\xb8\xfdd\xec'b'\x00\x05N\xb1v\xe7,x\xfe\x1c\xdb\x01\x01\xa3i\xd9*\xb8\xb2\xdc\x07\xb9\xb6O\xc1\xb8\x00\x00\x00\x00\x00\x00\x00\x00BM\xd6:.\x1e\xd6;\x9e\xa0'b'\x00\x05N\xb1v\xe7,\xec\xfe\x03\xdc\x01\x01\xa5\xc6\x14\x00\xe3\xd0'b'\x00\x05N\xb1v\xe7-X\xfe\x0c\xdd\x01\x01\x02\xb8\r,w\xb1N\x05\x00\xb3D\x03\x00\x85\xc6'b'\x00\x05N\xb1v\xe7-\xb8\xfe\x16\xde\x01\x01\x88\xf9\xa5\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00[B'b'\x00\x05N\xb1v\xe7.\x14\xfe\x16\xdf\x01\x01\xc1[\x9d:\xf2\x14\x92\xed'b'\x00\x05N\xb1v\xe8\xa0\x14\xfe\x1f\xe6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9d\x1b'b'\x00\x05N\xb1v\xe8\xa0\x94\xfe\x06\xe7\x01\x01}\xc5\x14\x00\x00\x03\x00\xff\xa2'b'\x00\x05N\xb1v\xe8\xa1\x08\xfe\x04\xe8\x01\x01\x98\x00\x00\xa0\x8a\x9aV'b'\x00\x05N\xb1v\xe8\xa1p\xfe\x02\xe9\x01\x01*\x00\x00=\x92'b'\x00\x05N\xb1v\xe8\xa1\xf0\xfe\x1e\xea\x01\x01\x18\x98Q\xc3\x0c\x00\x00\x00\x00\xf9\xa5\x02\x18\xe4\xe7\xb8\xfd b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2\xf7'b'\x00\x05N\xb1v\xe8\xa2p\xfe\x1a\xeb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x02\x00'b'\x00\x05N\xb1v\xe8\xa2\xe4\xfe\x08\xec\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdez'b'\x00\x05N\xb1v\xe8\xa3T\xfe\x15\xed\x01\x01$\xb6L\xc5\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x80'b'\x00\x05N\xb1v\xe8\xa3\xac\xfe\x16\xee\x01\x01#\xf0D\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00y\\'b'\x00\x05N\xb1v\xea\x1aT\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14'b'\x00\x05N\xb1v\xea/\x14\xfe\x14\xf0\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00Ml'b'\x00\x05N\xb1v\xea/\x8c\xfe\x1c\xf1\x01\x01!$E\x03\x00\xfb\xa5\x02\x18\xe3\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04\xdbV'b'\x00\x05N\xb1v\xea/\xf8\xfe\x1c\xf2\x01\x01\x1e\x90E\x03\x00\x88N}\xbd e$\xba\xfb\x9fT>R\xd9/:\x0c\x14\x9f\xbaF\xaf\x13\xba\xb0\xc9'b'\x00\x05N\xb1v\xea0L\xfe\x18\xf3\x01\x01\xb2h\x8d\x82\xbd\xa0U\x14\xbb \x89P>\\\x9f)D\xfb\xa5\x02\x18\xe3\xe7\xb8\xfd\n\xf5'b'\x00\x05N\xb1v\xeaG\xe7\xfe5Q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe1\xd2'b'\x00\x05N\xb1v\xea^G\xfe!R\xff\x00L\xf3%\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x001\xdd'b'\x00\x05N\xb1v\xeb\xab\x10\xfe\x1c\xf4\x01\x01\xa3\x86y4\xb8\xf0\xfa\x03\xb9\xf7\x0e\xbf\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xaff\xda:(\xaa\xc2;J\x8b'b'\x00\x05N\xb1v\xeb\xab\x80\xfe\x03\xf5\x01\x01\xa5\xb8\x14\x00\x17>'b"\x00\x05N\xb1v\xeb\xab\xdc\xfe\x0c\xf6\x01\x01\x02 \xbb/w\xb1N\x05\x00\xa4E\x03\x00\xc5'"b'\x00\x05N\xb1v\xeb\xac<\xfe\x16\xf7\x01\x01\x88\xfb\xa5\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x94p'b'\x00\x05N\xb1v\xeb\xac\x90\xfe\x16\xf8\x01\x01\xc1\xb0\x87:<\x9c\xcav7h^\xbe9\x95K\xaa=\x00\x00\x00\x00\xa5\x03+\xce'b'\x00\x05N\xb1v\xeb\xac\xd8\xfe\x03\xf9\x01\x01Ms\x00\x00XR'b'\x00\x05N\xb1v\xeb\xadh\xfe\x1a\xfa\x01\x01\x1b\xea\xf4\xc8\x0c\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffl\x01\xbcP'b'\x00\x05N\xb1v\xeb\xad\xc8\xfe\x16\xfb\x01\x01t\xe0E\x03\x00\x08\x002\x00"\xfc\x03\x00\x02\x00\x00\x00\x07\x01\xa0\xff3\x02\xd9\xb7'b'\x00\x05N\xb1v\xeb\xae$\xfe\x16\xfc\x01\x01\x81\xe0E\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x88\x00p\x02\x87X'b'\x00\x05N\xb1v\xeb\xae\xa8\xfe\x0e\xfd\x01\x01\x1d\xe0E\x03\x00\x05\xa4iD\x14\xae/=$\x10;\x9d'b'\x00\x05N\xb1v\xeb\xaf8\xfe\x0e\xfe\x01\x01\x89\xe0E\x03\x00!\xe7iDp=\xae>\xf3\x14b\xe1'b'\x00\x05N\xb1v\xeb\xaf\xa4\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x18\xdf'b'\x00\x05N\xb1v\xeb\xaf\xf8\xfe\x06\x00\x01\x01}\xd5\x14\x00\x00\x03\x00D\n'b'\x00\x05N\xb1v\xeb\xb0D\xfe\x04\x01\x01\x01\x98\x00\x00\xa0\x8a \xb1'b"\x00\x05N\xb1v\xeb\xb0\x88\xfe\x02\x02\x01\x01*\x00\x00'\xc6"b'\x00\x05N\xb1v\xeb\xb0\xdc\xfe\x1e\x03\x01\x01\x18\xa0\x14\xc6\x0c\x00\x00\x00\x00\xfb\xa5\x02\x18\xe1\xe7\xb8\xfdHb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x81\x03'b'\x00\x05N\xb1v\xeb\xb10\xfe\x1a\x04\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x003o'b'\x00\x05N\xb1v\xeb\xb1x\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB'b'\x00\x05N\xb1v\xeb\xb1\xc8\xfe\x15\x06\x01\x01$\xac\xf7\xc8\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x1c'b'\x00\x05N\xb1v\xeb\xb2\x18\xfe\x16\x07\x01\x01#\xe1E\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x89<'b'\x00\x05N\xb1v\xec,\xf3\xfe5S\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01d0'b'\x00\x05N\xb1v\xeck?\xfe!T\xff\x00L\xf3%\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb2;'b'\x00\x05N\xb1v\xed[p\xfe\x14\x08\x01\x01J\n\xd7#<\n\xd7#<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x13\x1f'b'\x00\x05N\xb1v\xed[\xf0\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11'b'\x00\x05N\xb1v\xedpX\xfe\x1c\n\x01\x01!\xedE\x03\x00\xfb\xa5\x02\x18\xe1\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04/\xfb'b'\x00\x05N\xb1v\xedp\xc8\xfe\x12\x0b\x01\x01\xfceF\x03\x004\x00\x01\x00ARMMASK\x00Wr\xb0\x8d'b'\x00\x05N\xb1v\xee \xeb\xfe5U\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfa\x1f'b'\x00\x05N\xb1v\xee7\xdb\xfe!V\xff\x00L\xf3%\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x003f'b'\x00\x05N\xb1v\xee\xc5\x9b\xfe\tW\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9e:'b'\x00\x05N\xb1v\xee\xda\xb4\xfe\t\x0c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc14'b'\x00\x05N\xb1v\xee\xdb,\xfe\x1c\r\x01\x01\x1e\x81F\x03\x00\x18)}\xbdHL\x1c\xba\x9f\x80T>\x17\x97\xcc\xb8\xcbs\xa8\xb9\xbfQ!\xb9\xc6\xd1'b'\x00\x05N\xb1v\xee\xdb\x88\xfe\x18\x0e\x01\x01\xb2\xfak\x82\xbd\xf0\xd4\x13\xbb\xb9~P>\\\xaf)D\xfb\xa5\x02\x18\xe1\xe7\xb8\xfd\xe4\xf6'b'\x00\x05N\xb1v\xee\xdb\xec\xfe\x1c\x0f\x01\x01\xa3\xc8\t>\xb8\xd9\x1e\x00\xb9D\xd4\xbc\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xebV\xec:\x87s\xcc;-\xff'b'\x00\x05N\xb1v\xee\xdcH\xfe\x03\x10\x01\x01\xa5\xbd\x14\x00\xc2\xdf'b'\x00\x05N\xb1v\xee\xdc\xac\xfe\x0c\x11\x01\x01\x02\xc0\xb23w\xb1N\x05\x00\x95F\x03\x00\xae\xd4'b'\x00\x05N\xb1v\xee\xdd\x18\xfe\x16\x12\x01\x01\x88\xfb\xa5\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x008\x01'b'\x00\x05N\xb1v\xee\xdd\x80\xfe\x16\x13\x01\x01\xc1\xd4a8<\x08\xbdu7\xb4\xc3\x81;~ \xb7=\x00\x00\x00\x00\xa5\x03\x17\xb6'b'\x00\x05N\xb1v\xee\xde\x10\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q'b'\x00\x05N\xb1v\xef\xfd\xaf\xfe5X\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8c\xb5'b'\x00\x05N\xb1v\xf0\x13\xbf\xfe!Y\xff\x00L:\x10\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x005\xca'b'\x00\x05N\xb1v\xf0f`\xfe\x1a\x16\x01\x01\x1b\x98\xa3\xcc\x0c\x00\x00\x00\x00\x05\x004\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\x04\xf5'b"\x00\x05N\xb1v\xf0f\xe4\xfe\x16\x17\x01\x01t\xd1F\x03\x00\r\x003\x00'\xfc\x00\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x0296"b'\x00\x05N\xb1v\xf0gL\xfe\x16\x18\x01\x01\x81\xd1F\x03\x00\x03\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x88\x00s\x02+\x88'b'\x00\x05N\xb1v\xf0g\xa8\xfe\x0e\x19\x01\x01\x1d\xd1F\x03\x00\xd7\xa3iD\xf6($=%\x10\x8fH'b'\x00\x05N\xb1v\xf0h$\xfe\x0e\x1a\x01\x01\x89\xd1F\x03\x00\x9c\xe6iD{\x14\xaa>\xf4\x14\x08\x8d'b'\x00\x05N\xb1v\xf0h\x8c\xfe\x1f\x1b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96\xf4'b'\x00\x05N\xb1v\xf0h\xec\xfe\x06\x1c\x01\x01}\xc5\x14\x00\x00\x03\x007,'b'\x00\x05N\xb1v\xf0i\x80\xfe\x04\x1d\x01\x01\x98\x00\x00\xa0\x8a\x9b\x0e'b'\x00\x05N\xb1v\xf0i\xe8\xfe\x02\x1e\x01\x01*\x00\x00t\xc2'b'\x00\x05N\xb1v\xf0jL\xfe\x1e\x1f\x01\x01\x18\x083\xcc\x0c\x00\x00\x00\x00\xfc\xa5\x02\x18\xe0\xe7\xb8\xfdRb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c$\xe5'b'\x00\x05N\xb1v\xf0j\xb0\xfe\x1a \x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc8\x04'b'\x00\x05N\xb1v\xf0k\x00\xfe\x08!\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\\\xe1'b'\x00\x05N\xb1v\xf0kT\xfe\t\xba\n\x00m\x14\x00\x00\x00\x00\xd5\x00\x00\x00\x1f\x10'b'\x00\x05N\xb1v\xf0k\xac\xfe\x15"\x01\x01$\x19\xa7\xcc\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00W\xaa'b'\x00\x05N\xb1v\xf0l\x04\xfe\x16#\x01\x01#\xd2F\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x97i'b'\x00\x05N\xb1v\xf0l\\\xfe\x14$\x01\x01J\n\xd7#<\n\xd7#<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00G\xa2'b'\x00\x05N\xb1v\xf0l\xac\xfe\x03%\x01\x01Ms\x00\x00Q\x9c'b'\x00\x05N\xb1v\xf1\xc3\xf8\xfe\x1c&\x01\x01!\xb5F\x03\x00\xfc\xa5\x02\x18\xe0\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x04\x1d*'b'\x00\x05N\xb1v\xf1\xc4\x88\xfe\x1c\'\x01\x01\x1eqG\x03\x00\xf1S}\xbd\x98#)\xba\xcaiT>"+\x8c:\xea\xd4\xf7\xb9\x06\xae\x1883\x11'b'\x00\x05N\xb1v\xf1\xc4\xec\xfe\x18(\x01\x01\xb2\x11r\x82\xbds\x84\x15\xbbKvP>\x1e\xb5)D\xfc\xa5\x02\x18\xe0\xe7\xb8\xfd\x1c\x9d'b'\x00\x05N\xb1v\xf1\xc5H\xfe\x1c)\x01\x01\xa3\x86\x87G\xb8\x96\x96\xf8\xb8\x96\x97\xba\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x81\xe5:%\xc6\xc4;\xd5\x08'b'\x00\x05N\xb1v\xf1\xc5\x94\xfe\x03*\x01\x01\xa5\xc5\x14\x00\x04\xab'b'\x00\x05N\xb1v\xf1\xc5\xe4\xfe\x0c+\x01\x01\x02 \x0e7w\xb1N\x05\x00\x85G\x03\x00$\x14'b'\x00\x05N\xb1v\xf1\xc6@\xfe\x16,\x01\x01\x88\xfd\xa5\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\xcc'b'\x00\x05N\xb1v\xf1\xc6\xa8\xfe\x16-\x01\x01\xc1\x80\xe58\xf5\x14\x19\x97'b'\x00\x05N\xb1v\xf3U,\xfe\x1f4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\x03'b'\x00\x05N\xb1v\xf3U\x84\xfe\x065\x01\x01}\xc2\x14\x00\x00\x03\x00\x9e\xe0'b'\x00\x05N\xb1v\xf3U\xd8\xfe\x046\x01\x01\x98\x00\x00\xa0\x8aoP'b'\x00\x05N\xb1v\xf3V$\xfe\x027\x01\x01*\x00\x00\xce\xe0'b'\x00\x05N\xb1v\xf3V\x80\xfe\x1e8\x01\x01\x180D\xcf\x0c\x00\x00\x00\x00\xfd\xa5\x02\x18\xe0\xe7\xb8\xfdRb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xaa\xb9'b'\x00\x05N\xb1v\xf3V\xdc\xfe\x1a9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb6\xeb'b'\x00\x05N\xb1v\xf3W,\xfe\x08:\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x13\x98'b'\x00\x05N\xb1v\xf3W\x84\xfe\x15;\x01\x01$tP\xd0\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xa0'b'\x00\x05N\xb1v\xf3W\xdc\xfe\x16<\x01\x01#\xc2G\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8c%'b'\x00\x05N\xb1v\xf3\xf2\x13\xfe5\\\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x97x'b'\x00\x05N\xb1v\xf4\x1c\x1b\xfe!]\xff\x00L\xf7\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x81\xc0'b"\x00\x05N\xb1v\xf4\xe0S\xfe%^\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x15\xd9"b'\x00\x05N\xb1v\xf4\xf5\x90\xfe\x14=\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x7f\xa6'b'\x00\x05N\xb1v\xf4\xf6\x00\xfe\x03>\x01\x01Ms\x00\x00E`'b'\x00\x05N\xb1v\xf5\nd\xfe\x1c?\x01\x01!~G\x03\x00\xfd\xa5\x02\x18\xe0\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x041#'b'\x00\x05N\xb1v\xf5\xce+\xfe5_\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Xo'b'\x00\x05N\xb1v\xf5\xf8\x97\xfe!`\xff\x00L\xf7\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x001\xa3'b"\x00\x05N\xb1v\xf6o$\xfe\x1c@\x01\x01\x1ebH\x03\x00\x00;}\xbd`\x8c\x0b\xba\xb8cT>bW\xa4:W\x84Z\xb9\x80\x82\xad9'\xb2"b'\x00\x05N\xb1v\xf6o\x94\xfe\x18A\x01\x01\xb2\xafg\x82\xbd\xf2\xd3\x12\xbbTtP>\xc2\xb5)D\xfe\xa5\x02\x18\xdf\xe7\xb8\xfd?\xc2'b'\x00\x05N\xb1v\xf6o\xe0\xfe\x03B\x01\x01/\xff\x00\x00\x88\xab'b'\x00\x05N\xb1v\xf6\x84<\xfe\x1cC\x01\x01\xa3\xab\xf9P\xb8\xa9\x00\xf1\xb8ZT\xb8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xd2\xee:\xb8\xc3\xbc;|\xc5'b'\x00\x05N\xb1v\xf6\x84\x88\xfe\x03D\x01\x01\xa5\xc5\x14\x00\x08H'b'\x00\x05N\xb1v\xf6\x84\xd4\xfe\x0cE\x01\x01\x02\xa0\xb7:w\xb1N\x05\x00vH\x03\x00v\x98'b'\x00\x05N\xb1v\xf6\x85(\xfe\x16F\x01\x01\x88\xfe\xa5\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd5\x8c'b'\x00\x05N\xb1v\xf6\x85x\xfe\x16G\x01\x01\xc1Y\xf41<\xe9\x94p7[7\x05<\xf9\x91\xb7=\x00\x00\x00\x00\xa5\x03\x17\xca'b'\x00\x05N\xb1v\xf6\x85\xbc\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5'b'\x00\x05N\xb1v\xf6\x86@\xfe\x1aI\x01\x01\x1b\x9a\xf7\xd3\x0c\x00\x00\x00\x00\x02\x004\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\x03\xc8'b'\x00\x05N\xb1v\xf6\x86\x94\xfe\x16J\x01\x01t\xb2H\x03\x00\t\x00?\x00.\xfc\x00\x00\xfe\xff\xfe\xff\x07\x01\xa0\xff2\x02\xa7$'b'\x00\x05N\xb1v\xf6\x86\xe8\xfe\x16K\x01\x01\x81\xb2H\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff,\x03\x88\x00n\x02v`'b'\x00\x05N\xb1v\xf6\x870\xfe\x0eL\x01\x01\x1d\xb2H\x03\x00\xd5\xa2iD\x14\xae\xc7<%\x10\x08H'b'\x00\x05N\xb1v\xf6\x87|\xfe\x0eM\x01\x01\x89\xb2H\x03\x00\t\xe7iD\xe1z\xad>\xf5\x14\xce\xcc'b'\x00\x05N\xb1v\xf6\x87\xd0\xfe\x1fN\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd7\x1e'b'\x00\x05N\xb1v\xf6\x88 \xfe\x06O\x01\x01}\xc5\x14\x00\x00\x03\x00\xc4n'b'\x00\x05N\xb1v\xf6\x88h\xfe\x04P\x01\x01\x98\x00\x00\xa0\x8a*\xe5'b'\x00\x05N\xb1v\xf6\x88\xac\xfe\x02Q\x01\x01*\x00\x00\x86\x1c'b'\x00\x05N\xb1v\xf6\x89\x00\xfe\x1eR\x01\x01\x18pQ\xd2\x0c\x00\x00\x00\x00\xfe\xa5\x02\x18\xdf\xe7\xb8\xfdfb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2}'b'\x00\x05N\xb1v\xf6\x89\\\xfe\x1aS\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00!\xd9'b'\x00\x05N\xb1v\xf6\x89\xa0\xfe\x08T\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00d~'b'\x00\x05N\xb1v\xf6\x89\xf0\xfe\x15U\x01\x01$7\xfa\xd3\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x19'b'\x00\x05N\xb1v\xf6\x8a@\xfe\x16V\x01\x01#\xb2H\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf7\t'b'\x00\x05N\xb1v\xf7\xb8\xbf\xfe5a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x00\xa6'b'\x00\x05N\xb1v\xf7\xce\xf3\xfe!b\xff\x00L`\xfc\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xab\x12'b'\x00\x05N\xb1v\xf8\x0f8\xfe\x14W\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00\xee\xd3'b'\x00\x05N\xb1v\xf9\x85\x1f\xfe5c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x85D'b'\x00\x05N\xb1v\xf9\x9b\xc4\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae'b'\x00\x05N\xb1v\xf9\x9ct\xfe\x1cY\x01\x01!\x0fI\x03\x00\xfe\xa5\x02\x18\xde\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x04\xbdN'b'\x00\x05N\xb1v\xf9\x9c\xe0\xfe\x1cZ\x01\x01\x1eRI\x03\x00\xfc\xec|\xbdpc\x13\xba\xe6XT>pR\x1f:\xdad6\xba\xe1\x15\xec\xb8(\x9c'b'\x00\x05N\xb1v\xf9\x9d8\xfe\x18[\x01\x01\xb2\xceA\x82\xbd\xc26\x13\xbb\xc3uP>f\xb6)D\xfe\xa5\x02\x18\xde\xe7\xb8\xfd\x9c\x06'b'\x00\x05N\xb1v\xf9\x9d\x8c\xfe\x1c\\\x01\x01\xa3\xacZZ\xb8\xc7{\xe9\xb8\t\x0e\xb6\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x92\xb2\xf8:\xe7J\xd5;n\xd4'b'\x00\x05N\xb1v\xf9\x9d\xd0\xfe\x03]\x01\x01\xa5\xc5\x14\x00s\xbf'b'\x00\x05N\xb1v\xf9\x9e\x18\xfe\x0c^\x01\x01\x02X\xab>w\xb1N\x05\x00fI\x03\x00\xf9\xab'b'\x00\x05N\xb1v\xf9\x9eh\xfe\x16_\x01\x01\x88\xfe\xa5\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00c\xc3'b'\x00\x05N\xb1v\xf9\x9e\xb8\xfe\x16`\x01\x01\xc1\xa3\xe94<\x10\xd5o7\xec>\x0c\xf6\x14:n'b'\x00\x05N\xb1v\xfb\n\x08\xfe\x1fg\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc6\t'b'\x00\x05N\xb1v\xfb\nd\xfe\x06h\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8,'b'\x00\x05N\xb1v\xfb\n\xc4\xfe\x04i\x01\x01\x98\x00\x00\xa0\x8a\xb0\xdf'b'\x00\x05N\xb1v\xfb\x0b\x14\xfe\x02j\x01\x01*\x00\x00N\xbc'b"\x00\x05N\xb1v\xfb\x0bx\xfe\x1ek\x01\x01\x18\x98b\xd5\x0c\x00\x00\x00\x00\xfe\xa5\x02\x18\xde\xe7\xb8\xfdfb\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c'\xf2"b'\x00\x05N\xb1v\xfb\x0b\xd8\xfe\x1al\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdd\xdf'b'\x00\x05N\xb1v\xfb\x0c,\xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9'b'\x00\x05N\xb1v\xfb\x0c\x88\xfe\x15n\x01\x01$x\xa8\xd7\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00F5'b'\x00\x05N\xb1v\xfb\x0c\xe4\xfe\x16o\x01\x01#\xa3I\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00.0'b'\x00\x05N\xb1v\xfb\x9b\xbb\xfe5e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1bk'b'\x00\x05N\xb1v\xfb\xb1\xd7\xfe!f\xff\x00L\xb1\xf4\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe6\xac'b'\x00\x05N\xb1v\xfc\xa5\x9c\xfe\x14p\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7#\xbc\x0b\x00\x00\x00he'b'\x00\x05N\xb1v\xfc\xa6<\xfe\x1cq\x01\x01!\xd7I\x03\x00\xff\xa5\x02\x18\xdd\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa3\x04\x9c;'b'\x00\x05N\xb1v\xfc\xa6\xac\xfe\x03r\x01\x01Ms\x00\x00\xd6>'b'\x00\x05N\xb1v\xfc\xa7T\xfe\x1cs\x01\x01\x1eCJ\x03\x00\xe2\xbf|\xbd\xc0!\x14\xbaRUT>}\x07-:X\xd0=8\xe8x\xcc\xb9\x15*'b'\x00\x05N\xb1v\xfc\xa7\xb4\xfe\x18t\x01\x01\xb2B,\x82\xbdC\xf6\x15\xbb\xe1|P>\xd7\xb3)D\xff\xa5\x02\x18\xdd\xe7\xb8\xfd\xd8\xff'b'\x00\x05N\xb1v\xfc\xa8\x0c\xfe\x12u\x01\x01\xfcOJ\x03\x004\x00\x01\x00ARMMASK\x00Wr.\xa3'b'\x00\x05N\xb1v\xfd~\xa3\xfe5g\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9e\x89'b'\x00\x05N\xb1v\xfd\xa8\x8f\xfe!h\xff\x00L3\xf2\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa8\xba'b'\x00\x05N\xb1v\xfe\x01X\xfe\tv\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03q\x16'b'\x00\x05N\xb1v\xfe\x01\xe8\xfe\x1cw\x01\x01\xa3\x16\xa8c\xb8\x8d\x0c\xe2\xb8\r\xc5\xb3\xb8\x00\x00\x00\x00\x00\x00\x00\x00I\x8f\xf7:\r\xac\xdd;U\x0e'b'\x00\x05N\xb1v\xfe\x02@\xfe\x03x\x01\x01\xa5\xc5\x14\x00\xe2\x9e'b'\x00\x05N\xb1v\xfe\x02\x98\xfe\x0cy\x01\x01\x02\xc0XBw\xb1N\x05\x00XJ\x03\x00\xbb\x17'b'\x00\x05N\xb1v\xfe\x02\xf4\xfe\x16z\x01\x01\x88\xff\xa5\x02\x18\xdd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb3\xfd'b'\x00\x05N\xb1v\xfe\x03H\xfe\x12{\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xc4\x92'b'\x00\x05N\xb1v\xfe\x03\xac\xfe\x16|\x01\x01\xc18@4<\xcd\xabm7t\xd0\x04:\x94L\xb8=\x00\x00\x00\x00\xa5\x03-\xb6'b'\x00\x05N\xb1v\xfe\x04\x10\xfe\x1a}\x01\x01\x1b\xc2R\xdb\x0c\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01I\xf1'b'\x00\x05N\xb1v\xfe\x04t\xfe\x16~\x01\x01t\x94J\x03\x00\t\x003\x00(\xfc\x01\x00\x00\x00\xff\xff\x07\x01\xa0\xff3\x02yy'b"\x00\x05N\xb1v\xfe\x04\xd4\xfe\x16\x7f\x01\x01\x81\x94J\x03\x00\x04\x00@\x00\x1e\xfc\xfe\xff\x01\x00\xfd\xff'\x03\x87\x00r\x02n,"b'\x00\x05N\xb1v\xfe\x050\xfe\x0e\x80\x01\x01\x1d\x94J\x03\x00\xd5\xa3iD\n\xd7#=%\x10\\B'b'\x00\x05N\xb1v\xfe\x05\x88\xfe\x0e\x81\x01\x01\x89\x94J\x03\x00\x95\xe6iDG\xe1\xa9>\xf6\x14\xfc\x1b'b'\x00\x05N\xb1v\xfe\x05\xec\xfe\x1f\x82\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x89}'b'\x00\x05N\xb1v\xfe\x06L\xfe\x06\x83\x01\x01}\xc2\x14\x00\x00\x03\x00=\x14'b'\x00\x05N\xb1v\xfe\x06\xa4\xfe\x04\x84\x01\x01\x98\x00\x00\xa0\x8a\xef\x07'b'\x00\x05N\xb1v\xfe\x06\xf4\xfe\x02\x85\x01\x01*\x00\x00"\x87'b'\x00\x05N\xb1v\xfe\x07T\xfe\x1e\x86\x01\x01\x18\xd8o\xd8\x0c\x00\x00\x00\x00\x00\xa6\x02\x18\xdc\xe7\xb8\xfdpb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xab\x07'b'\x00\x05N\xb1v\xfe\x07\xb4\xfe\x1a\x87\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0f\xbc'b'\x00\x05N\xb1v\xfe\x08\x00\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba'b'\x00\x05N\xb1v\xfe\x08P\xfe\x15\x89\x01\x01$=U\xdb\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xed'b'\x00\x05N\xb1v\xfe\x08\xa4\xfe\x16\x8a\x01\x01#\x94J\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x82U'b'\x00\x05N\xb1v\xfe\x08\xe8\xfe\x03\x8b\x01\x01Ms\x00\x00N\xd1'b'\x00\x05N\xb1v\xfe\x1e\xc7\xfe\ti\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf8\xa8'b'\x00\x05N\xb1v\xff_\xf7\xfe5j\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe8#'b'\x00\x05N\xb1v\xffv\x1b\xfe!k\xff\x00L3\xf2\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1M'b'\x00\x05N\xb1v\xff\x8b\x04\xfe\t\xbb\n\x00m\x01\x00\x00\x00\x00\xd2\x00\x00\x00\xc0\x10'b'\x00\x05N\xb1v\xff\x8b\x84\xfe\x14\x8c\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x006\x98'b'\x00\x05N\xb1v\xff\x8c \xfe\x1c\x8d\x01\x01!\xa0J\x03\x00\x00\xa6\x02\x18\xdc\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa3\x04\xdd\xe8'b'\x00\x05N\xb1w\x01#\xbb\xfe5l\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01v\x0c'b'\x00\x05N\xb1w\x01$\xb8\xfe\x03\x8e\x01\x01Ms\x00\x00/F'b'\x00\x05N\xb1w\x01b\xdc\xfe\x1c\x8f\x01\x01\x1e4K\x03\x00\x97\xcd|\xbd\xa0$\x07\xbaxNT>$\xc6\xa6\xb9.^[\xbad\x17h9\xad)'b'\x00\x05N\xb1w\x01c@\xfe\x18\x90\x01\x01\xb2\x0b\x19\x82\xbd$D\x14\xbb yP>f\xb6)D\x00\xa6\x02\x18\xdc\xe7\xb8\xfd\xc0@'b'\x00\x05N\xb1w\x01c\x98\xfe\x1c\x91\x01\x01\xa3\xf0\xebl\xb8\x9d\xa9\xda\xb8\x15m\xb1\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xba\xc3\xe8:\xfb\xcd\xe7;d\x8d'b'\x00\x05N\xb1w\x01c\xdc\xfe\x03\x92\x01\x01\xa5\xc5\x14\x00\xd2\xa0'b'\x00\x05N\xb1w\x01d(\xfe\x0c\x93\x01\x01\x02X\xfeEw\xb1N\x05\x00HK\x03\x00)\xf9'b'\x00\x05N\xb1w\x01dx\xfe\x16\x94\x01\x01\x88\x00\xa6\x02\x18\xdc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15\xa9'b'\x00\x05N\xb1w\x01d\xc8\xfe\x16\x95\x01\x01\xc1\x03\x1f.<\x1bTm7\x1dT\x02\xf7\x14p^'b'\x00\x05N\xb1w\x02\xa7P\xfe\x1f\x9c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd2\xe4'b'\x00\x05N\xb1w\x02\xa7\xc0\xfe\x06\x9d\x01\x01}\xc5\x14\x00\x00\x03\x00\xbd\xeb'b'\x00\x05N\xb1w\x02\xa8 \xfe\x04\x9e\x01\x01\x98\x00\x00\xa0\x8aK\x1c'b'\x00\x05N\xb1w\x02\xa8t\xfe\x02\x9f\x01\x01*\x00\x00\xbc\xdb'b'\x00\x05N\xb1w\x02\xa8\xdc\xfe\x1e\xa0\x01\x01\x18(\x92\xde\x0c\x00\x00\x00\x00\x00\xa6\x02\x18\xdb\xe7\xb8\xfdpb\n\x00F\x00\xff\xff\x00\x00|J\x03\x0crP'b'\x00\x05N\xb1w\x02\xa9D\xfe\x1a\xa1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8dU'b'\x00\x05N\xb1w\x02\xa9\x9c\xfe\x08\xa2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\t)'b'\x00\x05N\xb1w\x02\xa9\xfc\xfe\x15\xa3\x01\x01$\xe0\x02\xdf\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xd7'b'\x00\x05N\xb1w\x02\xaa`\xfe\x16\xa4\x01\x01#\x85K\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00g\xd7'b'\x00\x05N\xb1w\x02\xaa\xb4\xfe\x03\xa5\x01\x01Ms\x00\x00\xb3W'b'\x00\x05N\xb1w\x02\xabP\xfe\x14\xa6\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00x<'b'\x00\x05N\xb1w\x03V\xc7\xfe5n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf3\xee'b'\x00\x05N\xb1w\x03m3\xfe!o\xff\x00L\xaf\xed\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x86J'b'\x00\x05N\xb1w\x045h\xfe\x1c\xa7\x01\x01!iK\x03\x00\x00\xa6\x02\x18\xdb\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\xabv'b'\x00\x05N\xb1w\x045\xf4\xfe\x03\xa8\x01\x01Ms\x00\x00n\xed'b'\x00\x05N\xb1w\x046\x9c\xfe\x1c\xa9\x01\x01\x1e%L\x03\x00R\x8b|\xbdH\xde.\xba\xcb_T>H\xf0\xa5\xb9^z\x81\xbaj\xf9\x867\xf4\xc3'b'\x00\x05N\xb1w\x047\x04\xfe\x18\xaa\x01\x01\xb2X\x00\x82\xbdz\xe6\x1b\xbb\x93\x8fP>f\xb6)D\x00\xa6\x02\x18\xdb\xe7\xb8\xfdu\xda'b'\x00\x05N\xb1w\x047`\xfe\x1c\xab\x01\x01\xa3\xb6\x1ev\xb8jZ\xd3\xb8\xb0\x0e\xaf\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe55\xdb:\xd9s\xdc;\x887'b'\x00\x05N\xb1w\x047\xac\xfe\x03\xac\x01\x01\xa5\xc5\x14\x00W}'b'\x00\x05N\xb1w\x047\xfc\xfe\x0c\xad\x01\x01\x02\xd8\xa7Iw\xb1N\x05\x009L\x03\x00\x9a\xa0'b'\x00\x05N\xb1w\x048T\xfe\x16\xae\x01\x01\x88\x01\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1e\xdd'b'\x00\x05N\xb1w\x048\xa8\xfe\x16\xaf\x01\x01\xc1j\xe94<\xcf\xfbl7\xfe\xb3\x05<\x91\x82\xb4=\x00\x00\x00\x00\xa5\x03\xebN'b"\x00\x05N\xb1w\x05>\xc3\xfe%p\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00/\xc7"b'\x00\x05N\xb1w\x05>\xfb\xfe5p\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x15\x7f'b'\x00\x05N\xb1w\x05U\x0f\xfe!r\xff\x00L\xfa\xf8\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd0K'b'\x00\x05N\xb1w\x05\xa5\xa0\xfe\x1a\xb0\x01\x01\x1b\x06\xac\xe2\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01&\x02'b'\x00\x05N\xb1w\x05\xa6H\xfe\x16\xb1\x01\x01tuL\x03\x00\x06\x00:\x004\xfc\x01\x00\xfe\xff\x02\x00\x07\x01\x9f\xff3\x02\x03\xa8'b'\x00\x05N\xb1w\x05\xa7\x00\xfe\x16\xb2\x01\x01\x81uL\x03\x00\x03\x00@\x00"\xfc\xfd\xff\x01\x00\xfd\xff-\x03\x8c\x00o\x02\xf5*'b'\x00\x05N\xb1w\x05\xa7\xb4\xfe\x0e\xb3\x01\x01\x1duL\x03\x00\xd7\xa3iD\xf6($=&\x10\xaf{'b'\x00\x05N\xb1w\x05\xa8\x18\xfe\x0e\xb4\x01\x01\x89uL\x03\x00\x81\xe6iDp=\xa9>\xf7\x14X\xee'b'\x00\x05N\xb1w\x05\xa8\x84\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95.'b'\x00\x05N\xb1w\x05\xa8\xe8\xfe\x06\xb6\x01\x01}\xc5\x14\x00\x00\x03\x00.K'b'\x00\x05N\xb1w\x05\xa9\x98\xfe\x04\xb7\x01\x01\x98\x00\x00\xa0\x8aE\xd9'b"\x00\x05N\xb1w\x05\xa9\xfc\xfe\x02\xb8\x01\x01*\x00\x00'\x7f"b'\x00\x05N\xb1w\x05\xaa\\\xfe\x1e\xb9\x01\x01\x18P\xa3\xe1\x0c\x00\x00\x00\x00\x01\xa6\x02\x18\xd9\xe7\xb8\xfd\x84b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x02\x04'b'\x00\x05N\xb1w\x05\xaa\xb8\xfe\x1a\xba\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8a8'b'\x00\x05N\xb1w\x05\xab\x08\xfe\x08\xbb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1c['b'\x00\x05N\xb1w\x05\xab`\xfe\x15\xbc\x01\x01$a\xae\xe2\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xfa'b'\x00\x05N\xb1w\x05\xab\xd0\xfe\x16\xbd\x01\x01#vL\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xbe\x0b'b'\x00\x05N\xb1w\x05\xac(\xfe\x03\xbe\x01\x01/\xff\x00\x00q\xd3'b'\x00\x05N\xb1w\x05\xc0\xc8\xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b"\x00\x05N\xb1w\x07\x0e'\xfe5s\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdah"b'\x00\x05N\xb1w\x07$k\xfe!t\xff\x00L\xfa\xf8\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00S\xad'b'\x00\x05N\xb1w\x07%,\xfe\x14\xc0\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa9\xbe'b'\x00\x05N\xb1w\x07%\x9c\xfe\x1c\xc1\x01\x01!2L\x03\x00\x01\xa6\x02\x18\xd9\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa3\x04\x1a\xda'b'\x00\x05N\xb1w\x08\xda\xb4\xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18'b'\x00\x05N\xb1w\x08\xda\xf7\xfe5u\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01DG'b"\x00\x05N\xb1w\th'\xfe!v\xff\x00L\xfa\xf8\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd2\xf0"b'\x00\x05N\xb1w\ti\x10\xfe\x1c\xc3\x01\x01\x1e\x16M\x03\x00}\xba|\xbd\xc8\xd8&\xba\xb9RT>#\x1a!8mC\x0e\xba\x0e\x95\xe5\xb9y\xc3'b'\x00\x05N\xb1w\ti|\xfe\x18\xc4\x01\x01\xb2\xd1\xfb\x81\xbd\xf7\xfb\x1a\xbb\xb7\x8cP>{\xa4)D\x02\xa6\x02\x18\xd9\xe7\xb8\xfd\t\x8b'b'\x00\x05N\xb1w\ti\xd4\xfe\x1c\xc5\x01\x01\xa3\x8eI\x7f\xb8n\x1d\xcc\xb8{\xad\xac\xb8\x00\x00\x00\x00\x00\x00\x00\x00W\x93\xcc:\xb5\x96\xe5;\xa4#'b'\x00\x05N\xb1w\tj\x1c\xfe\x03\xc6\x01\x01\xa5\xc5\x14\x00\x85\x88'b'\x00\x05N\xb1w\tjh\xfe\x0c\xc7\x01\x01\x02(YMw\xb1N\x05\x00*M\x03\x00\xb2Y'b'\x00\x05N\xb1w\tj\xbc\xfe\x16\xc8\x01\x01\x88\x02\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0b\x80'b'\x00\x05N\xb1w\tk\x0c\xfe\x16\xc9\x01\x01\xc1J\x17;<\x96\xfbl7*v\xd5;\x04\xbb\xa8=\x00\x00\x00\x00\xa5\x03 \x00'b'\x00\x05N\xb1w\tkd\xfe\x1a\xca\x01\x01\x1bMW\xe6\x0c\x00\x00\x00\x00\x02\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xcf\x0e'b'\x00\x05N\xb1w\tk\xb4\xfe\x16\xcb\x01\x01tfM\x03\x00\n\x00:\x00,\xfc\x01\x00\x00\x00\x00\x00\x08\x01\xa0\xff3\x02\xd0\xc2'b'\x00\x05N\xb1w\tl\x08\xfe\x16\xcc\x01\x01\x81fM\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x89\x00r\x02c-'b"\x00\x05N\xb1w\tlT\xfe\x0e\xcd\x01\x01\x1dfM\x03\x00\xb0\xa4iD\\\x8fZ='\x10\xa9?"b'\x00\x05N\xb1w\tl\xa0\xfe\x0e\xce\x01\x01\x89fM\x03\x00\xec\xe6iD\x99\x99\xac>\xf9\x14\xe8_'b"\x00\x05N\xb1w\tl\xfc\xfe*\xcf\x01\x01\x96s\xe7f\xbc\x11m\x01\x00'\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x000_"b'\x00\x05N\xb1w\tmT\xfe\x1f\xd0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T+i'b'\x00\x05N\xb1w\tm\xa4\xfe\x06\xd1\x01\x01}\xc5\x14\x00\x00\x03\x00G\xc4'b'\x00\x05N\xb1w\tm\xec\xfe\x04\xd2\x01\x01\x98\x00\x00\xa0\x8a\x07\xba'b'\x00\x05N\xb1w\tn0\xfe\x02\xd3\x01\x01*\x00\x00 \xad'b'\x00\x05N\xb1w\tn\x84\xfe\x1e\xd4\x01\x01\x18\x90\xb0\xe4\x0c\x00\x00\x00\x00\x02\xa6\x02\x18\xd9\xe7\xb8\xfdzb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x94\x14'b'\x00\x05N\xb1w\tn\xd4\xfe\x1a\xd5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xca\xc3'b'\x00\x05N\xb1w\to\x1c\xfe\x08\xd6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xb3'b'\x00\x05N\xb1w\toh\xfe\x15\xd7\x01\x01$\xd9Y\xe6\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xeb'b'\x00\x05N\xb1w\to\xb8\xfe\x16\xd8\x01\x01#fM\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00|G'b'\x00\x05N\xb1w\nTt\xfe\x03\xd9\x01\x01Ms\x00\x00\xa8\xe4'b'\x00\x05N\xb1w\nh\xe8\xfe\x14\xda\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x009\x15'b'\x00\x05N\xb1w\x0b-\xaf\xfe5w\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc1\xa5'b'\x00\x05N\xb1w\x0bD\x0f\xfe!x\xff\x00L\xfc\xef\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd7k'b'\x00\x05N\xb1w\x0b\xe7\xfc\xfe\x1c\xdb\x01\x01!\xc3M\x03\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\x8c<'b'\x00\x05N\xb1w\x0b\xe8x\xfe\x1c\xdc\x01\x01\x1e\x07N\x03\x00\xf8q|\xbdp\xad$\xba\xa1rT>\xf0\x11\xcc:Ya\xf2\xb9\xa2\xaf:9\xc5\xf2'b'\x00\x05N\xb1w\x0b\xe8\xd0\xfe\x18\xdd\x01\x01\xb2\x1b\xe8\x81\xbd\x94\xa2\x1b\xbb\x19\xb0P>G\xb1)D\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\xd1G'b'\x00\x05N\xb1w\x0b\xe9(\xfe\x1c\xde\x01\x01\xa3\x13:\x84\xb8^\xf4\xc4\xb8\xacG\xaa\xb8\x00\x00\x00\x00\x00\x00\x00\x00?\xff\xcf:\x99\xf4\xe1;\xe1\xa3'b'\x00\x05N\xb1w\x0b\xe9l\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f'b'\x00\x05N\xb1w\x0b\xe9\xb8\xfe\x0c\xe0\x01\x01\x02\xc0\xfePw\xb1N\x05\x00\x1bN\x03\x00\xfd>'b'\x00\x05N\xb1w\x0b\xea\x08\xfe\x16\xe1\x01\x01\x88\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x02\x80'b'\x00\x05N\xb1w\x0b\xeaX\xfe\x16\xe2\x01\x01\xc1\xcd\xefA<\x91\x1bn7W\x92a;%\xa9\xb4=\x00\x00\x00\x00\xa5\x03*\xf6'b'\x00\x05N\xb1w\x0b\xea\x9c\xfe\x03\xe3\x01\x01Ms\x00\x00\xf3/'b'\x00\x05N\xb1w\x0b\xfe\xf4\xfe\x12\xe4\x01\x01\xfc;N\x03\x004\x00\x01\x00ARMMASK\x00Wr\xde\xfc'b'\x00\x05N\xb1w\r\x1d\xdb\xfe5y\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01x\x18'b'\x00\x05N\xb1w\r4?\xfe!z\xff\x00La\x06\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00*\xed'b'\x00\x05N\xb1w\rnK\xfe\t{\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xfb\x83'b'\x00\x05N\xb1w\r\x83\x18\xfe\t\xe5\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03F\xc5'b'\x00\x05N\xb1w\r\x83\x98\xfe\x1a\xe6\x01\x01\x1b_\x05\xea\x0c\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01!\x07'b'\x00\x05N\xb1w\r\x83\xf4\xfe\x16\xe7\x01\x01tWN\x03\x00\x02\x00=\x00$\xfc\x02\x00\xfe\xff\xfd\xff\x07\x01\xa0\xff4\x02"~'b'\x00\x05N\xb1w\r\x84L\xfe\x16\xe8\x01\x01\x81WN\x03\x00\x02\x00A\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00k\x02U\x08'b'\x00\x05N\xb1w\r\x84\xac\xfe\x0e\xe9\x01\x01\x1dWN\x03\x00\x05\xa3iD)\\\xdf<&\x10F2'b'\x00\x05N\xb1w\r\x85\x00\xfe\x0e\xea\x01\x01\x89WN\x03\x00e\xe6iD)\\\xa8>\xf9\x14F\xcb'b'\x00\x05N\xb1w\r\x85`\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb9g'b'\x00\x05N\xb1w\r\x85\xb8\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce'b'\x00\x05N\xb1w\r\x86\x0c\xfe\x04\xed\x01\x01\x98\x00\x00\xa0\x8a\x82$'b'\x00\x05N\xb1w\r\x86\x80\xfe\x02\xee\x01\x01*\x00\x00%U'b'\x00\x05N\xb1w\r\x87\x18\xfe\x1e\xef\x01\x01\x18\xb8\xc1\xe7\x0c\x00\x00\x00\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x84b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cK}'b'\x00\x05N\xb1w\r\x87\xb8\xfe\x1a\xf0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x05m'b'\x00\x05N\xb1w\r\x88\x04\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e'b'\x00\x05N\xb1w\r\x88T\xfe\x15\xf2\x01\x01$\xcc\x07\xea\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xc3'b'\x00\x05N\xb1w\r\x88\xa4\xfe\x16\xf3\x01\x01#XN\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00*\xf7'b'\x00\x05N\xb1w\x0e\xf94\xfe\x03\xf4\x01\x01Ms\x00\x00\x85\xe8'b'\x00\x05N\xb1w\x0f\r\xa0\xfe\x14\xf5\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\r#'b'\x00\x05N\xb1w\x0f\r\xf8\xfe\t\xbc\n\x00m\r\x00\x00\x00\x00\xd4\x00\x00\x00j\x82'b'\x00\x05N\xb1w\x0f\x0eT\xfe\x1c\xf6\x01\x01!\x8bN\x03\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\x8b\xf0'b'\x00\x05N\xb1w\x0f\x0e\xb8\xfe\x1c\xf7\x01\x01\x1e\xf7N\x03\x00\x16\xbc|\xbd\xa0\xb8;\xbaOfT>\xc2\x83\x1e:\x94\x86~\xba\x98`<:EY'b'\x00\x05N\xb1w\x0f\x0f\x0c\xfe\x18\xf8\x01\x01\xb2\x92\xf1\x81\xbd\xbe\x93\x1d\xbb\xa0\xb4P>\x14\xae)D\x02\xa6\x02\x18\xd7\xe7\xb8\xfd$\xd4'b'\x00\x05N\xb1w\x0f:#\xfe5|\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01) 'b'\x00\x05N\xb1w\x0fd\x07\xfe!}\xff\x00L9\xfd\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00:\xb0'b'\x00\x05N\xb1w\x10\xcb\xfc\xfe\x1c\xf9\x01\x01\xa3\x06\xd2\x88\xb8\x00\xd5\xbd\xb8\x1b\xcf\xa7\xb8\x00\x00\x00\x00\x00\x00\x00\x00t\xe3\xce:\xe2\t\x01<\xa1\xee'b'\x00\x05N\xb1w\x10\xcc\xa4\xfe\x03\xfa\x01\x01\xa5\xc5\x14\x00o^'b'\x00\x05N\xb1w\x10\xcd(\xfe\x0c\xfb\x01\x01\x02(\xacTw\xb1N\x05\x00\x0cO\x03\x00?='b'\x00\x05N\xb1w\x10\xcd\xa8\xfe\x16\xfc\x01\x01\x88\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcc\x1d'b'\x00\x05N\xb1w\x10\xce \xfe\x16\xfd\x01\x01\xc1!\xbaG<\xaa\x19q7\x0b\x95\x82;\xa2)\xa8=\x00\x00\x00\x00\xa5\x03\xd0z'b'\x00\x05N\xb1w\x10\xce\x88\xfe\x03\xfe\x01\x01Ms\x00\x00V\xce'b'\x00\x05N\xb1w\x10\xcfL\xfe\x1a\xff\x01\x01\x1b\xdb\xaf\xed\x0c\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\x9c\xfd'b'\x00\x05N\xb1w\x10\xcf\xc8\xfe\x16\x00\x01\x01tGO\x03\x00\n\x00=\x00#\xfc\x00\x00\x02\x00\xff\xff\x07\x01\xa0\xff2\x02\xf2\xf2'b'\x00\x05N\xb1w\x10\xd0@\xfe\x16\x01\x01\x01\x81GO\x03\x00\x02\x00@\x00!\xfc\xfe\xff\x00\x00\xfc\xff&\x03\x87\x00q\x02\xfa\xd2'b'\x00\x05N\xb1w\x10\xd0\x90\xfe\x0e\x02\x01\x01\x1dGO\x03\x00C\xa4iD)\\?=&\x10\x08\xda'b'\x00\x05N\xb1w\x10\xd0\xe0\xfe\x0e\x03\x01\x01\x89GO\x03\x00\x95\xe7iDG\xe1\xb1>\xf8\x14VL'b'\x00\x05N\xb1w\x10\xd1<\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TZ\xef'b'\x00\x05N\xb1w\x10\xd1\x90\xfe\x06\x05\x01\x01}\xc5\x14\x00\x00\x03\x00I\xb4'b'\x00\x05N\xb1w\x10\xd1\xdc\xfe\x04\x06\x01\x01\x98\x00\x00\xa0\x8a\xc2X'b'\x00\x05N\xb1w\x10\xd2$\xfe\x02\x07\x01\x01*\x00\x00\x846'b'\x00\x05N\xb1w\x10\xd2x\xfe\x1e\x08\x01\x01\x18\xf8\xce\xea\x0c\x00\x00\x00\x00\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x98b\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cc\x82'b'\x00\x05N\xb1w\x10\xd2\xcc\xfe\x1a\t\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00"\xbf'b'\x00\x05N\xb1w\x10\xd3\x10\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw'b'\x00\x05N\xb1w\x10\xd3`\xfe\x15\x0b\x01\x01$Z\xb2\xed\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00W\xc8'b'\x00\x05N\xb1w\x10\xd3\xb0\xfe\x16\x0c\x01\x01#HO\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00g\xf7'b'\x00\x05N\xb1w\x11&\x7f\xfe5~\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xac\xc2'b'\x00\x05N\xb1w\x11<\xa3\xfe!\x7f\xff\x00L9\xfd\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbb\xed'b'\x00\x05N\xb1w\x11\xf1\xcc\xfe\x14\r\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xde\x87'b'\x00\x05N\xb1w\x11\xf2\xd8\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d'b'\x00\x05N\xb1w\x11\xf3\xd0\xfe\x1c\x0f\x01\x01!TO\x03\x00\x03\xa6\x02\x18\xd6\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x03\x00\x01\x00\xa4\x04\x927'b'\x00\x05N\xb1w\x12\xfb\x8f\xfe5\x80\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01a\xd0'b'\x00\x05N\xb1w\x13\x12\xaf\xfe!\x81\xff\x00L9\xfd\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfeH'b'\x00\x05N\xb1w\x13\x8dp\xfe\x1c\x10\x01\x01\x1e\xe7O\x03\x00\x853|\xbd\xf0j"\xba\xc2PT>\xc09C:\xaa\xbf\x9a\xba\x8dI5\xb90o'b'\x00\x05N\xb1w\x13\x8d\xf0\xfe\x18\x11\x01\x01\xb2\xa0\xb9\x81\xbd\x91[\x1a\xbb\xa0\xb2P>\n\xa7)D\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x01M'b'\x00\x05N\xb1w\x13\x8eL\xfe\x1c\x12\x01\x01\xa3\xb4n\x8d\xb8*\xc5\xb6\xb8vN\xa5\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xe8\xc4:\x06\xfd\xcb;\rc'b'\x00\x05N\xb1w\x13\x8e\x94\xfe\x03\x13\x01\x01\xa5\xc5\x14\x00\x8f\xea'b'\x00\x05N\xb1w\x13\x8e\xe0\xfe\x0c\x14\x01\x01\x02\xd8MXw\xb1N\x05\x00\xfbO\x03\x00g\xe8'b'\x00\x05N\xb1w\x13\x8f4\xfe\x16\x15\x01\x01\x88\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x000\x9b'b'\x00\x05N\xb1w\x13\x8f\x84\xfe\x16\x16\x01\x01\xc1:\xf6M<\x9f\x92q7@\xcc\x97;Od\xa8=\x00\x00\x00\x00\xa5\x03\x82\xac'b'\x00\x05N\xb1w\x13\x8f\xf8\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\x00\x05N\xb1w\x14\xce\xeb\xfe5\x82\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe42'b'\x00\x05N\xb1w\x15\x0f\xff\xfe!\x83\xff\x00L\xca\xee\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00k-'b'\x00\x05N\xb1w\x15%\x18\xfe\x1a\x19\x01\x01\x1b\x85Z\xf1\x0c\x00\x00\x00\x00\x04\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xae\xffl\x01W\xc7'b'\x00\x05N\xb1w\x15%\xa4\xfe\x16\x1a\x01\x01t7P\x03\x00\t\x005\x00*\xfc\x01\x00\xff\xff\xff\xff\x07\x01\xa1\xff4\x02\x0b\x9a'b'\x00\x05N\xb1w\x15&\x04\xfe\x16\x1b\x01\x01\x817P\x03\x00\x05\x00>\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x8a\x00t\x02\x8b\xc3'b'\x00\x05N\xb1w\x15&T\xfe\x0e\x1c\x01\x01\x1d7P\x03\x00a\xa3iDR\xb8\x06=&\x10\xad\xaf'b'\x00\x05N\xb1w\x15&\xa0\xfe\x0e\x1d\x01\x01\x897P\x03\x00b\xe5iD\xaeG\xa0>\xf9\x14R\xee'b'\x00\x05N\xb1w\x15&\xfc\xfe\x1f\x1e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tz\x7f'b"\x00\x05N\xb1w\x15'P\xfe\x06\x1f\x01\x01}\xc5\x14\x00\x00\x03\x00\x84\xd2"b"\x00\x05N\xb1w\x15'\xa0\xfe\x04 \x01\x01\x98\x00\x00\xa0\x8a\xe4\x0b"b"\x00\x05N\xb1w\x15'\xe4\xfe\x02!\x01\x01*\x00\x00\xca\r"b'\x00\x05N\xb1w\x15(8\xfe\x1e"\x01\x01\x18`\xed\xf0\x0c\x00\x00\x00\x00\x04\xa6\x02\x18\xd6\xe7\xb8\xfd\xa2b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x03K'b'\x00\x05N\xb1w\x15(\x8c\xfe\x1a#\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x85C'b'\x00\x05N\xb1w\x15(\xd4\xfe\x08$\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00E\xf2'b'\x00\x05N\xb1w\x15)(\xfe\x15%\x01\x01$f]\xf1\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k\xda'b'\x00\x05N\xb1w\x15)x\xfe\x16&\x01\x01#8P\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x002-'b"\x00\x05N\xb1w\x15)\xc4\xfe\x14'\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\x90#"b"\x00\x05N\xb1w\x15w\xf3\xfe%\x84\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xd9\xf9"b'\x00\x05N\xb1w\x16\x84\x04\xfe\x03(\x01\x01Ms\x00\x00\x8c&'b'\x00\x05N\xb1w\x16\x98\x98\xfe\x1c)\x01\x01!\x1cP\x03\x00\x04\xa6\x02\x18\xd6\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x03\x00\x01\x00\xa3\x04\xf7\x9e'b'\x00\x05N\xb1w\x16\x99\x00\xfe\x03*\x01\x01/\xff\x00\x005U'b'\x00\x05N\xb1w\x16\x99\x90\xfe\x1c+\x01\x01\x1e\xd7P\x03\x00\t\x14|\xbdHj \xba\x176T>@\x1a\xf5\xb8\x1a~\xc9\xb7\xf5m\x10\xb7F\x18'b'\x00\x05N\xb1w\x16\x99\xe4\xfe\x18,\x01\x01\xb2\x9b\xa0\x81\xbd\x01\x96\x19\xbbh\xa0P>f\xb6)D\x04\xa6\x02\x18\xd6\xe7\xb8\xfd\xc2\xc5'b'\x00\x05N\xb1w\x16\x9a8\xfe\x1c-\x01\x01\xa3\x11\r\x92\xb8I\xca\xaf\xb8\xe2\xce\xa2\xb8\x00\x00\x00\x00\x00\x00\x00\x00f\x9f\xc2:)\x87\xf5;qB'b'\x00\x05N\xb1w\x16\x9a\x80\xfe\x03.\x01\x01\xa5\xc8\x14\x00U6'b'\x00\x05N\xb1w\x16\x9a\xc8\xfe\x0c/\x01\x01\x02X\xf7[w\xb1N\x05\x00\xebP\x03\x00\xdb$'b'\x00\x05N\xb1w\x16\x9b\x18\xfe\x160\x01\x01\x88\x05\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00f\xbd'b'\x00\x05N\xb1w\x16\x9bt\xfe\x161\x01\x01\xc1\x96CN<\xff\x9er7\x00\x1a\xe0;\xfc\xe8\xb7=\x00\x00\x00\x00\xa5\x03O\xe9'b'\x00\x05N\xb1w\x16\xe9_\xfe5\x85\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x010\xe8'b'\x00\x05N\xb1w\x17\x01O\xfe!\x86\xff\x00L6\xdc\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf6+'b"\x00\x05N\xb1w\x18\x0b<\xfe\x032\x01\x01Ms\x00\x00'["b'\x00\x05N\xb1w\x18\x0b\xf0\xfe\x1a3\x01\x01\x1ba\x03\xf5\x0c\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffl\x01\xd6\xc6'b"\x00\x05N\xb1w\x18\x0cL\xfe\x164\x01\x01t'Q\x03\x00\x03\x004\x00'\xfc\x00\x00\x00\x00\x00\x00\x08\x01\xa0\xff4\x02h\x8d"b"\x00\x05N\xb1w\x18\x0c\xa4\xfe\x165\x01\x01\x81'Q\x03\x00\x01\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff'\x03\x89\x00k\x02\xc4d"b"\x00\x05N\xb1w\x18\x0c\xf4\xfe\x0e6\x01\x01\x1d'Q\x03\x00G\xa2iD\xd7\xa3\x80<%\x10\xdd\x7f"b"\x00\x05N\xb1w\x18\rl\xfe\x0e7\x01\x01\x89'Q\x03\x00p\xe5iDR\xb8\xa0>\xf9\x14G_"b'\x00\x05N\xb1w\x18\r\xe8\xfe\x1f8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00)?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd0\xca'b'\x00\x05N\xb1w\x18\x0eX\xfe\x069\x01\x01}\xc8\x14\x00\x00\x03\x006\xeb'b'\x00\x05N\xb1w\x18\x0e\xc4\xfe\x04:\x01\x01\x98\x00\x00\xa0\x8a@\x10'b'\x00\x05N\xb1w\x18\x0f$\xfe\x02;\x01\x01*\x00\x00TQ'b'\x00\x05N\xb1w\x18\x0f\x98\xfe\x1e<\x01\x01\x18\xa0\xfa\xf3\x0c\x00\x00\x00\x00\x05\xa6\x02\x18\xd6\xe7\xb8\xfd\xacb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cS\x1b'b'\x00\x05N\xb1w\x18\x10\x0c\xfe\x1a=\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00U\xe7'b'\x00\x05N\xb1w\x18\x10p\xfe\x08>\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x8e'b'\x00\x05N\xb1w\x18\x10\xe0\xfe\x15?\x01\x01$\xfe\x05\xf5\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x10'b'\x00\x05N\xb1w\x18\x11@\xfe\x16@\x01\x01#(Q\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00(\x97'b'\x00\x05N\xb1w\x18\xc7C\xfe5\x87\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb5\n'b'\x00\x05N\xb1w\x18\xddW\xfe!\x88\xff\x00L6\xdc\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00`\xb3'b'\x00\x05N\xb1w\x19\x90\xf0\xfe\x14A\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xe2\xe2\x989E\x0e\x87\xb9$\x87\xf5\xb9\xf3u'b'\x00\x05N\xb1w\x1b.\x14\xfe\x18E\x01\x01\xb2\xbd\x98\x81\xbd\x97P\x1a\xbb\xab\xc8P>G\xb1)D\x06\xa6\x02\x18\xd6\xe7\xb8\xfdyR'b'\x00\x05N\xb1w\x1b.l\xfe\x1cF\x01\x01\xa3\xe3\xb4\x96\xb8\x14\xdc\xa8\xb8\xbb=\xa0\xb8\x00\x00\x00\x00\x00\x00\x00\x00:\xda\xbe:\xae\xc2\xd5;8k'b'\x00\x05N\xb1w\x1b.\xb4\xfe\x03G\x01\x01\xa5\xdb\x14\x00;\xaf'b'\x00\x05N\xb1w\x1b/\x04\xfe\x0cH\x01\x01\x02\xc0\xa4_w\xb1N\x05\x00\xdcQ\x03\x00\x1f\xb4'b'\x00\x05N\xb1w\x1b/T\xfe\x16I\x01\x01\x88\x06\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00-\xd9'b'\x00\x05N\xb1w\x1b/\xa4\xfe\x16J\x01\x01\xc1/\x1dY<\xfc>t7\xf0\x8f\xdd:F-\xa9=\x00\x00\x00\x00\xa5\x03\xa5d'b'\x00\x05N\xb1w\x1b/\xf8\xfe\x1aK\x01\x01\x1bM\xaf\xf8\x0c\x00\x00\x00\x00\x02\x003\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb1\xffl\x01\xfcb'b'\x00\x05N\xb1w\x1b0H\xfe\x16L\x01\x01t\x18R\x03\x00\x01\x00/\x00*\xfc\xff\xff\x00\x00\x01\x00\x07\x01\xa0\xff2\x02\x80h'b'\x00\x05N\xb1w\x1b0\x9c\xfe\x16M\x01\x01\x81\x18R\x03\x00\x03\x00?\x00\x1f\xfc\xfe\xff\x01\x00\xfd\xff,\x03\x90\x00r\x02\xe0#'b'\x00\x05N\xb1w\x1b0\xe4\xfe\x0eN\x01\x01\x1d\x18R\x03\x00L\xa3iD\x99\x99\x01=%\x10$('b'\x00\x05N\xb1w\x1b10\xfe\x0eO\x01\x01\x89\x18R\x03\x00\n\xe7iD\x1e\x85\xad>\xfb\x14\x80\x08'b'\x00\x05N\xb1w\x1b1\x88\xfe\x1fP\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f)?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa18'b'\x00\x05N\xb1w\x1b1\xd8\xfe\x06Q\x01\x01}\xc8\x14\x00\x00\x03\x00\x13x'b'\x00\x05N\xb1w\x1b2$\xfe\x04R\x01\x01\x98\x00\x00\xa0\x8a\xd0~'b'\x00\x05N\xb1w\x1b2h\xfe\x02S\x01\x01*\x00\x00=+'b'\x00\x05N\xb1w\x1b2\xb8\xfe\x1eT\x01\x01\x18\xe0\x07\xf7\x0c\x00\x00\x00\x00\x06\xa6\x02\x18\xd6\xe7\xb8\xfd\xb6b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa0\xe9'b'\x00\x05N\xb1w\x1b3\x0c\xfe\x1aU\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbbW'b'\x00\x05N\xb1w\x1b3P\xfe\x08V\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00>u'b'\x00\x05N\xb1w\x1b3\xa0\xfe\x15W\x01\x01$\xe9\xb1\xf8\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x1c'b'\x00\x05N\xb1w\x1b3\xf0\xfe\x16X\x01\x01#\x19R\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x99\x0f'b'\x00\x05N\xb1w\x1b44\xfe\x03Y\x01\x01Ms\x00\x00J/'b'\x00\x05N\xb1w\x1bH\x8c\xfe\x12Z\x01\x01\xfc$R\x03\x004\x00\x01\x00ARMMASK\x00Wrn\xd6'b'\x00\x05N\xb1w\x1c\x9bd\xfe\t[\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xfe\xd1'b'\x00\x05N\xb1w\x1c\x9b\xd4\xfe\x14\\\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xe1\xdf'b'\x00\x05N\xb1w\x1c\xb1\xb7\xfe\t\x8b\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03"5'b'\x00\x05N\xb1w\x1c\xb2K\xfe5\x8b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x89U'b'\x00\x05N\xb1w\x1c\xdc#\xfe!\x8d\xff\x00L\xb9\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00O\xfa'b'\x00\x05N\xb1w\x1e%<\xfe\t\xbd\n\x00m\x11\x00\x00\x00\x00\xd3\x00\x00\x00\xbb\xc7'b'\x00\x05N\xb1w\x1e&\x08\xfe\x1c]\x01\x01!uR\x03\x00\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\x829'b'\x00\x05N\xb1w\x1e&h\xfe\x03^\x01\x01Ms\x00\x00D\xb3'b'\x00\x05N\xb1w\x1e\'\x18\xfe\x1c_\x01\x01\x1e\xb9R\x03\x00V\x89|\xbdx\xba\x1d\xba\\\\T>F\x99\xad::\x01\xcc9e\x7fK\xb9"i'b"\x00\x05N\xb1w\x1e'\x90\xfe\x18`\x01\x01\xb2\xba\xb3\x81\xbdYe\x18\xbb)\xcbP>\xd7\xb3)D\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\xe0J"b'\x00\x05N\xb1w\x1e(\x00\xfe\x1ca\x01\x01\xa3\x1fV\x9b\xb8\x06\xfa\xa1\xb8+\xca\x9d\xb8\x00\x00\x00\x00\x00\x00\x00\x00T\xf4\xbc:\xa9]\xbd;8R'b'\x00\x05N\xb1w\x1e(\\\xfe\x03b\x01\x01\xa5\xc5\x14\x00I\xe3'b'\x00\x05N\xb1w\x1e(\xc0\xfe\x0cc\x01\x01\x02@Ncw\xb1N\x05\x00\xcdR\x03\x00\xa8\xe2'b'\x00\x05N\xb1w\x1e)(\xfe\x16d\x01\x01\x88\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00U\xd8'b'\x00\x05N\xb1w\x1e)\xa0\xfe\x12e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00U\x0c'b'\x00\x05N\xb1w\x1e*\x1c\xfe\x16f\x01\x01\xc1\x08H\\<\x16\xf8t7\x82\xe0i;il\xae=\x00\x00\x00\x00\xa5\x03@\xf8'b'\x00\x05N\xb1w\x1e\xa1\xef\xfe5\x8e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd8m'b'\x00\x05N\xb1w\x1e\xccG\xfe!\x8f\xff\x00L\xf3\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaaL'b'\x00\x05N\xb1w\x1f\xab\xfc\xfe\x1ag\x01\x01\x1bc_\xfc\x0c\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01\x8e\xca'b'\x00\x05N\xb1w\x1f\xac\x98\xfe\x16h\x01\x01t\nS\x03\x00\x04\x003\x002\xfc\xfd\xff\xfe\xff\x02\x00\x07\x01\xa1\xff3\x02\xde\x82'b'\x00\x05N\xb1w\x1f\xac\xfc\xfe\x16i\x01\x01\x81\nS\x03\x00\x03\x00@\x00 \xfc\xfd\xff\x01\x00\xfe\xff*\x03\x87\x00q\x02\x02z'b"\x00\x05N\xb1w\x1f\xadt\xfe\x0ej\x01\x01\x1d\nS\x03\x00\xee\xa3iD\x85\xeb)='\x10\xd4\\"b'\x00\x05N\xb1w\x1f\xad\xdc\xfe\x0ek\x01\x01\x89\nS\x03\x00\xa6\xe5iDff\xa2>\xfc\x14\xd9\x8c'b'\x00\x05N\xb1w\x1f\xaeX\xfe\x1fl\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9dT'b"\x00\x05N\xb1w\x1f\xae\xcc\xfe\x06m\x01\x01}\xc5\x14\x00\x00\x03\x00l'"b'\x00\x05N\xb1w\x1f\xaf4\xfe\x04n\x01\x01\x98\x00\x00\xa0\x8aR6'b'\x00\x05N\xb1w\x1f\xaf\x94\xfe\x02o\x01\x01*\x00\x00\xedL'b'\x00\x05N\xb1w\x1f\xb0\x08\xfe\x1ep\x01\x01\x18\x08\x19\xfa\x0c\x00\x00\x00\x00\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\xc0b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xc95'b'\x00\x05N\xb1w\x1f\xb0x\xfe\x1aq\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00@<'b'\x00\x05N\xb1w\x1f\xb0\xdc\xfe\x08r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00*\xd6'b'\x00\x05N\xb1w\x1f\xb1H\xfe\x15s\x01\x01$/b\xfc\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7%'b'\x00\x05N\xb1w\x1f\xb1\xa4\xfe\x16t\x01\x01#\nS\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o2'b'\x00\x05N\xb1w\x1f\xb1\xf4\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2'b'\x00\x05N\xb1w |\xbf\xfe5\x90\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01>\xfc'b'\x00\x05N\xb1w \xba\xb7\xfe!\x91\xff\x00L\xf3\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x16('b'\x00\x05N\xb1w!2\\\xfe\x14v\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\n\xd7\xa3<\x0b\x00\x00\x00(l'b'\x00\x05N\xb1w!2\xd4\xfe\x1cw\x01\x01!>S\x03\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04B\x19'b'\x00\x05N\xb1w!3L\xfe\x03x\x01\x01Ms\x00\x00\x05\x18'b'\x00\x05N\xb1w!4\x10\xfe\x1cy\x01\x01\x1e\xaaS\x03\x00T\x8d|\xbdXvH\xba\xe0\x87T>\xfd\xa3,:Nb\xaf\xb9P\x00\x0c\xb9\x93\xd9'b'\x00\x05N\xb1w!4\x8c\xfe\x18z\x01\x01\xb2V\xa0\x81\xbd\xb8\x8d\x1d\xbb\x84\xefP>\n\xb7)D\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xe7@'b'\x00\x05N\xb1w"v\x07\xfe5\x92\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbb\x1e'b'\x00\x05N\xb1w"\x8cc\xfe!\x93\xff\x00Lq\x14\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x009k'b'\x00\x05N\xb1w"\xc5\xa4\xfe\x1c{\x01\x01\xa3c\xf8\x9f\xb8O\'\x9b\xb8\x01Y\x9b\xb8\x00\x00\x00\x00\x00\x00\x00\x00J\xc2\xb9:\xdf\xf5\xee;Ut'b'\x00\x05N\xb1w"\xc6(\xfe\x03|\x01\x01\xa5\xc5\x14\x00<\x88'b'\x00\x05N\xb1w"\xc6\x80\xfe\x0c}\x01\x01\x02\xc0\xf7fw\xb1N\x05\x00\xbeS\x03\x00\xe0\xcc'b'\x00\x05N\xb1w"\xc6\xdc\xfe\x16~\x01\x01\x88\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x0029'b'\x00\x05N\xb1w"\xc70\xfe\x16\x7f\x01\x01\xc1\x9eaY<-\xafs7\xb1\x8b\xd1;\xeb\xa6\xa6=\x00\x00\x00\x00\xa5\x03\xd7\xa7'b'\x00\x05N\xb1w"\xc7\x84\xfe\x1a\x80\x01\x01\x1bV\t\x00\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xfb\x99'b'\x00\x05N\xb1w"\xc7\xdc\xfe\x16\x81\x01\x01t\xfaS\x03\x00\n\x00/\x001\xfc\x00\x00\x00\x00\xfb\xff\x07\x01\xa0\xff3\x02\x8bl'b'\x00\x05N\xb1w"\xc80\xfe\x16\x82\x01\x01\x81\xfaS\x03\x00\x01\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00j\x02:\xf3'b'\x00\x05N\xb1w"\xc8|\xfe\x0e\x83\x01\x01\x1d\xfaS\x03\x00K\xa4iD\xaeGA=(\x10\xf4l'b'\x00\x05N\xb1w"\xc8\xc8\xfe\x0e\x84\x01\x01\x89\xfaS\x03\x00O\xe6iD\x14\xae\xa7>\xfd\x14-9'b'\x00\x05N\xb1w"\xc9$\xfe\x1f\x85\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00*?9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x98h'b'\x00\x05N\xb1w"\xc9\x88\xfe\x06\x86\x01\x01}\xc5\x14\x00\x00\x03\x00\xe1\xd8'b'\x00\x05N\xb1w"\xc9\xdc\xfe\x04\x87\x01\x01\x98\x00\x00\xa0\x8a\xe8\xd1'b'\x00\x05N\xb1w"\xca \xfe\x02\x88\x01\x01*\x00\x00m\xa9'b'\x00\x05N\xb1w"\xcat\xfe\x1e\x89\x01\x01\x180*\xfd\x0c\x00\x00\x00\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xdeb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf3\xa5'b'\x00\x05N\xb1w"\xca\xc4\xfe\x1a\x8a\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1el'b'\x00\x05N\xb1w"\xcb\x08\xfe\x08\x8b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00l\xb4'b'\x00\x05N\xb1w"\xcbX\xfe\x15\x8c\x01\x01$\xeb\x0b\x00\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\xea'b'\x00\x05N\xb1w"\xcb\xa8\xfe\x16\x8d\x01\x01#\xfaS\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\nv'b'\x00\x05N\xb1w"\xcb\xec\xfe\x03\x8e\x01\x01Ms\x00\x00/F'b'\x00\x05N\xb1w$I\xbf\xfe5\x94\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01%1'b'\x00\x05N\xb1w$J\xe0\xfe\x14\x8f\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xd1\xf6'b'\x00\x05N\xb1w$K`\xfe\x1c\x90\x01\x01!\x06T\x03\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04T\x81'b'\x00\x05N\xb1w$a\xf3\xfe!\x95\xff\x00Lq\x14\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xba\x8d'b"\x00\x05N\xb1w%\xb0\xc7\xfe%\x96\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xfa\xce"b'\x00\x05N\xb1w%\xd2D\xfe\x03\x91\x01\x01Ms\x00\x00\xe5\xac'b'\x00\x05N\xb1w%\xd3\x00\xfe\x1c\x92\x01\x01\x1e\x9aT\x03\x00\xbd\xb4|\xbd\xd8\xf58\xba\x83\x85T>\xc4S\x1f:\x97\x99\x89\xbaP\xcdo9\xc0"'b'\x00\x05N\xb1w%\xd3`\xfe\x18\x93\x01\x01\xb2\x8f\xa2\x81\xbdP~\x1b\xbb/\xf0P>\xe1\xaa)D\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xda\x0e'b'\x00\x05N\xb1w%\xd3\xb4\xfe\x1c\x94\x01\x01\xa3\xf8\xa3\xa4\xb8D^\x94\xb8\xed\xd2\x98\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x12J\xb2:\xe7\r\xed;\xdb\xd0'b'\x00\x05N\xb1w%\xd3\xf8\xfe\x03\x95\x01\x01\xa5\xc5\x14\x00\xdc<'b'\x00\x05N\xb1w%\xd4D\xfe\x0c\x96\x01\x01\x02@\xa1jw\xb1N\x05\x00\xaeT\x03\x00\x8e\x8b'b'\x00\x05N\xb1w%\xd4\x94\xfe\x16\x97\x01\x01\x88\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00N\xa5'b'\x00\x05N\xb1w%\xd4\xe4\xfe\x16\x98\x01\x01\xc1\x804L<^\x8bq7E\xb2\x8a;\xb9R\xb0=\x00\x00\x00\x00\xa5\x03\x85\x87'b'\x00\x05N\xb1w&O/\xfe5\x97\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xea&'b'\x00\x05N\xb1w&e\xf3\xfe!\x98\xff\x00L\x19\x13\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x89\x08'b"\x00\x05N\xb1w'h\xc4\xfe\x03\x9a\x01\x01/\xff\x00\x00_s"b"\x00\x05N\xb1w'}H\xfe\x1a\x9b\x01\x01\x1b\xda\xb4\x03\r\x00\x00\x00\x00\x04\x005\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffn\x01\x87L"b"\x00\x05N\xb1w'}\xa4\xfe\x16\x9c\x01\x01t\xeaT\x03\x00\x06\x00:\x00+\xfc\x00\x00\xff\xff\x01\x00\x06\x01\xa0\xff2\x02\xc5\xbe"b"\x00\x05N\xb1w'~\x00\xfe\x16\x9d\x01\x01\x81\xeaT\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x88\x00m\x02T\x16"b"\x00\x05N\xb1w'~P\xfe\x0e\x9e\x01\x01\x1d\xeaT\x03\x002\xa3iD\x8f\xc2\xf5<(\x10\x85G"b"\x00\x05N\xb1w'~\x9c\xfe\x0e\x9f\x01\x01\x89\xeaT\x03\x00\x14\xe6iD\n\xd7\xa5>\xfd\x14\xca\xab"b"\x00\x05N\xb1w'~\xf4\xfe\x1f\xa0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95\xf3"b"\x00\x05N\xb1w'\x7fD\xfe\x06\xa1\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\xb4"b"\x00\x05N\xb1w'\x7f\x90\xfe\x04\xa2\x01\x01\x98\x00\x00\xa0\x8a\xc9T"b"\x00\x05N\xb1w'\x7f\xd4\xfe\x02\xa3\x01\x01*\x00\x00l\xbc"b"\x00\x05N\xb1w'\x80(\xfe\x1e\xa4\x01\x01\x18\xb0D\x03\r\x00\x00\x00\x00\t\xa6\x02\x18\xd6\xe7\xb8\xfd\xe8b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb5B"b"\x00\x05N\xb1w'\x80x\xfe\x1a\xa5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00nY"b"\x00\x05N\xb1w'\x80\xc0\xfe\x08\xa6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbd?"b"\x00\x05N\xb1w'\x81\x10\xfe\x15\xa7\x01\x01$\x8e\xb8\x03\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xf3"b"\x00\x05N\xb1w'\x81`\xfe\x16\xa8\x01\x01#\xebT\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa8o"b"\x00\x05N\xb1w'\x81\xa4\xfe\x03\xa9\x01\x01Ms\x00\x00\xd1l"b"\x00\x05N\xb1w'\x82$\xfe\x14\xaa\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00X\xed"b'\x00\x05N\xb1w(+_\xfe5\x99\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01S\x9b'b'\x00\x05N\xb1w(iG\xfe!\x9a\xff\x00L\x19\x13\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x08U'b'\x00\x05N\xb1w(\xf4P\xfe\x1c\xab\x01\x01!\xceT\x03\x00\t\xa6\x02\x18\xd6\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04\x0b\xfa'b'\x00\x05N\xb1w(\xf4\xcc\xfe\x1c\xac\x01\x01\x1e\x8bU\x03\x00\x18\xc1|\xbd\xe0eJ\xba\x86wT>\xe8r\x91\xb9\xb7\x19l9q\x99\x1f9\xf9\xd3'b'\x00\x05N\xb1w(\xf5$\xfe\x18\xad\x01\x01\xb2\x80\xa1\x81\xbd\xb2\xc6\x1e\xbb\x1e\xf3P>\xd7\xb3)D\t\xa6\x02\x18\xd7\xe7\xb8\xfd\x14\xab'b'\x00\x05N\xb1w(\xf5l\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0'b'\x00\x05N\xb1w)\t\xc8\xfe\x1c\xaf\x01\x01\xa3\x05K\xa9\xb8d\x9d\x8d\xb8\xdaL\x96\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0cO\xa9:\xc8\xc0\xe6;\xa72'b'\x00\x05N\xb1w)\n\x14\xfe\x03\xb0\x01\x01\xa5\xc8\x14\x00\xc2\x96'b'\x00\x05N\xb1w)\n`\xfe\x0c\xb1\x01\x01\x02\xc0Jnw\xb1N\x05\x00\x9fU\x03\x00\xaa\xee'b'\x00\x05N\xb1w)\n\xb0\xfe\x16\xb2\x01\x01\x88\t\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1d\xb5'b'\x00\x05N\xb1w)\x0b\x00\xfe\x16\xb3\x01\x01\xc1t\xfcF<\xf5\xd5n7r/;;\xd6\xd2\xaa=\x00\x00\x00\x00\xa5\x03\xaf\x1d'b'\x00\x05N\xb1w*2\x0b\xfe5\x9b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd6y'b'\x00\x05N\xb1w*H\x13\xfe!\x9c\xff\x00L\xf0\x08\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00P\x90'b'\x00\x05N\xb1w*\x82$\xfe\x1a\xb4\x01\x01\x1b\x12`\x07\r\x00\x00\x00\x00\x02\x004\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffn\x01\xff\x14z\x8e'b'\x00\x05N\xb1w*\x84\x14\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T#k'b'\x00\x05N\xb1w*\x84\x94\xfe\x06\xba\x01\x01}\xc5\x14\x00\x00\x03\x00\xd1\xa9'b'\x00\x05N\xb1w*\x85\x04\xfe\x04\xbb\x01\x01\x98\x00\x00\xa0\x8aj\x99'b'\x00\x05N\xb1w*\x85l\xfe\x02\xbc\x01\x01*\x00\x00Q\x10'b'\x00\x05N\xb1w*\x85\xec\xfe\x1e\xbd\x01\x01\x18\xb8\x07\x06\r\x00\x00\x00\x00\t\xa6\x02\x18\xd7\xe7\xb8\xfd\xf2b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cl\xac'b'\x00\x05N\xb1w*\x86h\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4'b'\x00\x05N\xb1w*\x86\xd8\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M'b'\x00\x05N\xb1w*\x87P\xfe\x15\xc0\x01\x01$\xd3b\x07\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x99'b'\x00\x05N\xb1w*\x87\xc0\xfe\x16\xc1\x01\x01#\xdbU\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18P'b'\x00\x05N\xb1w*\x88\x0c\xfe\x12\xc2\x01\x01\xfc\x0fV\x03\x004\x00\x01\x00ARMMASK\x00Wr\xa7\xb0'b'\x00\x05N\xb1w*\x88T\xfe\x03\xc3\x01\x01Ms\x00\x00\x03\x99'b'\x00\x05N\xb1w*\x88\xe8\xfe\t\xc4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x13\x1e'b'\x00\x05N\xb1w,\x02\x97\xfe5\x9d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01HV'b'\x00\x05N\xb1w,\x03\x80\xfe\x14\xc5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00^\x8d'b'\x00\x05N\xb1w,\x04\x00\xfe\x1c\xc6\x01\x01!\x83U\x03\x00\t\xa6\x02\x18\xd7\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xef\x95'b'\x00\x05N\xb1w,\x1b\xd7\xfe!\x9e\xff\x00L\xf0\x08\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd1\xcd'b'\x00\x05N\xb1w,C\x8f\xfe\t\x9e\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa6n'b'\x00\x05N\xb1w-k\xf0\xfe\t\xbe\n\x00m\x01\x00\x00\x00\x00\xd3\x00\x00\x00\xd7\x96'b'\x00\x05N\xb1w-lt\xfe\x1c\xc7\x01\x01\x1e{V\x03\x00b\xa4|\xbd(\x11K\xba\xb8jT>gI\xa2:\xea\xf1-\xba\xff\x82\x03\xba5\xea'b'\x00\x05N\xb1w-m\x04\xfe\x18\xc8\x01\x01\xb2\x92\x85\x81\xbd-\xa4 \xbb\xae\xecP>R\xa8)D\n\xa6\x02\x18\xd8\xe7\xb8\xfd\xef\xa8'b'\x00\x05N\xb1w-m|\xfe\x1c\xc9\x01\x01\xa3?\xed\xad\xb86\xdf\x86\xb8\x17\xca\x93\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xa6\xa0:au\xd4;\xd4b'b'\x00\x05N\xb1w-m\xe0\xfe\x03\xca\x01\x01\xa5\xc5\x14\x00\xe7\xb3'b'\x00\x05N\xb1w-nL\xfe\x0c\xcb\x01\x01\x02@\xf4qw\xb1N\x05\x00\x8fV\x03\x00\xc4\xd3'b'\x00\x05N\xb1w-n\xbc\xfe\x16\xcc\x01\x01\x88\n\xa6\x02\x18\xd8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7f<'b'\x00\x05N\xb1w-o(\xfe\x16\xcd\x01\x01\xc12\tC<;\xa2j7(\x84\xda;\xf1\xdc\xa6=\x00\x00\x00\x00\xa5\x03]<'b'\x00\x05N\xb1w-o\x8c\xfe\x03\xce\x01\x01Ms\x00\x00\xde#'b'\x00\x05N\xb1w-pH\xfe\x1a\xcf\x01\x01\x1b\xec\x08\x0b\r\x00\x00\x00\x00\x05\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01x\x19'b'\x00\x05N\xb1w-p\xb8\xfe\x16\xd0\x01\x01t\xcaV\x03\x00\x01\x003\x00+\xfc\x02\x00\xfd\xff\x00\x00\x07\x01\xa0\xff2\x02\xa3\xa6'b'\x00\x05N\xb1w-q\x10\xfe\x16\xd1\x01\x01\x81\xcbV\x03\x00\x01\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfe\xff)\x03\x87\x00m\x02\x04\xdc'b'\x00\x05N\xb1w-q`\xfe\x0e\xd2\x01\x01\x1d\xcbV\x03\x00B\xa4iD=\n?=(\x10\x01`'b'\x00\x05N\xb1w-q\xb0\xfe\x0e\xd3\x01\x01\x89\xcbV\x03\x00[\xe7iD=\n\xb0>\xff\x14^\xf7'b'\x00\x05N\xb1w-r\x0c\xfe\x1f\xd4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8d\xc5'b'\x00\x05N\xb1w-r\\\xfe\x06\xd5\x01\x01}\xc5\x14\x00\x00\x03\x00\x12\x9a'b'\x00\x05N\xb1w-r\xa8\xfe\x04\xd6\x01\x01\x98\x00\x00\xa0\x8a\xe2\x85'b'\x00\x05N\xb1w-r\xf0\xfe\x02\xd7\x01\x01*\x00\x00V\xc2'b'\x00\x05N\xb1w-sD\xfe\x1e\xd8\x01\x01\x18\x18c\t\r\x00\x00\x00\x00\n\xa6\x02\x18\xd8\xe7\xb8\xfd\xfcb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x0b\xd9'b'\x00\x05N\xb1w-s\x98\xfe\x1a\xd9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xef\xd6'b'\x00\x05N\xb1w-s\xe0\xfe\x08\xda\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00@\x88'b'\x00\x05N\xb1w-t4\xfe\x15\xdb\x01\x01$\t\x0c\x0b\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x03'b'\x00\x05N\xb1w-t\x84\xfe\x16\xdc\x01\x01#\xcbV\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x008\xe2'b'\x00\x05N\xb1w-\xe1\xb3\xfe5\xa0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdf\x88'b"\x00\x05N\xb1w. '\xfe!\xa1\xff\x00L\xfd\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x005\x05"b'\x00\x05N\xb1w.\xf8x\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\x00\x05N\xb1w.\xf9,\xfe\x14\xde\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\nV'b'\x00\x05N\xb1w/\xe7\x83\xfe5\xa2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Zj'b"\x00\x05N\xb1w0\x10'\xfe!\xa3\xff\x00L\xfd\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb4X"b"\x00\x05N\xb1w0\x84\x90\xfe\x1c\xdf\x01\x01!'W\x03\x00\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xc6v"b'\x00\x05N\xb1w0\x858\xfe\x1c\xe0\x01\x01\x1ekW\x03\x00\x1f\x9b|\xbd@XV\xba\\YT>T\xb1o7\xd8\x93{\xba\x90\xeb\xe79\xe1\x98'b'\x00\x05N\xb1w0\x85\x98\xfe\x18\xe1\x01\x01\xb2\x02\x86\x81\xbd\xdf\xa4"\xbb\xf5\x04Q>\n\xa7)D\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\xd8w'b'\x00\x05N\xb1w0\x85\xf0\xfe\x1c\xe2\x01\x01\xa3\xd5\x8c\xb2\xb8\xa3-\x80\xb8.C\x91\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xba\x93:\xd87\xd9;d\xc9'b'\x00\x05N\xb1w0\x868\xfe\x03\xe3\x01\x01\xa5\xc5\x14\x00\x14\xa9'b'\x00\x05N\xb1w0\x86\x84\xfe\x0c\xe4\x01\x01\x02\xc0\x9duw\xb1N\x05\x00\x7fW\x03\x00\xd0\xda'b'\x00\x05N\xb1w0\x86\xd8\xfe\x16\xe5\x01\x01\x88\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7f\xef'b'\x00\x05N\xb1w0\x87(\xfe\x16\xe6\x01\x01\xc1\xef\x10I<\xaa\x00g7"\x88\xf7;\xc7\x05\xac=\x00\x00\x00\x00\xa5\x03\x8b\xd1'b'\x00\x05N\xb1w0\x87l\xfe\x03\xe7\x01\x01Ms\x00\x00-9'b'\x00\x05N\xb1w1\xc9\xb3\xfe5\xa4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc4E'b'\x00\x05N\xb1w2\x07\xb7\xfe!\xa5\xff\x00L\x9e\xf3\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe9\xeb'b'\x00\x05N\xb1w2\x08\xa4\xfe\x1a\xe8\x01\x01\x1b\xf9\xb4\x0e\r\x00\x00\x00\x00\x03\x003\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\xb5\x90'b'\x00\x05N\xb1w2\t$\xfe\x16\xe9\x01\x01t\xbbW\x03\x00\t\x007\x00(\xfc\x01\x00\x01\x00\x00\x00\x06\x01\xa0\xff3\x02 \xa0'b'\x00\x05N\xb1w2\t\x90\xfe\x16\xea\x01\x01\x81\xbbW\x03\x00\x01\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff,\x03\x8e\x00v\x029\x88'b'\x00\x05N\xb1w2\t\xec\xfe\x0e\xeb\x01\x01\x1d\xbbW\x03\x00\x06\xa4iD\x00\x000=)\x10A\xb5'b'\x00\x05N\xb1w2\n\\\xfe\x0e\xec\x01\x01\x89\xbbW\x03\x00O\xe7iD\x14\xae\xaf>\x00\x15\xb3\xbf'b'\x00\x05N\xb1w2\n\xe8\xfe*\xed\x01\x01\x96s\xe7f\xbc\x10m\x01\x00)\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x1e\x88'b'\x00\x05N\xb1w2\x0b\x80\xfe\x1f\xee\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tc\x10'b'\x00\x05N\xb1w2\x0c\x04\xfe\x06\xef\x01\x01}\xc8\x14\x00\x00\x03\x00\x1a0'b'\x00\x05N\xb1w2\x0ct\xfe\x04\xf0\x01\x01\x98\x00\x00\xa0\x8a\xc4\xd6'b'\x00\x05N\xb1w2\x0c\xdc\xfe\x02\xf1\x01\x01*\x00\x00\x18\xf9'b'\x00\x05N\xb1w2\rX\xfe\x1e\xf2\x01\x01\x18Xp\x0c\r\x00\x00\x00\x00\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\x06c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xc7^'b'\x00\x05N\xb1w2\r\xd4\xfe\x1a\xf3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00H*'b'\x00\x05N\xb1w2\x0e8\xfe\x08\xf4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00f\r'b'\x00\x05N\xb1w2\x0e\x8c\xfe\x15\xf5\x01\x01$\xfd\xb7\x0e\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xed'b'\x00\x05N\xb1w2\x0e\xdc\xfe\x16\xf6\x01\x01#\xbcW\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1b\xd5'b'\x00\x05N\xb1w3\x95\xf8\xfe\x14\xf7\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00v\x8a'b'\x00\x05N\xb1w3\x96l\xfe\x03\xf8\x01\x01Ms\x00\x00\xe7\xd3'b'\x00\x05N\xb1w3\x97 \xfe\x1c\xf9\x01\x01!\xefW\x03\x00\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04.\x98'b'\x00\x05N\xb1w3\x97\x88\xfe\x1c\xfa\x01\x01\x1e[X\x03\x00m\x03}\xbd\xb0\xb8`\xba4rT>Q\x12$:=r\x94\xb9\xde!\x8b\xba"\xfa'b'\x00\x05N\xb1w3\x97\xdc\xfe\x18\xfb\x01\x01\xb2\xba\xa4\x81\xbdQH!\xbb\xd60Q>\x14\xae)D\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\x8f\xc0'b'\x00\x05N\xb1w3\xcd\x8f\xfe5\xa6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01A\xa7'b'\x00\x05N\xb1w3\xf7\x9f\xfe!\xa7\xff\x00L\xb1\x04\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\r\x88'b'\x00\x05N\xb1w5\x1e4\xfe\x1c\xfc\x01\x01\xa3\x0c)\xb7\xb8\x95\ns\xb8\xbc\xb6\x8e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x06\x8e:\xc7\xdc\xdc;\xe3T'b'\x00\x05N\xb1w5\x1e\xac\xfe\x03\xfd\x01\x01\xa5\xc5\x14\x00a\xc2'b'\x00\x05N\xb1w5\x1f\x08\xfe\x0c\xfe\x01\x01\x02@Gyw\xb1N\x05\x00pX\x03\x00 j'b'\x00\x05N\xb1w5\x1ft\xfe\x16\xff\x01\x01\x88\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xde\xdd'b'\x00\x05N\xb1w5\x1f\xdc\xfe\x16\x00\x01\x01\xc1\xaa\x8fI<\xc7\x16c7)\xff\xd4;\x84/\xb0=\x00\x00\x00\x00\xa5\x03\x92\xf7'b'\x00\x05N\xb1w5 0\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b'\x00\x05N\xb1w5 \xcc\xfe\x1a\x02\x01\x01\x1b\x9f`\x12\r\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01/J'b'\x00\x05N\xb1w5!4\xfe\x16\x03\x01\x01t\xacX\x03\x00\x0f\x007\x00-\xfc\x02\x00\x01\x00\x00\x00\x07\x01\xa0\xff3\x02\xf9\x15'b'\x00\x05N\xb1w5!\x9c\xfe\x16\x04\x01\x01\x81\xacX\x03\x00\x00\x00A\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff-\x03\x88\x00u\x02\xda\xfa'b'\x00\x05N\xb1w5!\xf8\xfe\x0e\x05\x01\x01\x1d\xacX\x03\x00C\xa4iD)\\?=)\x10A\xb6'b'\x00\x05N\xb1w5"T\xfe\x0e\x06\x01\x01\x89\xacX\x03\x00\xb9\xe6iD\x00\x00\xab>\x01\x155\x1f'b'\x00\x05N\xb1w5"\xc8\xfe\x1f\x07\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa29'b'\x00\x05N\xb1w5#h\xfe\x06\x08\x01\x01}\xc8\x14\x00\x00\x03\x00h-'b'\x00\x05N\xb1w5#\xb8\xfe\x04\t\x01\x01\x98\x00\x00\xa0\x8a\xea\xce'b'\x00\x05N\xb1w5#\xfc\xfe\x02\n\x01\x01*\x00\x00\xcb\x18'b'\x00\x05N\xb1w5$P\xfe\x1e\x0b\x01\x01\x18\xa0@\x12\r\x00\x00\x00\x00\r\xa6\x02\x18\xdb\xe7\xb8\xfd$c\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cV\xe1'b'\x00\x05N\xb1w5$\xa4\xfe\x1a\x0c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf5v'b'\x00\x05N\xb1w5$\xec\xfe\x08\r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00 o'b'\x00\x05N\xb1w5%<\xfe\x15\x0e\x01\x01$?c\x12\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bn'b'\x00\x05N\xb1w5%\x8c\xfe\x16\x0f\x01\x01#\xacX\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb7\xbd'b'\x00\x05N\xb1w5\xc2\x8b\xfe5\xa8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf8\x1a'b"\x00\x05N\xb1w5\xd9+\xfe%\xa9\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x06\x08"b'\x00\x05N\xb1w5\xee\xe3\xfe!\xaa\xff\x00L\xb1\x04\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd2\xe7'b'\x00\x05N\xb1w6\xa2\xa4\xfe\x14\x10\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00\n\xe4'b'\x00\x05N\xb1w6\xa3\x1c\xfe\x03\x11\x01\x01/\xff\x00\x00\xd1\x1f'b'\x00\x05N\xb1w6\xb7\xb8\xfe\x03\x12\x01\x01Ms\x00\x00\xd7\xed'b'\x00\x05N\xb1w6\xb8H\xfe\x1c\x13\x01\x01!\xa4X\x03\x00\r\xa6\x02\x18\xdb\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04L\xf3'b'\x00\x05N\xb1w7\xa6\xfb\xfe5\xab\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x017\r'b'\x00\x05N\xb1w7\xd17\xfe!\xac\xff\x00L\xb1\x04\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Q\x01'b"\x00\x05N\xb1w86$\xfe\x1c\x14\x01\x01\x1eLY\x03\x00\x0f\xa7|\xbd\x88Lg\xbav\x7fT>'+\x84\xb9\xa5\x18\xcb\xba\xa9\xcb\x858\xf4\x1e"b'\x00\x05N\xb1w86\x9c\xfe\x18\x15\x01\x01\xb2@r\x81\xbd\xa6]%\xbb\xb5TQ>=\xaa)D\r\xa6\x02\x18\xdb\xe7\xb8\xfdM\xb7'b'\x00\x05N\xb1w86\xf4\xfe\x1c\x16\x01\x01\xa3\xd5\xc1\xbb\xb8T\xc2e\xb8\x11,\x8c\xb8\x00\x00\x00\x00\x00\x00\x00\x00*L\xa0:\x92\xfb\xbf;U\xf7'b'\x00\x05N\xb1w87<\xfe\x03\x17\x01\x01\xa5\xbb\x14\x00V\x08'b'\x00\x05N\xb1w87\x88\xfe\x0c\x18\x01\x01\x02\xd8\xec|w\xb1N\x05\x00`Y\x03\x00\x1be'b'\x00\x05N\xb1w87\xf0\xfe\x16\x19\x01\x01\x88\r\xa6\x02\x18\xdb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa9n'b'\x00\x05N\xb1w88D\xfe\x16\x1a\x01\x01\xc1\xd6AE<+\xf3`7\x13\xda\x9f;u\xb5\xb0=\x00\x00\x00\x00\xa5\x03\x83l'b'\x00\x05N\xb1w88\xb8\xfe\x03\x1c\x01\x01Ms\x00\x00\xda\xdd'b'\x00\x05N\xb1w9\xb3c\xfe5\xad\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa9"'b'\x00\x05N\xb1w9\xb4\x80\xfe\x1a\x1d\x01\x01\x1b\xdf\r\x16\r\x00\x00\x00\x00\x03\x005\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffn\x01\xed\xaf'b'\x00\x05N\xb1w9\xb4\xf0\xfe\x16\x1e\x01\x01t\x9dY\x03\x00\x0f\x00;\x000\xfc\xff\xff\x00\x00\xfd\xff\x08\x01\xa0\xff3\x02\x125'b'\x00\x05N\xb1w9\xb5L\xfe\x16\x1f\x01\x01\x81\x9dY\x03\x00\x03\x00C\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff4\x03\x89\x00w\x02\xeaQ'b'\x00\x05N\xb1w9\xb5\x9c\xfe\x0e \x01\x01\x1d\x9dY\x03\x00\xbe\xa3iD{\x14\x1e=)\x10\x83\xeb'b'\x00\x05N\xb1w9\xb5\xe8\xfe\x0e!\x01\x01\x89\x9dY\x03\x00\xab\xe6iD\\\x8f\xaa>\x01\x15K\xf4'b'\x00\x05N\xb1w9\xb6X\xfe\x1f"\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xeb\xa2'b'\x00\x05N\xb1w9\xb6\xbc\xfe\x06#\x01\x01}\xcb\x14\x00\x00\x03\x00\x95%'b'\x00\x05N\xb1w9\xb7\x1c\xfe\x04$\x01\x01\x98\x00\x00\xa0\x8a\x014'b'\x00\x05N\xb1w9\xb7p\xfe\x02%\x01\x01*\x00\x00\xbcb'b'\x00\x05N\xb1w9\xb7\xd4\xfe\x1e&\x01\x01\x18\xc8Q\x15\r\x00\x00\x00\x00\r\xa6\x02\x18\xdc\xe7\xb8\xfd8c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x90b'b"\x00\x05N\xb1w9\xb8<\xfe\x1a'\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00fO"b'\x00\x05N\xb1w9\xb8\x94\xfe\x08(\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x99\xc9'b'\x00\x05N\xb1w9\xb8\xf4\xfe\x15)\x01\x01$\xa7\x10\x16\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xff'b'\x00\x05N\xb1w9\xb9X\xfe\x16*\x01\x01#\x9dY\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc9\xfb'b'\x00\x05N\xb1w9\xb9\xb8\xfe\x14+\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00x\x8a'b'\x00\x05N\xb1w9\xba\x14\xfe\x12,\x01\x01\xfc\xf9Y\x03\x004\x00\x01\x00ARMMASK\x00Wr\xf2\x08'b'\x00\x05N\xb1w9\xd17\xfe!\xae\xff\x00L\xe1\r\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x18\xec'b'\x00\x05N\xb1w;6\xa4\xfe\t-\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x94\xef'b'\x00\x05N\xb1w;7(\xfe\x03.\x01\x01Ms\x00\x00=;'b'\x00\x05N\xb1w;7\xd0\xfe\x1c/\x01\x01!mY\x03\x00\r\xa6\x02\x18\xdc\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfe\xff\x02\x00\x02\x00\xa4\x04\xf8\x9d'b'\x00\x05N\xb1w;8<\xfe\x1c0\x01\x01\x1e=Z\x03\x00\xd4N}\xbd@kS\xba\xa0]T>b\xf8\xd29K\xe1x\xba\xac\xf0M9\xcf\xec'b'\x00\x05N\xb1w;8\xa0\xfe\x181\x01\x01\xb2\x89\xab\x81\xbd\xdb\x01"\xbb\x99TQ>\xa4\xb0)D\x0e\xa6\x02\x18\xdd\xe7\xb8\xfd2]'b'\x00\x05N\xb1w;9\x00\xfe\x1c2\x01\x01\xa3}O\xc0\xb8tzX\xb8q\xb2\x89\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x18\xfc\x90:\xb3n\xaa;w<'b'\x00\x05N\xb1w;9L\xfe\x033\x01\x01\xa5\xca\x14\x00\x86\xee'b'\x00\x05N\xb1w;9\xb8\xfe\x0c4\x01\x01\x02X\x96\x80w\xb1N\x05\x00QZ\x03\x00\x16\xc7'b'\x00\x05N\xb1w;:H\xfe\x165\x01\x01\x88\x0e\xa6\x02\x18\xdd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9fU'b'\x00\x05N\xb1w;:\xb4\xfe\x166\x01\x01\xc1\xcc\xdc>\x03\x15\xc6\xb8'b'\x00\x05N\xb1w<\xc0\xd8\xfe\x1f<\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00l\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf7\xb4'b'\x00\x05N\xb1w<\xc1@\xfe\x06=\x01\x01}\xc5\x14\x00\x00\x03\x00,\x9b'b'\x00\x05N\xb1w<\xc1\x9c\xfe\x04>\x01\x01\x98\x00\x00\xa0\x8a\xa5/'b'\x00\x05N\xb1w<\xc1\xf0\xfe\x02?\x01\x01*\x00\x00">'b'\x00\x05N\xb1w<\xc2X\xfe\x1e@\x01\x01\x18\xf0b\x18\r\x00\x00\x00\x00\x0e\xa6\x02\x18\xdd\xe7\xb8\xfdBc\n\x00F\x00\xff\xff\x01\x00|J\x03\x0csg'b'\x00\x05N\xb1w<\xc2\xc0\xfe\x1aA\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd4h'b'\x00\x05N\xb1w<\xc3\x18\xfe\x08B\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Z9'b'\x00\x05N\xb1w<\xc3h\xfe\x15C\x01\x01$Y\xbc\x19\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2U'b'\x00\x05N\xb1w<\xc3\xb8\xfe\x16D\x01\x01#\x8eZ\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00P\x0b'b'\x00\x05N\xb1w<\xc3\xfc\xfe\x03E\x01\x01Ms\x00\x00PO'b'\x00\x05N\xb1w=\x8e\xb3\xfe5\xb2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x05F'b'\x00\x05N\xb1w=\xcc\xf7\xfe!\xb3\xff\x00L\x8c\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x81.'b'\x00\x05N\xb1w>LT\xfe\x14F\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00\x7fk'b'\x00\x05N\xb1w>L\xe4\xfe\x1cG\x01\x01!\xfeZ\x03\x00\x0e\xa6\x02\x18\xde\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x049:'b'\x00\x05N\xb1w>MH\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5'b'\x00\x05N\xb1w?\x8f/\xfe5\xb4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9bi'b'\x00\x05N\xb1w?\xcd\x1b\xfe!\xb5\xff\x00L\x8c\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x02\xc8'b'\x00\x05N\xb1w?\xce\x0c\xfe\x1cI\x01\x01\x1e.[\x03\x00\x9f=}\xbd\x90XE\xba\xb7oT>p\xe8\x879\x08\xb58\xba\x1c:v9!\xb4'b'\x00\x05N\xb1w?\xce\x84\xfe\x18J\x01\x01\xb2\r\x94\x81\xbd#\x0e"\xbbowQ>\x1e\xb5)D\x0e\xa6\x02\x18\xde\xe7\xb8\xfdi\xba'b'\x00\x05N\xb1w?\xce\xe0\xfe\x1cK\x01\x01\xa3\xe1\xda\xc4\xb8\xac)K\xb8\xd63\x87\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x12h\x99:\xcbX\xcd;\x84\x15'b'\x00\x05N\xb1w?\xcfL\xfe\x03L\x01\x01\xa5\xc5\x14\x00\xb4e'b'\x00\x05N\xb1w?\xcf\xc0\xfe\x0cM\x01\x01\x02\xe0\x91\x84w\xb1N\x05\x00B[\x03\x00\x86\x00'b'\x00\x05N\xb1w?\xd08\xfe\x16N\x01\x01\x88\x0e\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\xba'b'\x00\x05N\xb1w?\xd0\xa8\xfe\x12O\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xfb\xc9'b'\x00\x05N\xb1w?\xd1\x1c\xfe\x16P\x01\x01\xc1n\x8b6\x03\x15\x98\xc9'b'\x00\x05N\xb1w?\xd3\xb8\xfe\x1fV\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdd\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96s'b'\x00\x05N\xb1w?\xd4\x18\xfe\x06W\x01\x01}\xc2\x14\x00\x00\x03\x003d'b'\x00\x05N\xb1w?\xd4p\xfe\x04X\x01\x01\x98\x00\x00\xa0\x8a\xe0\x9a'b'\x00\x05N\xb1w?\xd4\xc0\xfe\x02Y\x01\x01*\x00\x00j\xc2'b'\x00\x05N\xb1w?\xd5$\xfe\x1eZ\x01\x01\x180p\x1b\r\x00\x00\x00\x00\x0e\xa6\x02\x18\xde\xe7\xb8\xfdVc\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cW_'b'\x00\x05N\xb1w?\xd5\x84\xfe\x1a[\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe7\xc0'b'\x00\x05N\xb1w?\xd5\xd8\xfe\x08\\\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0cS'b'\x00\x05N\xb1w?\xd64\xfe\x15]\x01\x01$\xfbe\x1d\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00!\x95'b'\x00\x05N\xb1w?\xd6\x90\xfe\x16^\x01\x01#~[\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe6\\'b'\x00\x05N\xb1wAT\xb4\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1wAUt\xfe\x14`\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xb4N'b'\x00\x05N\xb1wA\x92\x87\xfe5\xb6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1e\x8b'b'\x00\x05N\xb1wA\xd1\xc3\xfe!\xb7\xff\x00L\x82\x03\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf7\x11'b'\x00\x05N\xb1wB\xdb\xb4\xfe\x1ca\x01\x01!\xda[\x03\x00\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfe\xff\x02\x00\x02\x00\xa4\x04M\xb9'b'\x00\x05N\xb1wB\xdc@\xfe\x03b\x01\x01Ms\x00\x00\xaee'b'\x00\x05N\xb1wB\xf1\x08\xfe\x1cc\x01\x01\x1e\x1e\\\x03\x00\x19\xf8|\xbd\xa0\x1a\x1f\xbaqyT>C\x18\x19:}ma\xba\x9e\xf3\xf9\xb9\xa9\xf7'b'\x00\x05N\xb1wB\xf1t\xfe\x18d\x01\x01\xb2Vv\x81\xbdV\\\x1b\xbbq\x9dQ>\xcd\xac)D\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\x08\xb8'b'\x00\x05N\xb1wB\xf1\xd0\xfe\x1ce\x01\x01\xa3\xcbe\xc9\xb8]\xce=\xb8\xe6\xa3\x84\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xaf\x99:<\xda\xe2;~6'b'\x00\x05N\xb1wB\xf2 \xfe\x03f\x01\x01\xa5\xc3\x14\x00\r\xbe'b'\x00\x05N\xb1wB\xf2t\xfe\x0cg\x01\x01\x02@\xed\x87w\xb1N\x05\x002\\\x03\x00\xd3\x18'b'\x00\x05N\xb1wB\xf2\xf4\xfe\x16h\x01\x01\x88\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00O\\'b'\x00\x05N\xb1wB\xf3l\xfe\x16i\x01\x01\xc1p\x9d;\x00#\xfc\x02\x00\xfe\xff\xff\xff\x07\x01\xa1\xff4\x02\xd3Q'b'\x00\x05N\xb1wDv\x9c\xfe\x16l\x01\x01\x81n\\\x03\x00\x02\x00A\x00"\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00o\x02v\x0f'b'\x00\x05N\xb1wDv\xec\xfe\x0em\x01\x01\x1dn\\\x03\x00\xec\xa2iD33\xd3<*\x10\xe0\x06'b'\x00\x05N\xb1wDw<\xfe\x0en\x01\x01\x89n\\\x03\x00\xd4\xe6iD\n\xd7\xab>\x04\x15-s'b'\x00\x05N\xb1wDw\x94\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01*?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc3\xcc'b'\x00\x05N\xb1wDw\xe8\xfe\x06p\x01\x01}\xc5\x14\x02\x00\x03\x00\xcf\xf7'b'\x00\x05N\xb1wDx4\xfe\x04q\x01\x01\x98\x00\x00\xa0\x8a\xee_'b'\x00\x05N\xb1wDxx\xfe\x02r\x01\x01*\x00\x00k\xd7'b'\x00\x05N\xb1wDx\xd0\xfe\x1es\x01\x01\x18\x90\xcb\x1e\r\x00\x00\x00\x00\x0f\xa6\x02\x18\xdf\xe7\xb8\xfdjc\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1a\xf1'b'\x00\x05N\xb1wDy \xfe\x1at\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x97\xf5'b'\x00\x05N\xb1wDyh\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce'b'\x00\x05N\xb1wDy\xb8\xfe\x15v\x01\x01$\xbd\x11!\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xcd'b'\x00\x05N\xb1wDz\x04\xfe\x16w\x01\x01#o\\\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x17\x86'b'\x00\x05N\xb1wDzX\xfe\x03x\x01\x01Ms\x00\x00\x05\x18'b'\x00\x05N\xb1wE\x9a\xcf\xfe5\xba\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01"\xd4'b'\x00\x05N\xb1wE\xb1o\xfe!\xbb\xff\x00L.\x0b\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00F\xd9'b'\x00\x05N\xb1wE\xfeP\xfe\x14y\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00P\xa7'b'\x00\x05N\xb1wE\xfe\xd4\xfe\x1cz\x01\x01!\xa2\\\x03\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xe9\x16'b'\x00\x05N\xb1wE\xff<\xfe\x1c{\x01\x01\x1e\x0e]\x03\x00\x006}\xbd\xc0\x9c$\xba|hT>}D\x84:"\xa9\xb0\xba\xf2\xe5\x05:\xe8\xf0'b'\x00\x05N\xb1wE\xff\x94\xfe\x18|\x01\x01\xb2\xb4\x84\x81\xbd\xaa\x88\x1e\xbb\xd2\xabQ>p\xad)D\x0f\xa6\x02\x18\xe0\xe7\xb8\xfdZ\xa4'b'\x00\x05N\xb1wE\xff\xd8\xfe\x03}\x01\x01Ms\x00\x00d\x8f'b"\x00\x05N\xb1wFI#\xfe%\xbc\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00RJ"b'\x00\x05N\xb1wGs\x03\xfe5\xbd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf6\x0e'b'\x00\x05N\xb1wG\x9c\xe3\xfe!\xbe\xff\x00L+\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x006`'b'\x00\x05N\xb1wG\xbf\x0c\xfe\x1c~\x01\x01\xa3\xbc\xe8\xcd\xb8\xa3g0\xb8J\x11\x82\xb8\x00\x00\x00\x00\x00\x00\x00\x0010\x9a:F\xf6\xba;S\xa6'b'\x00\x05N\xb1wG\xbf\x84\xfe\x03\x7f\x01\x01\xa5\xc5\x14\x00\xec\x02'b'\x00\x05N\xb1wG\xbf\xec\xfe\x0c\x80\x01\x01\x02\xc0\x96\x8bw\xb1N\x05\x00#]\x03\x00X~'b'\x00\x05N\xb1wG\xc0T\xfe\x16\x81\x01\x01\x88\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe8\x1e'b'\x00\x05N\xb1wG\xc0\xb4\xfe\x16\x82\x01\x01\xc1\xc0\xb4=<;\x12T7\x1b3Q:1 \xbc=\x00\x00\x00\x00\xa5\x03\ns'b'\x00\x05N\xb1wG\xc1\x18\xfe\x03\x83\x01\x01/\xff\x00\x00$\x84'b'\x00\x05N\xb1wG\xc1\xd0\xfe\x1a\x84\x01\x01\x1b\xea\xba$\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x014\xaf'b'\x00\x05N\xb1wG\xc28\xfe\x16\x85\x01\x01t^]\x03\x00\x0e\x006\x003\xfc\x02\x00\xff\xff\xfd\xff\x07\x01\xa0\xff4\x02\xd4q'b'\x00\x05N\xb1wG\xc2\xa0\xfe\x16\x86\x01\x01\x81^]\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff,\x03\x88\x00p\x02\xbb\x9d'b'\x00\x05N\xb1wG\xc2\xf8\xfe\x0e\x87\x01\x01\x1d_]\x03\x002\xa3iD\x8f\xc2\xf5<)\x10Gi'b'\x00\x05N\xb1wG\xc3P\xfe\x0e\x88\x01\x01\x89_]\x03\x00O\xe7iD\x14\xae\xaf>\x05\x15?\x08'b'\x00\x05N\xb1wG\xc3\xb4\xfe\x1f\x89\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb2\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xedX'b'\x00\x05N\xb1wG\xc4\x14\xfe\x06\x8a\x01\x01}\xc8\x14\x00\x00\x03\x00Q\x14'b'\x00\x05N\xb1wG\xc4l\xfe\x04\x8b\x01\x01\x98\x00\x00\xa0\x8a\xc7\x91'b'\x00\x05N\xb1wG\xc4\xb8\xfe\x02\x8c\x01\x01*\x00\x00\x1b\xc6'b'\x00\x05N\xb1wG\xc5\x18\xfe\x1e\x8d\x01\x01\x18\xd0\xd8!\r\x00\x00\x00\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x88c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0ci\x82'b'\x00\x05N\xb1wG\xc5t\xfe\x1a\x8e\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xfd`'b'\x00\x05N\xb1wG\xc5\xc4\xfe\x08\x8f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xa2'b'\x00\x05N\xb1wG\xc6,\xfe\x15\x90\x01\x01$\xb6\xbd$\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xa7'b'\x00\x05N\xb1wG\xc6\x88\xfe\x16\x91\x01\x01#_]\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x84\xea'b'\x00\x05N\xb1wI\x00,\xfe\x03\x92\x01\x01Ms\x00\x005&'b'\x00\x05N\xb1wI\x14\xc4\xfe\x14\x93\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\x94v'b'\x00\x05N\xb1wI\x158\xfe\x1c\x94\x01\x01!k]\x03\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04Qt'b'\x00\x05N\xb1wI\x15\xa4\xfe\x12\x95\x01\x01\xfc\xe3]\x03\x004\x00\x01\x00ARMMASK\x00Wr\x81@'b'\x00\x05N\xb1wIy[\xfe5\xbf\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01s\xec'b'\x00\x05N\xb1wI\xa3\xcb\xfe!\xc0\xff\x00L+\xff\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00T\x1c'b'\x00\x05N\xb1wJ\x8f\xf8\xfe\t\x96\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x7fv'b'\x00\x05N\xb1wJ\x90\x8c\xfe\x1c\x97\x01\x01\x1e\xff]\x03\x00\xa9_}\xbd\xc8\xa6\x13\xbaHwT>\x9f\xf0\xb49G\xb1)D\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd/\xca'b'\x00\x05N\xb1wJ\x91\\\xfe\x1c\x99\x01\x01\xa3\x9bb\xd2\xb8\x01\xf0"\xb8G\x0f\x7f\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x7f7\x97:A\x13\xa9;\xc3\xfe'b'\x00\x05N\xb1wJ\x91\xac\xfe\x03\x9a\x01\x01\xa5\xc6\x14\x00\xa3\xa8'b'\x00\x05N\xb1wJ\x92\x14\xfe\x0c\x9b\x01\x01\x02@@\x8fw\xb1N\x05\x00\x13^\x03\x00\x8eD'b'\x00\x05N\xb1wJ\x92l\xfe\x16\x9c\x01\x01\x88\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00&\x83'b'\x00\x05N\xb1wJ\x92\xc4\xfe\x16\x9d\x01\x01\xc1\x15\xf4;\x06\x15\xfe\xc5'b'\x00\x05N\xb1wL\r\xd0\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{?'b'\x00\x05N\xb1wL\x0e4\xfe\x06\xa6\x01\x01}\xc8\x14\x00\x00\x03\x00$\x14'b'\x00\x05N\xb1wL\x0e\x90\xfe\x04\xa7\x01\x01\x98\x00\x00\xa0\x8a\xd1&'b'\x00\x05N\xb1wL\x0e\xe4\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca'b"\x00\x05N\xb1wL\x0f<\xfe\x1e\xa9\x01\x01\x188\xf7'\r\x00\x00\x00\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x9cc\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x9f\xe6"b'\x00\x05N\xb1wL\x0f\x94\xfe\x1a\xaa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x06\x0b'b'\x00\x05N\xb1wL\x0f\xe0\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01'b'\x00\x05N\xb1wL\x104\xfe\x15\xac\x01\x01$:j(\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbdS'b'\x00\x05N\xb1wL\x10\x84\xfe\x16\xad\x01\x01#P^\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1e\x04'b'\x00\x05N\xb1wL\x10\xcc\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0'b'\x00\x05N\xb1wL%L\xfe\x14\xaf\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x85k\xbe\n\xd7#<\x0b\x00\x00\x00\x94D'b'\x00\x05N\xb1wMI\x03\xfe5\xc4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x06\xac'b'\x00\x05N\xb1wM_\xa3\xfe!\xc5\xff\x00L\xda\t\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00%F'b'\x00\x05N\xb1wM\x89\xb8\xfe\x1c\xb0\x01\x01!3^\x03\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x0c\x81'b'\x00\x05N\xb1wM\x8a<\xfe\x1c\xb1\x01\x01\x1e\xef^\x03\x00\xdc*~\xbdpu\x1a\xba\xcd\x82T>Ub\x8c:\xb7\xc4\xdc\xb9\xb9^\xe0\xb5LD'b'\x00\x05N\xb1wM\x8a\x94\xfe\x18\xb2\x01\x01\xb2>\xca\x81\xbd\xce\x9b\x1d\xbb}\xe0Q>\\\xaf)D\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x80\x12'b'\x00\x05N\xb1wM\x8a\xe8\xfe\x1c\xb3\x01\x01\xa3d\xce\xd6\xb8\x05\x86\x15\xb8g=z\xb8\x00\x00\x00\x00\x00\x00\x00\x00D8\x88:\xc5\xde~;\xc0\xad'b'\x00\x05N\xb1wM\x8b0\xfe\x03\xb4\x01\x01\xa5\xc8\x14\x00\x1c\x80'b'\x00\x05N\xb1wM\x8bx\xfe\x0c\xb5\x01\x01\x02\xc0\xe9\x92w\xb1N\x05\x00\x03_\x03\x00\xad\x17'b'\x00\x05N\xb1wM\x8b\xcc\xfe\x16\xb6\x01\x01\x88\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00o8'b'\x00\x05N\xb1wM\x8c4\xfe\x16\xb7\x01\x01\xc1\xce\x15;<9:Q7b\x88\xb2:\x1a\xc5\xad=\x00\x00\x00\x00\xa5\x03\xf2\xeb'b'\x00\x05N\xb1wM\x8c\x98\xfe\x03\xb8\x01\x01Ms\x00\x00\x16\xb6'b'\x00\x05N\xb1wO\x07\xd4\xfe\x1a\xb9\x01\x01\x1b&\x11,\r\x00\x00\x00\x00\x02\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xff.'b'\x00\x05N\xb1wO\x08@\xfe\x16\xba\x01\x01t?_\x03\x00\x08\x001\x00)\xfc\x00\x00\xff\xff\x00\x00\x07\x01\xa1\xff3\x02\xa3c'b'\x00\x05N\xb1wO\x08\x9c\xfe\x16\xbb\x01\x01\x81?_\x03\x00\x04\x00@\x00\x1d\xfc\xfc\xff\x01\x00\xfd\xff(\x03\x88\x00n\x02\t\xfd'b'\x00\x05N\xb1wO\x08\xf8\xfe\x0e\xbc\x01\x01\x1d?_\x03\x00\xfc\xa2iDG\xe1\xda<*\x10"\x08'b'\x00\x05N\xb1wO\t\x80\xfe\x0e\xbd\x01\x01\x89?_\x03\x00\x0b\xe7iD\\\x8f\xad>\x06\x15\xc9\x9b'b'\x00\x05N\xb1wO\n\x0c\xfe\x1f\xbe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf4\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc\x04'b'\x00\x05N\xb1wO\n\x9c\xfe\x06\xbf\x01\x01}\xc5\x14\x00\x00\x03\x00\x15\xa2'b'\x00\x05N\xb1wO\x0b,\xfe\x04\xc0\x01\x01\x98\x00\x00\xa0\x8ai\xde'b'\x00\x05N\xb1wO\x0b\x9c\xfe\x02\xc1\x01\x01*\x00\x00R/'b'\x00\x05N\xb1wO\x0c \xfe\x1e\xc2\x01\x01\x18@\xba*\r\x00\x00\x00\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\xa6c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c5w'b'\x00\x05N\xb1wO\x0c\xa4\xfe\x1a\xc3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdc~'b'\x00\x05N\xb1wO\r\x08\xfe\x08\xc4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x16\xe2'b'\x00\x05N\xb1wO\r`\xfe\x15\xc5\x01\x01$\x9e\x13,\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00+\xad'b'\x00\x05N\xb1wO\r\xb8\xfe\x16\xc6\x01\x01#@_\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1f/'b'\x00\x05N\xb1wO$\xb3\xfe5\xc6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x83N'b'\x00\x05N\xb1wOO\x0b\xfe!\xc7\xff\x00L\xa2\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbb8'b'\x00\x05N\xb1wP\xaa\xe4\xfe\x14\xc7\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\xbb\xc4'b'\x00\x05N\xb1wP\xabT\xfe\x03\xc8\x01\x01Ms\x00\x00o>'b'\x00\x05N\xb1wP\xbf\xb8\xfe\x1c\xc9\x01\x01!\xb0_\x03\x00\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x041\x8f'b'\x00\x05N\xb1wQ(\xcb\xfe5\xc8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01:\xf3'b'\x00\x05N\xb1wQg\xaf\xfe!\xc9\xff\x00L\xa2\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00-\xa0'b'\x00\x05N\xb1wR/x\xfe\x1c\xca\x01\x01\x1e\xe0_\x03\x00\xe3c~\xbd\xe8\x93$\xba\x17\x97T>\xeb^?:\xc9\x19\x98\xba\x12\xa159Z.'b'\x00\x05N\xb1wR/\xfc\xfe\x18\xcb\x01\x01\xb2\x9d\xc7\x81\xbd\x17p!\xbb`\xfdQ>\n\xb7)D\x11\xa6\x02\x18\xe1\xe7\xb8\xfd~T'b'\x00\x05N\xb1wR0`\xfe\x1c\xcc\x01\x01\xa3l3\xdb\xb8\x14#\x08\xb8\xed\x84u\xb8\x00\x00\x00\x00\x00\x00\x00\x002\xad\x94:\x94\xea\xa1;I/'b'\x00\x05N\xb1wR0\xb4\xfe\x03\xcd\x01\x01\xa5\xc5\x14\x00\xe9/'b'\x00\x05N\xb1wR1\x08\xfe\x0c\xce\x01\x01\x02@\x93\x96w\xb1N\x05\x00\xf4_\x03\x00\xb1\xcb'b'\x00\x05N\xb1wR1`\xfe\x16\xcf\x01\x01\x88\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa7G'b'\x00\x05N\xb1wR1\xb4\xfe\x16\xd0\x01\x01\xc1\x83A2\x07\x15k\xde'b'\x00\x05N\xb1wR4\\\xfe\x1f\xd7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TA\xb1'b'\x00\x05N\xb1wR4\xb0\xfe\x06\xd8\x01\x01}\xc2\x14\x00\x00\x03\x00d\xea'b'\x00\x05N\xb1wR4\xfc\xfe\x04\xd9\x01\x01\x98\x00\x00\xa0\x8a\xca\x13'b'\x00\x05N\xb1wR5D\xfe\x02\xda\x01\x01*\x00\x00\x19\xec'b'\x00\x05N\xb1wR5\x98\xfe\x1e\xdb\x01\x01\x18\x80\xc7-\r\x00\x00\x00\x00\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\xb0c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa8\x07'b'\x00\x05N\xb1wR5\xfc\xfe\x1a\xdc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x008\x1f'b'\x00\x05N\xb1wR6H\xfe\x08\xdd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x03\x90'b'\x00\x05N\xb1wR6\x98\xfe\x15\xde\x01\x01$\xc8\xbd/\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xe1'b'\x00\x05N\xb1wR6\xe8\xfe\x16\xdf\x01\x01#0`\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x08\x94'b'\x00\x05N\xb1wS<\xbb\xfe5\xca\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbf\x11'b'\x00\x05N\xb1wSf\x8b\xfe!\xcb\xff\x00L\x8f\x1f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb5\x8c'b'\x00\x05N\xb1wS\xa34\xfe\x14\xe0\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\x80U'b'\x00\x05N\xb1wS\xa3\xdc\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\x00\x05N\xb1wU \xff\xfe5\xcc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01!>'b'\x00\x05N\xb1wU6\xec\xfe\x1c\xe2\x01\x01!y`\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x0eu'b'\x00\x05N\xb1wU7\x84\xfe\x1c\xe3\x01\x01\x1e\xd1`\x03\x00Mh~\xbd(\xec\x1c\xba\xe8\xb3T>[\xc3\xcb7-\xb5\xc66\xfb\xa8C\xb9\x8e\xba'b'\x00\x05N\xb1wU7\xec\xfe\x18\xe4\x01\x01\xb26\xc4\x81\xbd\x15\x96 \xbb`/R>3\xb3)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xe2\x98'b'\x00\x05N\xb1wU8H\xfe\x1c\xe5\x01\x01\xa3\x9a\x91\xdf\xb8\xfa\x87\xf5\xb7"\xcap\xb8\x00\x00\x00\x00\x00\x00\x00\x00%\xab\x89:\xec\x16\xa0;s 'b'\x00\x05N\xb1wU8\x94\xfe\x03\xe6\x01\x01\xa5\xc5\x14\x00u>'b'\x00\x05N\xb1wU8\xe4\xfe\x0c\xe7\x01\x01\x02\xe0\x8a\x9aw\xb1N\x05\x00\xe5`\x03\x00\x97\x00'b'\x00\x05N\xb1wU9<\xfe\x16\xe8\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xae{'b'\x00\x05N\xb1wU9\x90\xfe\x16\xe9\x01\x01\xc1\n\x1c1\x07\x15/@'b'\x00\x05N\xb1wV\xddp\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x89\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd1F'b'\x00\x05N\xb1wV\xdd\xd0\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&'b'\x00\x05N\xb1wV\xde$\xfe\x04\xf2\x01\x01\x98\x00\x00\xa0\x8a>M'b'\x00\x05N\xb1wV\xdet\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce'b'\x00\x05N\xb1wV\xde\xd4\xfe\x1e\xf4\x01\x01\x18\xa8\xd80\r\x00\x00\x00\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xc4c\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cs\x88'b'\x00\x05N\xb1wV\xdf0\xfe\x1a\xf5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd2\xa4'b'\x00\x05N\xb1wV\xdf\x80\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\x00\x05N\xb1wV\xdf\xd8\xfe\x15\xf7\x01\x01$\x17o3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k\x0c'b'\x00\x05N\xb1wV\xe00\xfe\x16\xf8\x01\x01#"a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8dT'b'\x00\x05N\xb1wV\xe0\x80\xfe\x03\xf9\x01\x01/\xff\x00\x00\x8e*'b'\x00\x05N\xb1wW#\xdb\xfe5\xcf\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xee)'b'\x00\x05N\xb1wWM\xf3\xfe!\xd0\xff\x00L\xde3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc0\x1d'b'\x00\x05N\xb1wX9\\\xfe\x14\xfa\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00$:'b'\x00\x05N\xb1wX9\xd0\xfe\x1c\xfb\x01\x01!Ba\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\xc4\xe7'b'\x00\x05N\xb1wX:,\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5'b'\x00\x05N\xb1wX:\xc0\xfe\x1c\xfd\x01\x01\x1e\xc1a\x03\x00\xd5\x1b~\xbd\xb0P\xec\xb9\xd6\xb9T>fK\xf39W)<\xb9}\x9bE:,\x99'b'\x00\x05N\xb1wX;\x1c\xfe\x18\xfe\x01\x01\xb2R\xaf\x81\xbd\xc7\xeb\x1a\xbb[FR>\xa4\xb0)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd?Z'b'\x00\x05N\xb1wX;h\xfe\x12\xff\x01\x01\xfc\xcea\x03\x004\x00\x01\x00ARMMASK\x00WrMv'b'\x00\x05N\xb1wX\xf1\x83\xfe5\xd1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x08\xb8'b'\x00\x05N\xb1wY\x1c#\xfe!\xd2\xff\x00L\xe68\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9bS'b'\x00\x05N\xb1wY\xc1`\xfe\t\x00\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1b('b'\x00\x05N\xb1wY\xc1\xfc\xfe\x1c\x01\x01\x01\xa3\x86\xe5\xe3\xb8\x19\xd0\xda\xb7\xe8\x1el\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xaa\x94:\x14%\x8a;z\xf3'b'\x00\x05N\xb1wY\xc2\\\xfe\x03\x02\x01\x01\xa5\xc5\x14\x00H0'b'\x00\x05N\xb1wY\xc2\xb8\xfe\x0c\x03\x01\x01\x02X\xe2\x9dw\xb1N\x05\x00\xd6a\x03\x00#2'b'\x00\x05N\xb1wY\xc3\x18\xfe\x16\x04\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xab\xf4'b'\x00\x05N\xb1wY\xc3t\xfe\x16\x05\x01\x01\xc1~\xf44<\x91\x93O7`\x0c\xff9\x92J\xb8=\x00\x00\x00\x00\xa5\x03\x16%'b'\x00\x05N\xb1wY\xc3\xd0\xfe\x1a\x06\x01\x01\x1b\xae\x187\r\x00\x00\x00\x00\x04\x005\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffn\x01x\x9e'b'\x00\x05N\xb1wY\xc4(\xfe\x16\x07\x01\x01t\x12b\x03\x00\x05\x002\x00)\xfc\x00\x00\xfd\xff\x02\x00\x07\x01\xa1\xff4\x02+ 'b'\x00\x05N\xb1wY\xc4\x80\xfe\x16\x08\x01\x01\x81\x12b\x03\x00\x02\x00@\x00\x1e\xfc\xfc\xff\x01\x00\xfe\xff)\x03\x88\x00q\x02\xb6\x0c'b'\x00\x05N\xb1wY\xc4\xd0\xfe\x0e\t\x01\x01\x1d\x12b\x03\x00O\xa3iDp=\x02=+\x108\x82'b'\x00\x05N\xb1wY\xc5 \xfe\x0e\n\x01\x01\x89\x12b\x03\x00\\\xe7iD{\x14\xb0>\x08\x15 `'b'\x00\x05N\xb1wY\xc5|\xfe*\x0b\x01\x01\x96s\xe7f\xbc\x0fm\x01\x00+\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x01\x87'b'\x00\x05N\xb1wY\xc5\xdc\xfe\x1f\x0c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\x83'b'\x00\x05N\xb1wY\xc60\xfe\x06\r\x01\x01}\xc8\x14\x00\x00\x03\x00\xac&'b"\x00\x05N\xb1wY\xc6|\xfe\x04\x0e\x01\x01\x98\x00\x00\xa0\x8a\x08'"b'\x00\x05N\xb1wY\xc6\xc0\xfe\x02\x0f\x01\x01*\x00\x00h\xe8'b'\x00\x05N\xb1wY\xc7\x14\xfe\x1e\x10\x01\x01\x18\x10\xf76\r\x00\x00\x00\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xd8c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xa1\x96'b'\x00\x05N\xb1wY\xc7t\xfe\x1a\x11\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00h\x95'b'\x00\x05N\xb1wY\xc7\xc0\xfe\x08\x12\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00'b'\x00\x05N\xb1wY\xc8\x10\xfe\x15\x13\x01\x01$!\x1b7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x13'b'\x00\x05N\xb1wY\xc8`\xfe\x16\x14\x01\x01#\x13b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8e\xcd'b'\x00\x05N\xb1wY\xc8\xa4\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q'b'\x00\x05N\xb1wY\xc90\xfe\t\xc1\n\x00m\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x13\x15'b'\x00\x05N\xb1wZE[\xfe\t\xd3\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf9O'b'\x00\x05N\xb1wZ\xd3\xd7\xfe5\xd4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Y\x80'b'\x00\x05N\xb1w[\x11\xab\xfe!\xd5\xff\x00L\xe68\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd0\x1f'b'\x00\x05N\xb1w[N\xc0\xfe\x14\x16\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\xfa\xf2'b'\x00\x05N\xb1w[O\x84\xfe\x1c\x17\x01\x01!\nb\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\xa9\x0f'b'\x00\x05N\xb1w[P$\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\x00\x05N\xb1w\\\xce\xc7\xfe5\xd6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdcb'b'\x00\x05N\xb1w\\\xe4\xe7\xfe!\xd7\xff\x00L\xe68\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00QB'b'\x00\x05N\xb1w\\\xe5\xb0\xfe\x1c\x19\x01\x01\x1e\xb2b\x03\x00\xf95~\xbd\x80o\x00\xba\t\xbaT>]-\xd19\xf3\xfa\xc7\xb9n\x83M\xba"Z'b'\x00\x05N\xb1w\\\xe6 \xfe\x18\x1a\x01\x01\xb2\x80\xb9\x81\xbd\n\x89\x1d\xbb\xd9`R>G\xb1)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x8c\x9f'b'\x00\x05N\xb1w\\\xe6\x80\xfe\x1c\x1b\x01\x01\xa3}0\xe8\xb8H\x0c\xc0\xb7\x93\x8eg\xb8\x00\x00\x00\x00\x00\x00\x00\x00cz\x97:\x9d\xc2\x91;\x1b,'b'\x00\x05N\xb1w\\\xe6\xcc\xfe\x03\x1c\x01\x01\xa5\xc5\x14\x00=['b'\x00\x05N\xb1w\\\xe7\x1c\xfe\x0c\x1d\x01\x01\x02\xd8\x8b\xa1w\xb1N\x05\x00\xc6b\x03\x00\xee\x0f'b'\x00\x05N\xb1w\\\xe7t\xfe\x16\x1e\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8c\xde'b'\x00\x05N\xb1w\\\xe7\xc4\xfe\x16\x1f\x01\x01\xc1\xbc\xaa6<\xe7\xcbN7\x01\r.:\xd8C\xb0=\x00\x00\x00\x00\xa5\x03\x97.'b'\x00\x05N\xb1w^i\xc0\xfe\x1a!\x01\x01\x1br\xc4:\r\x00\x00\x00\x00\x05\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\xd1O'b'\x00\x05N\xb1w^jH\xfe\x16"\x01\x01t\x03c\x03\x00\x08\x00=\x00$\xfc\x02\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x02\x8e,'b'\x00\x05N\xb1w^j\xc8\xfe\x16#\x01\x01\x81\x03c\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x84\x00k\x02\xc3\xad'b'\x00\x05N\xb1w^kH\xfe\x0e$\x01\x01\x1d\x03c\x03\x00{\xa4iD\xb8\x1eM=,\x10\x13\xa2'b'\x00\x05N\xb1w^k\xb0\xfe\x0e%\x01\x01\x89\x03c\x03\x008\xe6iD\xc2\xf5\xa6>\x08\x15\xa5\x13'b'\x00\x05N\xb1w^l0\xfe\x1f&\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfb\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ty\x9e'b"\x00\x05N\xb1w^l\x9c\xfe\x06'\x01\x01}\xcb\x14\x00\x00\x03\x00\xc0{"b'\x00\x05N\xb1w^m\x00\xfe\x04(\x01\x01\x98\x00\x00\xa0\x8a.t'b'\x00\x05N\xb1w^m\\\xfe\x02)\x01\x01*\x00\x00&\xd3'b'\x00\x05N\xb1w^m\xc8\xfe\x1e*\x01\x01\x188\x08:\r\x00\x00\x00\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xd8c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x04\t'b'\x00\x05N\xb1w^n8\xfe\x1a+\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00CZ'b'\x00\x05N\xb1w^n\xa0\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf'b'\x00\x05N\xb1w^n\xf8\xfe\x15-\x01\x01$+\xc7:\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xb4'b'\x00\x05N\xb1w^oP\xfe\x16.\x01\x01#\x03c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00F\x8b'b'\x00\x05N\xb1w^o\x9c\xfe\x03/\x01\x01Ms\x00\x00\x82\xba'b'\x00\x05N\xb1w^p0\xfe\x140\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xfe\xe5'b'\x00\x05N\xb1w^\x9b\x8b\xfe5\xd8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01e\xdf'b'\x00\x05N\xb1w^\xd9\x9b\xfe!\xd9\xff\x00L\xcd8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00`\xdd'b'\x00\x05N\xb1w_\xf5p\xfe\x1c1\x01\x01!\xd3b\x03\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04,C'b"\x00\x05N\xb1w_\xf5\xe8\xfe\x032\x01\x01Ms\x00\x00'["b'\x00\x05N\xb1w_\xf6\x88\xfe\x1c3\x01\x01\x1e\xa3c\x03\x00\x80V~\xbd\x009\x04\xbag\xb0T>/\x83H:\xc3\xc2\x1a\xba\xa9\xd8k\xb9Qo'b'\x00\x05N\xb1w_\xf6\xe0\xfe\x184\x01\x01\xb2\xdd\xb7\x81\xbd\xd2\x9a\x1f\xbb\x19tR>)\xac)D\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\x8b\xd6'b'\x00\x05N\xb1w_\xf74\xfe\x1c5\x01\x01\xa3Hq\xec\xb8\x94V\xa5\xb7a\x06c\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xca0\xa1:\xaa\xad\x9b;\xbb\xd3'b'\x00\x05N\xb1w_\xf7x\xfe\x036\x01\x01\xa5\xc8\x14\x00\x91@'b'\x00\x05N\xb1w_\xf7\xc4\xfe\x0c7\x01\x01\x02`\x87\xa5w\xb1N\x05\x00\xb7c\x03\x003\xe9'b'\x00\x05N\xb1w_\xf8\x18\xfe\x168\x01\x01\x88\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x84\x16'b'\x00\x05N\xb1w_\xf8`\xfe\x129\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x14\xe1'b'\x00\x05N\xb1w_\xf8\xb0\xfe\x16:\x01\x01\xc1Fo1<\xff\x1eO7\xa2w?;\x1cq\xac=\x00\x00\x00\x00\xa5\x03\xbb\xac'b'\x00\x05N\xb1w`\x9f\x13\xfe5\xda\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe0='b'\x00\x05N\xb1w`\xdc\xef\xfe!\xdb\xff\x00L\xf71\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00G\xb0'b'\x00\x05N\xb1wa\x8a\xb4\xfe\x1a;\x01\x01\x1b\\n>\r\x00\x00\x00\x00\x04\x002\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01\x8da'b'\x00\x05N\xb1wa\x8b,\xfe\x16<\x01\x01t\xf3c\x03\x00\x02\x009\x00,\xfc\xfe\xff\xfe\xff\x00\x00\x07\x01\xa0\xff2\x02\xf5\xd4'b'\x00\x05N\xb1wa\x8b\x88\xfe\x16=\x01\x01\x81\xf3c\x03\x00\x03\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x89\x00n\x02\xc4\x15'b'\x00\x05N\xb1wa\x8b\xd8\xfe\x0e>\x01\x01\x1d\xf3c\x03\x003\xa4iD33;=,\x10\x8b\x1e'b'\x00\x05N\xb1wa\x8c$\xfe\x0e?\x01\x01\x89\xf3c\x03\x00\\\xe7iD{\x14\xb0>\t\x15v\xaf'b'\x00\x05N\xb1wa\x8c|\xfe\x1f@\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T-['b"\x00\x05N\xb1wa\x8c\xcc\xfe\x06A\x01\x01}\xc5\x14\x00\x00\x03\x00\x19'"b'\x00\x05N\xb1wa\x8d\x18\xfe\x04B\x01\x01\x98\x00\x00\xa0\x8aD\x81'b'\x00\x05N\xb1wa\x8d\\\xfe\x02C\x01\x01*\x00\x00\xf4\x9e'b'\x00\x05N\xb1wa\x8d\xb0\xfe\x1eD\x01\x01\x18x\x15=\r\x00\x00\x00\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xe2c\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cL\xb3'b'\x00\x05N\xb1wa\x8e\x00\xfe\x1aE\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x007d'b'\x00\x05N\xb1wa\x8eH\xfe\x08F\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xee/'b'\x00\x05N\xb1wa\x8e\x98\xfe\x15G\x01\x01$\xc7q>\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x91'b'\x00\x05N\xb1wa\x8e\xe4\xfe\x16H\x01\x01#\xf4c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x995'b'\x00\x05N\xb1wa\x8f,\xfe\x03I\x01\x01Ms\x00\x002t'b'\x00\x05N\xb1wb\xb8\xfb\xfe5\xdc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01~\x12'b'\x00\x05N\xb1wb\xcf\x07\xfe!\xdd\xff\x00L\xf71\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc4V'b'\x00\x05N\xb1wc\nD\xfe\x14J\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xdf\xd7'b'\x00\x05N\xb1wc\n\xb8\xfe\x1cK\x01\x01!dd\x03\x00\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\x01&'b'\x00\x05N\xb1wc\x0b \xfe\x03L\x01\x01Ms\x00\x00S\xe3'b'\x00\x05N\xb1wd\x887\xfe5\xde\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfb\xf0'b'\x00\x05N\xb1wd\x9e{\xfe!\xdf\xff\x00L\xf71\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00E\x0b'b'\x00\x05N\xb1wd\xbb\xf8\xfe\x1cM\x01\x01\x1e\x93d\x03\x00\xe4\x96~\xbd0\xb1\xec\xb9\x16\xb6T>~\xe4V\xba\xff\xe7\xf2\xb9H\x07B:\xad\x13'b'\x00\x05N\xb1wd\xbc\x90\xfe\x18N\x01\x01\xb2D\xb9\x81\xbd\x14\x05\x1f\xbb\x92\x87R>)\xac)D\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xf7/'b'\x00\x05N\xb1wd\xbc\xf8\xfe\x1cO\x01\x01\xa3\xcd\xa7\xf0\xb8\x8d\xb3\x8a\xb7\x00\x7f^\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x11\xac:\xd0\xd9\x96;\xe6?'b'\x00\x05N\xb1wd\xbdL\xfe\x03P\x01\x01\xa5\xc5\x14\x00\xae\x05'b'\x00\x05N\xb1wd\xbd\xa4\xfe\x0cQ\x01\x01\x02\xe00\xa9w\xb1N\x05\x00\xa7d\x03\x00[n'b'\x00\x05N\xb1wd\xbe\x04\xfe\x16R\x01\x01\x88\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\xbf'b'\x00\x05N\xb1wd\xbe`\xfe\x16S\x01\x01\xc1\xb4\x064<\xa4\x9cK7\xa1L6;\xb4\x8c\xb7=\x00\x00\x00\x00\xa5\x03 \x8c'b'\x00\x05N\xb1wd\xbe\xc0\xfe\x1aT\x01\x01\x1b\x15\x18B\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\xb6\xd4'b'\x00\x05N\xb1wd\xbf(\xfe\x16U\x01\x01t\xe3d\x03\x00\x08\x00=\x00#\xfc\x03\x00\xff\xff\x00\x00\x07\x01\xa0\xff3\x02\x9c\xf5'b'\x00\x05N\xb1wd\xbf\x84\xfe\x16V\x01\x01\x81\xe3d\x03\x00\x01\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x87\x00o\x02\xe1\xa0'b'\x00\x05N\xb1wd\xbf\xd8\xfe\x0eW\x01\x01\x1d\xe3d\x03\x00\xd7\xa3iD\xf6($=,\x10/\xc2'b'\x00\x05N\xb1wd\xc0,\xfe\x0eX\x01\x01\x89\xe3d\x03\x008\xe6iD\xc2\xf5\xa6>\t\x15\x8d\xd8'b'\x00\x05N\xb1wd\xc0\x88\xfe\x1fY\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe1\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T~g'b'\x00\x05N\xb1wd\xc0\xe0\xfe\x06Z\x01\x01}\xc5\x14\x00\x00\x03\x00E\x14'b'\x00\x05N\xb1wd\xc10\xfe\x04[\x01\x01\x98\x00\x00\xa0\x8a\xe7L'b'\x00\x05N\xb1wd\xc1|\xfe\x02\\\x01\x01*\x00\x00\xc92'b'\x00\x05N\xb1wd\xc1\xd8\xfe\x1e]\x01\x01\x18\xa0&@\r\x00\x00\x00\x00\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xecc\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c@\x0f'b'\x00\x05N\xb1wd\xc20\xfe\x1a^\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x000\t'b'\x00\x05N\xb1wd\xc2\x80\xfe\x08_\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfb]'b'\x00\x05N\xb1wd\xc2\xd8\xfe\x15`\x01\x01$\x8d\x1bB\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4a'b'\x00\x05N\xb1wd\xc3,\xfe\x16a\x01\x01#\xe4d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa1f'b'\x00\x05N\xb1wf\x15\xfc\xfe\x03b\x01\x01Ms\x00\x00\xaee'b'\x00\x05N\xb1wf\x16\xb4\xfe\x14c\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xeb\xf6'b'\x00\x05N\xb1wfw\xb3\xfe5\xe0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa39'b'\x00\x05N\xb1wf\xa1\xc7\xfe!\xe1\xff\x00L36\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcck'b"\x00\x05N\xb1wf\xed+\xfe%\xe2\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00o;"b'\x00\x05N\xb1wg\x8fx\xfe\x1cd\x01\x01!,e\x03\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x9a\xd3'b'\x00\x05N\xb1wg\x90\x1c\xfe\x03e\x01\x01Ms\x00\x00\xa0\xf9'b'\x00\x05N\xb1wg\xa4\xbc\xfe\x1cf\x01\x01\x1e\x83e\x03\x00,y~\xbd\xa0\x9d\xdb\xb9\x99\x90T>\xe7\x87H9)|\x0f\xba\xf2\x84i8>\x03'b'\x00\x05N\xb1wg\xa54\xfe\x18g\x01\x01\xb2X\xa6\x81\xbdl?\x1f\xbb\x03\x8aR>\xe1\xaa)D\x15\xa6\x02\x18\xe2\xe7\xb8\xfdWY'b'\x00\x05N\xb1wg\xa5\x94\xfe\x1ch\x01\x01\xa3w\xd2\xf4\xb8"\x08`\xb7\x19\xf4Y\xb8\x00\x00\x00\x00\x00\x00\x00\x00}K\xab:\x1a\x90\xa9;\xeb\xbd'b'\x00\x05N\xb1wg\xa5\xe4\xfe\x03i\x01\x01\xa5\xc6\x14\x00\xe8a'b'\x00\x05N\xb1wg\xa68\xfe\x0cj\x01\x01\x02x\xd6\xacw\xb1N\x05\x00\x97e\x03\x00x`'b'\x00\x05N\xb1wg\xa6\x90\xfe\x16k\x01\x01\x88\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00X\xf3'b'\x00\x05N\xb1wg\xa6\xf0\xfe\x16l\x01\x01\xc1\xb2<5<\x0frJ7U\xee\x83;O\x82\xc5=\x00\x00\x00\x00\xa5\x03\x1et'b'\x00\x05N\xb1wg\xa7H\xfe\x03m\x01\x01/\xff\x00\x00\xca\xac'b'\x00\x05N\xb1wg\xcf\xd4\xfe\x12n\x01\x01\xfc\xb8e\x03\x004\x00\x01\x00ARMMASK\x00Wr>\x07'b'\x00\x05N\xb1wh`\x13\xfe5\xe3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01l.'b'\x00\x05N\xb1whb\xc7\xfe!\xe4\xff\x00L3\x1c\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x12\xa5'b'\x00\x05N\xb1wi\x18\x94\xfe\to\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03/Q'b'\x00\x05N\xb1wi\x19\x14\xfe\x1ap\x01\x01\x1b\xb0\xc3E\r\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\x96O'b'\x00\x05N\xb1wi\x19|\xfe\x16q\x01\x01t\xd3e\x03\x00\x08\x00:\x002\xfc\x03\x00\x00\x00\x01\x00\x06\x01\xa0\xff2\x02_\x8a'b'\x00\x05N\xb1wi\x19\xfc\xfe\x16r\x01\x01\x81\xd3e\x03\x00\x01\x00?\x00\x1e\xfc\xfe\xff\x01\x00\xfe\xff,\x03\x86\x00o\x02\x04\x03'b'\x00\x05N\xb1wi\x1a\x88\xfe\x0es\x01\x01\x1d\xd3e\x03\x00K\xa4iD\xaeGA=,\x10D\xa2'b'\x00\x05N\xb1wi\x1bT\xfe\x0et\x01\x01\x89\xd3e\x03\x00\x9d\xe6iD\xb8\x1e\xaa>\x0b\x15\xb2\xb8'b'\x00\x05N\xb1wi\x1cD\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0e\x01,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe6a'b'\x00\x05N\xb1wi\x1d\x18\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14'b'\x00\x05N\xb1wi\x1d\xc8\xfe\x04w\x01\x01\x98\x00\x00\xa0\x8a\xf1\xfb'b'\x00\x05N\xb1wi\x1eD\xfe\x02x\x01\x01*\x00\x00<>'b'\x00\x05N\xb1wi\x1e\xf8\xfe\x1ey\x01\x01\x18\xe03C\r\x00\x00\x00\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xecc\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xb8['b'\x00\x05N\xb1wi\x1fh\xfe\x1az\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcbb'b'\x00\x05N\xb1wi\x1f\xb4\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe'b'\x00\x05N\xb1wi \x08\xfe\x15|\x01\x01$\x9a\xc6E\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xc7'b'\x00\x05N\xb1wi \\\xfe\x16}\x01\x01#\xd4e\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00Cl'b'\x00\x05N\xb1wi \xa4\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b'\x00\x05N\xb1wi!8\xfe\t\xc2\n\x00m\x17\x00\x00\x00\x00\xd5\x00\x00\x00\x12\xbb'b'\x00\x05N\xb1wi\xa0\x0f\xfe\t\xe5\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xfc2'b'\x00\x05N\xb1wj.\xdf\xfe5\xe6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01=\x16'b'\x00\x05N\xb1wjE\x17\xfe!\xe7\xff\x00L3\x1c\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[R'b'\x00\x05N\xb1wj\x9f\xb8\xfe\x14\x7f\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x11\xda'b'\x00\x05N\xb1wj\xa0\xec\xfe\x1c\x80\x01\x01!\xf4e\x03\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x1e\xfe'b'\x00\x05N\xb1wj\xa2\x04\xfe\x1c\x81\x01\x01\x1esf\x03\x00\xe1d~\xbd\x10/\xd8\xb9&\xadT>|\xc5Q:\x08\x19;\xba\xa5\xfdB\xb9(\xe1'b'\x00\x05N\xb1wj\xa2\xa0\xfe\x18\x82\x01\x01\xb2k\x9b\x81\xbd\x8e\xf0\x1f\xbb*\xacR>G\xb1)D\x15\xa6\x02\x18\xe2\xe7\xb8\xfd_\xcd'b'\x00\x05N\xb1wj\xa3\x14\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc'b'\x00\x05N\xb1wl\x0b[\xfe5\xe8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x84\xab'b'\x00\x05N\xb1wl5K\xfe!\xe9\xff\x00L50\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00]p'b'\x00\x05N\xb1wlJ\xc4\xfe\x1c\x84\x01\x01\xa3\x85\xf1\xf8\xb8E~*\xb7zvU\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x87\xfd\xa2:%\x16\x86;\x98\xcc'b'\x00\x05N\xb1wlK@\xfe\x03\x85\x01\x01\xa5\xc6\x14\x00iB'b'\x00\x05N\xb1wlK\xa4\xfe\x0c\x86\x01\x01\x02\xe0\x83\xb0w\xb1N\x05\x00\x88f\x03\x008\xce'b'\x00\x05N\xb1wlL\x08\xfe\x16\x87\x01\x01\x88\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00]|'b'\x00\x05N\xb1wlLd\xfe\x16\x88\x01\x01\xc1l\x13;<\xad\x02I7\xde\x91 <}X\xab=\x00\x00\x00\x00\xa5\x03\xa52'b'\x00\x05N\xb1wlL\xc4\xfe\x1a\x89\x01\x01\x1bYnI\r\x00\x00\x00\x00\x05\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01\xedJ'b'\x00\x05N\xb1wlM\x1c\xfe\x16\x8a\x01\x01t\xc4f\x03\x00\t\x00:\x00!\xfc\xff\xff\x00\x00\x03\x00\x07\x01\xa0\xff3\x02\x07\xbd'b'\x00\x05N\xb1wlMx\xfe\x16\x8b\x01\x01\x81\xc4f\x03\x00\x03\x00A\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff$\x03\x88\x00i\x02\xb7A'b'\x00\x05N\xb1wlM\xc8\xfe\x0e\x8c\x01\x01\x1d\xc4f\x03\x00\xd8\xa4iD\xe1zd=,\x10\x19\xda'b'\x00\x05N\xb1wlN\x1c\xfe\x0e\x8d\x01\x01\x89\xc4f\x03\x00\x94\xe6iD\n\xd7\xa9>\x0b\x15\xa4u'b'\x00\x05N\xb1wlN|\xfe\x1f\x8e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf4\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa4J'b'\x00\x05N\xb1wlN\xd4\xfe\x06\x8f\x01\x01}\xc8\x14\x00\x00\x03\x00\x95\x1f'b'\x00\x05N\xb1wlO \xfe\x04\x90\x01\x01\x98\x00\x00\xa0\x8a\x9e\xc7'b'\x00\x05N\xb1wlOd\xfe\x02\x91\x01\x01*\x00\x00\x9d]'b'\x00\x05N\xb1wlO\xbc\xfe\x1e\x92\x01\x01\x18`NI\r\x00\x00\x00\x00\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x00d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cg\xf3'b'\x00\x05N\xb1wlP\x10\xfe\x1a\x93\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00`\x83'b'\x00\x05N\xb1wlPX\xfe\x08\x94\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x97\xdb'b'\x00\x05N\xb1wlP\xa8\xfe\x15\x95\x01\x01$\xc2pI\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x18'b'\x00\x05N\xb1wlP\xfc\xfe\x16\x96\x01\x01#\xc4f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00A{'b'\x00\x05N\xb1wm\xb8d\xfe\x03\x97\x01\x01Ms\x00\x00T\xb1'b'\x00\x05N\xb1wm\xb9 \xfe\x14\x98\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00cs'b'\x00\x05N\xb1wm\xb9\x94\xfe\x1c\x99\x01\x01!\xbcf\x03\x00\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04`\x8b'b'\x00\x05N\xb1wm\xfa?\xfe5\xea\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x01I'b'\x00\x05N\xb1wn$;\xfe!\xeb\xff\x00L50\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdc-'b'\x00\x05N\xb1wo4\xe4\xfe\x1c\x9a\x01\x01\x1eeg\x03\x00~=~\xbd@\x1dH\xb9\xea\xa4T>\xa8f\r:2\xf9\xa0\xba>\xf0t\xba\xe4\xb9'b'\x00\x05N\xb1wo5l\xfe\x18\x9b\x01\x01\xb2N\x84\x81\xbd\x88B\x1b\xbb\r\xbfR>{\xa4)D\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\xec\x9c'b'\x00\x05N\xb1wo5\xc4\xfe\x03\x9c\x01\x01Ms\x00\x008\x16'b'\x00\x05N\xb1wo6h\xfe\x1c\x9d\x01\x01\xa3\xf6\n\xfd\xb8R!\xe9\xb6\x88\x0eQ\xb8\x00\x00\x00\x00\x00\x00\x00\x00*\xaa\x9a:4\xad|;}\xca'b'\x00\x05N\xb1wo6\xb8\xfe\x03\x9e\x01\x01\xa5\xc8\x14\x00?\x10'b'\x00\x05N\xb1wo7\x14\xfe\x0c\x9f\x01\x01\x02`-\xb4w\xb1N\x05\x00yg\x03\x00Q\xce'b'\x00\x05N\xb1wo7x\xfe\x16\xa0\x01\x01\x88\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00T@'b'\x00\x05N\xb1wo7\xd4\xfe\x16\xa1\x01\x01\xc1\x87X3<\xf2\xafH7\xcb}\r\x0c\x15Sx'b'\x00\x05N\xb1wp\xc0\x00\xfe\x1f\xa8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01,?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd85'b'\x00\x05N\xb1wp\xc0h\xfe\x06\xa9\x01\x01}\xc8\x14\x00\x00\x03\x00h\x08'b'\x00\x05N\xb1wp\xc0\xb8\xfe\x04\xaa\x01\x01\x98\x00\x00\xa0\x8a\x03+'b'\x00\x05N\xb1wp\xc1\x00\xfe\x02\xab\x01\x01*\x00\x00\x80b'b'\x00\x05N\xb1wp\xc1\\\xfe\x1e\xac\x01\x01\x18\x88_L\r\x00\x00\x00\x00\x18\xa6\x02\x18\xe2\xe7\xb8\xfd\nd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x8fU'b'\x00\x05N\xb1wp\xc1\xb4\xfe\x1a\xad\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa8@'b'\x00\x05N\xb1wp\xc2\x00\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12'b'\x00\x05N\xb1wp\xc2P\xfe\x15\xaf\x01\x01$\xb5\x1fM\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c6'b'\x00\x05N\xb1wp\xc2\xa0\xfe\x16\xb0\x01\x01#\xb6g\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfe1'b'\x00\x05N\xb1wp\xc2\xe8\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a'b'\x00\x05N\xb1wp\xc3x\xfe\x14\xb2\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00-\xd7'b'\x00\x05N\xb1wq\xc6\x9b\xfe5\xee\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1a\x84'b'\x00\x05N\xb1wq\xf0\xab\xfe!\xef\xff\x00L\xbc+\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1b\x08'b'\x00\x05N\xb1wrF\xbc\xfe\x1c\xb3\x01\x01!\x85g\x03\x00\x18\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04"s'b'\x00\x05N\xb1wrGh\xfe\x1c\xb4\x01\x01\x1eUh\x03\x00\xea\xd8~\xbd\xe0\xb2)\xb9:\xbcT>\x89\x02/:e\xe5\xa9\xb8\x8a\xae\x8b9\xde\x01'b'\x00\x05N\xb1wrG\xfc\xfe\x18\xb5\x01\x01\xb2)\xaf\x81\xbd\xcfS\x19\xbb\xbe\xdeR>\xc2\xa5)D\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x8fS'b'\x00\x05N\xb1wrHt\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86'b'\x00\x05N\xb1wrI4\xfe\x1c\xb7\x01\x01\xa3\xf8\x8d\x00\xb9>by\xb6\x8c\xb9L\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x91q\x9f:\xa8\xdc\x82;\xe0i'b'\x00\x05N\xb1wrI\xa0\xfe\x03\xb8\x01\x01\xa5\xc5\x14\x00\xf10'b'\x00\x05N\xb1wrJ\x18\xfe\x0c\xb9\x01\x01\x02\xe0\xd6\xb7w\xb1N\x05\x00ih\x03\x00\xd3\xcb'b'\x00\x05N\xb1wrJ\x94\xfe\x16\xba\x01\x01\x88\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003\xa1'b'\x00\x05N\xb1wrK\x10\xfe\x16\xbb\x01\x01\xc1lg8<\x19aG7\x92\xce\xea;\xc4/\xc3=\x00\x00\x00\x00\xa5\x03\xca\x14'b'\x00\x05N\xb1ws\xb2W\xfe5\xf0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfc\x15'b'\x00\x05N\xb1ws\xcb\x97\xfe!\xf1\xff\x00L\x1b<\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xda\xf1'b'\x00\x05N\xb1ws\xf3\xc8\xfe\x1a\xbc\x01\x01\x1b\x96\xc6P\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffm\x01@('b'\x00\x05N\xb1ws\xf4\\\xfe\x16\xbd\x01\x01t\xa5h\x03\x00\x08\x00>\x005\xfc\x02\x00\xff\xff\x03\x00\x07\x01\xa0\xff2\x02\xfb\x0b'b'\x00\x05N\xb1ws\xf4\xc8\xfe\x16\xbe\x01\x01\x81\xa5h\x03\x00\x02\x00?\x00\x1e\xfc\xfe\xff\x00\x00\xfc\xff1\x03\x8a\x00o\x02\xe5\\'b'\x00\x05N\xb1ws\xf5$\xfe\x0e\xbf\x01\x01\x1d\xa5h\x03\x00\xd7\xa3iD\xf6($=,\x10\xfa\xbf'b'\x00\x05N\xb1ws\xf5|\xfe\x0e\xc0\x01\x01\x89\xa5h\x03\x00O\xe7iD\x14\xae\xaf>\x0c\x15\xff\xa2'b'\x00\x05N\xb1ws\xf5\xe0\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TvK'b'\x00\x05N\xb1ws\xf6D\xfe\x06\xc2\x01\x01}\xc5\x14\x00\x00\x03\x00\xb1K'b'\x00\x05N\xb1ws\xf6\xb0\xfe\x04\xc3\x01\x01\x98\x00\x00\xa0\x8an\x08'b'\x00\x05N\xb1ws\xf7\x00\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf'b'\x00\x05N\xb1ws\xf7`\xfe\x1e\xc5\x01\x01\x18\xc8lO\r\x00\x00\x00\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x14d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xdf\x87'b'\x00\x05N\xb1ws\xf7\xbc\xfe\x1a\xc6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0b\xb7'b'\x00\x05N\xb1ws\xf8\x0c\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec'b'\x00\x05N\xb1ws\xf8d\xfe\x15\xc8\x01\x01$0\xc9P\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00l\x0b'b'\x00\x05N\xb1ws\xf8\xbc\xfe\x16\xc9\x01\x01#\xa6h\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfa?'b'\x00\x05N\xb1wuWH\xfe\x03\xca\x01\x01Ms\x00\x00\x005'b'\x00\x05N\xb1wuX\x0c\xfe\x14\xcb\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x8f.'b'\x00\x05N\xb1wuX\x80\xfe\x1c\xcc\x01\x01!\x16i\x03\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04E%'b'\x00\x05N\xb1wu\x90\xdb\xfe5\xf2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01y\xf7'b'\x00\x05N\xb1wu\xce\xbf\xfe!\xf3\xff\x00L\x1b<\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\xac'b'\x00\x05N\xb1wv\xf3\x04\xfe\x1c\xcd\x01\x01\x1eFi\x03\x00\xdaw~\xbd \xfa\x07\xb9V\xd1T>\x91\xc3\xb0:q\x1d\xb1\xbav:\x11\xba\x82t'b'\x00\x05N\xb1wv\xf3\x98\xfe\x18\xce\x01\x01\xb2\xfd\x86\x81\xbd/\x93\x1a\xbb\xc0\xfdR>\x1e\xa5)D\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\xcd6'b'\x00\x05N\xb1wv\xf4\x18\xfe\x1c\xcf\x01\x01\xa3\x01\x96\x02\xb9\x11\xf9\x02\xb55zH\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x14\xa0\x95:!\xa5i;\xbd/'b'\x00\x05N\xb1wv\xf4x\xfe\x03\xd0\x01\x01\xa5\xc5\x14\x00L\xce'b'\x00\x05N\xb1wv\xf4\xc8\xfe\x0c\xd1\x01\x01\x02`\x80\xbbw\xb1N\x05\x00Zi\x03\x00c\xcd'b'\x00\x05N\xb1wv\xf5 \xfe\x16\xd2\x01\x01\x88\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaf\t'b"\x00\x05N\xb1wv\xf5p\xfe\x16\xd3\x01\x01\xc1\x8eW;<\x0emF7>\xd8\xf7;W\x1f\xad=\x00\x00\x00\x00\xa5\x03\xf9'"b'\x00\x05N\xb1wv\xf5\xb8\xfe\x03\xd4\x01\x01Ms\x00\x00u^'b'\x00\x05N\xb1wv\xf6x\xfe\x1a\xd5\x01\x01\x1b9rT\r\x00\x00\x00\x00\x04\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01v*'b'\x00\x05N\xb1wv\xf6\xd0\xfe\x16\xd6\x01\x01t\x96i\x03\x00\x06\x00:\x00.\xfc\x00\x00\xff\xff\xff\xff\x07\x01\xa0\xff3\x02Ui'b'\x00\x05N\xb1wv\xf7$\xfe\x16\xd7\x01\x01\x81\x96i\x03\x00\x03\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x86\x00l\x02\x1a\xf7'b'\x00\x05N\xb1wv\xf7p\xfe\x0e\xd8\x01\x01\x1d\x96i\x03\x00\x90\xa4iD\\\x8fR=-\x10\xc3['b'\x00\x05N\xb1wv\xf7\xbc\xfe\x0e\xd9\x01\x01\x89\x96i\x03\x007\xe6iD\x85\xeb\xa6>\r\x15\xb2\xc1'b'\x00\x05N\xb1wv\xf8\x14\xfe\x1f\xda\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa9\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T*\xb5'b'\x00\x05N\xb1wv\xf8h\xfe\x06\xdb\x01\x01}\xc5\x14\x00\x00\x03\x00\xcf\xd3'b'\x00\x05N\xb1wv\xf8\xb4\xfe\x04\xdc\x01\x01\x98\x00\x00\xa0\x8a\xd2a'b'\x00\x05N\xb1wv\xf8\xf8\xfe\x02\xdd\x01\x01*\x00\x00\x01+'b'\x00\x05N\xb1wv\xf9L\xfe\x1e\xde\x01\x01\x18\xf0}R\r\x00\x00\x00\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x1ed\n\x00F\x00\xff\xff\x00\x00|J\x03\x0cZ\x19'b'\x00\x05N\xb1wv\xf9\xa4\xfe\x1a\xdf\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00uX'b'\x00\x05N\xb1wv\xf9\xe8\xfe\x08\xe0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x02A'b'\x00\x05N\xb1wv\xfa8\xfe\x15\xe1\x01\x01$\xebtT\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00w]'b'\x00\x05N\xb1wv\xfa\x88\xfe\x16\xe2\x01\x01#\x96i\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8e\x97'b'\x00\x05N\xb1wv\xfa\xd4\xfe\x12\xe3\x01\x01\xfc\xa2i\x03\x004\x00\x01\x00ARMMASK\x00Wr=\xeb'b'\x00\x05N\xb1wv\xfb(\xfe\t\xe4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xac\xbb'b"\x00\x05N\xb1wwe7\xfe%\xf4\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xde\x96"b'\x00\x05N\xb1ww\x94_\xfe5\xf5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xad-'b'\x00\x05N\xb1ww\xd2c\xfe!\xf6\xff\x00L\x19K\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00_$'b'\x00\x05N\xb1wxdX\xfe\x03\xe5\x01\x01/\xff\x00\x00\x94J'b"\x00\x05N\xb1wxeD\xfe\x14\xe6\x01\x01J\n\xd7\xa3<\n\xd7\xa3fd\x95\xb9\x15\x846\xb84\xe5\xe08u\x06'b'\x00\x05N\xb1wy\xec\x9c\xfe\x18\xea\x01\x01\xb2j`\x81\xbd[\xfb\x17\xbb\xbe\x15S>3\xa3)D\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\xe0v'b'\x00\x05N\xb1wy\xed\x18\xfe\x1c\xeb\x01\x01\xa3g\x9c\x04\xb9\xa6\xf166\xa0bD\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xa5\x97:\xf2IR;\xc8\x15'b'\x00\x05N\xb1wy\xed|\xfe\x03\xec\x01\x01\xa5\xc5\x14\x00\xa6\x18'b'\x00\x05N\xb1wy\xed\xe4\xfe\x0c\xed\x01\x01\x02\xe0)\xbfw\xb1N\x05\x00Kj\x03\x00\xf3\x1c'b'\x00\x05N\xb1wy\xeeT\xfe\x16\xee\x01\x01\x88\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc9M'b'\x00\x05N\xb1wy\xee\xc0\xfe\x16\xef\x01\x01\xc1\xf2\xda><\xd4\xfbE7pz\x11<\x11\xf9\xa8=\x00\x00\x00\x00\xa5\x03}]'b'\x00\x05N\xb1wy\xef\x1c\xfe\x03\xf0\x01\x01Ms\x00\x00[\xfe'b'\x00\x05N\xb1w{`t\xfe\x1a\xf1\x01\x01\x1b\xda!X\r\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffm\x01\xfcm'b'\x00\x05N\xb1w{`\xf4\xfe\x16\xf2\x01\x01t\x87j\x03\x00\x0f\x000\x00$\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff4\x02\xda\xed'b'\x00\x05N\xb1w{a\\\xfe\x16\xf3\x01\x01\x81\x87j\x03\x00\x02\x00B\x00\x1e\xfc\xfd\xff\x00\x00\xfe\xff%\x03\x89\x00j\x02\x8c\x8e'b'\x00\x05N\xb1w{a\xb8\xfe\x0e\xf4\x01\x01\x1d\x87j\x03\x00\xd5\xa3iD\n\xd7#=,\x10O 'b'\x00\x05N\xb1w{b\x10\xfe\x0e\xf5\x01\x01\x89\x87j\x03\x00\xae\xe7iD\xd7\xa3\xb2>\x0e\x15\xd1\x81'b'\x00\x05N\xb1w{bp\xfe\x1f\xf6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x8c\x00-?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x1d\x81'b'\x00\x05N\xb1w{b\xc8\xfe\x06\xf7\x01\x01}\xc8\x14\x00\x00\x03\x00\xf5\xfd'b'\x00\x05N\xb1w{c\x18\xfe\x04\xf8\x01\x01\x98\x00\x00\xa0\x8a\x0e\xa9'b"\x00\x05N\xb1w{cd\xfe\x02\xf9\x01\x01*\x00\x00\xf4'"b'\x00\x05N\xb1w{c\xbc\xfe\x1e\xfa\x01\x01\x18\x18\x8fU\r\x00\x00\x00\x00\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\x1ed\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\\\x18'b'\x00\x05N\xb1w{d\x14\xfe\x1a\xfb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8e3'b'\x00\x05N\xb1w{d\\\xfe\x08\xfc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0e 'b'\x00\x05N\xb1w{d\xac\xfe\x15\xfd\x01\x01$\x89$X\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00(8'b'\x00\x05N\xb1w{d\xfc\xfe\x16\xfe\x01\x01#\x88j\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o5'b'\x00\x05N\xb1w{e\xe7\xfe5\xfa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01^e'b'\x00\x05N\xb1w{\x90O\xfe!\xfb\xff\x00L\x94E\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaa\xf5'b'\x00\x05N\xb1w}\x0b\x90\xfe\x14\xff\x01\x01J\n\xd7#<\n\xd7#\x9d\xe0g:\x1f*\xb9\xba. \xbe\xb7Xw"b'\x00\x05N\xb1w}\r\x94\xfe\x18\x03\x01\x01\xb2\tm\x81\xbd1\xfd\x18\xbb\xe4AS>\xf6\xa8)D\x1b\xa6\x02\x18\xe2\xe7\xb8\xfd`\xc8'b'\x00\x05N\xb1w}j\x13\xfe5\xfc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc0J'b'\x00\x05N\xb1w}\x94_\xfe!\xfd\xff\x00LSd\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8d\xd0'b'\x00\x05N\xb1w~l\xf0\xfe\x1c\x04\x01\x01\xa3\xa6\xa2\x06\xb9\xffY\xc66\xf2[@\xb8\x00\x00\x00\x00\x00\x00\x00\x00C\x0e\x9b:^\xf0w;4\x8e'b'\x00\x05N\xb1w~mT\xfe\x03\x05\x01\x01\xa5\xc5\x14\x00F\xac'b'\x00\x05N\xb1w~m\xa8\xfe\x0c\x06\x01\x01\x02H\xd7\xc2w\xb1N\x05\x00\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff&\x03\x8a\x00k\x02\x17H'b'\x00\x05N\xb1w~\x84D\xfe\x0e\r\x01\x01\x1dxk\x03\x00w\xa2iD\xebQ\x98<-\x10t\x11'b'\x00\x05N\xb1w~\x84\x9c\xfe\x0e\x0e\x01\x01\x89xk\x03\x00w\xe7iD\x85\xeb\xb0>\x0f\x15.{'b'\x00\x05N\xb1w~\x85\x00\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x00-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf3\xf9'b'\x00\x05N\xb1w~\x85\\\xfe\x06\x10\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xce'b'\x00\x05N\xb1w~\x85\xbc\xfe\x04\x11\x01\x01\x98\x00\x00\xa0\x8a\xb4N'b'\x00\x05N\xb1w~\x86\x0c\xfe\x02\x12\x01\x01*\x00\x00\xees'b'\x00\x05N\xb1w~\x86l\xfe\x1e\x13\x01\x01\x18\x80\xad[\r\x00\x00\x00\x00\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cw\x99'b'\x00\x05N\xb1w~\x86\xcc\xfe\x1a\x14\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbf\\'b'\x00\x05N\xb1w~\x87\x1c\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18'b'\x00\x05N\xb1w~\x87t\xfe\x15\x16\x01\x01$\xf6\xcf[\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xf3'b'\x00\x05N\xb1w~\x87\xd0\xfe\x16\x17\x01\x01#xk\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x82\xd4'b"\x00\x05N\xb1w\x7fR'\xfe5\xfe\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01E\xa8"b'\x00\x05N\xb1w\x7fhs\xfe!\xff\xff\x00LSd\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0c\x8d'b'\x00\x05N\xb1w\x80\x05x\xfe\x14\x18\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00M\x85'b'\x00\x05N\xb1w\x80\x05\xe4\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ'b'\x00\x05N\xb1w\x80\x06\x84\xfe\x1c\x1a\x01\x01!pk\x03\x00\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04\x83m'b'\x00\x05N\xb1w\x81.G\xfe5\x00\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x88\xba'b'\x00\x05N\xb1w\x81X\x93\xfe!\x01\xff\x00LSd\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00I('b'\x00\x05N\xb1w\x81\xab\xbc\xfe\x1c\x1b\x01\x01\x1e\x18l\x03\x00%r~\xbd\x00\x00\xbd\xb3W\x16U>s\x95\xcb\xb9>\xa1\xd8\xb9V\x9e\xc5\xb9\x06\xbb'b'\x00\x05N\xb1w\x81\xac\xdc\xfe\x18\x1c\x01\x01\xb2Wm\x81\xbd\xd7\xf8\x18\xbbs\x85S>\xc2\xa5)D\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd]\x93'b'\x00\x05N\xb1w\x81\xadl\xfe\x1c\x1d\x01\x01\xa3k\xa7\x08\xb9\xa5\xa1\x187\xd0R<\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x81\xd2\xab:\xc7\xb0\x85;+\xb9'b'\x00\x05N\xb1w\x81\xad\xb8\xfe\x03\x1e\x01\x01\xa5\xc5\x14\x00RP'b'\x00\x05N\xb1w\x81\xae\x04\xfe\x0c\x1f\x01\x01\x02\xf8x\xc6w\xb1N\x05\x00,l\x03\x00\x13\x9c'b'\x00\x05N\xb1w\x81\xaeT\xfe\x16 \x01\x01\x88\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00ve'b'\x00\x05N\xb1w\x81\xae\xa0\xfe\x12!\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x00S'b'\x00\x05N\xb1w\x81\xae\xf0\xfe\x16"\x01\x01\xc15\xe51<\xcckD7\xa3=\xd0;\xf11\xb8=\x00\x00\x00\x00\xa5\x03\x89k'b'\x00\x05N\xb1w\x81\xafd\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b'\x00\x05N\xb1w\x83\x1ew\xfe5\x02\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\rX'b'\x00\x05N\xb1w\x833`\xfe\x1a%\x01\x01\x1b%z_\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x01\x00\x0b\x01\xb0\xffl\x01xQ'b'\x00\x05N\xb1w\x833\xd4\xfe\x16&\x01\x01til\x03\x00\x04\x00=\x00-\xfc\x01\x00\xfe\xff\x02\x00\x07\x01\xa0\xff2\x02\x83s'b"\x00\x05N\xb1w\x8340\xfe\x16'\x01\x01\x81il\x03\x00\x02\x00A\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff-\x03\x88\x00q\x02\xb9\xac"b'\x00\x05N\xb1w\x834\x80\xfe\x0e(\x01\x01\x1dil\x03\x00\x05\xa2iDR\xb8><*\x10\xdf\xa3'b'\x00\x05N\xb1w\x834\xcc\xfe\x0e)\x01\x01\x89il\x03\x00e\xe5iD)\\\xa0>\x0c\x15\x13\xaa'b'\x00\x05N\xb1w\x8354\xfe**\x01\x01\x96s\xe7f\xbc\rm\x01\x00*\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xbb\xce'b'\x00\x05N\xb1w\x835\xb0\xfe\x1f+\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x10X'b'\x00\x05N\xb1w\x836 \xfe\x06,\x01\x01}\xc5\x14\x00\x00\x03\x00\xf8\xbf'b'\x00\x05N\xb1w\x836\x88\xfe\x04-\x01\x01\x98\x00\x00\xa0\x8a6\x06'b'\x00\x05N\xb1w\x836\xe4\xfe\x02.\x01\x01*\x00\x00>\x14'b'\x00\x05N\xb1w\x837\\\xfe\x1e/\x01\x01\x18\xa8\xbe^\r\x00\x00\x00\x00\x1c\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c|\x87'b'\x00\x05N\xb1w\x837\xd0\xfe\x1a0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00D7'b'\x00\x05N\xb1w\x8384\xfe\x081\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8c\xbb'b'\x00\x05N\xb1w\x838\xa4\xfe\x152\x01\x01$\x0e~_\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x00'b'\x00\x05N\xb1w\x839,\xfe\x163\x01\x01#jl\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00"\r'b'\x00\x05N\xb1w\x839\x80\xfe\x144\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00p=\x8a\xbe\n\xd7#<\x0b\x00\x00\x00\xe5\x95'b'\x00\x05N\xb1w\x83P\xef\xfe!\x03\xff\x00L\x13|\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x92\x96'b'\x00\x05N\xb1w\x84\xa0\xd0\xfe\x035\x01\x01Ms\x00\x00)\xc7'b'\x00\x05N\xb1w\x84\xa1\x98\xfe\x1c6\x01\x01!9l\x03\x00\x1c\xa6\x02\x18\xe3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04\x94\xe3'b'\x00\x05N\xb1w\x84\xa2\x14\xfe\x1c7\x01\x01\x1e\tm\x03\x00h\x91~\xbd\x00\xa4\xe4\xb7\xa77U>\x7f\xb1q:\xf6e\x9c\xb8dbW:\xac='b'\x00\x05N\xb1w\x84\xa2\x98\xfe\x188\x01\x01\xb2Am\x81\xbds\x87\x19\xbbi\xb9S>\xd7\xa3)D\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd\x9e\xcc'b'\x00\x05N\xb1w\x84\xa3\x14\xfe\x1c9\x01\x01\xa3$\xa8\n\xb9\xfe\xd4M7\xabX8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xfa\xa6:U`z;\xfeY'b'\x00\x05N\xb1w\x84\xa3x\xfe\x03:\x01\x01\xa5\xc8\x14\x00\xf3{'b'\x00\x05N\xb1w\x84\xa3\xe4\xfe\x0c;\x01\x01\x02x"\xcaw\xb1N\x05\x00\x1dm\x03\x00q`'b'\x00\x05N\xb1w\x84\xa4\\\xfe\x16<\x01\x01\x88\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00u\x86'b'\x00\x05N\xb1w\x84\xa4\xd0\xfe\x16=\x01\x01\xc1B\xc8<\x01\x01\x1bg'c\r\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffl\x01\x8cc"b'\x00\x05N\xb1w\x86U\x1c\xfe\x16?\x01\x01tYm\x03\x00\x0b\x005\x00/\xfc\x01\x00\x00\x00\x00\x00\x07\x01\xa1\xff3\x02,O'b'\x00\x05N\xb1w\x86U\x98\xfe\x16@\x01\x01\x81Ym\x03\x00\x02\x00?\x00 \xfc\xfd\xff\x00\x00\xfc\xff+\x03\x85\x00m\x02\xe7a'b'\x00\x05N\xb1w\x86U\xf8\xfe\x0eA\x01\x01\x1dYm\x03\x003\xa3iDff\xf6<,\x10&S'b'\x00\x05N\xb1w\x86VT\xfe\x0eB\x01\x01\x89Ym\x03\x00\t\xe6iD\xe1z\xa5>\x0e\x15\xbd\x14'b'\x00\x05N\xb1w\x86V\xb8\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tm\x99'b'\x00\x05N\xb1w\x86W\x14\xfe\x06D\x01\x01}\xc6\x14\x00\x00\x03\x00\xb3\x84'b'\x00\x05N\xb1w\x86Wh\xfe\x04E\x01\x01\x98\x00\x00\xa0\x8a\xa6h'b'\x00\x05N\xb1w\x86W\xb4\xfe\x02F\x01\x01*\x00\x00Wn'b'\x00\x05N\xb1w\x86X\x10\xfe\x1eG\x01\x01\x18\xe8\xcba\r\x00\x00\x00\x00\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cJ<'b'\x00\x05N\xb1w\x86Xh\xfe\x1aH\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00&\xb4'b'\x00\x05N\xb1w\x86X\xb4\xfe\x08I\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x1a'b'\x00\x05N\xb1w\x86Y\x04\xfe\x15J\x01\x01$0*c\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x80'b'\x00\x05N\xb1w\x86YX\xfe\x16K\x01\x01#Zm\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x0fl'b'\x00\x05N\xb1w\x86Y\xa0\xfe\x03L\x01\x01Ms\x00\x00S\xe3'b'\x00\x05N\xb1w\x86Z(\xfe\x12M\x01\x01\xfc\x8em\x03\x004\x00\x01\x00ARMMASK\x00Wr\x84-'b'\x00\x05N\xb1w\x86pW\xfe\x06\x06\xff\x00B\x04\x00\x01\x00\x00\x01\xf4\x8c'b'\x00\x05N\xb1w\x87\x19\xd7\xfe5\x07\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\\`'b'\x00\x05N\xb1w\x87X/\xfe!\x08\xff\x00L0\x93\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00(\xb2'b"\x00\x05N\xb1w\x87\x9aC\xfe%\t\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xb17"b'\x00\x05N\xb1w\x87\xba\x0c\xfe\tN\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03z\x8a'b'\x00\x05N\xb1w\x87\xba\x84\xfe\x14O\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\x17\x9e\xa6:\x04)\xc4\xb9\x99\xe7*\xb9\xa9\x9a'b'\x00\x05N\xb1w\x89L\xcc\xfe\x18T\x01\x01\xb2\nU\x81\xbd\x15,\x18\xbb\x13\xd7S>\x00\xb0)D\x1e\xa6\x02\x18\xe4\xe7\xb8\xfdF]'b"\x00\x05N\xb1w\x89MP\xfe\x1cU\x01\x01\xa3\x13\xa8\x0c\xb9,Q\x817\xf8f4\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf8'\xa3:\xd4#\x83;\x1e\xaa"b'\x00\x05N\xb1w\x89M\xbc\xfe\x03V\x01\x01\xa5\xc5\x14\x00\x1f\x18'b'\x00\x05N\xb1w\x89N0\xfe\x0cW\x01\x01\x02\xe0\xcf\xcdw\xb1N\x05\x00\x0en\x03\x00\x11W'b'\x00\x05N\xb1w\x89N\xac\xfe\x16X\x01\x01\x88\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00<\x9f'b'\x00\x05N\xb1w\x89O \xfe\x16Y\x01\x01\xc1kKH<\xa0\xc6D7t\xd6\xb3:\x12\xc8\xab=\x00\x00\x00\x00\xa5\x03\x02('b'\x00\x05N\xb1w\x89O\xa0\xfe\x1aZ\x01\x01\x1b\x10\xd1f\r\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01W\xaf'b'\x00\x05N\xb1w\x89P\x18\xfe\x16[\x01\x01tJn\x03\x00\x0f\x00;\x00+\xfc\x02\x00\x02\x00\xff\xff\x07\x01\xa0\xff4\x02.`'b'\x00\x05N\xb1w\x89P\x94\xfe\x16\\\x01\x01\x81Jn\x03\x00\x02\x00>\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff%\x03\x89\x00o\x02\x16D'b'\x00\x05N\xb1w\x89Q\x00\xfe\x0e]\x01\x01\x1dJn\x03\x00i\xa3iD\xd7\xa3\x08=-\x10F\xfe'b'\x00\x05N\xb1w\x89QX\xfe\x0e^\x01\x01\x89Jn\x03\x00/\xe6iD\x14\xae\xa6>\x10\x158\xdb'b'\x00\x05N\xb1w\x89Q\xc0\xfe\x1f_\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd9\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xef\xf2'b'\x00\x05N\xb1w\x89R \xfe\x06`\x01\x01}\xc5\x14\x00\x00\x03\x00\x02\x90'b'\x00\x05N\xb1w\x89Rx\xfe\x04a\x01\x01\x98\x00\x00\xa0\x8az\xa0'b'\x00\x05N\xb1w\x89R\xc8\xfe\x02b\x01\x01*\x00\x00\xa2b'b'\x00\x05N\xb1w\x89S4\xfe\x1ec\x01\x01\x18\x10\xddd\r\x00\x00\x00\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1b\xc6'b'\x00\x05N\xb1w\x89S\xf0\xfe\x08e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x94'b'\x00\x05N\xb1w\x89TL\xfe\x15f\x01\x01$\xe0\xd3f\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x16'b'\x00\x05N\xb1w\x89T\xa8\xfe\x16g\x01\x01#Jn\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18\x99'b'\x00\x05N\xb1w\x8a\xc7\x1c\xfe\x03h\x01\x01Ms\x00\x00}C'b'\x00\x05N\xb1w\x8a\xc7\xcc\xfe\x14i\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xab\xef'b'\x00\x05N\xb1w\x8a\xf4W\xfe5\r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfe\x10'b'\x00\x05N\xb1w\x8a\xf8\x9f\xfe!\x0e\xff\x00L\xdd\x8b\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb0\xf8'b'\x00\x05N\xb1w\x8c`\x9c\xfe\x1cj\x01\x01!\x93n\x03\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa7\x04\xe2\xb3'b'\x00\x05N\xb1w\x8ca\xa4\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9'b'\x00\x05N\xb1w\x8c}\xac\xfe\x1cl\x01\x01\x1e\xebn\x03\x00\x94\x08\x7f\xbd\x00\xab\x0b8q\xf2T>\xec\x19\x01:\x80\xe4_\xbag@0\xb9\x1d\xe0'b'\x00\x05N\xb1w\x8c~\x80\xfe\x18m\x01\x01\xb2\xe9s\x81\xbd\xf3\x14\x19\xbb7\xd1S>\x85\xab)D\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\xf9_'b'\x00\x05N\xb1w\x8c\x7f0\xfe\x1cn\x01\x01\xa3\x8b\xa7\x0e\xb9\x8e\x8c\x9b7\tz0\xb8\x00\x00\x00\x00\x00\x00\x00\x00""\xa9:[\xf1c;>c'b'\x00\x05N\xb1w\x8c\x7f\xd8\xfe\x03o\x01\x01\xa5\xc5\x14\x00\x94Y'b'\x00\x05N\xb1w\x8c\x80|\xfe\x0cp\x01\x01\x02`y\xd1w\xb1N\x05\x00\xffn\x03\x00a`'b'\x00\x05N\xb1w\x8c\x81,\xfe\x16q\x01\x01\x88\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbcV'b'\x00\x05N\xb1w\x8c\x81\xd8\xfe\x16r\x01\x01\xc1=\xedB\x11\x15\x04\x02'b'\x00\x05N\xb1w\x8d\xef<\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T)]'b'\x00\x05N\xb1w\x8d\xef\x9c\xfe\x06y\x01\x01}\xc8\x14\x00\x00\x03\x003&'b'\x00\x05N\xb1w\x8d\xef\xf4\xfe\x04z\x01\x01\x98\x00\x00\xa0\x8a#\xf6'b'\x00\x05N\xb1w\x8d\xf0D\xfe\x02{\x01\x01*\x00\x00R\x96'b'\x00\x05N\xb1w\x8d\xf0\xa8\xfe\x1e|\x01\x01\x188\xeeg\r\x00\x00\x00\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfdFd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c1\xd5'b'\x00\x05N\xb1w\x8d\xf1\x0c\xfe\x1a}\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00e)'b'\x00\x05N\xb1w\x8d\xf1`\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\x00\x05N\xb1w\x8d\xf1\xc0\xfe\x15\x7f\x01\x01$w\x82j\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xe9'b'\x00\x05N\xb1w\x8d\xf2P\xfe\x16\x80\x01\x01#\xf9%0:Yh\xa6\xb7\x13Z3\xb9\xa3t'b'\x00\x05N\xb1w\x8f\x83\xfc\xfe\x18\x86\x01\x01\xb2\xb6`\x81\xbd\xf8U\x1c\xbbd\xefS>G\xb1)D\x1f\xa6\x02\x18\xe4\xe7\xb8\xfd\xb1B'b'\x00\x05N\xb1w\x90\xae\xbf\xfe5\x13\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x18\x81'b'\x00\x05N\xb1w\x90\xec\x8f\xfe!\x14\xff\x00L\xe4e\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00~\xc2'b'\x00\x05N\xb1w\x91\x12\xfc\xfe\x1c\x87\x01\x01\xa3]\xa5\x10\xb9\x18\xa9\xb57\xc1\xa9,\xb8\x00\x00\x00\x00\x00\x00\x00\x00>\xc3\x9b:J\xd9@;\x0e\xc6'b'\x00\x05N\xb1w\x91\x13p\xfe\x03\x88\x01\x01\xa5\xc5\x14\x00y\xdd'b'\x00\x05N\xb1w\x91\x13\xe8\xfe\x0c\x89\x01\x01\x02\xc8&\xd5w\xb1N\x05\x00\xf0o\x03\x00\r1'b'\x00\x05N\xb1w\x91\x14`\xfe\x16\x8a\x01\x01\x88\x1f\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00L\xeb'b'\x00\x05N\xb1w\x91\x14\xf0\xfe\x16\x8b\x01\x01\xc15\xf1:<\x02\xd4F7\x0b}\xad9\xae\xc4\xaf=\x00\x00\x00\x00\xa5\x037Z'b'\x00\x05N\xb1w\x91\x15\x84\xfe\x1a\x8c\x01\x01\x1b\xb9,n\r\x00\x00\x00\x00\x04\x003\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x9c1'b'\x00\x05N\xb1w\x91\x16\x14\xfe\x16\x8d\x01\x01t,p\x03\x00\x0c\x00A\x00*\xfc\xff\xff\xfd\xff\xff\xff\x07\x01\xa1\xff4\x02k\xcf'b'\x00\x05N\xb1w\x91\x16\xa8\xfe\x16\x8e\x01\x01\x81,p\x03\x00\x01\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfe\xff&\x03\x85\x00q\x02\xc49'b'\x00\x05N\xb1w\x91\x17\x04\xfe\x0e\x8f\x01\x01\x1d,p\x03\x00\x8f\xa3iDp=\x12=-\x10\xe0\x19'b'\x00\x05N\xb1w\x91\x17t\xfe\x0e\x90\x01\x01\x89,p\x03\x00\x14\xe6iD\n\xd7\xa5>\x11\x15\xfc\x0e'b'\x00\x05N\xb1w\x91\x17\xd4\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe6\xa0'b'\x00\x05N\xb1w\x91\x18(\xfe\x06\x92\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xd9'b'\x00\x05N\xb1w\x91\x18x\xfe\x04\x93\x01\x01\x98\x00\x00\xa0\x8a\x99\x11'b'\x00\x05N\xb1w\x91\x18\xbc\xfe\x02\x94\x01\x01*\x00\x00>\xad'b'\x00\x05N\xb1w\x91\x19\x10\xfe\x1e\x95\x01\x01\x18\xa0\x0cn\r\x00\x00\x00\x00 \xa6\x02\x18\xe4\xe7\xb8\xfddd\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd8\xf2'b'\x00\x05N\xb1w\x91\x19h\xfe\x1a\x96\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb7J'b'\x00\x05N\xb1w\x91\x19\xb0\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5'b'\x00\x05N\xb1w\x91\x1a\x00\xfe\x15\x98\x01\x01$\x990n\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9w'b'\x00\x05N\xb1w\x91\x1aP\xfe\x16\x99\x01\x01#-p\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\\\x8b'b'\x00\x05N\xb1w\x92j\xa8\xfe\x03\x9a\x01\x01Ms\x00\x00\x89\x0b'b'\x00\x05N\xb1w\x92\x7fh\xfe\x14\x9b\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf0\xd3'b'\x00\x05N\xb1w\x92\x7f\xd4\xfe\x1c\x9c\x01\x01!$p\x03\x00 \xa6\x02\x18\xe4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa7\x04T\xd2'b'\x00\x05N\xb1w\x92\xb1\x9f\xfe5\x15\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x86\xae'b'\x00\x05N\xb1w\x92\xdb\xa3\xfe!\x16\xff\x00L\xe4e\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xff\x9f'b'\x00\x05N\xb1w\x93\xeax\xfe\x1c\x9d\x01\x01\x1e\xccp\x03\x00U\x8d\x7f\xbd\x80\xdc\x1e\xb8|\xf8T>\xb31-6\xd5Y\x1a\xba\x90\xef\xd68A<'b'\x00\x05N\xb1w\x93\xeb\x08\xfe\x18\x9e\x01\x01\xb2\xb8\x80\x81\xbdK\xad \xbb\x98\x12T>)\xac)D \xa6\x02\x18\xe4\xe7\xb8\xfdB\xdf'b'\x00\x05N\xb1w\x93\xebl\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c'b'\x00\x05N\xb1w\x94\x00t\xfe\x1c\xa0\x01\x01\xa3\xa9\xa3\x12\xb9.\xb4\xcf7\x18\xf3(\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0b\xf9\x95:P\x7f7;\xc1E'b'\x00\x05N\xb1w\x94\x00\xd0\xfe\x03\xa1\x01\x01\xa5\xca\x14\x00su'b'\x00\x05N\xb1w\x94\x01(\xfe\x0c\xa2\x01\x01\x02x\xc8\xd8w\xb1N\x05\x00\xe0p\x03\x003\x14'b'\x00\x05N\xb1w\x94\x01\x84\xfe\x16\xa3\x01\x01\x88 \xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb5\x85'b'\x00\x05N\xb1w\x94\x02 \xfe\x16\xa4\x01\x01\xc1_\xb89<>\xeaF7F\xea\xbe:T\xfb\xb4=\x00\x00\x00\x00\xa5\x03\xe5\xce'b'\x00\x05N\xb1w\x94\x91\xc7\xfe5\x17\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x03L'b'\x00\x05N\xb1w\x94\xbb\xbb\xfe!\x18\xff\x00L\xd4f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00C\x99'b'\x00\x05N\xb1w\x95}\x18\xfe\x1a\xa6\x01\x01\x1bW\xdbq\r\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x8f\xb7'b'\x00\x05N\xb1w\x95}\xa0\xfe\x16\xa7\x01\x01t\x1dq\x03\x00\n\x008\x00-\xfc\xff\xff\xff\xff\x02\x00\x07\x01\xa0\xff3\x02\x8dl'b'\x00\x05N\xb1w\x95}\xfc\xfe\x16\xa8\x01\x01\x81\x1dq\x03\x00\x02\x00@\x00\x1f\xfc\xfe\xff\x00\x00\xfd\xff(\x03\x88\x00o\x02\xc5D'b'\x00\x05N\xb1w\x95~L\xfe\x0e\xa9\x01\x01\x1d\x1dq\x03\x00\x02\xa5iD=\no=/\x10Zh'b'\x00\x05N\xb1w\x95~\x98\xfe\x0e\xaa\x01\x01\x89\x1dq\x03\x00\xb8\xe6iD\xc2\xf5\xaa>\x13\x15~\x98'b'\x00\x05N\xb1w\x95\x7f\x00\xfe\x1f\xab\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe8s'b'\x00\x05N\xb1w\x95\x7fh\xfe\x06\xac\x01\x01}\xc5\x14\x00\x00\x03\x00\xe3-'b'\x00\x05N\xb1w\x95\x7f\xcc\xfe\x04\xad\x01\x01\x98\x00\x00\xa0\x8a\xe1\xc2'b'\x00\x05N\xb1w\x95\x80 \xfe\x02\xae\x01\x01*\x00\x00#\x92'b'\x00\x05N\xb1w\x95\x80\x8c\xfe\x1e\xaf\x01\x01\x18\xc8\x1dq\r\x00\x00\x00\x00 \xa6\x02\x18\xe4\xe7\xb8\xfdnd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c!\xfe'b'\x00\x05N\xb1w\x95\x80\xf8\xfe\x1a\xb0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x005\xa3'b'\x00\x05N\xb1w\x95\x81T\xfe\x08\xb1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00.}'b'\x00\x05N\xb1w\x95\x81\xb8\xfe\x15\xb2\x01\x01$\xb4\xdeq\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Fz'b'\x00\x05N\xb1w\x95\x82\x1c\xfe\x16\xb3\x01\x01#\x1eq\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00*\xe3'b'\x00\x05N\xb1w\x95\x82x\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d'b'\x00\x05N\xb1w\x95\x83\x18\xfe\x14\xb5\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe66'b'\x00\x05N\xb1w\x95\x83h\xfe\x12\xb6\x01\x01\xfcyq\x03\x004\x00\x01\x00ARMMASK\x00Wr\xf8\x93'b'\x00\x05N\xb1w\x96r\xc3\xfe5\x19\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xba\xf1'b'\x00\x05N\xb1w\x96\x9c\xc3\xfe!\x1a\xff\x00L\xd4f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc2\xc4'b'\x00\x05N\xb1w\x96\xf6(\xfe\t\xb7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03*\xad'b'\x00\x05N\xb1w\x96\xf6\xc4\xfe\x1c\xb8\x01\x01!\xedp\x03\x00 \xa6\x02\x18\xe4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\xff*'b'\x00\x05N\xb1w\x96\xf7@\xfe\x1c\xb9\x01\x01\x1e\xbdq\x03\x00/\xaa\x7f\xbd@\x8d\x96\xb8\x13$U>\xad\xc3\x9b:0\x10\x99\xbaz\xfc\xaa9\xf7\xa4'b'\x00\x05N\xb1w\x96\xf7\xbc\xfe\x18\xba\x01\x01\xb2\xbcq\x81\xbd[X$\xbb\xa9GT>)\xac)D!\xa6\x02\x18\xe4\xe7\xb8\xfd+\xe3'b'\x00\x05N\xb1w\x96\xf8 \xfe\x03\xbb\x01\x01Ms\x00\x00\xc6<'b'\x00\x05N\xb1w\x96\xf8\xc4\xfe\x1c\xbc\x01\x01\xa3%\x9f\x14\xb9\x03\xab\xe97\xd1b%\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe2 \x95:m\x98F;\xeaj'b'\x00\x05N\xb1w\x96\xf9\x14\xfe\x03\xbd\x01\x01\xa5\xc5\x14\x00\x90\xa7'b'\x00\x05N\xb1w\x96\xf9d\xfe\x0c\xbe\x01\x01\x02\xe0u\xdcw\xb1N\x05\x00\xd1q\x03\x00\x90\xea'b'\x00\x05N\xb1w\x96\xf9\xbc\xfe\x16\xbf\x01\x01\x88!\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xc3'b'\x00\x05N\xb1w\x96\xfa\x10\xfe\x16\xc0\x01\x01\xc1MN9\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff%\x03\x86\x00l\x023\x84'b'\x00\x05N\xb1w\x98\x8a\xb4\xfe\x0e\xc4\x01\x01\x1d\rr\x03\x00^\xa4iD{\x14F=.\x10\x8c\xc0'b'\x00\x05N\xb1w\x98\x8b\x18\xfe\x0e\xc5\x01\x01\x89\rr\x03\x00O\xe6iD\x14\xae\xa7>\x13\x15[2'b'\x00\x05N\xb1w\x98\x8b\x98\xfe\x1f\xc6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc6\xc8'b'\x00\x05N\xb1w\x98\x8c\x08\xfe\x06\xc7\x01\x01}\xc8\x14\x00\x00\x03\x00:n'b'\x00\x05N\xb1w\x98\x8cp\xfe\x04\xc8\x01\x01\x98\x00\x00\xa0\x8a\xa3\xa1'b'\x00\x05N\xb1w\x98\x8c\xcc\xfe\x02\xc9\x01\x01*\x00\x00\xbe\xf1'b'\x00\x05N\xb1w\x98\x8d<\xfe\x1e\xca\x01\x01\x18\x08+t\r\x00\x00\x00\x00!\xa6\x02\x18\xe4\xe7\xb8\xfdxd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe5\x11'b'\x00\x05N\xb1w\x98\x8d\xac\xfe\x1a\xcb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1ag'b'\x00\x05N\xb1w\x98\x8e\x0c\xfe\x08\xcc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00~\xcf'b'\x00\x05N\xb1w\x98\x8et\xfe\x15\xcd\x01\x01$\xdd\x86u\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x0c'b'\x00\x05N\xb1w\x98\x8e\xdc\xfe\x16\xce\x01\x01#\x0er\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf4{'b'\x00\x05N\xb1w\x98\x8f\\\xfe\x03\xcf\x01\x01/\xff\x00\x00\xb7\xda'b'\x00\x05N\xb1w\x9a\x1f\xa7\xfe5\x1f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01$\xde'b'\x00\x05N\xb1w\x9a \xbc\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH'b'\x00\x05N\xb1w\x9a_\xd0\xfe\x14\xd1\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xbb\xbe'b'\x00\x05N\xb1w\x9a`\xdc\xfe\x1c\xd2\x01\x01!}r\x03\x00!\xa6\x02\x18\xe4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\x8dp'b'\x00\x05N\xb1w\x9a\x86G\xfe! \xff\x00L\x16\x85\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x82\x14'b'\x00\x05N\xb1w\x9b\x90\x94\xfe\x1c\xd3\x01\x01\x1e\xadr\x03\x00\x98\xc6\x7f\xbd\x00m@8C\x1eU>\xf1]\xa0\xb9\xedL\xee\xb9\x9c\x08Z\xb9\xf6\xd0'b'\x00\x05N\xb1w\x9b\x91\x04\xfe\x18\xd4\x01\x01\xb2\xe5b\x81\xbd\n%\x1f\xbbclT>\xb8\xae)D!\xa6\x02\x18\xe4\xe7\xb8\xfd\x15t'b'\x00\x05N\xb1w\x9b\x91\\\xfe\x1c\xd5\x01\x01\xa3\x8a\x9b\x16\xb9)\xc2\x018Y\xd7!\xb8\x00\x00\x00\x00\x00\x00\x00\x00\\\xa3\x8c:\xdd\xb8D;\xc3g'b'\x00\x05N\xb1w\x9b\x91\xa4\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3'b'\x00\x05N\xb1w\x9b\x91\xf0\xfe\x0c\xd7\x01\x01\x02`\x1f\xe0w\xb1N\x05\x00\xc1r\x03\x009\x1a'b'\x00\x05N\xb1w\x9b\x92D\xfe\x16\xd8\x01\x01\x88!\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xed^'b'\x00\x05N\xb1w\x9b\x92\x94\xfe\x16\xd9\x01\x01\xc11\xcd9\x14\x15\x01\xd2'b'\x00\x05N\xb1w\x9b\xa9\xb0\xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x99\x01'b'\x00\x05N\xb1w\x9b\xaa\x00\xfe\x06\xe1\x01\x01}\xc2\x14\x00\x00\x03\x00\x90\x90'b'\x00\x05N\xb1w\x9b\xaaL\xfe\x04\xe2\x01\x01\x98\x00\x00\xa0\x8a\xaa\xb2'b'\x00\x05N\xb1w\x9b\xaa\x90\xfe\x02\xe3\x01\x01*\x00\x00j{'b'\x00\x05N\xb1w\x9b\xaa\xe4\xfe\x1e\xe4\x01\x01\x18H8w\r\x00\x00\x00\x00!\xa6\x02\x18\xe4\xe7\xb8\xfd\x82d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c#\xc0'b'\x00\x05N\xb1w\x9b\xab8\xfe\x1a\xe5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00^\x97'b'\x00\x05N\xb1w\x9b\xab\x80\xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\'b'\x00\x05N\xb1w\x9b\xab\xd0\xfe\x15\xe7\x01\x01$K2y\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd38'b'\x00\x05N\xb1w\x9b\xac \xfe\x16\xe8\x01\x01#\xfer\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x003S'b'\x00\x05N\xb1w\x9c;W\xfe5!\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01|\x17'b'\x00\x05N\xb1w\x9cx\xff\xfe!"\xff\x00L\xae\x81\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe2$'b'\x00\x05N\xb1w\x9d!\x14\xfe\x03\xe9\x01\x01Ms\x00\x00 \t'b'\x00\x05N\xb1w\x9d6T\xfe\x14\xea\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00um'b'\x00\x05N\xb1w\x9e>\x0b\xfe5#\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf9\xf5'b'\x00\x05N\xb1w\x9eT+\xfe!$\xff\x00L\xae\x81\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00a\xc2'b'\x00\x05N\xb1w\x9e\xa84\xfe\x1c\xeb\x01\x01!Fs\x03\x00"\xa6\x02\x18\xe5\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04nq'b'\x00\x05N\xb1w\x9e\xa9P\xfe\x1c\xec\x01\x01\x1e\x9es\x03\x00\xc1\xc2\x7f\xbd\x00{z\xb8\x81\x13U>\rj`:\x1b*\xc9\xb9}\xea\x02:\xdb\x04'b'\x00\x05N\xb1w\x9e\xaa(\xfe\x18\xed\x01\x01\xb2\x14P\x81\xbd-\xf4#\xbb\x87\x85T>\x14\xae)D"\xa6\x02\x18\xe5\xe7\xb8\xfd\xca\xf1'b'\x00\x05N\xb1w\x9e\xaa\xe8\xfe\x1c\xee\x01\x01\xa3\xc2\x96\x18\xb9\xc6\xa1\x0e8\x81[\x1e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x17\xfc\x80:\xbb\x15@;\x12\xb1'b'\x00\x05N\xb1w\x9e\xab\x94\xfe\x03\xef\x01\x01\xa5\xc8\x14\x00\xf9\x19'b'\x00\x05N\xb1w\x9e\xac(\xfe\x0c\xf0\x01\x01\x02\xe0\xc8\xe3w\xb1N\x05\x00\xb2s\x03\x00\xa39'b'\x00\x05N\xb1w\x9e\xac\xc0\xfe\x16\xf1\x01\x01\x88"\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00n\x96'b'\x00\x05N\xb1w\x9e\xad\\\xfe\x16\xf2\x01\x01\xc1\xe1\x8b@<\x0e\x82E7\xbb_\x06:\xbc\x89\xb6=\x00\x00\x00\x00\xa5\x03x]'b'\x00\x05N\xb1w\x9e\xad\xd8\xfe\x03\xf3\x01\x01Ms\x00\x00\x8bt'b'\x00\x05N\xb1w\xa0\x16\x13\xfe5%\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01g\xda'b'\x00\x05N\xb1w\xa0>\x97\xfe!&\xff\x00L\x8fy\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0~'b'\x00\x05N\xb1w\xa0@\x88\xfe\x1a\xf4\x01\x01\x1bM\xdf|\r\x00\x00\x00\x00\x05\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffn\x01|G'b'\x00\x05N\xb1w\xa0A\x88\xfe\x16\xf5\x01\x01t\xefs\x03\x00\x00\x006\x004\xfc\x00\x00\x00\x00\x00\x00\x06\x01\x9f\xff4\x02)['b'\x00\x05N\xb1w\xa0B$\xfe\x16\xf6\x01\x01\x81\xefs\x03\x00\x04\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x86\x00l\x02ba'b'\x00\x05N\xb1w\xa0B\x98\xfe\x0e\xf7\x01\x01\x1d\xefs\x03\x00T\xa5iD\x8f\xc2\x81=0\x10i\x8e'b'\x00\x05N\xb1w\xa0B\xf8\xfe\x0e\xf8\x01\x01\x89\xefs\x03\x00\xae\xe7iD\xd7\xa3\xb2>\x15\x15\xe6\x99'b'\x00\x05N\xb1w\xa0C`\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa6\xe9'b'\x00\x05N\xb1w\xa0C\xc4\xfe\x06\xfa\x01\x01}\xc8\x14\x00\x00\x03\x00\x9bJ'b'\x00\x05N\xb1w\xa0D$\xfe\x04\xfb\x01\x01\x98\x00\x00\xa0\x8a\t\x7f'b'\x00\x05N\xb1w\xa0Dp\xfe\x02\xfc\x01\x01*\x00\x00W\xd7'b'\x00\x05N\xb1w\xa0D\xcc\xfe\x1e\xfd\x01\x01\x18pIz\r\x00\x00\x00\x00"\xa6\x02\x18\xe5\xe7\xb8\xfd\x8cd\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cV\xf3'b'\x00\x05N\xb1w\xa0E(\xfe\x1a\xfe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00Y\xfa'b'\x00\x05N\xb1w\xa0Ex\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.'b'\x00\x05N\xb1w\xa0E\xd0\xfe\x15\x00\x01\x01$X\xe2|\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdbV'b'\x00\x05N\xb1w\xa0F4\xfe\x16\x01\x01\x01#\xf0s\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x9b$'b'\x00\x05N\xb1w\xa1\xbbx\xfe\x14\x02\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00\xbe\xfa'b'\x00\x05N\xb1w\xa1\xbc\x1c\xfe\x03\x03\x01\x01Ms\x00\x00\x107'b'\x00\x05N\xb1w\xa1\xbd\x04\xfe\x1c\x04\x01\x01!\x0ft\x03\x00"\xa6\x02\x18\xe5\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\xf0M'b'\x00\x05N\xb1w\xa1\xbd\xe0\xfe\x1c\x05\x01\x01\x1e\x8ft\x03\x00\x86\x14\x80\xbd\x00\xa4\x0c\xb8\x04&U>\x95\xa2\x839\xe2\xb8#\xb9\xb7\x18\x81\xb9\xcf\xbf'b'\x00\x05N\xb1w\xa1\xbe\x80\xfe\x18\x06\x01\x01\xb2*o\x81\xbd\xdd\x05"\xbb\xe7\xabT>)\xac)D"\xa6\x02\x18\xe5\xe7\xb8\xfdq\xf0'b"\x00\x05N\xb1w\xa1\xf1\x7f\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe28"b'\x00\x05N\xb1w\xa2\x08s\xfe!(\xff\x00L\x97\x86\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd6_'b'\x00\x05N\xb1w\xa34\xbc\xfe\x1c\x07\x01\x01\xa3s\x8d\x1a\xb9\x9dp\x1b8\x93\x0f\x1b\xb8\x00\x00\x00\x00\x00\x00\x00\x00,1\x7f:\x04\xd9\xf3:\xe9m'b'\x00\x05N\xb1w\xa35@\xfe\x03\x08\x01\x01\xa5\xc6\x14\x00V3'b'\x00\x05N\xb1w\xa35\xa8\xfe\x0c\t\x01\x01\x02((\xe7w\xb1N\x05\x00\xa4t\x03\x00\\\x08'b'\x00\x05N\xb1w\xa36\x18\xfe\x16\n\x01\x01\x88"\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00W\xa2'b'\x00\x05N\xb1w\xa36|\xfe\x12\x0b\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xae\x96'b'\x00\x05N\xb1w\xa36\xe4\xfe\x16\x0c\x01\x01\xc1\x93\x9e><\x17\xb2E7\xe8\xe5\x1b;\xc5\xea\xa2=\x00\x00\x00\x00\xa5\x03G\xe3'b'\x00\x05N\xb1w\xa37@\xfe\x03\r\x01\x01Ms\x00\x00\x1d\x07'b'\x00\x05N\xb1w\xa38\x0c\xfe\x1a\x0e\x01\x01\x1b\xa2\x8a\x80\r\x00\x00\x00\x00\x02\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01\xe7"'b'\x00\x05N\xb1w\xa38|\xfe\x16\x0f\x01\x01t\xdft\x03\x00\x07\x001\x00)\xfc\x01\x00\x00\x00\x04\x00\x07\x01\xa0\xff4\x02\x95\x0f'b'\x00\x05N\xb1w\xa38\xe8\xfe\x16\x10\x01\x01\x81\xdft\x03\x00\x02\x00@\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x87\x00o\x02\x9f\x8c'b'\x00\x05N\xb1w\xa394\xfe\x0e\x11\x01\x01\x1d\xdft\x03\x00\x1d\xa4iD\x8f\xc25=0\x10\x87\xe1'b'\x00\x05N\xb1w\xa39|\xfe\x0e\x12\x01\x01\x89\xdft\x03\x00\n\xe7iD\x1e\x85\xad>\x16\x15+\xe8'b'\x00\x05N\xb1w\xa39\xd4\xfe\x1f\x13\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf1\xd1'b'\x00\x05N\xb1w\xa3:$\xfe\x06\x14\x01\x01}\xc5\x14\x00\x00\x03\x00\x9d\x90'b'\x00\x05N\xb1w\xa3:l\xfe\x04\x15\x01\x01\x98\x00\x00\xa0\x8aQq'b'\x00\x05N\xb1w\xa3:\xb0\xfe\x02\x16\x01\x01*\x00\x00\x98\x1c'b'\x00\x05N\xb1w\xa3;\x04\xfe\x1e\x17\x01\x01\x18\xc0k\x80\r\x00\x00\x00\x00#\xa6\x02\x18\xe6\xe7\xb8\xfd\xa0d\n\x00F\x00\xff\xff\x04\x00|J\x03\x0c\x9f\xdd'b'\x00\x05N\xb1w\xa3;T\xfe\x1a\x18\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x9aI'b'\x00\x05N\xb1w\xa3;\x9c\xfe\x08\x19\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00D#'b'\x00\x05N\xb1w\xa3;\xec\xfe\x15\x1a\x01\x01$\xd1\x8c\x80\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00%?'b'\x00\x05N\xb1w\xa3<8\xfe\x16\x1b\x01\x01#\xe0t\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x04\x94'b'\x00\x05N\xb1w\xa3\xcd\x17\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01[\x85'b'\x00\x05N\xb1w\xa3\xe3S\xfe!*\xff\x00L\x97\x86\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00W\x02'b'\x00\x05N\xb1w\xa4\xbb\xb0\xfe\x14\x1c\x01\x01J\n\xd7#=\n\xd7#=\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00\xcf\xc6'b'\x00\x05N\xb1w\xa4\xbc0\xfe\x03\x1d\x01\x01Ms\x00\x00e\\'b'\x00\x05N\xb1w\xa4\xbc\xd0\xfe\x1c\x1e\x01\x01!\xd8t\x03\x00#\xa6\x02\x18\xe6\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa9\x04\xf50'b'\x00\x05N\xb1w\xa4\xbd4\xfe\x12\x1f\x01\x01\xfcdu\x03\x004\x00\x01\x00ARMMASK\x00Wr_\xe7'b'\x00\x05N\xb1w\xa4\xbd\x8c\xfe\t \x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa4\x8d'b'\x00\x05N\xb1w\xa5\xac;\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdeg'b'\x00\x05N\xb1w\xa5\xed\x7f\xfe!,\xff\x00L\x97\x86\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd4\xe4'b'\x00\x05N\xb1w\xa6T\x8c\xfe\x1c!\x01\x01\x1e\x80u\x03\x00\xb4)\x80\xbd\x00F\xfe7\xa6AU>\x9c\xed\xa0\xb7x.\x93\xb9\x13\x96\x10\xbaG\xc1'b'\x00\x05N\xb1w\xa6U$\xfe\x18"\x01\x01\xb2\xe3m\x81\xbd\xa3`"\xbb\xbe\xdbT>\\\x9f)D#\xa6\x02\x18\xe6\xe7\xb8\xfdV\''b'\x00\x05N\xb1w\xa6U\x94\xfe\x1c#\x01\x01\xa3T\x80\x1c\xb9h-(8\x96\xff\x17\xb8\x00\x00\x00\x00\x00\x00\x00\x00O\xd1\x80:\x10\x83\xb9:b\xef'b'\x00\x05N\xb1w\xa6U\xf0\xfe\x03$\x01\x01\xa5\xc5\x14\x00\t\x9b'b'\x00\x05N\xb1w\xa6VH\xfe\x0c%\x01\x01\x02\xe0\x1b\xebw\xb1N\x05\x00\x94u\x03\x00R\xc2'b'\x00\x05N\xb1w\xa6V\xf0\xfe\x16&\x01\x01\x88#\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xadL'b"\x00\x05N\xb1w\xa6WT\xfe\x16'\x01\x01\xc1\r\xd1<<\xd5\x19E7\x10\x15$<(\xb0\xb0=\x00\x00\x00\x00\xa5\x03\x8c\x16"b'\x00\x05N\xb1w\xa6W\xd4\xfe\t\xc6\n\x00m\x04\x00\x00\x00\x00\xd5\x00\x00\x00\x90\xee'b'\x00\x05N\xb1w\xa6X$\xfe\x03)\x01\x01Ms\x00\x003\xa7'b'\x00\x05N\xb1w\xa6\xda\xeb\xfe\t-\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03.\x18'b'\x00\x05N\xb1w\xa7\xa5\x13\xfe5.\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8f_'b'\x00\x05N\xb1w\xa7\xbb?\xfe!/\xff\x00L?\x9a\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb7~'b'\x00\x05N\xb1w\xa7\xeb\x88\xfe\x1a*\x01\x01\x1bP8\x84\r\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01\x90Q'b'\x00\x05N\xb1w\xa7\xec\x1c\xfe\x16+\x01\x01t\xd0u\x03\x00\x01\x00@\x004\xfc\x00\x00\xff\xff\x00\x00\x07\x01\xa2\xff4\x02\xd0#'b'\x00\x05N\xb1w\xa7\xec\x84\xfe\x16,\x01\x01\x81\xd0u\x03\x00\x00\x00@\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x88\x00o\x02\x15O'b'\x00\x05N\xb1w\xa7\xec\xe0\xfe\x0e-\x01\x01\x1d\xd1u\x03\x00\x0c\xa4iD\x99\x991=/\x105S'b'\x00\x05N\xb1w\xa7\xed8\xfe\x0e.\x01\x01\x89\xd1u\x03\x00\xd9\xe6iD\x00\x00\xac>\x16\x15\t\xc9'b'\x00\x05N\xb1w\xa7\xed\x9c\xfe\x1f/\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d-?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcb\x0f'b'\x00\x05N\xb1w\xa7\xed\xf8\xfe\x060\x01\x01}\xc8\x14\x00\x00\x03\x00\r\x02'b'\x00\x05N\xb1w\xa7\xeeL\xfe\x041\x01\x01\x98\x00\x00\xa0\x8a\x8d\xb9'b'\x00\x05N\xb1w\xa7\xee\x98\xfe\x022\x01\x01*\x00\x00m\x10'b'\x00\x05N\xb1w\xa7\xee\xf4\xfe\x1e3\x01\x01\x18\x00y\x83\r\x00\x00\x00\x00$\xa6\x02\x18\xe7\xe7\xb8\xfd\xaad\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cS\xee'b'\x00\x05N\xb1w\xa7\xefP\xfe\x1a4\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa7;'b'\x00\x05N\xb1w\xa7\xef\xa0\xfe\x085\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x008\xad'b'\x00\x05N\xb1w\xa7\xef\xf8\xfe\x156\x01\x01$\xf2:\x84\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97P'b'\x00\x05N\xb1w\xa7\xf0L\xfe\x167\x01\x01#\xd1u\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00P\x02'b'\x00\x05N\xb1w\xa7\xf0\xa4\xfe\x148\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x18S\x9d\xb9v\xb23\xb9\x97\x87\xe35\x18l'b'\x00\x05N\xb1w\xa9\xf5\x08\xfe\x18=\x01\x01\xb2\xf1s\x81\xbdT\xf9\x1e\xbb+\nU>\x99\xa9)D%\xa6\x02\x18\xe7\xe7\xb8\xfd\xa7/'b'\x00\x05N\xb1w\xa9\xf5p\xfe\x1c>\x01\x01\xa3\xdeo\x1e\xb9\xf9\xda48\xc5\x00\x15\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x8f~:\xc4\xf8\x1a;\xcb\xd8'b'\x00\x05N\xb1w\xa9\xf5\xc4\xfe\x03?\x01\x01\xa5\xc5\x14\x00\x1dg'b'\x00\x05N\xb1w\xa9\xf64\xfe\x0c@\x01\x01\x02`\xc5\xeew\xb1N\x05\x00\x85v\x03\x00\xd1\x16'b'\x00\x05N\xb1w\xa9\xf6\x98\xfe\x16A\x01\x01\x88%\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00vn'b'\x00\x05N\xb1w\xa9\xf6\xf4\xfe\x16B\x01\x01\xc1\xfe\xc6=<\x9f\xc2E7\x90\xc7\xf4:\xc4\x11\xb0=\x00\x00\x00\x00\xa5\x03_\xa3'b'\x00\x05N\xb1w\xaa\xe5\xcc\xfe\x03C\x01\x01Ms\x00\x00\xe1R'b'\x00\x05N\xb1w\xaa\xe6\xa8\xfe\x1aD\x01\x01\x1b\xe7\xe2\x87\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01\xc1\xd3'b'\x00\x05N\xb1w\xaa\xe7@\xfe\x16E\x01\x01t\xc1v\x03\x00\x00\x006\x001\xfc\x03\x00\xff\xff\x01\x00\x07\x01\xa0\xff3\x02\x12\xb8'b'\x00\x05N\xb1w\xaa\xe7\xc4\xfe\x16F\x01\x01\x81\xc1v\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfe\xff(\x03\x89\x00l\x02\x8e\xbb'b'\x00\x05N\xb1w\xaa\xe8<\xfe\x0eG\x01\x01\x1d\xc1v\x03\x00y\xa4iD\xcc\xccL=0\x10\x16\xc3'b'\x00\x05N\xb1w\xaa\xe8\xac\xfe\x0eH\x01\x01\x89\xc1v\x03\x00O\xe6iD\x14\xae\xa7>\x17\x15\xb7\xf3'b'\x00\x05N\xb1w\xaa\xe90\xfe*I\x01\x01\x96s\xe7f\xbc\x10m\x01\x000\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd0\xb5'b'\x00\x05N\xb1w\xaa\xe9\xac\xfe\x1fJ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tm0'b'\x00\x05N\xb1w\xaa\xea$\xfe\x06K\x01\x01}\xc8\x14\x00\x00\x03\x00\xde\x1e'b'\x00\x05N\xb1w\xaa\xea\x90\xfe\x04L\x01\x01\x98\x00\x00\xa0\x8a\x91Z'b'\x00\x05N\xb1w\xaa\xea\xf4\xfe\x02M\x01\x01*\x00\x00\xd5\x18'b'\x00\x05N\xb1w\xaa\xebX\xfe\x1eN\x01\x01\x18\x08<\x86\r\x00\x00\x00\x00%\xa6\x02\x18\xe7\xe7\xb8\xfd\xbed\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x19\xfc'b'\x00\x05N\xb1w\xaa\xeb\xb8\xfe\x1aO\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x88\xff'b'\x00\x05N\xb1w\xaa\xec\x0c\xfe\x08P\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd0h'b'\x00\x05N\xb1w\xaa\xech\xfe\x15Q\x01\x01$d\xe5\x87\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4['b'\x00\x05N\xb1w\xaa\xec\xc0\xfe\x16R\x01\x01#\xc1v\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x009\x14'b'\x00\x05N\xb1w\xab\xa3W\xfe53\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa6\xd9'b'\x00\x05N\xb1w\xab\xe2\x9f\xfe!4\xff\x00L@\xa8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc8J'b'\x00\x05N\xb1w\xacn\xf4\xfe\x14S\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb5\x94'b'\x00\x05N\xb1w\xaco\x88\xfe\x1cT\x01\x01!2w\x03\x00&\xa6\x02\x18\xe8\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x04\xf6\xed'b'\x00\x05N\xb1w\xaco\xfc\xfe\x03U\x01\x01Ms\x00\x00(\x14'b'\x00\x05N\xb1w\xad\x9a\xef\xfe55\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x018\xf6'b'\x00\x05N\xb1w\xad\xd9\xc3\xfe!6\xff\x00L@\xa8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00I\x17'b'\x00\x05N\xb1w\xad\xf3\xbc\xfe\x1cV\x01\x01\x1eaw\x03\x00=E\x80\xbd@\xe1<90\x88U>x1\x05\xb8\xf6\xf1K\xba\xda \xa4\xb9\x05\x00'b'\x00\x05N\xb1w\xad\xf4X\xfe\x18W\x01\x01\xb2\xbeZ\x81\xbd\xa8\xa0\x1e\xbbc@U>G\xa1)D&\xa6\x02\x18\xe8\xe7\xb8\xfd\x8e"'b'\x00\x05N\xb1w\xad\xf4\xcc\xfe\x1cX\x01\x01\xa3B^ \xb9\xcd\x8aA8\x8f\xe7\x11\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x89\xff\x8a:\x15\t\x7f;jy'b'\x00\x05N\xb1w\xad\xf5$\xfe\x03Y\x01\x01\xa5\xbd\x14\x000\x16'b'\x00\x05N\xb1w\xad\xf5|\xfe\x0cZ\x01\x01\x02\xc8r\xf2w\xb1N\x05\x00vw\x03\x00g\xff'b'\x00\x05N\xb1w\xad\xf5\xec\xfe\x16[\x01\x01\x88&\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\x8c'b'\x00\x05N\xb1w\xad\xf6l\xfe\x16\\\x01\x01\xc1\x9f\x8f8<\xe6.F7\xab0\x03\x17\x15\x98\x94'b'\x00\x05N\xb1w\xad\xf8\xa8\xfe\x1fb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00.?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc8w'b'\x00\x05N\xb1w\xad\xf9\x04\xfe\x06c\x01\x01}\xc5\x14\x00\x00\x03\x00\xb1n'b'\x00\x05N\xb1w\xad\xf9X\xfe\x04d\x01\x01\x98\x00\x00\xa0\x8ab\xd2'b'\x00\x05N\xb1w\xad\xf9\xa4\xfe\x02e\x01\x01*\x00\x00\xba\xa5'b'\x00\x05N\xb1w\xad\xfa\x00\xfe\x1ef\x01\x01\x18P\x9b\x89\r\x00\x00\x00\x00&\xa6\x02\x18\xe8\xe7\xb8\xfd\xbed\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c7<'b'\x00\x05N\xb1w\xad\xfaX\xfe\x1ag\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00V\x81'b'\x00\x05N\xb1w\xad\xfa\xac\xfe\x08h\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xaa'b'\x00\x05N\xb1w\xad\xfa\xfc\xfe\x15i\x01\x01$w\x91\x8b\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00^\x93'b'\x00\x05N\xb1w\xad\xfbL\xfe\x16j\x01\x01#\xb2w\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00Y\xbc'b'\x00\x05N\xb1w\xaf}\xfc\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9'b'\x00\x05N\xb1w\xaf\x7f\x04\xfe\x14l\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xdcb'b'\x00\x05N\xb1w\xaf\x80S\xfe57\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbd\x14'b'\x00\x05N\xb1w\xaf\x96\x93\xfe!8\xff\x00La\xcc\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xadi'b"\x00\x05N\xb1w\xb1%\x90\xfe\x1cm\x01\x01!\xfaw\x03\x00'\xa6\x02\x18\xe8\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x047\xf1"b'\x00\x05N\xb1w\xb1&(\xfe\x03n\x01\x01Ms\x00\x00\xcc^'b'\x00\x05N\xb1w\xb1=t\xfe\x1co\x01\x01\x1eRx\x03\x00\x12T\x80\xbd\x00\xdd\x089\xdc\x82U> \x88\x989\x7fH\xaf\xba\xc7Z\x809\xa7\x9a'b"\x00\x05N\xb1w\xb1>\x10\xfe\x18p\x01\x01\xb2\xe6[\x81\xbd\x8bp!\xbb>cU>\x14\xbe)D'\xa6\x02\x18\xe8\xe7\xb8\xfdn\x8a"b'\x00\x05N\xb1w\xb1>\x8c\xfe\x1cq\x01\x01\xa3\xa4I"\xb9\xf0%N8\xc0\xbb\x0e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe3\x89:\x1e\x1fK;\x1e?'b'\x00\x05N\xb1w\xb1>\xec\xfe\x03r\x01\x01\xa5\xc5\x14\x001\xb8'b'\x00\x05N\xb1w\xb1?P\xfe\x0cs\x01\x01\x02`\x18\xf6w\xb1N\x05\x00fx\x03\x00\xd3\x0c'b"\x00\x05N\xb1w\xb1?\xb8\xfe\x16t\x01\x01\x88'\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003)"b'\x00\x05N\xb1w\xb1@\x1c\xfe\x16u\x01\x01\xc1\xb3\xba@<\xa2\x85F7%\x9em<4\xef\xb9=\x00\x00\x00\x00\xa5\x03\xa5p'b'\x00\x05N\xb1w\xb1do\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x04\xa9'b'\x00\x05N\xb1w\xb1z\xdb\xfe!:\xff\x00La\xcc\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00,4'b'\x00\x05N\xb1w\xb2\xa8\xb0\xfe\x1av\x01\x01\x1b\x1a=\x8f\r\x00\x00\x00\x00\x03\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01&\x8a'b'\x00\x05N\xb1w\xb2\xa9P\xfe\x16w\x01\x01t\xa3x\x03\x00\x01\x008\x00.\xfc\x00\x00\x00\x00\xff\xff\x08\x01\xa0\xff4\x02\xc6_'b'\x00\x05N\xb1w\xb2\xa9\xc8\xfe\x16x\x01\x01\x81\xa3x\x03\x00\x01\x00@\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x87\x00\x80\x02\xe0I'b'\x00\x05N\xb1w\xb2\xaa`\xfe\x0ey\x01\x01\x1d\xa3x\x03\x00\x1b\xa3iDp=\xea\x17\x15\x8cC'b'\x00\x05N\xb1w\xb2\xab\xa8\xfe\x1f{\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xed\xf4'b'\x00\x05N\xb1w\xb2\xacL\xfe\x06|\x01\x01}\xc8\x14\x00\x00\x03\x00\xf7-'b'\x00\x05N\xb1w\xb2\xac\xe0\xfe\x04}\x01\x01\x98\x00\x00\xa0\x8a\xc1\x1f'b'\x00\x05N\xb1w\xb2\xadh\xfe\x02~\x01\x01*\x00\x00\xf1f'b"\x00\x05N\xb1w\xb2\xae\x14\xfe\x1e\x7f\x01\x01\x18\x90\xa8\x8c\r\x00\x00\x00\x00'\xa6\x02\x18\xe9\xe7\xb8\xfd\xdcd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cM\xc8"b'\x00\x05N\xb1w\xb2\xae\xb4\xfe\x1a\x80\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa1\xf7'b'\x00\x05N\xb1w\xb2\xaf<\xfe\x08\x81\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00^\x92'b'\x00\x05N\xb1w\xb2\xaf\xd8\xfe\x15\x82\x01\x01$5@\x8f\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x03'b'\x00\x05N\xb1w\xb2\xb0`\xfe\x16\x83\x01\x01#\xa3x\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe9Q'b'\x00\x05N\xb1w\xb2\xb0\xb4\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`'b'\x00\x05N\xb1w\xb3g\x93\xfe5;\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x81K'b'\x00\x05N\xb1w\xb3\x91s\xfe!<\xff\x00LZ\xc8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x10\xe9'b'\x00\x05N\xb1w\xb4\x1e\xf8\xfe\x14\x85\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xef\xbd'b"\x00\x05N\xb1w\xb4\x1f\x84\xfe\x1c\x86\x01\x01!\xafx\x03\x00'\xa6\x02\x18\xe9\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xa3\x0e"b'\x00\x05N\xb1w\xb4\x1f\xf4\xfe\x03\x87\x01\x01Ms\x00\x00,\xea'b'\x00\x05N\xb1w\xb4 \xc8\xfe\x1c\x88\x01\x01\x1eBy\x03\x00C@\x80\xbd@1\xb48\xdazU>h\x1d :R\xcc\xf2\xb9\xf1\xd6w9p%'b"\x00\x05N\xb1w\xb4!P\xfe\x18\x89\x01\x01\xb2\xf6Q\x81\xbd\xd1\x05#\xbb[|U>=\xba)D'\xa6\x02\x18\xe9\xe7\xb8\xfd.\xb3"b'\x00\x05N\xb1w\xb4!\xc0\xfe\x12\x8a\x01\x01\xfcOy\x03\x004\x00\x01\x00ARMMASK\x00Wr\x1a\xae'b'\x00\x05N\xb1w\xb5Ls\xfe5=\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1fd'b'\x00\x05N\xb1w\xb5\x8aG\xfe!>\xff\x00L\x86\xc2\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00j\xb1'b'\x00\x05N\xb1w\xb5\x9f\x94\xfe\t\x8b\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x98\xc2'b'\x00\x05N\xb1w\xb5\xa0 \xfe\x1c\x8c\x01\x01\xa3\x85,$\xb9u\xa3Z8\xce\xba\x0b\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe6$\x84:\xc6\xee9;\xa9\xb3'b'\x00\x05N\xb1w\xb5\xa0x\xfe\x03\x8d\x01\x01\xa5\xc5\x14\x00\x18J'b'\x00\x05N\xb1w\xb5\xa0\xcc\xfe\x0c\x8e\x01\x01\x02\xe0\xc1\xf9w\xb1N\x05\x00Wy\x03\x006\xdb'b"\x00\x05N\xb1w\xb5\xa1,\xfe\x16\x8f\x01\x01\x88'\xa6\x02\x18\xe9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\x8e"b'\x00\x05N\xb1w\xb5\xa1\x84\xfe\x16\x90\x01\x01\xc1\xa3\x90K<&iH7\xbd\x97\xab:~\xb4\xbe=\x00\x00\x00\x00\xa5\x03\xd0\x06'b'\x00\x05N\xb1w\xb5\xa1\xe0\xfe\x1a\x91\x01\x01\x1bD\xe6\x92\r\x00\x00\x00\x00\x03\x006\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\n\x01\xaf\xffn\x01`U'b'\x00\x05N\xb1w\xb5\xa2D\xfe\x16\x92\x01\x01t\x93y\x03\x00\x03\x00/\x00 \xfc\x02\x00\x00\x00\xfe\xff\x07\x01\xa1\xff4\x02J.'b'\x00\x05N\xb1w\xb5\xa2\xa0\xfe\x16\x93\x01\x01\x81\x93y\x03\x00\x04\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x88\x00k\x02K\x1e'b'\x00\x05N\xb1w\xb5\xa3\x00\xfe\x0e\x94\x01\x01\x1d\x93y\x03\x00\x8f\xa3iDp=\x12=0\x10\xb1\xf8'b'\x00\x05N\xb1w\xb5\xa3T\xfe\x0e\x95\x01\x01\x89\x93y\x03\x00\x0b\xe7iD\\\x8f\xad>\x19\x150\xb6'b'\x00\x05N\xb1w\xb5\xa3\xb4\xfe\x1f\x96\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TgG'b'\x00\x05N\xb1w\xb5\xa4\x0c\xfe\x06\x97\x01\x01}\xc5\x14\x00\x00\x03\x005\xfc'b'\x00\x05N\xb1w\xb5\xa4\\\xfe\x04\x98\x01\x01\x98\x00\x00\xa0\x8aT\xb8'b'\x00\x05N\xb1w\xb5\xa4\xa4\xfe\x02\x99\x01\x01*\x00\x00q\x83'b'\x00\x05N\xb1w\xb5\xa4\xfc\xfe\x1e\x9a\x01\x01\x18\xd8x\x92\r\x00\x00\x00\x00)\xa6\x02\x18\xe9\xe7\xb8\xfd\xf0d\n\x00F\x00\xff\xff\x02\x00|J\x03\x0ci*'b'\x00\x05N\xb1w\xb5\xa5P\xfe\x1a\x9b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa6\x9a'b'\x00\x05N\xb1w\xb5\xa5\x9c\xfe\x08\x9c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6'b'\x00\x05N\xb1w\xb5\xa5\xec\xfe\x15\x9d\x01\x01$4\xe9\x92\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xec'b'\x00\x05N\xb1w\xb5\xa6H\xfe\x16\x9e\x01\x01#\x93y\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00C\t'b'\x00\x05N\xb1w\xb5\xa6\x90\xfe\t\xc7\n\x00m(\x00\x00\x00\x00\xd5\x00\x00\x00z\xe5'b'\x00\x05N\xb1w\xb6-\x0f\xfe\t?\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03-3'b'\x00\x05N\xb1w\xb7\x16$\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c'b'\x00\x05N\xb1w\xb7*\xdc\xfe\x14\xa0\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00S\x13'b'\x00\x05N\xb1w\xb7+`\xfe\x1c\xa1\x01\x01!wy\x03\x00)\xa6\x02\x18\xe9\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04Ws'b'\x00\x05N\xb1w\xb7B\xc7\xfe5@\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf4\x0b'b'\x00\x05N\xb1w\xb7X\xef\xfe!A\xff\x00L\x86\xc2\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc0g'b"\x00\x05N\xb1w\xb8~\xb3\xfe%B\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xd8\x04"b'\x00\x05N\xb1w\xb8\xb4`\xfe\x03\xa2\x01\x01Ms\x00\x00\xbd\xcb'b'\x00\x05N\xb1w\xb8\xc8\xe4\xfe\x1c\xa3\x01\x01\x1e4z\x03\x00\xe3D\x80\xbd\x80\xa6\x898\x18\x80U>\xee\xb6\xd86=\xaaK\xba\x98X\x03\xba]\x92'b'\x00\x05N\xb1w\xb8\xc9P\xfe\x18\xa4\x01\x01\xb2\x12C\x81\xbd\x8ey%\xbb\xe0\x9bU>f\xb6)D)\xa6\x02\x18\xe9\xe7\xb8\xfd\x9f\x82'b"\x00\x05N\xb1w\xb8\xc9\xac\xfe\x1c\xa5\x01\x01\xa3'\t&\xb9\xe7\x0eg8?\xbf\x08\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xe3t:4\xca\x06;|K"b'\x00\x05N\xb1w\xb8\xc9\xf8\xfe\x03\xa6\x01\x01\xa5\xca\x14\x00}\xe9'b'\x00\x05N\xb1w\xb8\xcaH\xfe\x0c\xa7\x01\x01\x02xg\xfdw\xb1N\x05\x00Gz\x03\x00\xfc\xa6'b'\x00\x05N\xb1w\xb8\xca\x9c\xfe\x16\xa8\x01\x01\x88)\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\xdf'b'\x00\x05N\xb1w\xb8\xca\xf0\xfe\x16\xa9\x01\x01\xc1\xaf4W<\x98dJ7\xe4\xf2\xd8;\xcc\xa6\xb3=\x00\x00\x00\x00\xa5\x03~\xbe'b'\x00\x05N\xb1w\xb8\xcb`\xfe\x03\xab\x01\x01/\xff\x00\x00h\x1f'b'\x00\x05N\xb1w\xb9\x19\xdb\xfe5C\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\x1c'b'\x00\x05N\xb1w\xb9W\x8f\xfe!D\xff\x00L\x11\xc6\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00)S'b'\x00\x05N\xb1w\xba(\x1c\xfe\x1a\xac\x01\x01\x1b\x07\x96\x96\r\x00\x00\x00\x00\x04\x004\x00\x1f\xfc\x01\x00\x00\x00\x00\x00\n\x01\xb0\xffn\x01no'b'\x00\x05N\xb1w\xba(\xb4\xfe\x16\xad\x01\x01t\x84z\x03\x00\n\x001\x00/\xfc\x03\x00\x00\x00\xff\xff\x07\x01\xa0\xff3\x02F+'b'\x00\x05N\xb1w\xba)(\xfe\x16\xae\x01\x01\x81\x84z\x03\x00\x02\x00A\x00 \xfc\xfc\xff\x00\x00\xfd\xff*\x03\x87\x00l\x02\xaa<'b'\x00\x05N\xb1w\xba)\x8c\xfe\x0e\xaf\x01\x01\x1d\x84z\x03\x00\xb8\xa4iD\xe1z\\=1\x10\xea\x15'b'\x00\x05N\xb1w\xba)\xe4\xfe\x0e\xb0\x01\x01\x89\x84z\x03\x00=\xe6iD\xb8\x1e\xa7>\x1a\x15\xf4\xb6'b'\x00\x05N\xb1w\xba*d\xfe\x1f\xb1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80c.?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe1\x8e'b'\x00\x05N\xb1w\xba*\xd0\xfe\x06\xb2\x01\x01}\xc3\x14\x00\x00\x03\x00\xb6M'b'\x00\x05N\xb1w\xba+0\xfe\x04\xb3\x01\x01\x98\x00\x00\xa0\x8a\xa0\xe6'b'\x00\x05N\xb1w\xba+\x88\xfe\x02\xb4\x01\x01*\x00\x00\xbd\xce'b'\x00\x05N\xb1w\xba+\xf0\xfe\x1e\xb5\x01\x01\x18\x00\x8a\x95\r\x00\x00\x00\x00)\xa6\x02\x18\xea\xe7\xb8\xfd\xfad\n\x00F\x00\xff\xff\x02\x00|J\x03\x0ce\xd8'b'\x00\x05N\xb1w\xba,X\xfe\x1a\xb6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xaf-'b'\x00\x05N\xb1w\xba,\xb0\xfe\x08\xb7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc0`'b'\x00\x05N\xb1w\xba-\x10\xfe\x15\xb8\x01\x01$\x9a\x98\x96\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90)'b'\x00\x05N\xb1w\xba-t\xfe\x16\xb9\x01\x01#\x85z\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00k\xa4'b'\x00\x05N\xb1w\xba-\xc8\xfe\x03\xba\x01\x01Ms\x00\x00y\xbd'b'\x00\x05N\xb1w\xba.p\xfe\x14\xbb\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xb6{'b'\x00\x05N\xb1w\xbb\x1d7\xfe5E\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa53'b'\x00\x05N\xb1w\xbb\\o\xfe!F\xff\x00L\x11\xc6\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa8\x0e'b'\x00\x05N\xb1w\xbb\xc2D\xfe\x1c\xbc\x01\x01!@z\x03\x00)\xa6\x02\x18\xea\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xf5\xc7'b'\x00\x05N\xb1w\xbb\xc2\xf0\xfe\x1c\xbd\x01\x01\x1e${\x03\x00\x83h\x80\xbd\x00 y7&\x9dU>>\x7f\xc49\x80\x11<\xbal\xdd\x86\xb9;\x9c'b"\x00\x05N\xb1w\xbb\xc3d\xfe\x18\xbe\x01\x01\xb2\x8df\x81\xbdd\xc5'\xbb\xa6\xc6U>\\\xaf)D*\xa6\x02\x18\xeb\xe7\xb8\xfdb\x17"b"\x00\x05N\xb1w\xbb\xc3\xc8\xfe\x1c\xbf\x01\x01\xa3d\xdd'\xb9kTs8B\xe0\x05\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xac\x96w:\xa2\x1b\t;\xef\x83"b'\x00\x05N\xb1w\xbb\xc4\x1c\xfe\x03\xc0\x01\x01\xa5\xcb\x14\x00v;'b'\x00\x05N\xb1w\xbb\xc4p\xfe\x0c\xc1\x01\x01\x02\xe0\x14\x01x\xb1N\x05\x008{\x03\x00"K'b'\x00\x05N\xb1w\xbb\xc4\xcc\xfe\x16\xc2\x01\x01\x88*\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00L\xd2'b'\x00\x05N\xb1w\xbb\xc5(\xfe\x16\xc3\x01\x01\xc1\xaf\x06V<\xfd\x04M7\x96l\x9a:\x07\xd0\xbd=\x00\x00\x00\x00\xa5\x03q\xb8'b'\x00\x05N\xb1w\xbb\xc5x\xfe\x03\xc4\x01\x01Ms\x00\x00\r\x05'b'\x00\x05N\xb1w\xbdI\x04\xfe\x1a\xc5\x01\x01\x1b\xd8A\x9a\r\x00\x00\x00\x00\x03\x004\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffl\x01\x13\x06'b"\x00\x05N\xb1w\xbdI\x98\xfe\x16\xc6\x01\x01tu{\x03\x00\r\x007\x00'\xfc\xfe\xff\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\x90%"b'\x00\x05N\xb1w\xbdJ\x0c\xfe\x16\xc7\x01\x01\x81u{\x03\x00\x02\x00>\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x86\x00k\x02e\xab'b'\x00\x05N\xb1w\xbdJp\xfe\x0e\xc8\x01\x01\x1du{\x03\x00b\xa4iD=\nG=1\x10\r\xc2'b'\x00\x05N\xb1w\xbdJ\xcc\xfe\x0e\xc9\x01\x01\x89u{\x03\x00%\xe7iD)\\\xae>\x1a\x15\x8f\x88'b'\x00\x05N\xb1w\xbdK@\xfe\x1f\xca\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T/a'b'\x00\x05N\xb1w\xbdK\xc8\xfe\x06\xcb\x01\x01}\xc5\x14\x00\x00\x03\x00\x8a\xa2'b'\x00\x05N\xb1w\xbdL$\xfe\x04\xcc\x01\x01\x98\x00\x00\xa0\x8aF\x9e'b'\x00\x05N\xb1w\xbdLt\xfe\x02\xcd\x01\x01*\x00\x00\xc8\x9e'b'\x00\x05N\xb1w\xbdL\xd0\xfe\x1e\xce\x01\x01\x18(\x9b\x98\r\x00\x00\x00\x00*\xa6\x02\x18\xeb\xe7\xb8\xfd\x04e\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd0L'b'\x00\x05N\xb1w\xbdM(\xfe\x1a\xcf\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf9k'b'\x00\x05N\xb1w\xbdMt\xfe\x08\xd0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00r\xae'b'\x00\x05N\xb1w\xbdM\xcc\xfe\x15\xd1\x01\x01$\xceD\x9a\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x14'b'\x00\x05N\xb1w\xbdN \xfe\x16\xd2\x01\x01#u{\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xbe\x87'b'\x00\x05N\xb1w\xbdo\xef\xfe5G\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01 \xd1'b'\x00\x05N\xb1w\xbd\x8b\x1f\xfe!H\xff\x00L\n\xda\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc5\xf3'b'\x00\x05N\xb1w\xbe\xc9\xbc\xfe\x14\xd3\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xd1\x06'b'\x00\x05N\xb1w\xbe\xca(\xfe\x03\xd4\x01\x01Ms\x00\x00u^'b'\x00\x05N\xb1w\xbe\xde\x90\xfe\x1c\xd5\x01\x01!\xd1{\x03\x00+\xa6\x02\x18\xeb\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xc1\xc5'b'\x00\x05N\xb1w\xbfP\xc3\xfe5I\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x99l'b'\x00\x05N\xb1w\xbfg\xbb\xfe!J\xff\x00L\n\xda\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00D\xae'b'\x00\x05N\xb1w\xc1?\xef\xfe5K\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1c\x8e'b'\x00\x05N\xb1w\xc1@\xcb\xfe!L\xff\x00L\n\xda\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc7H'b'\x00\x05N\xb1w\xc2\x07@\xfe\x1c\xd6\x01\x01\x1e\x15|\x03\x000\xa2\x80\xbd\x00\x94/\xb8\xdc\x8eU>?\x19\x159\xf7(W\xbahx\x83:\xbci'b'\x00\x05N\xb1w\xc2\x07\xd4\xfe\x18\xd7\x01\x01\xb2\x88|\x81\xbd\xe3:+\xbb\xa9\xcbU>\xae\xa7)D+\xa6\x02\x18\xeb\xe7\xb8\xfd\x90M'b'\x00\x05N\xb1w\xc2\x08@\xfe\x1c\xd8\x01\x01\xa3\xca\xa9)\xb9Fh\x7f8\xaf,\x03\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xcdl\x7f:\x93\xa6];[\xf6'b'\x00\x05N\xb1w\xc2\x08\xa4\xfe\x03\xd9\x01\x01\xa5\xc6\x14\x00\x82G'b'\x00\x05N\xb1w\xc2\t\x00\xfe\x0c\xda\x01\x01\x02\x80\x0c\x05x\xb1N\x05\x00)|\x03\x00\x1f\x8c'b'\x00\x05N\xb1w\xc2\tT\xfe\x16\xdb\x01\x01\x88+\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00z\x87'b'\x00\x05N\xb1w\xc2\t\xa8\xfe\x16\xdc\x01\x01\xc1\x9e\xb1P\x1b\x15\xc1\xeb'b'\x00\x05N\xb1w\xc2\x1f\xec\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x83\xbf'b'\x00\x05N\xb1w\xc2 @\xfe\x06\xe4\x01\x01}\xc6\x14\x00\x00\x03\x00"\xf4'b'\x00\x05N\xb1w\xc2 \x88\xfe\x04\xe5\x01\x01\x98\x00\x00\xa0\x8aH['b'\x00\x05N\xb1w\xc2 \xcc\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b'b'\x00\x05N\xb1w\xc2! \xfe\x1e\xe7\x01\x01\x18h\xa8\x9b\r\x00\x00\x00\x00+\xa6\x02\x18\xeb\xe7\xb8\xfd\x0ee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xaeB'b'\x00\x05N\xb1w\xc2!t\xfe\x1a\xe8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00OG'b'\x00\x05N\xb1w\xc2!\xb8\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\x00\x05N\xb1w\xc2"\x18\xfe\x15\xea\x01\x01$#\xee\x9d\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xabN'b'\x00\x05N\xb1w\xc2"p\xfe\x16\xeb\x01\x01#e|\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00S\xd8'b'\x00\x05N\xb1w\xc29D\xfe\x14\xec\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00\x02g'b'\x00\x05N\xb1w\xc3%\x9f\xfe5M\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x82\xa1'b'\x00\x05N\xb1w\xc35\x17h80\xf5\n\xba\xa3\xe3\xe09\xdeF'b'\x00\x05N\xb1w\xc3R\xd0\xfe\x18\xf0\x01\x01\xb2\xd1h\x81\xbd\xdc\xab.\xbb\xd5\xf1U>\\\xaf)D,\xa6\x02\x18\xec\xe7\xb8\xfd\xc0\xe1'b'\x00\x05N\xb1w\xc3S4\xfe\x1c\xf1\x01\x01\xa3\x89q+\xb9\xd4\xab\x858-i\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00jA\x83:\xdd\xe73;2\xa4'b'\x00\x05N\xb1w\xc3S\x80\xfe\x03\xf2\x01\x01\xa5\xc2\x14\x00\xf2$'b'\x00\x05N\xb1w\xc3S\xd4\xfe\x0c\xf3\x01\x01\x02\xe0g\x08x\xb1N\x05\x00\x1a}\x03\x00AH'b'\x00\x05N\xb1w\xc3T,\xfe\x16\xf4\x01\x01\x88,\xa6\x02\x18\xec\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\xee'b'\x00\x05N\xb1w\xc3T|\xfe\x12\xf5\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xeb\x00'b'\x00\x05N\xb1w\xc3T\xd4\xfe\x16\xf6\x01\x01\xc1\x05\xb0Z\x1b\x15k9'b'\x00\x05N\xb1w\xc4\xdbp\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T=p'b'\x00\x05N\xb1w\xc4\xdb\xe0\xfe\x06\x00\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\x91'b'\x00\x05N\xb1w\xc4\xdcH\xfe\x04\x01\x01\x01\x98\x00\x00\xa0\x8a \xb1'b"\x00\x05N\xb1w\xc4\xdc\xa4\xfe\x02\x02\x01\x01*\x00\x00'\xc6"b'\x00\x05N\xb1w\xc4\xdd\x18\xfe\x1e\x03\x01\x01\x18\x90\xb9\x9e\r\x00\x00\x00\x00.\xa6\x02\x18\xed\xe7\xb8\xfd,e\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1d\x1e'b'\x00\x05N\xb1w\xc4\xddt\xfe\x1a\x04\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x003o'b'\x00\x05N\xb1w\xc4\xdd\xc0\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB'b'\x00\x05N\xb1w\xc4\xde\x18\xfe\x15\x06\x01\x01$\x85\x9a\xa1\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00-\xb1'b'\x00\x05N\xb1w\xc4\xdep\xfe\x16\x07\x01\x01#V}\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00x\x00'b'\x00\x05N\xb1w\xc4\xde\xc4\xfe\t\xc8\n\x00m\x11\x00\x00\x00\x00\xd0\x00\x00\x00#g'b'\x00\x05N\xb1w\xc4\xe2\x87\xfe5O\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x07C'b'\x00\x05N\xb1w\xc5\n\xdf\xfe!P\xff\x00L\x98\xd2\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc6P'b'\x00\x05N\xb1w\xc5\x97#\xfe\tQ\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf34'b'\x00\x05N\xb1w\xc6\xbf\xc7\xfe5R\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01.\xc5'b'\x00\x05N\xb1w\xc6\xe8;\xfe!S\xff\x00L\x98\xd2\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8f\xa7'b'\x00\x05N\xb1w\xc7^\xe4\xfe\x14\x08\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00\xf3\x05'b'\x00\x05N\xb1w\xc7_\xa4\xfe\x1c\t\x01\x01!b}\x03\x00.\xa6\x02\x18\xed\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xab\x04-x'b'\x00\x05N\xb1w\xc7`<\xfe\x1c\n\x01\x01\x1e\xf5}\x03\x00\xc8H\x80\xbd\x80\xa1T\xb8\x84\x9fU>\xd4\xe44:\xc06\x80\xba\xcf\x00\x959\xca\x96'b'\x00\x05N\xb1w\xc7`\xb0\xfe\x18\x0b\x01\x01\xb2\xe9N\x81\xbd7\xdd*\xbb\xdd\x1aV>G\xb1)D.\xa6\x02\x18\xed\xe7\xb8\xfd\x1f\xc8'b'\x00\x05N\xb1w\xc8\x01\xc4\xfe\x1c\x0c\x01\x01\xa3\xd13-\xb9\xdf\x80\x8b8L}\xfb\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x83\x81:\xc5\xd7\x0b;\xd3\xc3'b'\x00\x05N\xb1w\xc8\x02d\xfe\x03\r\x01\x01\xa5\xc8\x14\x00u\n'b'\x00\x05N\xb1w\xc8\x02\xdc\xfe\x0c\x0e\x01\x01\x02\x80_\x0cx\xb1N\x05\x00\n~\x03\x00\x08\xc8'b'\x00\x05N\xb1w\xc8\x03\\\xfe\x16\x0f\x01\x01\x88.\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00(R'b'\x00\x05N\xb1w\xc8\x03\xbc\xfe\x16\x10\x01\x01\xc1!\x98N<}\xffL7\xdd\x9a\t:\xe5O\xbc=\x00\x00\x00\x00\xa5\x03\x9e\xfe'b'\x00\x05N\xb1w\xc8\x04,\xfe\x1a\x11\x01\x01\x1b\xa8B\xa5\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\t\x01\xb0\xffm\x01\x08\x8a'b'\x00\x05N\xb1w\xc8\x04\xa4\xfe\x16\x12\x01\x01tF~\x03\x00\n\x006\x008\xfc\x02\x00\x01\x00\x02\x00\x07\x01\xa0\xff3\x02\xea\xdc'b'\x00\x05N\xb1w\xc8\x05\x04\xfe\x16\x13\x01\x01\x81F~\x03\x00\x02\x00@\x00 \xfc\xfe\xff\x01\x00\xfd\xff+\x03\x87\x00o\x023\xf6'b'\x00\x05N\xb1w\xc8\x05X\xfe\x0e\x14\x01\x01\x1dF~\x03\x00\xa7\xa3iD\xebQ\x18=1\x10\xba\xad'b'\x00\x05N\xb1w\xc8\x05\xac\xfe\x0e\x15\x01\x01\x89F~\x03\x00\xf3\xe6iD\xcd\xcc\xac>\x1c\x15t\x94'b'\x00\x05N\xb1w\xc8\x06\x0c\xfe\x1f\x16\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T$u'b'\x00\x05N\xb1w\xc8\x06h\xfe\x06\x17\x01\x01}\xc6\x14\x00\x00\x03\x00@\xc6'b'\x00\x05N\xb1w\xc8\x06\xbc\xfe\x04\x18\x01\x01\x98\x00\x00\xa0\x8a\x83|'b'\x00\x05N\xb1w\xc8\x07\x08\xfe\x02\x19\x01\x01*\x00\x00l\x05'b'\x00\x05N\xb1w\xc8\x07d\xfe\x1e\x1a\x01\x01\x18\x10\xd4\xa4\r\x00\x00\x00\x00/\xa6\x02\x18\xee\xe7\xb8\xfd@e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xb6\xdf'b'\x00\x05N\xb1w\xc8\x07\xbc\xfe\x1a\x1b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd7\x0e'b'\x00\x05N\xb1w\xc8\x08\x08\xfe\x08\x1c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00]0'b'\x00\x05N\xb1w\xc8\x08`\xfe\x15\x1d\x01\x01$\x84E\xa5\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00 H'b'\x00\x05N\xb1w\xc8\x08\xb8\xfe\x16\x1e\x01\x01#G~\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa0z'b'\x00\x05N\xb1w\xc8\t\x04\xfe\x03\x1f\x01\x01Ms\x00\x00\nW'b'\x00\x05N\xb1w\xc8\x1d\xd0\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\x00\x05N\xb1w\xc8\xaf\xe7\xfe5T\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb0\xea'b'\x00\x05N\xb1w\xc8\xc6\x0f\xfe!U\xff\x00L[\xdb\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1f\x92'b"\x00\x05N\xb1w\xc8\xc8k\xfe%V\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00 \xe4"b'\x00\x05N\xb1w\xc9i@\xfe\x14!\x01\x01J\n\xd7\xa3<\n\xd7\xa3v\x9f\xfd\xb8[\x81s\xba:\x15K\xb9:A'b'\x00\x05N\xb1w\xcc\xae\xfc\xfe\x18&\x01\x01\xb2\xc5F\x81\xbdH\xd60\xbb\x97JV>p\xad)D/\xa6\x02\x18\xee\xe7\xb8\xfd\x91\xe1'b"\x00\x05N\xb1w\xcc\xafd\xfe\x1c'\x01\x01\xa3\x81\xef.\xb9\xe3K\x918NI\xf6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x8a4{:\xb4N\xe3:\x96\xf1"b'\x00\x05N\xb1w\xcc\xaf\xb8\xfe\x03(\x01\x01\xa5\xbd\x14\x00\xf6\x1f'b'\x00\x05N\xb1w\xcc\xb0\x0c\xfe\x0c)\x01\x01\x02\xf8\xb6\x0fx\xb1N\x05\x00\xfa~\x03\x00\x124'b'\x00\x05N\xb1w\xcc\xb0d\xfe\x16*\x01\x01\x88/\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb1\xff'b'\x00\x05N\xb1w\xcc\xb0\xb8\xfe\x16+\x01\x01\xc1\xdc7U<\x06\x9fM7\x0e\xc9\x87:\x12\x82\xbb=\x00\x00\x00\x00\xa5\x03\xfeS'b'\x00\x05N\xb1w\xcc\xb2(\xfe\x1a-\x01\x01\x1b\xb3\xef\xa8\r\x00\x00\x00\x00\x03\x002\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffn\x01@,'b'\x00\x05N\xb1w\xcc\xb2\x88\xfe\x16.\x01\x01t7\x7f\x03\x00\x01\x007\x00)\xfc\xff\xff\x00\x00\xff\xff\x07\x01\xa0\xff4\x02\x07\xe4'b'\x00\x05N\xb1w\xcc\xb2\xe4\xfe\x16/\x01\x01\x817\x7f\x03\x00\x01\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x88\x00l\x02\x12\x07'b'\x00\x05N\xb1w\xcc\xb34\xfe\x0e0\x01\x01\x1d7\x7f\x03\x00\xbe\xa3iD{\x14\x1e=1\x10\x85\xcc'b'\x00\x05N\xb1w\xcc\xb3\x80\xfe\x0e1\x01\x01\x897\x7f\x03\x00\\\xe7iD{\x14\xb0>\x1e\x15\x1c)'b'\x00\x05N\xb1w\xcc\xb3\xdc\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa2W'b'\x00\x05N\xb1w\xcc\xb40\xfe\x063\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xfc'b'\x00\x05N\xb1w\xcc\xb4\x80\xfe\x044\x01\x01\x98\x00\x00\xa0\x8a\x95\xcb'b'\x00\x05N\xb1w\xcc\xb5\x0c\xfe\x025\x01\x01*\x00\x00u\xd7'b'\x00\x05N\xb1w\xcc\xb5p\xfe\x1e6\x01\x01\x188\xe5\xa7\r\x00\x00\x00\x00/\xa6\x02\x18\xef\xe7\xb8\xfdJe\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cH\x9c'b'\x00\x05N\xb1w\xcc\xb5\xc8\xfe\x1a7\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xea|'b'\x00\x05N\xb1w\xcc\xb6\x10\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93'b'\x00\x05N\xb1w\xcc\xb6d\xfe\x159\x01\x01$"\xf2\xa8\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00%X'b'\x00\x05N\xb1w\xcc\xb6\xb4\xfe\x16:\x01\x01#7\x7f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x0c\x8f'b'\x00\x05N\xb1w\xcc\xb7\x04\xfe\x14;\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\x01\x01!\xf3~\x03\x00/\xa6\x02\x18\xef\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xab\x04\xc8\x9e'b'\x00\x05N\xb1w\xceB\xbc\xfe\x1c?\x01\x01\x1e\xd7\x7f\x03\x00e]\x80\xbd\xc0\x96\x96\xb8W\xb8U>\xaf\x8d\xb98\xb9h\x83\xba\x17l):-]'b'\x00\x05N\xb1w\xceC8\xfe\x18@\x01\x01\xb2UG\x81\xbdb*/\xbbd\\V>\x1e\xa5)D1\xa6\x02\x18\xf0\xe7\xb8\xfd\xd3\xff'b'\x00\x05N\xb1w\xceC\xd8\xfe\x1cA\x01\x01\xa3\xaa\xa60\xb9\t\x05\x978E\x1d\xf1\xb7\x00\x00\x00\x00\x00\x00\x00\x000,p:{G\x11;w\xff'b'\x00\x05N\xb1w\xceDh\xfe\x03B\x01\x01\xa5\xc5\x14\x00\xb9U'b'\x00\x05N\xb1w\xceE\x14\xfe\x0cC\x01\x01\x02`d\x13x\xb1N\x05\x00\xeb\x7f\x03\x00\xee\xc9'b'\x00\x05N\xb1w\xceE\x9c\xfe\x16D\x01\x01\x881\xa6\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\n'b'\x00\x05N\xb1w\xceE\xfc\xfe\x16E\x01\x01\xc1~4N<\x9f\x98M7\x7f\xb6\xec;\xc4c\xba=\x00\x00\x00\x00\xa5\x03\x14C'b'\x00\x05N\xb1w\xcerg\xfe5[\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01C\xa2'b'\x00\x05N\xb1w\xce\xb0\x9b\xfe!\\\xff\x00L\x90\xec\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe6\xfb'b'\x00\x05N\xb1w\xd0{\x07\xfe5]\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdd\x8d'b'\x00\x05N\xb1w\xd0\xb7g\xfe!^\xff\x00L\x90\xec\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00g\xa6'b'\x00\x05N\xb1w\xd1\xea8\xfe\x1aF\x01\x01\x1b\xb8\x9a\xac\r\x00\x00\x00\x00\x03\x004\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffm\x01\xb8\xe5'b"\x00\x05N\xb1w\xd1\xea\xd4\xfe\x16G\x01\x01t'\x80\x03\x00\x01\x00<\x00-\xfc\x01\x00\x00\x00\xfd\xff\x07\x01\xa0\xff3\x02\xb2\r"b"\x00\x05N\xb1w\xd1\xebH\xfe\x16H\x01\x01\x81'\x80\x03\x00\x02\x00A\x00\x1f\xfc\xfe\xff\x01\x00\xfd\xff%\x03\x87\x00k\x02\xc6\x8b"b"\x00\x05N\xb1w\xd1\xeb\xb0\xfe\x0eI\x01\x01\x1d'\x80\x03\x00\xa7\xa3iD\xebQ\x18=2\x107{"b"\x00\x05N\xb1w\xd1\xec\x0c\xfe\x0eJ\x01\x01\x89'\x80\x03\x00~\xe7iD\xf6(\xb1>\x1e\x15\xb7\xc5"b'\x00\x05N\xb1w\xd1\xecx\xfe\x1fK\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc8\xeb'b'\x00\x05N\xb1w\xd1\xec\xd8\xfe\x06L\x01\x01}\xc5\x14\x04\x00\x03\x00g\xbd'b'\x00\x05N\xb1w\xd1\xedT\xfe\x04M\x01\x01\x98\x00\x00\xa0\x8al\x17'b'\x00\x05N\xb1w\xd1\xed\xa8\xfe\x02N\x01\x01*\x00\x00\xbb\xb0'b'\x00\x05N\xb1w\xd1\xee\x0c\xfe\x1eO\x01\x01\x18x\xf2\xaa\r\x00\x00\x00\x001\xa6\x02\x18\xf0\xe7\xb8\xfd^e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cy\xb8'b'\x00\x05N\xb1w\xd1\xeel\xfe\x1aP\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00l\x9e'b'\x00\x05N\xb1w\xd1\xee\xc0\xfe\x08Q\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00}m'b'\x00\x05N\xb1w\xd1\xef\x1c\xfe\x15R\x01\x01$O\x9d\xac\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x144'b'\x00\x05N\xb1w\xd1\xefx\xfe\x16S\x01\x01#(\x80\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o\x17'b'\x00\x05N\xb1w\xd1\xef\xc8\xfe\x03T\x01\x01Ms\x00\x00\x97\x95'b'\x00\x05N\xb1w\xd2\x19\xc4\xfe\x14U\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xd1!Q:F\x13\xb8\xb9Z\x9d\x8f9\x9a\xbe'b'\x00\x05N\xb1w\xd2\xcbp\xfe\x18X\x01\x01\xb2?A\x81\xbd2i(\xbb\x16tV>\x85\xab)D2\xa6\x02\x18\xf0\xe7\xb8\xfd\xbd\xd3'b'\x00\x05N\xb1w\xd2\xcb\xd4\xfe\x1cY\x01\x01\xa3tW2\xb9\xd4\xaf\x9c8e<\xec\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xc1~:2\x88\xfa:\x9a\xf5'b'\x00\x05N\xb1w\xd2\xcc$\xfe\x03Z\x01\x01\xa5\xc5\x14\x00}#'b'\x00\x05N\xb1w\xd2\xcct\xfe\x0c[\x01\x01\x02\xd0c\x17x\xb1N\x05\x00\xdd\x80\x03\x00\xf3\x9e'b'\x00\x05N\xb1w\xd2\xcc\xcc\xfe\x16\\\x01\x01\x882\xa6\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00)\x16'b'\x00\x05N\xb1w\xd2\xcd$\xfe\x16]\x01\x01\xc1s\x0eG<\xe4\tM7\x87:0;\xd3\x95\xb7=\x00\x00\x00\x00\xa5\x03\xc1\xe2'b'\x00\x05N\xb1w\xd2\xcdl\xfe\x03^\x01\x01Ms\x00\x00D\xb3'b'\x00\x05N\xb1w\xd2\xe24\xfe\x1a_\x01\x01\x1bkI\xb0\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffn\x01\xa0\x00'b'\x00\x05N\xb1w\xd2\xe34\xfe\x16`\x01\x01t\x18\x81\x03\x00\x0c\x002\x00+\xfc\xfe\xff\x01\x00\x02\x00\x07\x01\xa0\xff3\x02\xbc\xaa'b'\x00\x05N\xb1w\xd2\xe3\xcc\xfe\x16a\x01\x01\x81\x18\x81\x03\x00\x04\x00A\x00 \xfc\xfd\xff\x01\x00\xfd\xff-\x03\x88\x00n\x025\xf2'b'\x00\x05N\xb1w\xd2\xe4H\xfe\x0eb\x01\x01\x1d\x19\x81\x03\x00\xee\xa3iD\x85\xeb)=2\x10\xd8\xce'b'\x00\x05N\xb1w\xd2\xe4\xbc\xfe\x0ec\x01\x01\x89\x19\x81\x03\x00O\xe6iD\x14\xae\xa7>\x1e\x15r\x01'b'\x00\x05N\xb1w\xd2\xe5L\xfe*d\x01\x01\x96s\xe7f\xbc\x10m\x01\x002\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xf9Q'b'\x00\x05N\xb1w\xd2\xe5\xd4\xfe\x1fe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x88\xf5'b'\x00\x05N\xb1w\xd2\xe6T\xfe\x06f\x01\x01}\xc5\x14\x00\x00\x03\x00ue'b'\x00\x05N\xb1w\xd2\xe6\xd0\xfe\x04g\x01\x01\x98\x00\x00\xa0\x8ae\x04'b'\x00\x05N\xb1w\xd2\xe7$\xfe\x02h\x01\x01*\x00\x00\xf5\x8b'b'\x00\x05N\xb1w\xd2\xe7\x8c\xfe\x1ei\x01\x01\x18\xa0\x03\xae\r\x00\x00\x00\x002\xa6\x02\x18\xf0\xe7\xb8\xfdhe\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xcb]'b'\x00\x05N\xb1w\xd2\xe7\xe8\xfe\x1aj\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00GQ'b'\x00\x05N\xb1w\xd2\xe8@\xfe\x08k\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00?\xa4'b'\x00\x05N\xb1w\xd2\xe8\xa0\xfe\x15l\x01\x01$,L\xb0\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc'b'\x00\x05N\xb1w\xd2\xe9\x00\xfe\x16m\x01\x01#\x19\x81\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00~)'b'\x00\x05N\xb1w\xd2\xe9P\xfe\x03n\x01\x01Ms\x00\x00\xcc^'b'\x00\x05N\xb1w\xd2\xfe\xa0\xfe\x12o\x01\x01\xfc%\x81\x03\x004\x00\x01\x00ARMMASK\x00Wrf.'b'\x00\x05N\xb1w\xd4)G\xfe5a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x00\xa6'b'\x00\x05N\xb1w\xd4\\S\xfe!b\xff\x00L)\xe4\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x84I'b'\x00\x05N\xb1w\xd4]4\xfe\tp\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1c\x18'b'\x00\x05N\xb1w\xd4]\xec\xfe\x14q\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xf6\x92\xfc9\x14\x10\x85\xba\xac\x92\xd29\xa2\x1a'b'\x00\x05N\xb1w\xd7C\x04\xfe\x18u\x01\x01\xb21D\x81\xbd\xcf\x04+\xbb\xc6\x8cV>R\xa8)D3\xa6\x02\x18\xf1\xe7\xb8\xfd\x9e\x10'b'\x00\x05N\xb1w\xd7Cl\xfe\x1cv\x01\x01\xa3\x1a\x014\xb9\xd6L\xa28u\xaa\xe7\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xbfG~:\x92}\x11;j\xef'b'\x00\x05N\xb1w\xd7C\xbc\xfe\x03w\x01\x01\xa5\xc5\x14\x00P/'b'\x00\x05N\xb1w\xd7D\x0c\xfe\x0cx\x01\x01\x02\x80\x05\x1bx\xb1N\x05\x00\xcd\x81\x03\x00\xb8\xb7'b'\x00\x05N\xb1w\xd7Dt\xfe\x16y\x01\x01\x883\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00z\x06'b'\x00\x05N\xb1w\xd7D\xcc\xfe\x16z\x01\x01\xc1.\xfe=<\x15\xcfK7\xba\xdf\xaa;\xaf\x84\xb3=\x00\x00\x00\x00\xa5\x03\xb3k'b'\x00\x05N\xb1w\xd7F \xfe\x1a{\x01\x01\x1b^\xf7\xb3\r\x00\x00\x00\x00\x03\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\r\x01\xae\xffn\x01jn'b'\x00\x05N\xb1w\xd7F|\xfe\x16|\x01\x01t\n\x82\x03\x00\x08\x00=\x00$\xfc\x03\x00\xfe\xff\x00\x00\x07\x01\xa0\xff5\x02\xf7\xdb'b'\x00\x05N\xb1w\xd7F\xd4\xfe\x16}\x01\x01\x81\n\x82\x03\x00\x01\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x8a\x00t\x02\xc2\xd3'b'\x00\x05N\xb1w\xd7G<\xfe\x0e~\x01\x01\x1d\n\x82\x03\x00x\xa3iD\xe1z\x0c=2\x10Yt'b'\x00\x05N\xb1w\xd7G\x88\xfe\x0e\x7f\x01\x01\x89\n\x82\x03\x00\xf2\xe6iD\x8f\xc2\xac>\x1f\x15L;'b'\x00\x05N\xb1w\xd7G\xe4\xfe\x1f\x80\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf6\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tz\xbe'b'\x00\x05N\xb1w\xd7H8\xfe\x06\x81\x01\x01}\xc8\x14\t\x00\x03\x00,\x07'b'\x00\x05N\xb1w\xd7H\x84\xfe\x04\x82\x01\x01\x98\x00\x00\xa0\x8a\xf0\xa3'b'\x00\x05N\xb1w\xd7H\xc8\xfe\x02\x83\x01\x01*\x00\x00\xef\xdf'b'\x00\x05N\xb1w\xd7I\x1c\xfe\x1e\x84\x01\x01\x18\xc8\x14\xb1\r\x00\x00\x00\x004\xa6\x02\x18\xf1\xe7\xb8\xfd\x90e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd0\xfd'b'\x00\x05N\xb1w\xd7Ip\xfe\x1a\x85\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00v>'b'\x00\x05N\xb1w\xd7I\xb4\xfe\x08\x86\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8a'b'\x00\x05N\xb1w\xd7J\x04\xfe\x15\x87\x01\x01$\xf6\xf9\xb3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00u_'b'\x00\x05N\xb1w\xd7JT\xfe\x16\x88\x01\x01#\n\x82\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf5\xcb'b'\x00\x05N\xb1w\xd8\x02\x9f\xfe5f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd4|'b'\x00\x05N\xb1w\xd8\x18\xb7\xfe!g\xff\x00L\x07\xe3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00i\x88'b'\x00\x05N\xb1w\xd8\xe2\xe0\xfe\x14\x89\x01\x01J\n\xd7#<\n\xd7#i;H\xb98\x80}\xba\x932\x01\xba\x80U'b'\x00\x05N\xb1w\xd8\xe5\x80\xfe\x18\x8e\x01\x01\xb2\xa5C\x81\xbd[n.\xbbJ\x95V>\x14\x9e)D4\xa6\x02\x18\xf1\xe7\xb8\xfd)\x98'b"\x00\x05N\xb1w\xd9 #\xfe%h\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00p\x80"b"\x00\x05N\xb1w\xd9\xd4\xab\xfe5i\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01'4"b'\x00\x05N\xb1w\xd9\xea\xdf\xfe!j\xff\x00L\x9b\xc4\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00u"'b'\x00\x05N\xb1w\xdb\xae\xaf\xfe5k\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa2\xd6'b'\x00\x05N\xb1w\xdb\xd7+\xfe!l\xff\x00L\x9b\xc4\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf6\xc4'b'\x00\x05N\xb1w\xdc\x88P\xfe\x1c\x8f\x01\x01\xa3\xe9\xa65\xb9m\xd8\xa78\xc9\x1b\xe3\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x97\x98\x84:\x05\x86\x1e;(\xc7'b'\x00\x05N\xb1w\xdc\x88\xdc\xfe\x03\x90\x01\x01\xa5\xc5\x14\x00\xbd\xab'b'\x00\x05N\xb1w\xdc\x89D\xfe\x0c\x91\x01\x01\x02\x00\xaf\x1ex\xb1N\x05\x00\xbe\x82\x03\x002?'b'\x00\x05N\xb1w\xdc\x89\xac\xfe\x16\x92\x01\x01\x884\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xda\x9b'b'\x00\x05N\xb1w\xdc\x8a\x0c\xfe\x16\x93\x01\x01\xc1\xe2zE\xcc=\x00\x00\x00\x00\xa5\x03-['b'\x00\x05N\xb1w\xdc\x8al\xfe\x03\x94\x01\x01/\xff\x00\x00RC'b'\x00\x05N\xb1w\xdc\x8b\x0c\xfe\x1a\x95\x01\x01\x1b\x94\xa0\xb7\r\x00\x00\x00\x00\x02\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffp\x01+\xea'b'\x00\x05N\xb1w\xdc\x8bx\xfe\x16\x96\x01\x01t\xfa\x82\x03\x00\x05\x000\x003\xfc\x00\x00\x02\x00\x01\x00\x07\x01\xa0\xff5\x02&\xde'b'\x00\x05N\xb1w\xdc\x8b\xe4\xfe\x16\x97\x01\x01\x81\xfa\x82\x03\x00\x02\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00k\x02B\xfe'b'\x00\x05N\xb1w\xdc\x8cD\xfe\x0e\x98\x01\x01\x1d\xfa\x82\x03\x00\xd5\xa3iD\n\xd7#=1\x10\x8bw'b'\x00\x05N\xb1w\xdc\x8c\xa4\xfe\x0e\x99\x01\x01\x89\xfa\x82\x03\x00e\xe5iD)\\\xa0>\x1d\x15\xd5\xcd'b'\x00\x05N\xb1w\xdc\x8d\x0c\xfe\x1f\x9a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfb\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti@'b'\x00\x05N\xb1w\xdc\x8dp\xfe\x06\x9b\x01\x01}\xc8\x14\x00\x00\x03\x00\x850'b'\x00\x05N\xb1w\xdc\x8d\xcc\xfe\x04\x9c\x01\x01\x98\x00\x00\xa0\x8a\xb1\x87'b'\x00\x05N\xb1w\xdc\x8e \xfe\x02\x9d\x01\x01*\x00\x00\x07\xec'b'\x00\x05N\xb1w\xdc\x8e\x84\xfe\x1e\x9e\x01\x01\x1803\xb7\r\x00\x00\x00\x005\xa6\x02\x18\xf1\xe7\xb8\xfd\xa4e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xdd\xde'b'\x00\x05N\xb1w\xdc\x8e\xd8\xfe\x1a\x9f\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00E\x96'b'\x00\x05N\xb1w\xdc\x8f \xfe\x08\xa0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00S"'b'\x00\x05N\xb1w\xdc\x8ft\xfe\x15\xa1\x01\x01$\x9a\xa3\xb7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xbe'b'\x00\x05N\xb1w\xdc\x8f\xc4\xfe\x16\xa2\x01\x01#\xfa\x82\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00a 'b'\x00\x05N\xb1w\xdc\x90\x0c\xfe\x03\xa3\x01\x01Ms\x00\x00\x02J'b'\x00\x05N\xb1w\xdc\xcfD\xfe\x14\xa4\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x99%'b'\x00\x05N\xb1w\xdc\xcf\xd0\xfe\x1c\xa5\x01\x01!\xde\x82\x03\x005\xa6\x02\x18\xf1\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x04\xa7\xea'b'\x00\x05N\xb1w\xddd\x84\xfe\x1c\xa6\x01\x01\x1e\x9a\x83\x03\x00yt\x80\xbd\x00\xe8\xb48\x98aU>\x81\x8cd:X\xd0(\xba\x9f\xc4\xc59\xc2\x8c'b'\x00\x05N\xb1w\xddd\xf4\xfe\x18\xa7\x01\x01\xb2\x14?\x81\xbd\xe1s*\xbbF\x98V>=\xaa)D5\xa6\x02\x18\xf1\xe7\xb8\xfdI\xa1'b'\x00\x05N\xb1w\xdde`\xfe\x1c\xa8\x01\x01\xa3\x19E7\xb9\xcb\\\xad8b\t\xdf\xb7\x00\x00\x00\x00\x00\x00\x00\x00N\xe8{:\xad\xf0$;\x03\xa9'b'\x00\x05N\xb1w\xdde\xb4\xfe\x03\xa9\x01\x01\xa5\xc8\x14\x00\xb9a'b'\x00\x05N\xb1w\xddf\x0c\xfe\x0c\xaa\x01\x01\x02\x80X"x\xb1N\x05\x00\xae\x83\x03\x00A\xcc'b'\x00\x05N\xb1w\xddfh\xfe\x16\xab\x01\x01\x887\xa6\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0fq'b'\x00\x05N\xb1w\xddf\xc4\xfe\x16\xac\x01\x01\xc1J\xecC\x1f\x15_\xd0'b'\x00\x05N\xb1w\xdf\x00\xf0\xfe\x1f\xb4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x97:'b'\x00\x05N\xb1w\xdf\x01L\xfe\x06\xb5\x01\x01}\xc5\x14\x00\x00\x03\x00\x9d\xb5'b'\x00\x05N\xb1w\xdf\x01\xa0\xfe\x04\xb6\x01\x01\x98\x00\x00\xa0\x8a\xb8\x94'b'\x00\x05N\xb1w\xdf\x01\xe8\xfe\x02\xb7\x01\x01*\x00\x00\xd3f'b'\x00\x05N\xb1w\xdf\x02@\xfe\x1e\xb8\x01\x01\x18p@\xba\r\x00\x00\x00\x007\xa6\x02\x18\xf2\xe7\xb8\xfd\xaee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x19\x96'b'\x00\x05N\xb1w\xdf\x02\x98\xfe\x1a\xb9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc7\x7f'b'\x00\x05N\xb1w\xdf\x02\xe4\xfe\x08\xba\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb1^'b'\x00\x05N\xb1w\xdf\x034\xfe\x15\xbb\x01\x01$\\O\xbb\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xfa'b'\x00\x05N\xb1w\xdf\x03\x88\xfe\x16\xbc\x01\x01#\xeb\x83\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfb\xb7'b'\x00\x05N\xb1w\xdf\x03\xcc\xfe\x03\xbd\x01\x01Ms\x00\x00w!'b'\x00\x05N\xb1w\xdf\x180\xfe\x14\xbe\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\t\x8e'b'\x00\x05N\xb1w\xdf\xab\x17\xfe5o\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb9\x1b'b'\x00\x05N\xb1w\xdf\xd3\xcb\xfe!p\xff\x00L\xd0\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa3\xbd'b'\x00\x05N\xb1w\xe1\x98\x07\xfe5q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01_\x8a'b'\x00\x05N\xb1w\xe1\xac\xf3\xfe!r\xff\x00L\xd0\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00"\xe0'b'\x00\x05N\xb1w\xe1\xe7\xf4\xfe\x1c\xbf\x01\x01!\xa6\x83\x03\x007\xa6\x02\x18\xf2\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xaa\x04\x1a5'b'\x00\x05N\xb1w\xe1\xe8\x90\xfe\x1c\xc0\x01\x01\x1e\x8a\x84\x03\x00V\xdd\x80\xbd\x00u\xd58\xa1hU>\xfd\x88\x08\xb9\xb6\r\xd1\xb9\xa9\xdd\xb4\xb9\xb6\xc4'b"\x00\x05N\xb1w\xe1\xe8\xfc\xfe\x18\xc1\x01\x01\xb2q~\x81\xbd\xa8k'\xbb\xf3\xbaV>\xb8\x9e)D8\xa6\x02\x18\xf2\xe7\xb8\xfd\xe2\xc3"b'\x00\x05N\xb1w\xe1\xe9\\\xfe\x1c\xc2\x01\x01\xa3/\xe28\xb9\x02\xcc\xb28\x90\xfb\xda\xb7\x00\x00\x00\x00\x00\x00\x00\x00x3\x80:\xd9\x03H;\xe4O'b'\x00\x05N\xb1w\xe1\xe9\xc8\xfe\x03\xc3\x01\x01\xa5\xc5\x14\x00\xe4\x1f'b'\x00\x05N\xb1w\xe1\xea\x1c\xfe\x0c\xc4\x01\x01\x02\x00\x02&x\xb1N\x05\x00\x9f\x84\x03\x00\xf1D'b'\x00\x05N\xb1w\xe1\xeat\xfe\x16\xc5\x01\x01\x888\xa6\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00r\xf7'b'\x00\x05N\xb1w\xe1\xea\xc8\xfe\x16\xc6\x01\x01\xc1\xf7\x97D<\xdf\xc5F7O&B<\x07\xc7\xbb=\x00\x00\x00\x00\xa5\x03w\xff'b'\x00\x05N\xb1w\xe2\x19d\xfe\x1a\xc7\x01\x01\x1b\xb3\xf9\xbe\r\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\x9bX'b'\x00\x05N\xb1w\xe2\x1a<\xfe\x16\xc8\x01\x01t\xdb\x84\x03\x00\x0c\x009\x00)\xfc\x00\x00\x00\x00\x02\x00\x07\x01\xa0\xff3\x02}!'b'\x00\x05N\xb1w\xe2\x1a\xe4\xfe\x16\xc9\x01\x01\x81\xdb\x84\x03\x00\x02\x00?\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x8c\x00o\x02\x9a\x1a'b'\x00\x05N\xb1w\xe2\x1bt\xfe\x0e\xca\x01\x01\x1d\xdb\x84\x03\x00\xee\xa3iD\x85\xeb)=3\x10\xa1\x97'b'\x00\x05N\xb1w\xe2\x1c$\xfe\x0e\xcb\x01\x01\x89\xdb\x84\x03\x00{\xe5iD=\n\xa1> \x15\xdd\xa4'b'\x00\x05N\xb1w\xe2\x1c\x94\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb23'b'\x00\x05N\xb1w\xe2\x1c\xf0\xfe\x06\xcd\x01\x01}\xca\x14\x00\x00\x03\x00\tN'b'\x00\x05N\xb1w\xe2\x1dD\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05'b'\x00\x05N\xb1w\xe2\x1d\x90\xfe\x02\xcf\x01\x01*\x00\x00s\xa9'b'\x00\x05N\xb1w\xe2\x1d\xfc\xfe\x1e\xd0\x01\x01\x18\x98Q\xbd\r\x00\x00\x00\x008\xa6\x02\x18\xf2\xe7\xb8\xfd\xc2e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd6.'b'\x00\x05N\xb1w\xe2\x1eX\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf'b'\x00\x05N\xb1w\xe2\x1e\xac\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5'b'\x00\x05N\xb1w\xe2\x1f\x04\xfe\x15\xd3\x01\x01$P\xfc\xbe\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00A\xec'b'\x00\x05N\xb1w\xe2\x1f\\\xfe\x16\xd4\x01\x01#\xdc\x84\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb2\x90'b'\x00\x05N\xb1w\xe2\x1f\xb0\xfe\x12\xd5\x01\x01\xfc\x10\x85\x03\x004\x00\x01\x00ARMMASK\x00Wr\x8dV'b'\x00\x05N\xb1w\xe2 \x04\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU'b'\x00\x05N\xb1w\xe3a\xbb\xfe5s\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdah'b'\x00\x05N\xb1w\xe3w\xf7\xfe!t\xff\x00L\xb3\xb5\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00&\x00'b'\x00\x05N\xb1w\xe3\x8d\x14\xfe\t\xd7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xfaK'b'\x00\x05N\xb1w\xe3\x8d\xbc\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\x00\x05N\xb1w\xe3\xa2`\xfe\x14\xd9\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00mZ'b'\x00\x05N\xb1w\xe3\xa2\xd8\xfe\x1c\xda\x01\x01!8\x85\x03\x009\xa6\x02\x18\xf3\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xaa\x04\x8fk'b'\x00\x05N\xb1w\xe3\xa3D\xfe\t\xca\n\x00m\x04\x00\x00\x00\x00\xd1\x00\x00\x00Z\xdf'b'\x00\x05N\xb1w\xe41o\xfe\tu\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf5b'b'\x00\x05N\xb1w\xe55\xaf\xfe5v\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8bP'b'\x00\x05N\xb1w\xe5u\x93\xfe!w\xff\x00L\xb3\xb5\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00o\xf7'b'\x00\x05N\xb1w\xe7\x19\xdf\xfe5x\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x012\xed'b'\x00\x05N\xb1w\xe7C\xcf\xfe!y\xff\x00L\xb3\xb5\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf9o'b'\x00\x05N\xb1w\xe7X\x94\xfe\x1c\xdb\x01\x01\x1e|\x85\x03\x00%\xe9\x80\xbd\x80\xa2\t8\x02wU>\xec\rn:a?\xba8%E\x89\xb9@\x1e'b'\x00\x05N\xb1w\xe7YH\xfe\x18\xdc\x01\x01\xb2Bw\x81\xbd\xb3b,\xbb$\xdfV>\x85\xab)D9\xa6\x02\x18\xf3\xe7\xb8\xfd\x9dQ'b'\x00\x05N\xb1w\xe7Y\xa8\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\x00\x05N\xb1w\xe7ZT\xfe\x1c\xde\x01\x01\xa3A\x80:\xb9M6\xb88}\xc8\xd6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xca\x85:g\xfd.;\xf0I'b'\x00\x05N\xb1w\xe7Z\xa8\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f'b'\x00\x05N\xb1w\xe7[\x10\xfe\x0c\xe0\x01\x01\x02xY)x\xb1N\x05\x00\x8f\x85\x03\x00K\xcf'b'\x00\x05N\xb1w\xe7[\x80\xfe\x16\xe1\x01\x01\x889\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00i\xb5'b'\x00\x05N\xb1w\xe7[\xe4\xfe\x12\xe2\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xbfy'b'\x00\x05N\xb1w\xe7\\L\xfe\x16\xe3\x01\x01\xc1\x1aH:!\x15f\xf8'b'\x00\x05N\xb1w\xe7^\xb4\xfe\x1f\xe9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe9\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfb\x9a'b'\x00\x05N\xb1w\xe7_\x10\xfe\x06\xea\x01\x01}\xc5\x14\x04\x00\x03\x00\x818'b'\x00\x05N\xb1w\xe7_`\xfe\x04\xeb\x01\x01\x98\x00\x00\xa0\x8a\x9d\x80'b'\x00\x05N\xb1w\xe7_\xa4\xfe\x02\xec\x01\x01*\x00\x00\x9eb'b'\x00\x05N\xb1w\xe7_\xf8\xfe\x1e\xed\x01\x01\x18\xc0b\xc0\r\x00\x00\x00\x009\xa6\x02\x18\xf3\xe7\xb8\xfd\xcce\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xb2"'b'\x00\x05N\xb1w\xe7`L\xfe\x1a\xee\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd5\xc9'b'\x00\x05N\xb1w\xe7`\x94\xfe\x08\xef\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00)t'b'\x00\x05N\xb1w\xe7`\xe4\xfe\x15\xf0\x01\x01$\x98\xa6\xc2\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3'b'\x00\x05N\xb1w\xe7a4\xfe\x16\xf1\x01\x01#\xcc\x85\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00$\xef'b'\x00\x05N\xb1w\xe7w\\\xfe\x14\xf2\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x8f~'b'\x00\x05N\xb1w\xe8\x1c<\xfe\x1c\xf3\x01\x01!\x00\x86\x03\x00:\xa6\x02\x18\xf3\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa9\x04S\xce'b'\x00\x05N\xb1w\xe8\x1c\xe8\xfe\x1c\xf4\x01\x01\x1el\x86\x03\x006\x10\x81\xbd\x80Ae8:aU>@\xfa%9\xb2t\x15\xba\x94\xa8O:\xda\xaa'b'\x00\x05N\xb1w\xe8\x1dl\xfe\x18\xf5\x01\x01\xb2\x05\x89\x81\xbd\x7fs,\xbbW\xf4V>\x85\xab)D:\xa6\x02\x18\xf3\xe7\xb8\xfd\x1a5'b'\x00\x05N\xb1w\xe8\x1d\xe4\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3'b'\x00\x05N\xb1w\xe8\x1e\x90\xfe\x03\xf7\x01\x01Ms\x00\x00Ub'b'\x00\x05N\xb1w\xe8\x1f<\xfe\x1c\xf8\x01\x01\xa3I\x1e<\xb9\xe3\x9b\xbd80y\xd2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x15\x90:\x1e\xde*;\x10\xb0'b'\x00\x05N\xb1w\xe8\x1f\xb0\xfe\x03\xf9\x01\x01\xa5\xc5\x14\x00\xbf\xd4'b'\x00\x05N\xb1w\xe8 $\xfe\x0c\xfa\x01\x01\x02\x00U-x\xb1N\x05\x00\x80\x86\x03\x00{\xd8'b'\x00\x05N\xb1w\xe8 \xa4\xfe\x16\xfb\x01\x01\x88:\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x04\r'b'\x00\x05N\xb1w\xe8! \xfe\x16\xfc\x01\x01\xc1\xc9S;"\x15d\x18'b'\x00\x05N\xb1w\xe9\xa7\x98\xfe\x1f\x02\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd0R'b'\x00\x05N\xb1w\xe9\xa7\xfc\xfe\x06\x03\x01\x01}\xc8\x14\x00\x00\x03\x00qo'b'\x00\x05N\xb1w\xe9\xa8X\xfe\x04\x04\x01\x01\x98\x00\x00\xa0\x8a8\xc3'b'\x00\x05N\xb1w\xe9\xa8\xa8\xfe\x02\x05\x01\x01*\x00\x00?\x01'b'\x00\x05N\xb1w\xe9\xa9\x08\xfe\x1e\x06\x01\x01\x18\x00p\xc3\r\x00\x00\x00\x00<\xa6\x02\x18\xf4\xe7\xb8\xfd\xeae\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c;\r'b'\x00\x05N\xb1w\xe9\xa9p\xfe\x1a\x07\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00~('b'\x00\x05N\xb1w\xe9\xa9\xc8\xfe\x08\x08\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x009|'b'\x00\x05N\xb1w\xe9\xaa$\xfe\x15\t\x01\x01$~T\xc6\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xdc'b'\x00\x05N\xb1w\xe9\xaa|\xfe\x16\n\x01\x01#\xbd\x86\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00H\xa5'b'\x00\x05N\xb1w\xe9\xaa\xcc\xfe\x03\x0b\x01\x01Ms\x00\x00\xac\x1a'b'\x00\x05N\xb1w\xe9\xabX\xfe\x03\x0c\x01\x01/\xff\x00\x00t\xfe'b'\x00\x05N\xb1w\xea\xeb\xbf\xfe5}\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01c\xd5'b'\x00\x05N\xb1w\xeb\x14\xc7\xfe!~\xff\x00L2\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa8\x9f'b'\x00\x05N\xb1w\xec\xd0\xaf\xfe5\x7f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe67'b'\x00\x05N\xb1w\xec\xd1\xd8\xfe\x1c\x11\x01\x01\xa3\x87\xb7=\xb9t\x04\xc38\x06\\\xce\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xdah\x92:\x0e 1;\x91\xa1'b'\x00\x05N\xb1w\xec\xd2l\xfe\x03\x12\x01\x01\xa5\xc8\x14\x00\xbf\xe0'b'\x00\x05N\xb1w\xec\xd2\xcc\xfe\x0c\x13\x01\x01\x02\x80\xfe0x\xb1N\x05\x00q\x87\x03\x00\xe0\xbd'b'\x00\x05N\xb1w\xec\xd3P\xfe\x16\x14\x01\x01\x88<\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90\xb8'b'\x00\x05N\xb1w\xec\xd3\xd4\xfe\x16\x15\x01\x01\xc1\xd1X,<\x90\x9f?7\xde\x907;\xb6\xb5\xb8=\x00\x00\x00\x00\xa5\x03}\xdf'b'\x00\x05N\xb1w\xec\xd4\\\xfe\x1a\x16\x01\x01\x1b\xbb\xfd\xc9\r\x00\x00\x00\x00\x05\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffn\x01\x07E'b'\x00\x05N\xb1w\xec\xd4\xe0\xfe\x16\x17\x01\x01t\xad\x87\x03\x00\x0e\x008\x00-\xfc\xff\xff\xfd\xff\x00\x00\x07\x01\xa0\xff3\x02\x14p'b'\x00\x05N\xb1w\xec\xd5d\xfe\x16\x18\x01\x01\x81\xad\x87\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x88\x00n\x025\x03'b'\x00\x05N\xb1w\xec\xd5\xdc\xfe\x0e\x19\x01\x01\x1d\xad\x87\x03\x00i\xa3iD\xd7\xa3\x08=3\x10\xa5&'b'\x00\x05N\xb1w\xec\xd6P\xfe\x0e\x1a\x01\x01\x89\xad\x87\x03\x00p\xe5iDR\xb8\xa0>"\x15?\x8f'b'\x00\x05N\xb1w\xec\xd6\xd8\xfe\x1f\x1b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf1\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti\x19'b'\x00\x05N\xb1w\xec\xd7P\xfe\x06\x1c\x01\x01}\xc8\x14\x00\x00\x03\x00x\x02'b'\x00\x05N\xb1w\xec\xd7\xac\xfe\x04\x1d\x01\x01\x98\x00\x00\xa0\x8a\x9b\x0e'b'\x00\x05N\xb1w\xec\xd8\x00\xfe\x02\x1e\x01\x01*\x00\x00t\xc2'b'\x00\x05N\xb1w\xec\xd8l\xfe\x1e\x1f\x01\x01\x18h\x8e\xc9\r\x00\x00\x00\x00>\xa6\x02\x18\xf5\xe7\xb8\xfd\xfee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2k'b'\x00\x05N\xb1w\xec\xd8\xd0\xfe\x1a \x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc8\x04'b'\x00\x05N\xb1w\xec\xd9(\xfe\x08!\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\\\xe1'b'\x00\x05N\xb1w\xec\xd9\x8c\xfe\x15"\x01\x01$\xee\x01\xca\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xfc'b'\x00\x05N\xb1w\xec\xd9\xf0\xfe\x16#\x01\x01#\xae\x87\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc7\x8b'b'\x00\x05N\xb1w\xec\xdaH\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b'\x00\x05N\xb1w\xed\x0f#\xfe!\x80\xff\x00L2\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xed:'b'\x00\x05N\xb1w\xeeTX\xfe\x03%\x01\x01Ms\x00\x00Q\x9c'b'\x00\x05N\xb1w\xeei\xa8\xfe\x14&\x01\x01J\n\xd7#<\n\xd7#\xa6\x02\x18\xf5\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfd\xff\x01\x00\x00\x00\xaa\x04\xb6\x92"b'\x00\x05N\xb1w\xee\xbd\xe3\xfe5\x81\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01+%'b'\x00\x05N\xb1w\xef\x00/\xfe!\x82\xff\x00L2\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00lg'b'\x00\x05N\xb1w\xf0\xc4#\xfe5\x83\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xae\xc7'b'\x00\x05N\xb1w\xf0\xc5+\xfe!\x84\xff\x00L2\xb0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xef\x81'b'\x00\x05N\xb1w\xf1\xf1P\xfe\x1c(\x01\x01\x1eN\x88\x03\x00\xc7\x82\x81\xbd\xc0\x02!92\x90U>\xb8\xcd\x0e:O6p\xbazNJ:.\xd1'b'\x00\x05N\xb1w\xf1\xf1\xf8\xfe\x18)\x01\x01\xb2\x14\xb6\x81\xbd\x1dL,\xbb\xdaSW>\xe1\xaa)D>\xa6\x02\x18\xf5\xe7\xb8\xfdg\x85'b'\x00\x05N\xb1w\xf1\xf2l\xfe\x1c*\x01\x01\xa3\x05P?\xb9\xffl\xc88\xce\x0c\xca\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x07\x03\x94:\xe5\xb0\x16;\xc40'b'\x00\x05N\xb1w\xf1\xf2\xc8\xfe\x03+\x01\x01\xa5\xc8\x14\x004\xa1'b'\x00\x05N\xb1w\xf1\xf3$\xfe\x0c,\x01\x01\x02\x00\xa84x\xb1N\x05\x00b\x88\x03\x00a\x92'b'\x00\x05N\xb1w\xf1\xf3\x88\xfe\x16-\x01\x01\x88?\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6|'b'\x00\x05N\xb1w\xf1\xf3\xe0\xfe\x16.\x01\x01\xc1\x97\x98$<\xc9\xf1;7Q\x87\x90:RO\xb6=\x00\x00\x00\x00\xa5\x03\x95:'b'\x00\x05N\xb1w\xf1\xf4\\\xfe\x030\x01\x01Ms\x00\x00HP'b'\x00\x05N\xb1w\xf2\t\xe4\xfe\x1a1\x01\x01\x1b|\xaa\xcd\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01Ib'b'\x00\x05N\xb1w\xf2\nH\xfe\x162\x01\x01t\x9e\x88\x03\x00\x06\x007\x005\xfc\xff\xff\xfe\xff\x02\x00\x07\x01\xa0\xff3\x02/|'b'\x00\x05N\xb1w\xf2\n\xa8\xfe\x163\x01\x01\x81\x9e\x88\x03\x00\x02\x00A\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff(\x03\x8a\x00x\x02Z\xd3'b'\x00\x05N\xb1w\xf2\n\xfc\xfe\x0e4\x01\x01\x1d\x9e\x88\x03\x00\x1e\xa5iD{\x14v=4\x10Df'b'\x00\x05N\xb1w\xf2\x0bH\xfe\x0e5\x01\x01\x89\x9e\x88\x03\x00\xb7\xe6iD\x85\xeb\xaa>$\x15|\xeb'b'\x00\x05N\xb1w\xf2\x0b\xa4\xfe\x1f6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\r\xfa'b'\x00\x05N\xb1w\xf2\x0b\xf8\xfe\x067\x01\x01}\xc8\x14\x00\x00\x03\x00\xeb\xa2'b'\x00\x05N\xb1w\xf2\x0cD\xfe\x048\x01\x01\x98\x00\x00\xa0\x8a\xba\x8b'b'\x00\x05N\xb1w\xf2\x0c\x88\xfe\x029\x01\x01*\x00\x00\xeff'b'\x00\x05N\xb1w\xf2\x0c\xdc\xfe\x1e:\x01\x01\x18\x90\x9f\xcc\r\x00\x00\x00\x00?\xa6\x02\x18\xf5\xe7\xb8\xfd\x12f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x18J'b'\x00\x05N\xb1w\xf2\r0\xfe\x1a;\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcfi'b'\x00\x05N\xb1w\xf2\rx\xfe\x08<\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x85'b'\x00\x05N\xb1w\xf2\r\xc8\xfe\x15=\x01\x01$2\xad\xcd\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xb5'b'\x00\x05N\xb1w\xf2\x0e\x14\xfe\x16>\x01\x01#\x9f\x88\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe4\xd7'b'\x00\x05N\xb1w\xf2\x0ed\xfe\x14?\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x000?'b'\x00\x05N\xb1w\xf2\x0e\xc8\xfe\x12@\x01\x01\xfc\xfa\x88\x03\x004\x00\x01\x00ARMMASK\x00Wr(t'b'\x00\x05N\xb1w\xf2\x0f,\xfe\tA\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9e\x15'b'\x00\x05N\xb1w\xf2\xa2\xab\xfe5\x85\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x010\xe8'b'\x00\x05N\xb1w\xf2\xcc\x8f\xfe!\x86\xff\x00Lw\xd1\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x99\x81'b'\x00\x05N\xb1w\xf2\xe6\xa8\xfe\x1cB\x01\x01!Z\x88\x03\x00?\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x01\x00\x00\x00\xaa\x04B|'b'\x00\x05N\xb1w\xf2\xe7,\xfe\x03C\x01\x01Ms\x00\x00\xe1R'b'\x00\x05N\xb1w\xf2\xfb\xd4\xfe\x1cD\x01\x01\x1e>\x89\x03\x00<\xc1\x81\xbd\xb0\xcb\x8897\x8eU>\x9a\x8e\xe07\xd4D\xcf\xba\xaf\xdb\xa97\xac0'b'\x00\x05N\xb1w\xf2\xfcD\xfe\x18E\x01\x01\xb2\xc7\xe4\x81\xbd\xdc\xd0(\xbb\x19fW>\x1e\xa5)D@\xa6\x02\x18\xf6\xe7\xb8\xfdWT'b'\x00\x05N\xb1w\xf2\xfc\x98\xfe\t\xcb\n\x00m\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xe0\x0c'b'\x00\x05N\xb1w\xf2\xfc\xf0\xfe\x1cF\x01\x01\xa3\x9d\xe1@\xb9:\xd0\xcd8-\xec\xc5\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xda\x8a:\x0e\xca\x1a;\x8c\xb3'b'\x00\x05N\xb1w\xf2\xfd4\xfe\x03G\x01\x01\xa5\xc8\x14\x00WI'b'\x00\x05N\xb1w\xf2\xfd\x80\xfe\x0cH\x01\x01\x02\x80Q8x\xb1N\x05\x00R\x89\x03\x00]D'b'\x00\x05N\xb1w\xf2\xfd\xd4\xfe\x16I\x01\x01\x88@\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe9e'b'\x00\x05N\xb1w\xf2\xfe(\xfe\x16J\x01\x01\xc1\xda\xc4#\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00k\x02\xe1J'b'\x00\x05N\xb1w\xf4\\\xc0\xfe\x0eO\x01\x01\x1d\x8e\x89\x03\x00\x02\xa3iD{\x14\xde<2\x10L\xc0'b'\x00\x05N\xb1w\xf4]\x0c\xfe\x0eP\x01\x01\x89\x8e\x89\x03\x00x\xe7iD\xc2\xf5\xb0>#\x15\x8e\x99'b'\x00\x05N\xb1w\xf4]h\xfe\x1fQ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TW\x88'b'\x00\x05N\xb1w\xf4]\xb8\xfe\x06R\x01\x01}\xc2\x14\x00\x00\x03\x00\xf7o'b'\x00\x05N\xb1w\xf4^\x04\xfe\x04S\x01\x01\x98\x00\x00\xa0\x8a-3'b'\x00\x05N\xb1w\xf4^H\xfe\x02T\x01\x01*\x00\x00%\xec'b'\x00\x05N\xb1w\xf4^\xa0\xfe\x1eU\x01\x01\x18\xb8\xb0\xcf\r\x00\x00\x00\x00@\xa6\x02\x18\xf6\xe7\xb8\xfd\x12f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c5%'b'\x00\x05N\xb1w\xf4^\xf4\xfe\x1aV\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf6\x10'b'\x00\x05N\xb1w\xf4_<\xfe\x08W\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x93p'b'\x00\x05N\xb1w\xf4_\x8c\xfe\x15X\x01\x01$RX\xd1\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xc9'b'\x00\x05N\xb1w\xf4_\xd8\xfe\x16Y\x01\x01#\x8f\x89\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb6?'b'\x00\x05N\xb1w\xf4\x91W\xfe5\x88\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01FB'b'\x00\x05N\xb1w\xf4\xbb\x8f\xfe!\x89\xff\x00L\xa2\xd0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb4\xaa'b'\x00\x05N\xb1w\xf6v_\xfe5\x8a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc3\xa0'b'\x00\x05N\xb1w\xf6\x9fs\xfe!\x8b\xff\x00L\xa2\xd0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x005\xf7'b'\x00\x05N\xb1w\xf7.l\xfe\x14Z\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x16\xb3'b'\x00\x05N\xb1w\xf7.\xf8\xfe\x03[\x01\x01Ms\x00\x00%$'b'\x00\x05N\xb1w\xf7C\xa4\xfe\x1c\\\x01\x01!\xeb\x89\x03\x00A\xa6\x02\x18\xf6\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x00\x00\x00\x00\xaa\x04\\\xb7'b'\x00\x05N\xb1w\xf7h\xe0\xfe\x1c]\x01\x01\x1e/\x8a\x03\x00\x8a\xc2\x81\xbd \xbe\xb59MpU>\x84vg:\x85\xe5D\xbaw\xd9\t\xb9r\x8c'b"\x00\x05N\xb1w\xf7i\xa4\xfe\x18^\x01\x01\xb2\xda\xdf\x81\xbdp\x82'\xbb\xbfrW>\x8f\xb2)DA\xa6\x02\x18\xf6\xe7\xb8\xfd\xe0\x80"b'\x00\x05N\xb1w\xf7jX\xfe\x1c_\x01\x01\xa3OhB\xb9\xa2:\xd38\xbe\x08\xc2\xb7\x00\x00\x00\x00\x00\x00\x00\x00X\xdf\x8f:\x15\n\xf7:/\x17'b'\x00\x05N\xb1w\xf7j\xcc\xfe\x03`\x01\x01\xa5\xc5\x14\x00&\xe8'b'\x00\x05N\xb1w\xf7kP\xfe\x0ca\x01\x01\x02\x00\xfb;x\xb1N\x05\x00C\x8a\x03\x00\x17\xea'b'\x00\x05N\xb1w\xf7k\xe8\xfe\x16b\x01\x01\x88A\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x000\x81'b'\x00\x05N\xb1w\xf7l\x88\xfe\x16c\x01\x01\xc1J\xdf\x1a<\x13l47\xa12\xa7;4\x14\xb2=\x00\x00\x00\x00\xa5\x03\x94p'b'\x00\x05N\xb1w\xf7m0\xfe\x1ad\x01\x01\x1b\xbf\x01\xd5\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffn\x01\xc9\xdd'b'\x00\x05N\xb1w\xf7m\xe4\xfe\x16e\x01\x01t\x7f\x8a\x03\x00\x05\x009\x00.\xfc\xfd\xff\xfd\xff\xff\xff\x07\x01\xa1\xff4\x02\xc3\xfe'b'\x00\x05N\xb1w\xf7n\x88\xfe\x16f\x01\x01\x81\x7f\x8a\x03\x00\x02\x00@\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x8d\x00p\x02\x1eC'b'\x00\x05N\xb1w\xf7o4\xfe\x0eg\x01\x01\x1d\x7f\x8a\x03\x003\xa3iDff\xf6<3\x10^\xf2'b'\x00\x05N\xb1w\xf7o\xc4\xfe\x0eh\x01\x01\x89\x7f\x8a\x03\x00\xb8\xe6iD\xc2\xf5\xaa>#\x15\xa6\xac'b'\x00\x05N\xb1w\xf7pt\xfe\x1fi\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xce\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T4,'b'\x00\x05N\xb1w\xf7q\x10\xfe\x06j\x01\x01}\xc5\x14\x00\x00\x03\x00\x8a\x87'b'\x00\x05N\xb1w\xf7q\x9c\xfe\x04k\x01\x01\x98\x00\x00\xa0\x8aJD'b'\x00\x05N\xb1w\xf7r,\xfe\x02l\x01\x01*\x00\x00\x83\xe4'b'\x00\x05N\xb1w\xf7r\xf8\xfe\x1em\x01\x01\x18\xf8\xbd\xd2\r\x00\x00\x00\x00A\xa6\x02\x18\xf6\xe7\xb8\xfd\x1cf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cZ-'b'\x00\x05N\xb1w\xf7s\x9c\xfe\x1an\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa4]'b'\x00\x05N\xb1w\xf7t0\xfe\x08o\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xb2'b'\x00\x05N\xb1w\xf7t\xc8\xfe\x15p\x01\x01$\xc5\x04\xd5\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00I\xbe'b'\x00\x05N\xb1w\xf7u`\xfe\x16q\x01\x01#\x80\x8a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc8\x9c'b'\x00\x05N\xb1w\xf7u\xe0\xfe\x03r\x01\x01Ms\x00\x00\xd6>'b'\x00\x05N\xb1w\xf8\x91\x07\xfe5\x8c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01]\x8f'b'\x00\x05N\xb1w\xf8\xcf\x03\xfe!\x8d\xff\x00L9\xbc\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x008#'b'\x00\x05N\xb1w\xf9\x01\xf4\xfe\x14s\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\xdb\x98O:\r\xa9p\xba\xc1\x9f#\xba\xa8}'b'\x00\x05N\xb1w\xfawd\xfe\x18w\x01\x01\xb2\xaa\xd9\x81\xbdv.)\xbb\x7f\x90W>\xf6\xa8)DC\xa6\x02\x18\xf6\xe7\xb8\xfd\xc8\xda'b'\x00\x05N\xb1w\xfaw\xa8\xfe\x03x\x01\x01/\xff\x00\x00\xd3`'b'\x00\x05N\xb1w\xfax@\xfe\x1cy\x01\x01\xa3\xf9\xe4C\xb9\xff\x9d\xd88\xcb,\xbe\xb7\x00\x00\x00\x00\x00\x00\x00\x00*\xa4\x8a:\xf1\xb0\xcd:V\xbc'b'\x00\x05N\xb1w\xfax\x9c\xfe\x03z\x01\x01\xa5\xc5\x14\x00\x8d\x95'b'\x00\x05N\xb1w\xfax\xfc\xfe\x0c{\x01\x01\x02`V?x\xb1N\x05\x004\x8b\x03\x00\x1f\xfc'b'\x00\x05N\xb1w\xfayd\xfe\x16|\x01\x01\x88C\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5\xf1'b'\x00\x05N\xb1w\xfay\xc8\xfe\x16}\x01\x01\xc1\x10J%<5927\x05\r%;\xc1\xd0\xb7=\x00\x00\x00\x00\xa5\x03\xe1\xcd'b'\x00\x05N\xb1w\xfa\xb5\xff\xfe5\x8f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x92\x98'b'\x00\x05N\xb1w\xfa\xccS\xfe!\x90\xff\x00L\xbb\xb7\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd1d'b'\x00\x05N\xb1w\xfb\xf8x\xfe\x1a~\x01\x01\x1b@\xb1\xd8\r\x00\x00\x00\x00\x04\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01fo'b'\x00\x05N\xb1w\xfb\xf9\x00\xfe\x16\x7f\x01\x01tq\x8b\x03\x00\x06\x00.\x00-\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02V\x8b'b'\x00\x05N\xb1w\xfb\xf9\x88\xfe\x16\x80\x01\x01\x81q\x8b\x03\x00\x04\x00A\x00"\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x88\x00o\x02tN'b'\x00\x05N\xb1w\xfb\xf9\xe4\xfe\x0e\x81\x01\x01\x1dq\x8b\x03\x00a\xa3iDR\xb8\x06=4\x10\xd53'b'\x00\x05N\xb1w\xfb\xfa<\xfe\x0e\x82\x01\x01\x89q\x8b\x03\x00\x93\xe7iD\xcd\xcc\xb1>%\x15\x96\x05'b'\x00\x05N\xb1w\xfb\xfa\xa0\xfe*\x83\x01\x01\x96s\xe7f\xbc\x0fm\x01\x004\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xbdl'b'\x00\x05N\xb1w\xfb\xfb\x00\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TX\xa2'b'\x00\x05N\xb1w\xfb\xfb\\\xfe\x06\x85\x01\x01}\xc5\x14\x00\x00\x03\x00R&'b'\x00\x05N\xb1w\xfb\xfb\xac\xfe\x04\x86\x01\x01\x98\x00\x00\xa0\x8a\x15\x9c'b'\x00\x05N\xb1w\xfb\xfb\xf4\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0'b'\x00\x05N\xb1w\xfb\xfcL\xfe\x1e\x88\x01\x01\x18(\x92\xd8\r\x00\x00\x00\x00D\xa6\x02\x18\xf6\xe7\xb8\xfd0f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xa5\xd2'b'\x00\x05N\xb1w\xfb\xfc\xa4\xfe\x1a\x89\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00S+'b'\x00\x05N\xb1w\xfb\xfc\xec\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1'b'\x00\x05N\xb1w\xfb\xfd@\xfe\x15\x8b\x01\x01$\x89\xb4\xd8\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00IZ'b'\x00\x05N\xb1w\xfb\xfd\x94\xfe\x16\x8c\x01\x01#q\x8b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x08\xb9'b'\x00\x05N\xb1w\xfb\xfd\xdc\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc'b'\x00\x05N\xb1w\xfc\x8c\xaf\xfe5\x91\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01t\t'b'\x00\x05N\xb1w\xfc\xa3\x07\xfe!\x92\xff\x00L\xbb\xb7\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00P9'b'\x00\x05N\xb1w\xfd\x8fT\xfe\x14\x8e\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x01\xa5e9\xa0\x1c@\xbaX\xa58:\x11p'b'\x00\x05N\xb1w\xfd\xa4\xf0\xfe\x18\x92\x01\x01\xb2\xaf\xd7\x81\xbd{K+\xbb\xa4\x93W>\x00\xa0)DD\xa6\x02\x18\xf6\xe7\xb8\xfd\xb5\xb6'b'\x00\x05N\xb1w\xfei+\xfe5\x93\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf1\xeb'b'\x00\x05N\xb1w\xfe\x7fw\xfe!\x94\xff\x00Lb\xa3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x85x'b'\x00\x05N\xb1w\xff\x0c$\xfe\x1c\x93\x01\x01\xa33TE\xb9\xf4\xf9\xdd8\x99z\xba\xb7\x00\x00\x00\x00\x00\x00\x00\x00`\x0e\x8f:"S\x04;\x85j'b'\x00\x05N\xb1w\xff\x0c\x84\xfe\x03\x94\x01\x01\xa5\xc5\x14\x00c\xbd'b'\x00\x05N\xb1w\xff\x0c\xd4\xfe\x0c\x95\x01\x01\x02\xe8QCx\xb1N\x05\x00&\x8c\x03\x00\x85I'b'\x00\x05N\xb1w\xff\r,\xfe\x16\x96\x01\x01\x88D\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00M>'b'\x00\x05N\xb1w\xff\r|\xfe\x16\x97\x01\x01\xc1\xedN\x1f$\x15\xa3z'b'\x00\x05N\xb1w\xff\x0fh\xfe\x1f\x9d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdd\x7f'b'\x00\x05N\xb1w\xff\x0f\xbc\xfe\x06\x9e\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e\x15'b'\x00\x05N\xb1w\xff\x10\x10\xfe\x04\x9f\x01\x01\x98\x00\x00\xa0\x8a\xb6Q'b'\x00\x05N\xb1w\xff\x10T\xfe\x02\xa0\x01\x01*\x00\x00\x02\x14'b'\x00\x05N\xb1w\xff\x10\xa8\xfe\x1e\xa1\x01\x01\x18p\xf1\xdb\r\x00\x00\x00\x00D\xa6\x02\x18\xf6\xe7\xb8\xfd:f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cl\xb4'b'\x00\x05N\xb1w\xff\x10\xf8\xfe\x1a\xa2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc0\x12'b'\x00\x05N\xb1w\xff\x11@\xfe\x08\xa3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa4,'b'\x00\x05N\xb1w\xff\x11\x8c\xfe\x15\xa4\x01\x01$\xe3a\xdc\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x9b'b'\x00\x05N\xb1w\xff\x11\xdc\xfe\x16\xa5\x01\x01#b\x8c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00zx'b'\x00\x05N\xb1w\xff\x12 \xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd'b'\x00\x05N\xb1x\x00I\x83\xfe5\x95\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01o\xc4'b'\x00\x05N\xb1x\x00_\xaf\xfe!\x96\xff\x00Lb\xa3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x04%'b'\x00\x05N\xb1x\x00\x99D\xfe\x14\xa7\x01\x01J\n\xd7#<\n\xd7#\xdc!F9\xd6\xb9\xa3\xbaP_\x02\xb7\xbd:'b"\x00\x05N\xb1x\x02\x15|\xfe\x18\xad\x01\x01\xb2*\xf6\x81\xbd\x9f',\xbb\xe6\xaaW>\xa4\xb0)DD\xa6\x02\x18\xf6\xe7\xb8\xfd\xd0^"b'\x00\x05N\xb1x\x02\x15\xe0\xfe\x1c\xae\x01\x01\xa3\xf8\xb7F\xb9\xccR\xe38M\x9f\xb6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86\xef\x84:S\xc8\n;|\xe5'b'\x00\x05N\xb1x\x02\x16$\xfe\x03\xaf\x01\x01\xa5\xc8\x14\x00\x08|'b'\x00\x05N\xb1x\x02\x16p\xfe\x0c\xb0\x01\x01\x02h\xfbFx\xb1N\x05\x00\x17\x8d\x03\x00\x1b\x8b'b'\x00\x05N\xb1x\x02\x16\xc0\xfe\x16\xb1\x01\x01\x88E\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc7\x19'b'\x00\x05N\xb1x\x02\x17\x10\xfe\x16\xb2\x01\x01\xc1`{\x1f<\xd5@.7\xaa\xe1g;\x97;\xbd=\x00\x00\x00\x00\xa5\x03\xe5\xe7'b'\x00\x05N\xb1x\x02\x17\x84\xfe\t\xcc\n\x00m\x01\x00\x00\x00\x00\xd4\x00\x00\x00\xd8k'b'\x00\x05N\xb1x\x02Q\xaf\xfe5\x97\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xea&'b'\x00\x05N\xb1x\x02\x8f\xbb\xfe!\x98\xff\x00L\x18\xa0\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdc\xc8'b'\x00\x05N\xb1x\x02\xe1w\xfe\t\x99\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03!\x1e'b'\x00\x05N\xb1x\x03\xa8\xa0\xfe\x1a\xb4\x01\x01\x1b\xae\x0c\xe0\r\x00\x00\x00\x00\x04\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01\x0b\\'b'\x00\x05N\xb1x\x03\xa9\x10\xfe\x16\xb5\x01\x01tS\x8d\x03\x00\x02\x007\x002\xfc\x00\x00\xff\xff\x00\x00\x07\x01\xa0\xff3\x02\xed\x8a'b'\x00\x05N\xb1x\x03\xa9l\xfe\x16\xb6\x01\x01\x81S\x8d\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x86\x00n\x02\xa4\xe3'b'\x00\x05N\xb1x\x03\xa9\xbc\xfe\x0e\xb7\x01\x01\x1dS\x8d\x03\x00\x0c\xa4iD\x99\x991=5\x10\xbcC'b"\x00\x05N\xb1x\x03\xaa\x08\xfe\x0e\xb8\x01\x01\x89S\x8d\x03\x00\x93\xe7iD\xcd\xcc\xb1>'\x15Zs"b'\x00\x05N\xb1x\x03\xaa`\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x001?9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd6\xe9'b'\x00\x05N\xb1x\x03\xaa\xb4\xfe\x06\xba\x01\x01}\xc8\x14\x00\x00\x03\x00\x9e\x87'b'\x00\x05N\xb1x\x03\xab\x00\xfe\x04\xbb\x01\x01\x98\x00\x00\xa0\x8aj\x99'b'\x00\x05N\xb1x\x03\xabD\xfe\x02\xbc\x01\x01*\x00\x00Q\x10'b'\x00\x05N\xb1x\x03\xab\x9c\xfe\x1e\xbd\x01\x01\x18\x98\x02\xdf\r\x00\x00\x00\x00E\xa6\x02\x18\xf6\xe7\xb8\xfdDf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf4\x9a'b'\x00\x05N\xb1x\x03\xab\xec\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4'b'\x00\x05N\xb1x\x03\xac<\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M'b'\x00\x05N\xb1x\x03\xac\x8c\xfe\x15\xc0\x01\x01$t\x0f\xe0\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c\xe5'b'\x00\x05N\xb1x\x03\xac\xdc\xfe\x16\xc1\x01\x01#S\x8d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18_'b'\x00\x05N\xb1x\x03\xad \xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18'b'\x00\x05N\xb1x\x03\xc1\x9c\xfe\x14\xc3\x01\x01J\n\xd7\xa3<\n\xd7\xa3*\x8d\x9c9\x91\xe2\x99\xba\xad\xe6w:B^'b'\x00\x05N\xb1x\x05 \xb4\xfe\x18\xc6\x01\x01\xb2\x8e\xf4\x81\xbd\xfdR-\xbb\xc9\xabW>)\xac)DF\xa6\x02\x18\xf6\xe7\xb8\xfd\xf06'b'\x00\x05N\xb1x\x05 \xfc\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f'b'\x00\x05N\xb1x\x05!\x90\xfe\x1c\xc8\x01\x01\xa38\x0fH\xb9\xc4\xa2\xe88\xa0\xab\xb2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xfa\x85:\x93\x1e\x05;1\x0c'b'\x00\x05N\xb1x\x05!\xd8\xfe\x03\xc9\x01\x01\xa5\xc5\x14\x0079'b'\x00\x05N\xb1x\x05"$\xfe\x0c\xca\x01\x01\x02\x00\xa1Jx\xb1N\x05\x00\x07\x8e\x03\x00\xde\xd3'b'\x00\x05N\xb1x\x05"t\xfe\x16\xcb\x01\x01\x88F\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00T\x8b'b'\x00\x05N\xb1x\x05"\xc0\xfe\x12\xcc\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x17\x8b'b'\x00\x05N\xb1x\x05#\x10\xfe\x16\xcd\x01\x01\xc1\xb3\x85$'\x15\x9b\xac"b'\x00\x05N\xb1x\x06\xac\x88\xfe\x1f\xd3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00h\x001?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfc\xa3'b'\x00\x05N\xb1x\x06\xac\xe4\xfe\x06\xd4\x01\x01}\xc5\x14\x00\x00\x03\x00\x83\xcf'b'\x00\x05N\xb1x\x06\xad4\xfe\x04\xd5\x01\x01\x98\x00\x00\xa0\x8a\xe5S'b'\x00\x05N\xb1x\x06\xadt\xfe\x02\xd6\x01\x01*\x00\x00\x83]'b'\x00\x05N\xb1x\x06\xad\xc8\xfe\x1e\xd7\x01\x01\x18\xd8\x0f\xe2\r\x00\x00\x00\x00F\xa6\x02\x18\xf6\xe7\xb8\xfdNf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xff\xe1'b'\x00\x05N\xb1x\x06\xae\x1c\xfe\x1a\xd8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdb\x13'b'\x00\x05N\xb1x\x06\xaed\xfe\x08\xd9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x86'b'\x00\x05N\xb1x\x06\xae\xc8\xfe\x15\xda\x01\x01$t\xbc\xe3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19t'b'\x00\x05N\xb1x\x06\xaf\x18\xfe\x16\xdb\x01\x01#D\x8e\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x9d\xff'b'\x00\x05N\xb1x\x06\xaf`\xfe\x03\xdc\x01\x01Ms\x00\x00\xc9s'b'\x00\x05N\xb1x\x08-\x0c\xfe\x14\xdd\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xdbD'b'\x00\x05N\xb1x\x08-\xb4\xfe\x1c\xde\x01\x01!\xa0\x8e\x03\x00G\xa6\x02\x18\xf6\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04>\xd2'b'\x00\x05N\xb1x\x08T\x13\xfe5\x9e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x87A'b'\x00\x05N\xb1x\x08j/\xfe!\x9f\xff\x00L\xdd\x80\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xea\xa4'b'\x00\x05N\xb1x\t\xb8\x8c\xfe\x1c\xdf\x01\x01\x1e\xe4\x8e\x03\x00\xde\xbd\x81\xbd\x00\xd5\xad9\xfc\nU>\xb0\x17\xef7\xcdg\xe7\xb8\xb2\xf3t9\x05j'b'\x00\x05N\xb1x\t\xb9,\xfe\x18\xe0\x01\x01\xb2C\xe3\x81\xbdE\xe1+\xbb\x8d\xaeW>\xae\xa7)DG\xa6\x02\x18\xf6\xe7\xb8\xfdP;'b'\x00\x05N\xb1x\t\xb9|\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\x00\x05N\xb1x\t\xba \xfe\x1c\xe2\x01\x01\xa3\xceWI\xb9\xf7\xf2\xed8I\x97\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00l?\x98:\r\x15\x03;\xd5\xe9'b'\x00\x05N\xb1x\t\xbal\xfe\x03\xe3\x01\x01\xa5\xbd\x14\x00\x89\x16'b'\x00\x05N\xb1x\t\xba\xb8\xfe\x0c\xe4\x01\x01\x02hNNx\xb1N\x05\x00\xf9\x8e\x03\x00\xf0#'b'\x00\x05N\xb1x\t\xbb\x10\xfe\x16\xe5\x01\x01\x88G\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf4|'b'\x00\x05N\xb1x\t\xbbl\xfe\x16\xe6\x01\x01\xc1\x88Q <]\xf5*7\xdf@5;\xd0\x0f\xcc=\x00\x00\x00\x00\xa5\x03u$'b'\x00\x05N\xb1x\t\xbb\xc8\xfe\x1a\xe7\x01\x01\x1b\xcag\xe7\r\x00\x00\x00\x00\x04\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffo\x01\xbd\xdc'b'\x00\x05N\xb1x\t\xbc \xfe\x16\xe8\x01\x01t5\x8f\x03\x00\n\x005\x00(\xfc\x00\x00\x02\x00\x05\x00\x07\x01\xa0\xff3\x02\xeaZ'b'\x00\x05N\xb1x\t\xbcx\xfe\x16\xe9\x01\x01\x815\x8f\x03\x00\x01\x00?\x00 \xfc\xfd\xff\x01\x00\xfd\xff*\x03\x85\x00k\x02>m'b'\x00\x05N\xb1x\t\xbc\xd4\xfe\x0e\xea\x01\x01\x1d5\x8f\x03\x00L\xa4iD\x99\x99A=5\x10g\xf8'b'\x00\x05N\xb1x\t\xbd,\xfe\x0e\xeb\x01\x01\x895\x8f\x03\x00\x07\xe6iD\xa4p\xa5>(\x15\x7f\x8d'b'\x00\x05N\xb1x\t\xbd\x8c\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x001?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Taw'b'\x00\x05N\xb1x\t\xbd\xe4\xfe\x06\xed\x01\x01}\xc2\x14\x00\x00\x03\x00or'b'\x00\x05N\xb1x\t\xbe@\xfe\x04\xee\x01\x01\x98\x00\x00\xa0\x8a\x85\xf2'b'\x00\x05N\xb1x\t\xbe\x88\xfe\x02\xef\x01\x01*\x00\x00\xf0\xca'b'\x00\x05N\xb1x\t\xbe\xe4\xfe\x1e\xf0\x01\x01\x18\x00!\xe5\r\x00\x00\x00\x00G\xa6\x02\x18\xf6\xe7\xb8\xfdbf\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cV3'b'\x00\x05N\xb1x\t\xbf@\xfe\x1a\xf1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x001\xa8'b'\x00\x05N\xb1x\t\xbf\x88\xfe\x08\xf2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x88\x10'b'\x00\x05N\xb1x\t\xbf\xd8\xfe\x15\xf3\x01\x01$/j\xe7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00J\xbd'b'\x00\x05N\xb1x\t\xc0$\xfe\x16\xf4\x01\x01#5\x8f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00B\xf7'b"\x00\x05N\xb1x\n\x16\xff\xfe%\xa0\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x9f\x97"b'\x00\x05N\xb1x\n-\x8b\xfe5\xa1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x95}'b'\x00\x05N\xb1x\nk\x8f\xfe!\xa2\xff\x00LSu\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00u\x90'b'\x00\x05N\xb1x\x0bT\x9c\xfe\x03\xf5\x01\x01/\xff\x00\x00\xec\x11'b'\x00\x05N\xb1x\x0bi\x14\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3'b'\x00\x05N\xb1x\x0bi\x98\xfe\x14\xf7\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xeb\x8a'b'\x00\x05N\xb1x\x0cls\xfe5\xa3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x10\x9f'b'\x00\x05N\xb1x\x0c\x96\x13\xfe!\xa4\xff\x00LSu\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf6v'b'\x00\x05N\xb1x\x0c\xc6 \xfe\x1c\xf8\x01\x01!i\x8f\x03\x00G\xa6\x02\x18\xf6\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\xb3z'b'\x00\x05N\xb1x\x0c\xc6\xa8\xfe\x1c\xf9\x01\x01\x1e\xd4\x8f\x03\x00"\x8d\x81\xbd0\xd4\xe09[\nU>\xe8c\x0e\xba\x0fv\xa5\xb9y\xe5Y\xb9"Z'b'\x00\x05N\xb1x\x0c\xc7\x00\xfe\x18\xfa\x01\x01\xb2\x03\xba\x81\xbd\x84\xca%\xbb\x11\xc4W>\x00\xb0)DG\xa6\x02\x18\xf6\xe7\xb8\xfd\x9d\xd0'b'\x00\x05N\xb1x\x0c\xc7X\xfe\x1c\xfb\x01\x01\xa3Q\x8eJ\xb9L?\xf38\xf4\x86\xaa\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xbb\x92:di\xdd:/U'b'\x00\x05N\xb1x\x0c\xc7\xb4\xfe\x03\xfc\x01\x01\xa5\xc5\x14\x00\xdeC'b'\x00\x05N\xb1x\x0c\xc8(\xfe\x0c\xfd\x01\x01\x02\x00\xf4Qx\xb1N\x05\x00\xe9\x8f\x03\x00\xf2\x1d'b'\x00\x05N\xb1x\x0c\xc8\xa4\xfe\x16\xfe\x01\x01\x88G\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9b\x04'b'\x00\x05N\xb1x\x0c\xc9 \xfe\x16\xff\x01\x01\xc1\xac\xd2%<\r\t*7\xc1\xb6\x84;\x85\xd1\xb2=\x00\x00\x00\x00\xa5\x03f]'b'\x00\x05N\xb1x\x0c\xc9\x88\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd'b'\x00\x05N\xb1x\x0eY8\xfe\x1a\x01\x01\x01\x1b\xa7\x12\xeb\r\x00\x00\x00\x00\x04\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01*M'b'\x00\x05N\xb1x\x0eY\xb4\xfe\x16\x02\x01\x01t%\x90\x03\x00\x07\x00:\x001\xfc\x02\x00\xff\xff\xfc\xff\x07\x01\xa1\xff3\x02\x8b\x83'b'\x00\x05N\xb1x\x0eZ\x1c\xfe\x16\x03\x01\x01\x81%\x90\x03\x00\x01\x00@\x00!\xfc\xfc\xff\x00\x00\xfd\xff*\x03\x8f\x00p\x02\x9a\x08'b'\x00\x05N\xb1x\x0eZt\xfe\x0e\x04\x01\x01\x1d%\x90\x03\x00B\xa4iD=\n?=6\x10\x101'b'\x00\x05N\xb1x\x0eZ\xd0\xfe\x0e\x05\x01\x01\x89%\x90\x03\x00\xb8\xe6iD\xc2\xf5\xaa>)\x15\xa8\x97'b'\x00\x05N\xb1x\x0e[4\xfe\x1f\x06\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tp\x07'b'\x00\x05N\xb1x\x0e[\x90\xfe\x06\x07\x01\x01}\xc5\x14\x00\x00\x03\x00k\x1f'b'\x00\x05N\xb1x\x0e[\xe4\xfe\x04\x08\x01\x01\x98\x00\x00\xa0\x8a\x17\x83'b'\x00\x05N\xb1x\x0e\\,\xfe\x02\t\x01\x01*\x00\x00\xa5\xb0'b'\x00\x05N\xb1x\x0e\\\x8c\xfe\x1e\n\x01\x01\x180\xf5\xea\r\x00\x00\x00\x00H\xa6\x02\x18\xf6\xe7\xb8\xfd\x80f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xdf\xa9'b'\x00\x05N\xb1x\x0e\\\xec\xfe\x1a\x0b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00[='b'\x00\x05N\xb1x\x0e]8\xfe\x08\x0c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8dj'b'\x00\x05N\xb1x\x0e]\x94\xfe\x15\r\x01\x01$o\x15\xeb\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7Z'b'\x00\x05N\xb1x\x0e]\xf4\xfe\x16\x0e\x01\x01#&\x90\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x06>'b'\x00\x05N\xb1x\x0et\xb7\xfe5\xa5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8e\xb0'b'\x00\x05N\xb1x\x0e\x9e\x7f\xfe!\xa6\xff\x00L\x80u\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb8\x9e'b'\x00\x05N\xb1x\x0f\xf04\xfe\x14\x0f\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00g\xd3'b'\x00\x05N\xb1x\x0f\xf0\xb4\xfe\x03\x10\x01\x01Ms\x00\x00\xb8\xe6'b'\x00\x05N\xb1x\x0f\xf1X\xfe\x1c\x11\x01\x01!\x1e\x90\x03\x00H\xa6\x02\x18\xf6\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\x02>'b'\x00\x05N\xb1x\x0f\xf1\xc0\xfe\x1c\x12\x01\x01\x1e\xc6\x90\x03\x00\x11\x9f\x81\xbd@c\xa29\x18\xe9T>\x97\xc2\x04:\x93\x85\x95\xba\x8e\x0f\xe1\xb8\xe1T'b'\x00\x05N\xb1x\x0f\xf2\x18\xfe\x18\x13\x01\x01\xb2\xab\xd7\x81\xbd\xd8\xe1)\xbb \xc9W>f\xa6)DH\xa6\x02\x18\xf6\xe7\xb8\xfd\x07\x86'b'\x00\x05N\xb1x\x0f\xf2d\xfe\x12\x14\x01\x01\xfc\xd2\x90\x03\x004\x00\x01\x00ARMMASK\x00Wr\xbb\xbc'b'\x00\x05N\xb1x\x10c_\xfe5\xa7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0bR'b'\x00\x05N\xb1x\x10\xa1\xd7\xfe!\xa8\xff\x00L\x8b]\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Q5'b'\x00\x05N\xb1x\x11\xdc\xf0\xfe\t\x15\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9fs'b'\x00\x05N\xb1x\x11\xddt\xfe\x1c\x16\x01\x01\xa3\xb2\xb4K\xb9\xbcx\xf88)d\xa6\xb7\x00\x00\x00\x00\x00\x00\x00\x00:\x0f\x8e:\x96K";%\xd6'b'\x00\x05N\xb1x\x11\xdd\xc0\xfe\x03\x17\x01\x01\xa5\xc5\x14\x00Q\xfc'b'\x00\x05N\xb1x\x11\xde\x0c\xfe\x0c\x18\x01\x01\x02\x80\x9dUx\xb1N\x05\x00\xda\x90\x03\x00T\xeb'b'\x00\x05N\xb1x\x11\xde`\xfe\x16\x19\x01\x01\x88H\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00d4'b'\x00\x05N\xb1x\x11\xde\xb4\xfe\x16\x1a\x01\x01\xc1i\x98,<\x97z)7)T\x9e:,\r\xb1=\x00\x00\x00\x00\xa5\x03>.'b'\x00\x05N\xb1x\x11\xde\xfc\xfe\x03\x1b\x01\x01Ms\x00\x00\xd4A'b'\x00\x05N\xb1x\x11\xf3P\xfe\t\xcd\n\x00m\x01\x00\x00\x00\x00\xd2\x00\x00\x00\xaa.'b'\x00\x05N\xb1x\x11\xf3\xa8\xfe\x1a\x1c\x01\x01\x1bN\xc0\xee\r\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x99\t'b'\x00\x05N\xb1x\x11\xf3\xfc\xfe\x16\x1d\x01\x01t\x16\x91\x03\x00\x0b\x009\x00.\xfc\xff\xff\xfe\xff\xfe\xff\x07\x01\xa0\xff4\x02\xd5K'b'\x00\x05N\xb1x\x11\xf4P\xfe\x16\x1e\x01\x01\x81\x16\x91\x03\x00\x01\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x87\x00p\x02\x9fN'b'\x00\x05N\xb1x\x11\xf4\x98\xfe\x0e\x1f\x01\x01\x1d\x16\x91\x03\x00\xd8\xa3iD\xe1z$=6\x10\xb0@'b'\x00\x05N\xb1x\x11\xf4\xe4\xfe\x0e \x01\x01\x89\x16\x91\x03\x00\xd9\xe6iD\x00\x00\xac>)\x15^\x0b'b'\x00\x05N\xb1x\x11\xf58\xfe\x1f!\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x893'b'\x00\x05N\xb1x\x11\xf5\x88\xfe\x06"\x01\x01}\xc8\x14\x00\x00\x03\x00j\xd8'b'\x00\x05N\xb1x\x11\xf5\xd0\xfe\x04#\x01\x01\x98\x00\x00\xa0\x8a\xe3\xdd'b'\x00\x05N\xb1x\x11\xf6\x14\xfe\x02$\x01\x01*\x00\x00i\xfd'b'\x00\x05N\xb1x\x11\xf6h\xfe\x1e%\x01\x01\x18X\x06\xee\r\x00\x00\x00\x00I\xa6\x02\x18\xf5\xe7\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cN1'b'\x00\x05N\xb1x\x11\xf6\xc8\xfe\x1a&\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00R\x8a'b"\x00\x05N\xb1x\x11\xf7\x18\xfe\x08'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc"b'\x00\x05N\xb1x\x11\xf7h\xfe\x15(\x01\x01$\xcf\xc2\xee\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\xcc'b'\x00\x05N\xb1x\x11\xf7\xb4\xfe\x16)\x01\x01#\x17\x91\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe8\xdc'b'\x00\x05N\xb1x\x12Bo\xfe\t\xa9\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03Im'b'\x00\x05N\xb1x\x12{\xd7\xfe5\xaa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01}\xf8'b'\x00\x05N\xb1x\x12\x91\xe7\xfe!\xab\xff\x00L\x8b]\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x18\xc2'b'\x00\x05N\xb1x\x13\x07@\xfe\x14*\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x90I'b'\x00\x05N\xb1x\x13\x07\xc4\xfe\x1c+\x01\x01!\xe7\x90\x03\x00I\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\x1f,'b'\x00\x05N\xb1x\x13\x08 \xfe\x03,\x01\x01Ms\x00\x00R0'b'\x00\x05N\xb1x\x14~\xbb\xfe5\xac\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe3\xd7'b'\x00\x05N\xb1x\x14\x94\xd7\xfe!\xad\xff\x00L\x8b]\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9b$'b'\x00\x05N\xb1x\x14\xa9\xa8\xfe\x1c-\x01\x01\x1e\xb6\x91\x03\x00C\x80\x81\xbd\xb0\x03\x8b9_\xbbT>\x0b\xe4G:\xff1\xf2\xb9\xd7lR\xba\xe5\xcd'b'\x00\x05N\xb1x\x14\xaa$\xfe\x18.\x01\x01\xb2\xbf\xd6\x81\xbd\\\x92.\xbb\x1d\xc4W>\\\xaf)DI\xa6\x02\x18\xf5\xe7\xb8\xfd.\x91'b'\x00\x05N\xb1x\x14\xaa\x88\xfe\x1c/\x01\x01\xa3+\xcbL\xb9\x01\xa6\xfd8\xe9%\xa2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86\xc4\x83:\xb3\xe3!;\x19L'b'\x00\x05N\xb1x\x14\xaa\xd4\xfe\x030\x01\x01\xa5\xc5\x14\x00\xaf\xd6'b'\x00\x05N\xb1x\x14\xab4\xfe\x0c1\x01\x01\x02\x18CYx\xb1N\x05\x00\xca\x91\x03\x00\xa6p'b'\x00\x05N\xb1x\x14\xab\x90\xfe\x162\x01\x01\x88J\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00=\xff'b'\x00\x05N\xb1x\x14\xab\xec\xfe\x163\x01\x01\xc1\xbc\x162+\x15\x05\xb2'b'\x00\x05N\xb1x\x16!p\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x03\x80'b'\x00\x05N\xb1x\x16!\xc0\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n'b'\x00\x05N\xb1x\x16",\xfe\x04<\x01\x01\x98\x00\x00\xa0\x8a_\xb4'b'\x00\x05N\xb1x\x16"\xa4\xfe\x02=\x01\x01*\x00\x00\x99\t'b'\x00\x05N\xb1x\x16# \xfe\x1e>\x01\x01\x18\xb8a\xf1\r\x00\x00\x00\x00J\xa6\x02\x18\xf5\xe7\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c^v'b'\x00\x05N\xb1x\x16#x\xfe\x1a?\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00,e'b'\x00\x05N\xb1x\x16#\xc4\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002'b'\x00\x05N\xb1x\x16$\x14\xfe\x15A\x01\x01$po\xf2\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k^'b'\x00\x05N\xb1x\x16$d\xfe\x16B\x01\x01#\x08\x92\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x02f'b'\x00\x05N\xb1x\x16$\xac\xfe\x03C\x01\x01Ms\x00\x00\xe1R'b'\x00\x05N\xb1x\x169\x04\xfe\x14D\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe3\xea'b'\x00\x05N\xb1x\x16\x95\xe3\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01f5'b'\x00\x05N\xb1x\x16\x98\xd3\xfe!\xaf\xff\x00L\\=\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x88V'b'\x00\x05N\xb1x\x17\x95\xbc\xfe\x1cE\x01\x01!w\x92\x03\x00K\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04}s'b'\x00\x05N\xb1x\x17\x960\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b'\x00\x05N\xb1x\x17\x96\xcc\xfe\x1cG\x01\x01\x1e\xa7\x92\x03\x00\x98\x91\x81\xbd`\x9d\xd49\xdc\xceT>|\xc1J9\xc1\xban\xbaAU\xfc8\x1c\x02'b"\x00\x05N\xb1x\x17\x97$\xfe\x18H\x01\x01\xb2~\xeb\x81\xbd\xae\xaa'\xbb\x9b\xebW>\xb8\xae)DK\xa6\x02\x18\xf5\xe7\xb8\xfd\x91B"b'\x00\x05N\xb1x\x17\x97x\xfe\x1cI\x01\x01\xa3\xf1\xd4M\xb9\xb9a\x019\xf7\x93\x9d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xd5\x83:O\x07+;\x9b\xa5'b'\x00\x05N\xb1x\x17\x97\xbc\xfe\x03J\x01\x01\xa5\xc8\x14\x00\x8a\xf3'b'\x00\x05N\xb1x\x17\x98\x04\xfe\x0cK\x01\x01\x02\x80\xf0\\x\xb1N\x05\x00\xbb\x92\x03\x00\x85|'b'\x00\x05N\xb1x\x17\x98T\xfe\x16L\x01\x01\x88K\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1c7'b'\x00\x05N\xb1x\x17\x98\xa4\xfe\x16M\x01\x01\xc1*\xeb4<\xdf\xba)7w\x14N;\xa8\xbb\xbc=\x00\x00\x00\x00\xa5\x03\xc9('b"\x00\x05N\xb1x\x18f'\xfe5\xb0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x80\xa4"b'\x00\x05N\xb1x\x18\x90_\xfe!\xb1\xff\x00L\xc6K\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xef\xe4'b'\x00\x05N\xb1x\x19\x1d(\xfe\x1aN\x01\x01\x1bA\x18\xf6\r\x00\x00\x00\x00\x03\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xae\xffn\x01z#'b"\x00\x05N\xb1x\x19\x1d\xc8\xfe\x16O\x01\x01t\xf7\x92\x03\x00\x0e\x007\x00'\xfc\x00\x00\x01\x00\x01\x00\x07\x01\xa1\xff4\x02\x01\x10"b"\x00\x05N\xb1x\x19\x1e4\xfe\x16P\x01\x01\x81\xf7\x92\x03\x00\x03\x00B\x00\x1b\xfc\xfd\xff\x01\x00\xfd\xff'\x03\x85\x00r\x02\xe3C"b'\x00\x05N\xb1x\x19\x1e\x94\xfe\x0eQ\x01\x01\x1d\xf7\x92\x03\x00\xb0\xa4iD\\\x8fZ=7\x10}\x80'b'\x00\x05N\xb1x\x19\x1e\xf0\xfe\x0eR\x01\x01\x89\xf7\x92\x03\x00\x87\xe8iD\xa4p\xb9>+\x15\xdag'b'\x00\x05N\xb1x\x19\x1f\\\xfe\x1fS\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e0?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0\xcb'b'\x00\x05N\xb1x\x19\x1f\xe0\xfe\x06T\x01\x01}\xc5\x14\x00\x00\x03\x00\x98]'b'\x00\x05N\xb1x\x19 @\xfe\x04U\x01\x01\x98\x00\x00\xa0\x8a2\x97'b'\x00\x05N\xb1x\x19 \x94\xfe\x02V\x01\x01*\x00\x00\x9e\xdb'b'\x00\x05N\xb1x\x19 \xf8\xfe\x1eW\x01\x01\x18\xd8 \xf4\r\x00\x00\x00\x00K\xa6\x02\x18\xf5\xe7\xb8\xfd\x94f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\n\xd9'b'\x00\x05N\xb1x\x19!\\\xfe\x1aX\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xaa\x87'b'\x00\x05N\xb1x\x19!\xb0\xfe\x08Y\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x15@'b'\x00\x05N\xb1x\x19"\x08\xfe\x15Z\x01\x01$\x12\x1b\xf6\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x83'b'\x00\x05N\xb1x\x19"d\xfe\x16[\x01\x01#\xf8\x92\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x001n'b'\x00\x05N\xb1x\x19"\xb4\xfe\x03\\\x01\x01Ms\x00\x00+\xb8'b'\x00\x05N\xb1x\x1aUk\xfe5\xb2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x05F'b'\x00\x05N\xb1x\x1ako\xfe!\xb3\xff\x00L\xc6K\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00n\xb9'b"\x00\x05N\xb1x\x1a\x81\x8f\xfe%\xb4\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00gw"b'\x00\x05N\xb1x\x1a\xa1\xe0\xfe\x14]\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf0\x8a'b'\x00\x05N\xb1x\x1a\xa2X\xfe\x1c^\x01\x01!T\x93\x03\x00K\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04i\xa3'b'\x00\x05N\xb1x\x1a\xa2\xb8\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1x\x1a\xa3L\xfe\x03`\x01\x01/\xff\x00\x00\x17\x16'b'\x00\x05N\xb1x\x1c\x0c/\xfe5\xb5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd1\x9c'b'\x00\x05N\xb1x\x1c5\xe7\xfe!\xb6\xff\x00L\xc6K\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa4\xa8'b'\x00\x05N\xb1x\x1c6\xf4\xfe\x1ca\x01\x01\x1e\x99\x93\x03\x00:h\x81\xbd\x00\x94\x01:\xe6\xdfT>f\x9d\x0b:\x8e\xc5\x1a\xbai\xe2\n:\xac,'b'\x00\x05N\xb1x\x1c7\xb4\xfe\x18b\x01\x01\xb2\x87\xc6\x81\xbd\x0f\x0f%\xbb&\x06X>R\xa8)DK\xa6\x02\x18\xf4\xe7\xb8\xfdks'b'\x00\x05N\xb1x\x1c88\xfe\x1cc\x01\x01\xa3\xab\xd2N\xb9d\xeb\x039!\x9d\x98\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xe2\x89:\xff\xc9\x03;\x91q'b'\x00\x05N\xb1x\x1c8\x84\xfe\x03d\x01\x01\xa5\xc5\x14\x00\xf8\xfe'b'\x00\x05N\xb1x\x1c8\xd0\xfe\x0ce\x01\x01\x02\xe8\x9d`x\xb1N\x05\x00\xad\x93\x03\x00\xc8b'b'\x00\x05N\xb1x\x1c9$\xfe\x16f\x01\x01\x88K\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\r\x9b'b'\x00\x05N\xb1x\x1c9t\xfe\x16g\x01\x01\xc12\x00+<>F*7\xde(\t;A_\xb1=\x00\x00\x00\x00\xa5\x03)2'b'\x00\x05N\xb1x\x1c9\xc8\xfe\x1ah\x01\x01\x1b\xa0\xc6\xf9\r\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01b\xb8'b'\x00\x05N\xb1x\x1c:\x18\xfe\x16i\x01\x01t\xe9\x93\x03\x00\x0b\x008\x00!\xfc\x00\x00\xfe\xff\xfe\xff\x07\x01\xa1\xff4\x02\x02\xe3'b'\x00\x05N\xb1x\x1c:l\xfe\x16j\x01\x01\x81\xe9\x93\x03\x00\x03\x00@\x00\x1b\xfc\xfc\xff\x00\x00\xfc\xff,\x03\x87\x00o\x02\x9d`'b'\x00\x05N\xb1x\x1c:\xb8\xfe\x0ek\x01\x01\x1d\xe9\x93\x03\x00C\xa4iD)\\?=8\x10k\xf2'b'\x00\x05N\xb1x\x1c;\x00\xfe\x0el\x01\x01\x89\xe9\x93\x03\x00"\xe8iD\xaeG\xb6>,\x15#\xb0'b'\x00\x05N\xb1x\x1c;X\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f0?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x15\xb4'b'\x00\x05N\xb1x\x1c;\xa8\xfe\x06n\x01\x01}\xc2\x14\x00\x00\x03\x00\xc7\x1e'b'\x00\x05N\xb1x\x1c;\xf0\xfe\x04o\x01\x01\x98\x00\x00\xa0\x8a\xaf{'b'\x00\x05N\xb1x\x1c\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\r{'b'\x00\x05N\xb1x\x1c>\x00\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3'b'\x00\x05N\xb1x\x1c>\x8c\xfe\x15t\x01\x01$\x11\xc9\xf9\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00v\xec'b'\x00\x05N\xb1x\x1c?0\xfe\x16u\x01\x01#\xe9\x93\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xd4\xec'b'\x00\x05N\xb1x\x1d\xca\xe4\xfe\x03v\x01\x01Ms\x00\x00\x08('b'\x00\x05N\xb1x\x1d\xe0x\xfe\x14w\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb0\xe9'b'\x00\x05N\xb1x\x1e\x08\xc3\xfe5\xb7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01T~'b'\x00\x05N\xb1x\x1e2\xa3\xfe!\xb8\xff\x00L>X\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8bd'b'\x00\x05N\xb1x\x1fI\xe0\xfe\x1cx\x01\x01!\t\x94\x03\x00L\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04F\xf3'b'\x00\x05N\xb1x\x1fJ`\xfe\x03y\x01\x01Ms\x00\x00\xba\x99'b'\x00\x05N\xb1x\x1f_,\xfe\x1cz\x01\x01\x1e\x89\x94\x03\x00\x1f\x1b\x81\xbd \x96\xc49\x04\xe8T>JSw:\x90\x84L\xb8\x14K\xc5\xb9\xf8\xaa'b"\x00\x05N\xb1x\x1f_\x94\xfe\x18{\x01\x01\xb29\x8b\x81\xbd\x85\xe8*\xbb\xa9'X>\x1e\xa5)DL\xa6\x02\x18\xf4\xe7\xb8\xfdt\xee"b'\x00\x05N\xb1x\x1f_\xf8\xfe\x1c|\x01\x01\xa3.\xc6O\xb9\x81q\x069\x93/\x93\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xca\xf5\x93:\xe9\x00&;\x90\x9b'b'\x00\x05N\xb1x\x1f`X\xfe\x03}\x01\x01\xa5\xc5\x14\x00\x83\t'b'\x00\x05N\xb1x\x1f`\xb8\xfe\x0c~\x01\x01\x02\x80Cdx\xb1N\x05\x00\x9d\x94\x03\x00%\x1d'b'\x00\x05N\xb1x\x1fa$\xfe\x16\x7f\x01\x01\x88L\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbe\xe2'b'\x00\x05N\xb1x\x1fa\x90\xfe\x16\x80\x01\x01\xc1[\xe1%<\xed\x98)7\x90\x14\x87;\xe0P\xc3=\x00\x00\x00\x00\xa5\x03\x92i'b'\x00\x05N\xb1x\x1fa\xf4\xfe\x12\x81\x01\x01\xfc\xbd\x94\x03\x004\x00\x01\x00ARMMASK\x00Wr\x82\xaf'b'\x00\x05N\xb1x\x1f\xf0\x93\xfe5\xb9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xed\xc3'b'\x00\x05N\xb1x \x1ag\xfe!\xba\xff\x00LO]\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb2\xa9'b'\x00\x05N\xb1x \xb7X\xfe\t\x82\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x11S'b'\x00\x05N\xb1x \xb7\xd8\xfe\x1a\x83\x01\x01\x1b\xd4q\xfd\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\xeeX'b'\x00\x05N\xb1x \xb80\xfe\x16\x84\x01\x01t\xd9\x94\x03\x00\x0b\x00;\x007\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff4\x02\xd5\x93'b'\x00\x05N\xb1x \xb8\x88\xfe\x16\x85\x01\x01\x81\xd9\x94\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x84\x00n\x02\xa9\xe8'b'\x00\x05N\xb1x \xb8\xd8\xfe\x0e\x86\x01\x01\x1d\xd9\x94\x03\x00\xbb\xa3iD\xb8\x1e\x1d=8\x10\xdf\x85'b'\x00\x05N\xb1x \xb9$\xfe\x0e\x87\x01\x01\x89\xd9\x94\x03\x00\x81\xe6iDp=\xa9>,\x15\x9a\x9f'b'\x00\x05N\xb1x \xb9|\xfe\x1f\x88\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8e\xed'b'\x00\x05N\xb1x \xb9\xd0\xfe\x06\x89\x01\x01}\xc5\x14\x00\x00\x03\x00\xad\xc4'b'\x00\x05N\xb1x \xba\x1c\xfe\x04\x8a\x01\x01\x98\x00\x00\xa0\x8a:\xdc'b'\x00\x05N\xb1x \xba`\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01'b'\x00\x05N\xb1x \xba\xb4\xfe\x1e\x8c\x01\x01\x18PT\xfd\r\x00\x00\x00\x00L\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0ca\xea'b"\x00\x05N\xb1x \xbb\x08\xfe\x1a\x8d\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb0'"b'\x00\x05N\xb1x \xbbP\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7'b'\x00\x05N\xb1x \xbb\xa0\xfe\x15\x8f\x01\x01$mt\xfd\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x03'b'\x00\x05N\xb1x \xbb\xf0\xfe\x16\x90\x01\x01#\xda\x94\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00(\x0b'b'\x00\x05N\xb1x \xbc8\xfe\t\xce\n\x00m\x1b\x00\x00\x00\x00\xca\x00\x00\x00\xc1\xa0'b'\x00\x05N\xb1x \xbc|\xfe\x03\x91\x01\x01Ms\x00\x00\xe5\xac'b'\x00\x05N\xb1x!\x99\xe7\xfe\t\xbb\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03JF'b'\x00\x05N\xb1x!\xdfc\xfe5\xbc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbc\xfb'b'\x00\x05N\xb1x"\t#\xfe!\xbd\xff\x00LO]\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf9\xe5'b'\x00\x05N\xb1x"ZD\xfe\x14\x92\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x0eK'b'\x00\x05N\xb1x"Z\xcc\xfe\x1c\x93\x01\x01!\xd2\x94\x03\x00L\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\x82\x07'b'\x00\x05N\xb1x"[8\xfe\x1c\x94\x01\x01\x1ey\x95\x03\x00\x1d\x05\x81\xbdPu\xd69)\xf2T>\x98\x0f\xb6\xb9\x08\x061\xba\xfe\xb1\x92:\x19M'b'\x00\x05N\xb1x"[\x8c\xfe\x18\x95\x01\x01\xb2\xdcu\x81\xbdP\xf8\'\xbb\xd5IX>\xb8\xae)DL\xa6\x02\x18\xf4\xe7\xb8\xfd\xc5\xbb'b'\x00\x05N\xb1x"[\xd4\xfe\x03\x96\x01\x01Ms\x00\x00\xeb0'b'\x00\x05N\xb1x#\xc1\xab\xfe5\xbe\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x019\x19'b'\x00\x05N\xb1x#\xc3<\xfe\x1c\x97\x01\x01\xa3\x88\xb1P\xb9\xf2\xf2\x089\xea6\x8d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xcb\xa0:\xd7P\xe4:\xed\x1d'b'\x00\x05N\xb1x#\xc3\xa4\xfe\x03\x98\x01\x01\xa5\xc5\x14\x00\x01\x86'b'\x00\x05N\xb1x#\xc4\x04\xfe\x0c\x99\x01\x01\x02\x00\xedgx\xb1N\x05\x00\x8d\x95\x03\x00\xfd\x00'b'\x00\x05N\xb1x#\xc4h\xfe\x16\x9a\x01\x01\x88L\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x91\xbd'b"\x00\x05N\xb1x#\xc4\xc4\xfe\x16\x9b\x01\x01\xc1\xad\xd1)-\x154\xf4'b'\x00\x05N\xb1x#\xc6\xf8\xfe*\xa1\x01\x01\x96s\xe7f\xbc\x0fm\x01\x007\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00h\xa1'b'\x00\x05N\xb1x#\xc7\\\xfe\x1f\xa2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TQ\xe2'b'\x00\x05N\xb1x#\xc7\xac\xfe\x06\xa3\x01\x01}\xc8\x14\x00\x00\x03\x00\xe0\x1f'b'\x00\x05N\xb1x#\xc7\xf8\xfe\x04\xa4\x01\x01\x98\x00\x00\xa0\x8a\xd6\xf0'b'\x00\x05N\xb1x#\xc88\xfe\x02\xa5\x01\x01*\x00\x00\xa1\xe4'b'\x00\x05N\xb1x#\xc8\x8c\xfe\x1e\xa6\x01\x01\x18\x90a\x00\x0e\x00\x00\x00\x00M\xa6\x02\x18\xf4\xe7\xb8\xfd\xb2f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb8y'b'\x00\x05N\xb1x#\xc8\xdc\xfe\x1a\xa7\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x17\xdb'b'\x00\x05N\xb1x#\xc9$\xfe\x08\xa8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00;\x0f'b'\x00\x05N\xb1x#\xc9t\xfe\x15\xa9\x01\x01$u\x1f\x01\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00m\xeb'b'\x00\x05N\xb1x#\xc9\xc0\xfe\x16\xaa\x01\x01#\xca\x95\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe0M'b'\x00\x05N\xb1x$\x00\x9b\xfe!\xbf\xff\x00L\x9fd\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x15\xc6'b'\x00\x05N\xb1x%k\xd0\xfe\x03\xab\x01\x01Ms\x00\x00\xbeg'b'\x00\x05N\xb1x%\x80\xb8\xfe\x14\xac\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00&\xba'b'\x00\x05N\xb1x%\x81 \xfe\x1c\xad\x01\x01!\x9a\x95\x03\x00M\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xad1'b'\x00\x05N\xb1x%\xd9\xb7\xfe5\xc0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1da'b'\x00\x05N\xb1x&\x05\xfb\xfe!\xc1\xff\x00L\x9fd\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00w\xba'b'\x00\x05N\xb1x&\xde\x80\xfe\x1c\xae\x01\x01\x1ej\x96\x03\x00\xc1(\x81\xbd`\x15\xab9\x1a\x12U>\xbcc\xcb9\xfchd\xba\xb3T\xeb8\xca]'b'\x00\x05N\xb1x&\xde\xfc\xfe\x18\xaf\x01\x01\xb2\xe4\x86\x81\xbd\x9b\xcc,\xbb,kX>\n\xa7)DN\xa6\x02\x18\xf5\xe7\xb8\xfd\xb6\xfb'b'\x00\x05N\xb1x&\xdf`\xfe\x1c\xb0\x01\x01\xa3_\x93Q\xb9Xp\x0b9"\xe5\x86\xb7\x00\x00\x00\x00\x00\x00\x00\x00Bt\x8d:w\x0b\xf2:\xf1\xbf'b'\x00\x05N\xb1x&\xdf\xb0\xfe\x03\xb1\x01\x01\xa5\xc5\x14\x00\xf2\x9c'b'\x00\x05N\xb1x&\xe0\x00\xfe\x0c\xb2\x01\x01\x02h\x9akx\xb1N\x05\x00\x7f\x96\x03\x00C\xff'b'\x00\x05N\xb1x&\xe0\\\xfe\x16\xb3\x01\x01\x88N\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\xfc'b'\x00\x05N\xb1x&\xe0\xb0\xfe\x12\xb4\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00q\xe1'b'\x00\x05N\xb1x&\xe1\x04\xfe\x16\xb5\x01\x01\xc1\xe5K%\x00\x1f\xfc\xfd\xff\x01\x00\xfe\xff+\x03\x87\x00l\x02\x8a\xaf'b'\x00\x05N\xb1x(~\x14\xfe\x0e\xbb\x01\x01\x1d\xba\x96\x03\x00\xa6\xa3iD\x00\x00\x18=7\x10W\xd9'b'\x00\x05N\xb1x(~\xbc\xfe\x0e\xbc\x01\x01\x89\xba\x96\x03\x00K\xe6iD\\\x8f\xa7>-\x15I\x84'b'\x00\x05N\xb1x(\x7fl\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T M'b'\x00\x05N\xb1x(\x80\x10\xfe\x06\xbe\x01\x01}\xc8\x14\x00\x00\x03\x00\xcb\xd9'b'\x00\x05N\xb1x(\x80\x9c\xfe\x04\xbf\x01\x01\x98\x00\x00\xa0\x8a\x8f\xa6'b'\x00\x05N\xb1x(\x81\x1c\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0'b'\x00\x05N\xb1x(\x81\xfc\xfe\x1e\xc1\x01\x01\x18\xb8r\x03\x0e\x00\x00\x00\x00N\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cRH'b'\x00\x05N\xb1x(\x82\x98\xfe\x1a\xc2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe8\xbb'b'\x00\x05N\xb1x(\x83\x18\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa'b'\x00\x05N\xb1x(\x83\xb4\xfe\x15\xc4\x01\x01$\x8a\xcc\x04\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xd1'b'\x00\x05N\xb1x(\x84L\xfe\x16\xc5\x01\x01#\xbb\x96\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc0,'b'\x00\x05N\xb1x(\x84\xe4\xfe\x14\xc6\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb9\x08'b'\x00\x05N\xb1x(\x85l\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f'b'\x00\x05N\xb1x)\xdd\xeb\xfe5\xc4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x06\xac'b'\x00\x05N\xb1x)\xdf\xa4\xfe\x1c\xc8\x01\x01!+\x97\x03\x00N\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xd5\x9f'b'\x00\x05N\xb1x)\xe0|\xfe\x1c\xc9\x01\x01\x1eZ\x97\x03\x00\xd5U\x81\xbd\xb02\x809\xa7\x0eU>\x1f\x1e69*G\n\xba\xe5Rc8Y\x86'b'\x00\x05N\xb1x)\xe1\x1c\xfe\x18\xca\x01\x01\xb2\x95\xa6\x81\xbd\xb8V0\xbbq\x89X>)\xac)DN\xa6\x02\x18\xf4\xe7\xb8\xfdBd'b'\x00\x05N\xb1x)\xe1\xb8\xfe\x1c\xcb\x01\x01\xa3\x1fmR\xb9\xc4\xe6\r9PG\x80\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x14\x86:;\xb0\xaf:\xc3\xa3'b'\x00\x05N\xb1x)\xe24\xfe\x03\xcc\x01\x01\xa5\xc5\x14\x00V\xae'b'\x00\x05N\xb1x)\xe2\xb8\xfe\x0c\xcd\x01\x01\x02\x18.\x15\x12\x8b'b'\x00\x05N\xb1x+xh\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x91\xd3'b'\x00\x05N\xb1x+y\x14\xfe\x06\xd7\x01\x01}\xc5\x14\x00\x00\x03\x0001'b'\x00\x05N\xb1x+y\xa8\xfe\x04\xd8\x01\x01\x98\x00\x00\xa0\x8a7^'b'\x00\x05N\xb1x+z8\xfe\x02\xd9\x01\x01*\x00\x00wD'b'\x00\x05N\xb1x+z\xe8\xfe\x1e\xda\x01\x01\x18\xf8\x7f\x06\x0e\x00\x00\x00\x00N\xa6\x02\x18\xf4\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x9d\x8e'b'\x00\x05N\xb1x+{\x98\xfe\x1a\xdb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x96T'b'\x00\x05N\xb1x+|0\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95'b'\x00\x05N\xb1x+|\xd0\xfe\x15\xdd\x01\x01$\ry\x08\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c7'b'\x00\x05N\xb1x+}t\xfe\x16\xde\x01\x01#\xac\x97\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa6\x84'b'\x00\x05N\xb1x+~\x00\xfe\x03\xdf\x01\x01/\xff\x00\x00\xcf\x81'b'\x00\x05N\xb1x+\xd0\x9b\xfe5\xc7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc9\xbb'b'\x00\x05N\xb1x,\x0f/\xfe!\xc8\xff\x00L\x7fw\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\\\x91'b'\x00\x05N\xb1x,\xf2\x1c\xfe\x14\xe0\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00J}'b'\x00\x05N\xb1x,\xf2\xc0\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\x00\x05N\xb1x-\x08\x0c\xfe\x1c\xe2\x01\x01!\xf3\x97\x03\x00O\xa6\x02\x18\xf5\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04(\xc2'b'\x00\x05N\xb1x-\xda\xdf\xfe5\xc9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01p\x06'b'\x00\x05N\xb1x-\xf0\xff\xfe!\xca\xff\x00L\x7fw\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdd\xcc'b'\x00\x05N\xb1x.\x94P\xfe\x1c\xe3\x01\x01\x1eK\x98\x03\x00\xccq\x81\xbdP\x87\xac9{\xf5T>Z\x9f\x8a:\x93\xdd\xfe7\xc9X?:\xddg'b'\x00\x05N\xb1x.\x95H\xfe\x18\xe4\x01\x01\xb2\xab\xc4\x81\xbd\x81\xb9-\xbb\xdd\x8eX>{\xa4)DO\xa6\x02\x18\xf5\xe7\xb8\xfdgc'b'\x00\x05N\xb1x.\x95\xfc\xfe\x1c\xe5\x01\x01\xa3-@S\xb9\x12W\x109%\xc0r\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86Z\x87:\x81|\x05;P\xc1'b'\x00\x05N\xb1x.\x96\x88\xfe\x03\xe6\x01\x01\xa5\xc8\x14\x00\xfa\xb5'b'\x00\x05N\xb1x.\x97\x1c\xfe\x0c\xe7\x01\x01\x02\x80\xe9rx\xb1N\x05\x00_\x98\x03\x00e\x01'b'\x00\x05N\xb1x.\x97\xbc\xfe\x16\xe8\x01\x01\x88O\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00)>'b"\x00\x05N\xb1x.\x98X\xfe\x16\xe9\x01\x01\xc1Sz#<\xa9\xa3#7'\xf3\xa3;\xbb1\xb2=\x00\x00\x00\x00\xa5\x03\x96\xf6"b'\x00\x05N\xb1x.\x98\xe0\xfe\x03\xea\x01\x01Ms\x00\x00\xf0\x83'b'\x00\x05N\xb1x.\xae\\\xfe\x1a\xeb\x01\x01\x1b\xda\x1e\x0c\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xaf\xffm\x01\xdf\t'b'\x00\x05N\xb1x.\xae\xd0\xfe\x16\xec\x01\x01t\x9b\x98\x03\x00\x05\x004\x00.\xfc\x01\x00\xff\xff\xfd\xff\x07\x01\xa0\xff3\x02s\xb1'b'\x00\x05N\xb1x.\xaf8\xfe\x16\xed\x01\x01\x81\x9b\x98\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x90\x00s\x02\xea-'b'\x00\x05N\xb1x.\xaf\x90\xfe\x0e\xee\x01\x01\x1d\x9b\x98\x03\x00\xa9\xa4iD\xd7\xa3X=8\x10\xf0\x9b'b'\x00\x05N\xb1x.\xaf\xe8\xfe\x0e\xef\x01\x01\x89\x9b\x98\x03\x00\xc5\xe6iD)\\\xab>/\x15]\xe8'b'\x00\x05N\xb1x.\xb0L\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ts\x9e'b'\x00\x05N\xb1x.\xb0\xac\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&'b'\x00\x05N\xb1x.\xb1\x00\xfe\x04\xf2\x01\x01\x98\x00\x00\xa0\x8a>M'b'\x00\x05N\xb1x.\xb1L\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce'b'\x00\x05N\xb1x.\xb1\xa8\xfe\x1e\xf4\x01\x01\x188\x8d\t\x0e\x00\x00\x00\x00O\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa4S'b'\x00\x05N\xb1x.\xb2\x04\xfe\x1a\xf5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd2\xa4'b'\x00\x05N\xb1x.\xb2T\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\x00\x05N\xb1x.\xb2\xa8\xfe\x15\xf7\x01\x01$i!\x0c\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xad'b'\x00\x05N\xb1x.\xb3\x00\xfe\x16\xf8\x01\x01#\x9c\x98\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x890'b'\x00\x05N\xb1x.\xb3X\xfe\x12\xf9\x01\x01\xfc\xa7\x98\x03\x004\x00\x01\x00ARMMASK\x00Wr\x82)'b'\x00\x05N\xb1x/\xb7+\xfe5\xcb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf5\xe4'b'\x00\x05N\xb1x/\xe33\xfe!\xcc\xff\x00L\\f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00$\xd5'b'\x00\x05N\xb1x0\x1a4\xfe\t\xfa\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03u\x8c'b'\x00\x05N\xb1x0\x1a\xd0\xfe\t\xcf\n\x00m\x05\x00\x00\x00\x00\xd3\x00\x00\x00\xa6h'b'\x00\x05N\xb1x0\x1b0\xfe\x14\xfb\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00(1'b'\x00\x05N\xb1x0\xe4o\xfe\t\xcd\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03 x'b'\x00\x05N\xb1x1w_\xfe5\xce\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa4\xdc'b'\x00\x05N\xb1x1y\xff\xfe!\xcf\xff\x00L\\f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00m"'b'\x00\x05N\xb1x1\x8e\xc0\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5'b'\x00\x05N\xb1x1\xa4d\xfe\x1c\xfd\x01\x01!\xbc\x98\x03\x00P\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\t\xaf'b'\x00\x05N\xb1x1\xa5\x84\xfe\x1c\xfe\x01\x01\x1e<\x99\x03\x00\xeeG\x81\xbdp\xfd\x869x\xd0T>D\xe8\xab9rId\xb9]zT9\x8a\x90'b'\x00\x05N\xb1x1\xa6h\xfe\x18\xff\x01\x01\xb2\xea\xad\x81\xbdt>/\xbbD\x8cX>\\\x9f)DP\xa6\x02\x18\xf5\xe7\xb8\xfd\x1e\x7f'b'\x00\x05N\xb1x1\xa7<\xfe\x1c\x00\x01\x01\xa3\xf9\nT\xb9\x89\xc2\x129\x8f\xb3d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xa1\x88:`:\x10;\x13\xb4'b'\x00\x05N\xb1x1\xa7\xe8\xfe\x03\x01\x01\x01\xa5\xc5\x14\x00\x98\xba'b'\x00\x05N\xb1x1\xa8\x98\xfe\x0c\x02\x01\x01\x02\xe8\x96vx\xb1N\x05\x00P\x99\x03\x00\xef\x16'b'\x00\x05N\xb1x1\xa90\xfe\x16\x03\x01\x01\x88P\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9d\x11'b'\x00\x05N\xb1x1\xa9\xec\xfe\x16\x04\x01\x01\xc1w5%<\x14\xde"7\x05x\x10< \xb1\xb4=\x00\x00\x00\x00\xa5\x03\xeb6'b'\x00\x05N\xb1x3 \xe4\xfe\x03\x05\x01\x01Ms\x00\x00\xa1*'b'\x00\x05N\xb1x3%C\xfe5\xd0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01BM'b"\x00\x05N\xb1x3P\xf4\xfe\x1a\x06\x01\x01\x1b<\xce\x0f\x0e\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffo\x01j'"b'\x00\x05N\xb1x3Q\x90\xfe\x16\x07\x01\x01t\x8c\x99\x03\x00\t\x00:\x00,\xfc\x01\x00\x00\x00\xfb\xff\x07\x01\xa0\xff4\x02\xa3\x16'b'\x00\x05N\xb1x3R\x1c\xfe\x16\x08\x01\x01\x81\x8c\x99\x03\x00\x04\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x88\x00q\x02\xd6\x91'b'\x00\x05N\xb1x3R\x8c\xfe\x0e\t\x01\x01\x1d\x8c\x99\x03\x00x\xa3iD\xe1z\x0c=8\x10\xd3\xa6'b'\x00\x05N\xb1x3R\xf4\xfe\x0e\n\x01\x01\x89\x8c\x99\x03\x00\xab\xe6iD\\\x8f\xaa>0\x15\x92\xf8'b'\x00\x05N\xb1x3Sd\xfe\x1f\x0b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xda\xa1'b'\x00\x05N\xb1x3S\xc8\xfe\x06\x0c\x01\x01}\xc2\x14\x00\x00\x03\x00j\x9a'b'\x00\x05N\xb1x3T$\xfe\x04\r\x01\x01\x98\x00\x00\xa0\x8a\x0f\xf1'b'\x00\x05N\xb1x3Tx\xfe\x02\x0e\x01\x01*\x00\x00\xbdw'b'\x00\x05N\xb1x3T\xe8\xfe\x1e\x0f\x01\x01\x18\x88\xaf\x0f\x0e\x00\x00\x00\x00Q\xa6\x02\x18\xf5\xe7\xb8\xfd\xc6f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xe6\x91'b'\x00\x05N\xb1x3UX\xfe\x1a\x10\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\\P'b'\x00\x05N\xb1x3U\xb8\xfe\x08\x11\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00,\x0e'b'\x00\x05N\xb1x3V(\xfe\x15\x12\x01\x01$`\xd1\x0f\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xa2'b'\x00\x05N\xb1x3V\x88\xfe\x16\x13\x01\x01#\x8d\x99\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe9\xf4'b'\x00\x05N\xb1x3w\xf7\xfe!\xd1\xff\x00L\x1fL\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb6\xbd'b'\x00\x05N\xb1x4\xbc\x04\xfe\x14\x14\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x82\xbb'b'\x00\x05N\xb1x4\xbc\x9c\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q'b'\x00\x05N\xb1x4\xd1L\xfe\x1c\x16\x01\x01!\x85\x99\x03\x00Q\xa6\x02\x18\xf5\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xcd\xf0'b'\x00\x05N\xb1x4\xd1\xd0\xfe\x1c\x17\x01\x01\x1e,\x9a\x03\x00K\x0b\x81\xbd\xa0\xd0V9]\xbcT>J!]:\xf6\x10\x8f\xb9\xdf\xe5\xe69SD'b'\x00\x05N\xb1x4\xd28\xfe\x18\x18\x01\x01\xb2|~\x81\xbd\n\x142\xbbr\x98X>\x00\xa0)DQ\xa6\x02\x18\xf5\xe7\xb8\xfdcc'b'\x00\x05N\xb1x57\xcf\xfe5\xd2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf8\xf1'b'\x00\x05N\xb1x5v\x1b\xfe!\xd3\xff\x00L\xd5=\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00E\x1c'b'\x00\x05N\xb1x6z\xf8\xfe\x1c\x19\x01\x01\xa3\xe6\xceT\xb9p.\x159\xf8\xdfU\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x9e\x88:7n(;\x1c\x92'b'\x00\x05N\xb1x6{\xb4\xfe\x03\x1a\x01\x01\xa5\xc5\x14\x00\x8cF'b'\x00\x05N\xb1x6|8\xfe\x0c\x1b\x01\x01\x02\x80\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff&\x03\x87\x00l\x02\xaau'b'\x00\x05N\xb1x6\x7f\xc0\xfe\x0e"\x01\x01\x1d}\x9a\x03\x00\x9e\xa3iD{\x14\x16=9\x10\xaeW'b'\x00\x05N\xb1x6\x80\x14\xfe\x0e#\x01\x01\x89}\x9a\x03\x00@\xe7iD33\xaf>0\x15"\x12'b'\x00\x05N\xb1x6\x80p\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xeb\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TT\xa3'b'\x00\x05N\xb1x6\x80\xc8\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V'b'\x00\x05N\xb1x6\x81\x18\xfe\x04&\x01\x01\x98\x00\x00\xa0\x8a\xfb\xaf'b"\x00\x05N\xb1x6\x81`\xfe\x02'\x01\x01*\x00\x00\x07U"b'\x00\x05N\xb1x6\x81\xb8\xfe\x1e(\x01\x01\x18\xc8\xbc\x12\x0e\x00\x00\x00\x00R\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cz\x95'b'\x00\x05N\xb1x6\x82\x0c\xfe\x1a)\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00:\xd8'b'\x00\x05N\xb1x6\x82X\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2'b'\x00\x05N\xb1x6\x82\xa8\xfe\x15+\x01\x01$v{\x13\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x94'b"\x00\x05N\xb1x6\x82\xf8\xfe\x16,\x01\x01#}\x9a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00'\xf3"b'\x00\x05N\xb1x7,\x03\xfe5\xd4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01f\xde'b'\x00\x05N\xb1x7i\xbf\xfe!\xd5\xff\x00L\xd5=\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc6\xfa'b'\x00\x05N\xb1x7\xbb\x18\xfe\x14-\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf1T'b'\x00\x05N\xb1x7\xbb\xb4\xfe\x1c.\x01\x01!M\x9a\x03\x00R\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xf3j'b'\x00\x05N\xb1x7\xbc(\xfe\x03/\x01\x01Ms\x00\x00\x82\xba'b'\x00\x05N\xb1x97W\xfe5\xd6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe3<'b'\x00\x05N\xb1x98\xac\xfe\x1c0\x01\x01\x1e\x1d\x9b\x03\x00\xb9\xe3\x80\xbd\xd0\xd0\x929\x7f\xcbT>i\x1bB:\xe4%)\xba\xef\xaf\xdd9/\xb6'b'\x00\x05N\xb1x99<\xfe\x181\x01\x01\xb2@e\x81\xbd\xd810\xbb\xbf\xb9X>\x8f\xb2)DS\xa6\x02\x18\xf5\xe7\xb8\xfd\x13\x80'b'\x00\x05N\xb1x99\xa0\xfe\x1c2\x01\x01\xa3\xeb\x85U\xb9\x0b\x99\x179\xf6\x87G\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xd2m\x81:\xe0li;\xa7\x1d'b'\x00\x05N\xb1x99\xf0\xfe\x033\x01\x01\xa5\xc8\x14\x00\xf0\xd7'b'\x00\x05N\xb1x9:P\xfe\x0c4\x01\x01\x02 4~x\xb1N\x05\x002\x9b\x03\x00YR'b'\x00\x05N\xb1x9:\xdc\xfe\x165\x01\x01\x88S\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\ts'b'\x00\x05N\xb1x9;8\xfe\x166\x01\x01\xc1\xa8_3<&\xe4!7\xad/\xba;\xe6\x0b\xba=\x00\x00\x00\x00\xa5\x03\x00@'b'\x00\x05N\xb1x9R\xd7\xfe!\xd7\xff\x00L\xd5=\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00G\xa7'b'\x00\x05N\xb1x:\xd8\x04\xfe\x1a8\x01\x01\x1b\x83&\x17\x0e\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01i\x97'b'\x00\x05N\xb1x:\xd8\x9c\xfe\x169\x01\x01tn\x9b\x03\x00\x04\x005\x00(\xfc\x02\x00\x00\x00\x01\x00\x07\x01\xa0\xff3\x02\xbe?'b'\x00\x05N\xb1x:\xd9\x04\xfe\x16:\x01\x01\x81n\x9b\x03\x00\x03\x00B\x00\x1e\xfc\xfd\xff\x00\x00\xfc\xff)\x03\x85\x00o\x02@\xeb'b'\x00\x05N\xb1x:\xd9`\xfe\x0e;\x01\x01\x1dn\x9b\x03\x00\xfc\xa2iDG\xe1\xda<7\x10\x0b-'b'\x00\x05N\xb1x:\xd9\xcc\xfe\x0e<\x01\x01\x89n\x9b\x03\x008\xe6iD\xc2\xf5\xa6>0\x15\xb5\xb8'b'\x00\x05N\xb1x:\xdaX\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb6\xb8'b'\x00\x05N\xb1x:\xda\xd4\xfe\x06>\x01\x01}\xc5\x14\x00\x00\x03\x00\x9fe'b'\x00\x05N\xb1x:\xdbH\xfe\x04?\x01\x01\x98\x00\x00\xa0\x8aXb'b'\x00\x05N\xb1x:\xdb\xb0\xfe\x02@\x01\x01*\x00\x00\x9a6'b'\x00\x05N\xb1x:\xdc0\xfe\x1eA\x01\x01\x18\xf0\xcd\x15\x0e\x00\x00\x00\x00S\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xd1y'b'\x00\x05N\xb1x:\xdc\xb0\xfe\x1aB\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x99/'b'\x00\x05N\xb1x:\xdd \xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<'b'\x00\x05N\xb1x:\xdd\x98\xfe\x15D\x01\x01$\x1e)\x17\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e#'b'\x00\x05N\xb1x:\xde\x08\xfe\x16E\x01\x01#n\x9b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfc\xee'b'\x00\x05N\xb1x:\xde`\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b'\x00\x05N\xb1x:\xf2\xd0\xfe\x14G\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x10\x8c'b'\x00\x05N\xb1x;\tW\xfe5\xd8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Z\x81'b"\x00\x05N\xb1x;\x1f\x17\xfe%\xd8\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xad\xc5"b'\x00\x05N\xb1x; \xaf\xfe!\xd9\xff\x00L\xe3H\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x0037'b'\x00\x05N\xb1x<]h\xfe\x1cH\x01\x01!\xde\x9b\x03\x00T\xa6\x02\x18\xf4\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xc07'b'\x00\x05N\xb1x<]\xec\xfe\x03I\x01\x01/\xff\x00\x00\xe4\x0c'b'\x00\x05N\xb1x<^\x8c\xfe\x03J\x01\x01Ms\x00\x00\xe2\xfe'b'\x00\x05N\xb1x<_\x1c\xfe\x1cK\x01\x01\x1e\x0e\x9c\x03\x00a\xc8\x80\xbd\xe0W\xea9\x9b\xd9T>\x8f\xda\x9e8Q\x16\xa3\xba\x89\x07\x11\xb9\xfe\xd5'b"\x00\x05N\xb1x<_t\xfe\x18L\x01\x01\xb2\x0f\\\x81\xbd\x04\xc3'\xbb\xba\xc9X>\xd7\xb3)DT\xa6\x02\x18\xf4\xe7\xb8\xfd\xb7N"b'\x00\x05N\xb1x<_\xcc\xfe\x1cM\x01\x01\xa3\xbd1V\xb9s\xff\x199\x18\x869\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x99o\x7f:\x93\xe1\x8e;\xf83'b'\x00\x05N\xb1x<`\x10\xfe\x03N\x01\x01\xa5\xc5\x14\x00\xdbn'b'\x00\x05N\xb1x<`\\\xfe\x0cO\x01\x01\x02\xa0\xdd\x81x\xb1N\x05\x00"\x9c\x03\x00`p'b'\x00\x05N\xb1x<`\xac\xfe\x16P\x01\x01\x88T\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8b|'b'\x00\x05N\xb1x<`\xfc\xfe\x16Q\x01\x01\xc1\xcdf<<\xde\x90#7\x0b\x07\xd3;I\xe4\xb0=\x00\x00\x00\x00\xa5\x03g0'b'\x00\x05N\xb1x<\xe6\x1f\xfe5\xdb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x95\x96'b'\x00\x05N\xb1x=$\xc7\xfe!\xdc\xff\x00L\xbeS\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf1\xb0'b'\x00\x05N\xb1x=\xca\xf8\xfe\x1aR\x01\x01\x1bi\xd0\x1a\x0e\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xd3\x0c'b'\x00\x05N\xb1x=\xcb\x84\xfe\x16S\x01\x01t^\x9c\x03\x00\t\x007\x00-\xfc\x02\x00\x00\x00\x04\x00\x07\x01\xa1\xff3\x02\xb9T'b'\x00\x05N\xb1x=\xcb\xe4\xfe\x16T\x01\x01\x81^\x9c\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00p\x02\xbe"'b'\x00\x05N\xb1x=\xcc4\xfe\x0eU\x01\x01\x1d^\x9c\x03\x00\xfe\xa3iD{\x14.=9\x10\xf8\xf1'b'\x00\x05N\xb1x=\xcc\x84\xfe\x0eV\x01\x01\x89^\x9c\x03\x00\xf4\xe6iD\n\xd7\xac>1\x15\xf3\n'b'\x00\x05N\xb1x=\xcc\xe4\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T-\x10'b'\x00\x05N\xb1x=\xcdD\xfe\x06X\x01\x01}\xc5\x14\x00\x00\x03\x00g\xbf'b'\x00\x05N\xb1x=\xcd\x94\xfe\x04Y\x01\x01\x98\x00\x00\xa0\x8a\x1d\xd7'b'\x00\x05N\xb1x=\xcd\xdc\xfe\x02Z\x01\x01*\x00\x00\x04j'b'\x00\x05N\xb1x=\xce0\xfe\x1e[\x01\x01\x180\xdb\x18\x0e\x00\x00\x00\x00T\xa6\x02\x18\xf4\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x05\xab'b'\x00\x05N\xb1x=\xce\xac\xfe\x1a\\\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00I\x8b'b'\x00\x05N\xb1x=\xce\xf8\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V'b'\x00\x05N\xb1x=\xcfd\xfe\x15^\x01\x01$x\xd3\x1a\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\xfc'b'\x00\x05N\xb1x=\xcf\xb4\xfe\x16_\x01\x01#_\x9c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8bg'b'\x00\x05N\xb1x=\xcf\xfc\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b'\x00\x05N\xb1x=\xd0\x8c\xfe\x12a\x01\x01\xfc\x92\x9c\x03\x004\x00\x01\x00ARMMASK\x00Wr\xcb\xfa'b'\x00\x05N\xb1x>\xea\x9b\xfe5\xdd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0b\xb9'b'\x00\x05N\xb1x?)K\xfe!\xde\xff\x00L\xbeS\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00p\xed'b'\x00\x05N\xb1x?\x8e\xb0\xfe\tb\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1f3'b'\x00\x05N\xb1x?\x8f@\xfe\x14c\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xb7K2:<\xcd\x96\xba\xd0nS\xba\x17\xbc'b'\x00\x05N\xb1x@\xee\x90\xfe\x18g\x01\x01\xb2ZD\x81\xbd\xbb\xe3+\xbb\x8a\xfaX>{\xa4)DU\xa6\x02\x18\xf4\xe7\xb8\xfdf\xb5'b'\x00\x05N\xb1x@\xef\x08\xfe\x1ch\x01\x01\xa3n\xd8V\xb9(]\x1c9\x8f\xca*\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x89\x92:\xea\xb40;\xa5\xa0'b'\x00\x05N\xb1x@\xefl\xfe\x03i\x01\x01\xa5\xc2\x14\x00\x04\x13'b'\x00\x05N\xb1x@\xef\xdc\xfe\x0cj\x01\x01\x02 \x87\x85x\xb1N\x05\x00\x12\x9d\x03\x00\xe3+'b'\x00\x05N\xb1x@\xf0D\xfe\x16k\x01\x01\x88U\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x87\x94'b"\x00\x05N\xb1x@\xf0\x9c\xfe\x16l\x01\x01\xc1\x068E<\xc5\xf8$7'\xc0\xca;\x83#\xa7=\x00\x00\x00\x00\xa5\x03\x80x"b'\x00\x05N\xb1x@\xf0\xfc\xfe\x1am\x01\x01\x1b\x0fz\x1e\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01a\x1a'b'\x00\x05N\xb1x@\xf1T\xfe\x16n\x01\x01tN\x9d\x03\x00\x05\x004\x00&\xfc\x03\x00\xff\xff\xff\xff\x07\x01\xa0\xff3\x02\xb0t'b'\x00\x05N\xb1x@\xf1\xb0\xfe\x16o\x01\x01\x81N\x9d\x03\x00\x02\x00@\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x86\x00j\x02\x8d\xe7'b'\x00\x05N\xb1x@\xf2\x04\xfe\x0ep\x01\x01\x1dN\x9d\x03\x00\xb0\xa4iD\\\x8fZ=9\x10\xc9\xad'b'\x00\x05N\xb1x@\xf2T\xfe\x0eq\x01\x01\x89N\x9d\x03\x00e\xe6iD)\\\xa8>2\x15\xf2Y'b'\x00\x05N\xb1x@\xf2\xb4\xfe\x1fr\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdc\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Td\xdd'b'\x00\x05N\xb1x@\xf3\x0c\xfe\x06s\x01\x01}\xc2\x14\x00\x00\x03\x00\xec\xd8'b'\x00\x05N\xb1x@\xf3`\xfe\x04t\x01\x01\x98\x00\x00\xa0\x8a\xf6-'b'\x00\x05N\xb1x@\xf3\xa8\xfe\x02u\x01\x01*\x00\x00s\x10'b'\x00\x05N\xb1x@\xf4\x04\xfe\x1ev\x01\x01\x18p\xe8\x1b\x0e\x00\x00\x00\x00U\xa6\x02\x18\xf4\xe7\xb8\xfd\xb2f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c&\xb9'b'\x00\x05N\xb1x@\xf4`\xfe\x1aw\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xda\xb2'b'\x00\x05N\xb1x@\xf4\xac\xfe\x08x\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf0'b'\x00\x05N\xb1x@\xf5\x04\xfe\x15y\x01\x01$\xee|\x1e\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e<'b'\x00\x05N\xb1x@\xf5`\xfe\x16z\x01\x01#O\x9d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1d\x18'b'\x00\x05N\xb1xA)\xc7\xfe5\xe0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9cg'b'\x00\x05N\xb1xA\x8f\x83\xfe!\xe1\xff\x00L\xbeS\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00A\xd3'b'\x00\x05N\xb1xBf \xfe\x03{\x01\x01Ms\x00\x00\xd5\x92'b'\x00\x05N\xb1xBg<\xfe\x14|\x01\x01J\n\xd7#<\n\xd7# \x1d\xfd7\x89\\i\xba\xc4\xebe9\xe0\xc6'b'\x00\x05N\xb1xC\xfe\xbc\xfe\x18\x7f\x01\x01\xb2X\x1e\x81\xbd\x8a\xe6/\xbb\xfa\x10Y>\x14\xae)DV\xa6\x02\x18\xf4\xe7\xb8\xfd\xcf\xb6'b'\x00\x05N\xb1xC\xff \xfe\x1c\x80\x01\x01\xa3,yW\xb9\xc1\xb1\x1e9\xd9\x9a\x1b\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x18\xcd\x87:\xac\x1f\x01;\xfb\x11'b'\x00\x05N\xb1xC\xfft\xfe\x03\x81\x01\x01\xa5\xc8\x14\x00\xf5\xfa'b'\x00\x05N\xb1xC\xff\xc8\xfe\x0c\x82\x01\x01\x02\x884\x89x\xb1N\x05\x00\x03\x9e\x03\x00\xcf\xef'b'\x00\x05N\xb1xD\x00$\xfe\x16\x83\x01\x01\x88V\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\xc8'b'\x00\x05N\xb1xD\x00x\xfe\x16\x84\x01\x01\xc1\xa2\tI<\xe7\xb4&7Ny\x84:\xb6\xd8\xbc=\x00\x00\x00\x00\xa5\x03\xa0r'b'\x00\x05N\xb1xD\x00\xc4\xfe\x03\x85\x01\x01Ms\x00\x00C\xe1'b'\x00\x05N\xb1xE\x1b\xcf\xfe5\xe4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x87\xaa'b'\x00\x05N\xb1xE1\xe3\xfe!\xe5\xff\x00L\xeeq\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfcG'b'\x00\x05N\xb1xE]T\xfe\x1a\x86\x01\x01\x1b\xaa\'"\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffl\x01\x93\xe7'b'\x00\x05N\xb1xE]\xe4\xfe\x16\x87\x01\x01t?\x9e\x03\x00\x03\x00=\x006\xfc\x00\x00\xff\xff\xff\xff\x07\x01\xa0\xff4\x02}U'b'\x00\x05N\xb1xE^l\xfe\x16\x88\x01\x01\x81?\x9e\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x87\x00n\x02\x7f\x95'b'\x00\x05N\xb1xE^\xe8\xfe\x0e\x89\x01\x01\x1d?\x9e\x03\x00\xbd\xa2iD\x1e\x85\xbb<9\x10T\x05'b'\x00\x05N\xb1xE_\\\xfe\x0e\x8a\x01\x01\x89?\x9e\x03\x00g\xe7iD\xa4p\xb0>3\x15\x85J'b'\x00\x05N\xb1xE_\xec\xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T}\x02'b'\x00\x05N\xb1xE`d\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf'b'\x00\x05N\xb1xE`\xd4\xfe\x04\x8d\x01\x01\x98\x00\x00\xa0\x8a\xd85'b'\x00\x05N\xb1xEa4\xfe\x02\x8e\x01\x01*\x00\x00\xa0\xf1'b'\x00\x05N\xb1xEa\xa8\xfe\x1e\x8f\x01\x01\x18\xc0\n"\x0e\x00\x00\x00\x00V\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cz\xad'b'\x00\x05N\xb1xEb\x14\xfe\x1a\x90\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00-\xc4'b'\x00\x05N\xb1xEb`\xfe\x08\x91\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xc8'b'\x00\x05N\xb1xEb\xb0\xfe\x15\x92\x01\x01$\x1e*"\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13%'b'\x00\x05N\xb1xEc\x08\xfe\x16\x93\x01\x01#@\x9e\x03\x00\xdc\x05\xdc\x05\xa9\x05\x96\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xca!'b'\x00\x05N\xb1xEcP\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b'\x00\x05N\xb1xF\xe3\xef\xfe5\xe6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x02H'b'\x00\x05N\xb1xF\xfa\x08\xfe\x14\x95\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00Q='b'\x00\x05N\xb1xF\xfa\x94\xfe\x1c\x96\x01\x01!8\x9e\x03\x00V\xa6\x02\x18\xf4\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfb\xff\x00\x00\x00\x00\xa7\x043\xb7'b'\x00\x05N\xb1xF\xfb\x10\xfe\x1c\x97\x01\x01\x1e\xdf\x9e\x03\x00f\x12\x80\xbd ,:9\x0c\xebT>\x04\x88\x11\xb9\xffBr\xba[\x17\x86:>\xcd'b'\x00\x05N\xb1xF\xfbp\xfe\x18\x98\x01\x01\xb2\xcc\xf7\x80\xbda\xf64\xbb\xb4\x10Y>=\xaa)DV\xa6\x02\x18\xf4\xe7\xb8\xfd\x0f\xe3'b'\x00\x05N\xb1xF\xfc\xab\xfe!\xe7\xff\x00L\xeeq\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00}\x1a'b'\x00\x05N\xb1xH\x92<\xfe\x1c\x99\x01\x01\xa3\xab\x12X\xb9\xce\xfe 9^9\x0c\xb7\x00\x00\x00\x00\x00\x00\x00\x00~\x1f\x90:=\x16\xf1:!\x7f'b'\x00\x05N\xb1xH\x92\xf8\xfe\x03\x9a\x01\x01\xa5\xc2\x14\x00O\xda'b'\x00\x05N\xb1xH\x93P\xfe\x0c\x9b\x01\x01\x02\x08\xde\x8cx\xb1N\x05\x00\xf5\x9e\x03\x00F\xc4'b'\x00\x05N\xb1xH\x93\xa8\xfe\x16\x9c\x01\x01\x88V\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa7\xf1'b'\x00\x05N\xb1xH\x93\xf8\xfe\x12\x9d\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x95\xb6'b'\x00\x05N\xb1xH\x94L\xfe\x16\x9e\x01\x01\xc1NcS<\x98c)7\xb3\x87\xa4:hx\xc5=\x00\x00\x00\x00\xa5\x03\xd8\xb4'b'\x00\x05N\xb1xH\x94\xa0\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c'b'\x00\x05N\xb1xH\x95L\xfe\x1a\xa0\x01\x01\x1b\xa0\xd6%\x0e\x00\x00\x00\x00\x05\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffo\x01\xc0]'b'\x00\x05N\xb1xH\x95\xb0\xfe\x16\xa1\x01\x01t0\x9f\x03\x00\x08\x007\x001\xfc\x02\x00\x00\x00\x00\x00\x07\x01\xa1\xff4\x02!"'b'\x00\x05N\xb1xH\x96\x08\xfe\x16\xa2\x01\x01\x810\x9f\x03\x00\x03\x00@\x00\x1f\xfc\xfc\xff\x00\x00\xfc\xff*\x03\x87\x00l\x02\xd0|'b'\x00\x05N\xb1xH\x96X\xfe\x0e\xa3\x01\x01\x1d0\x9f\x03\x00\xee\xa3iD\x85\xeb)=9\x10!\x17'b'\x00\x05N\xb1xH\x96\xa8\xfe\x0e\xa4\x01\x01\x890\x9f\x03\x00\xb8\xe6iD\xc2\xf5\xaa>3\x15\xf4\xaf'b'\x00\x05N\xb1xH\x97\x08\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb27'b'\x00\x05N\xb1xH\x97\\\xfe\x06\xa6\x01\x01}\xc5\x14\x00\x00\x03\x00k:'b'\x00\x05N\xb1xH\x97\xac\xfe\x04\xa7\x01\x01\x98\x00\x00\xa0\x8a\xd1&'b'\x00\x05N\xb1xH\x98\x08\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca'b'\x00\x05N\xb1xH\x98d\xfe\x1e\xa9\x01\x01\x18\xe8\x1b%\x0e\x00\x00\x00\x00W\xa6\x02\x18\xf4\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c \xe4'b'\x00\x05N\xb1xH\x98\xc0\xfe\x1a\xaa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x06\x0b'b'\x00\x05N\xb1xH\x99\x08\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01'b'\x00\x05N\xb1xH\x99X\xfe\x15\xac\x01\x01$\xbc\xd9%\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xef'b'\x00\x05N\xb1xH\x99\xa8\xfe\x16\xad\x01\x01#1\x9f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x95\xea'b'\x00\x05N\xb1xH\xc5\x8f\xfe5\xe8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbb\xf5'b'\x00\x05N\xb1xI\x04\x93\xfe!\xe9\xff\x00L\x95^\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x007\xf0'b'\x00\x05N\xb1xJ\x17\xdc\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0'b'\x00\x05N\xb1xJ,\x88\xfe\x14\xaf\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00xZ'b'\x00\x05N\xb1xJ,\xf4\xfe\x1c\xb0\x01\x01!\x01\x9f\x03\x00W\xa6\x02\x18\xf4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfb\xff\x00\x00\x00\x00\xa7\x04cB'b'\x00\x05N\xb1xJ\xc8\xd7\xfe5\xea\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01>\x17'b'\x00\x05N\xb1xJ\xf2k\xfe!\xeb\xff\x00L\x95^\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb6\xad'b"\x00\x05N\xb1xKX[\xfe%\xec\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x81\xd1"b'\x00\x05N\xb1xK\x8a\xe0\xfe\x1c\xb1\x01\x01\x1e\xd1\x9f\x03\x00\xa7\xc8\x7f\xbd\xa0\x96Y9K\x01U>\x8bc\xfc9]\x14\x92\xbad\xa7\xf0\xb8\xb1\xa1'b'\x00\x05N\xb1xK\x8b\\\xfe\x18\xb2\x01\x01\xb2"\xdd\x80\xbd\xda\xe66\xbbp2Y>\xae\xa7)DX\xa6\x02\x18\xf3\xe7\xb8\xfd\xaa\xf8'b'\x00\x05N\xb1xK\x8b\xb4\xfe\x1c\xb3\x01\x01\xa3J\xa6X\xb9*G#93"\xf9\xb6\x00\x00\x00\x00\x00\x00\x00\x00l\x97w:\xa0@\xb7:i\xce'b'\x00\x05N\xb1xK\x8b\xfc\xfe\x03\xb4\x01\x01\xa5\xc5\x14\x00\x93\x0b'b'\x00\x05N\xb1xK\x8cH\xfe\x0c\xb5\x01\x01\x02\x805\x90x\xb1N\x05\x00\xe5\x9f\x03\x00G\xba'b'\x00\x05N\xb1xK\x8c\xb4\xfe\x16\xb6\x01\x01\x88X\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbal'b'\x00\x05N\xb1xK\x8d\x18\xfe\x16\xb7\x01\x01\xc1C\xc6R5\x15gV'b'\x00\x05N\xb1xM\x1bL\xfe*\xc0\x01\x01\x96s\xe7f\xbc\x0em\x01\x009\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00V\xda'b'\x00\x05N\xb1xM\x1b\xbc\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfeX'b'\x00\x05N\xb1xM\x1c\x1c\xfe\x06\xc2\x01\x01}\xc2\x14\x00\x00\x03\x00\xa9\x8c'b'\x00\x05N\xb1xM\x1c|\xfe\x04\xc3\x01\x01\x98\x00\x00\xa0\x8an\x08'b'\x00\x05N\xb1xM\x1c\xc8\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf'b'\x00\x05N\xb1xM\x1d4\xfe\x1e\xc5\x01\x01\x18\x10-(\x0e\x00\x00\x00\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c!\xf4'b'\x00\x05N\xb1xM\x1d\x88\xfe\x1a\xc6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0b\xb7'b'\x00\x05N\xb1xM\x1d\xd4\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec'b'\x00\x05N\xb1xM\x1e$\xfe\x15\xc8\x01\x01$\x89\x89)\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x002O'b'\x00\x05N\xb1xM\x1et\xfe\x16\xc9\x01\x01##\xa0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00C%'b'\x00\x05N\xb1xM\x1e\xc4\xfe\x14\xca\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa7\x98'b'\x00\x05N\xb1xM\x1f\x0c\xfe\x03\xcb\x01\x01Ms\x00\x00\xbf\xb4'b'\x00\x05N\xb1xM3\x88\xfe\x12\xcc\x01\x01\xfc~\xa0\x03\x004\x00\x01\x00ARMMASK\x00Wr\xb9B'b'\x00\x05N\xb1xN\x9d\xd7\xfe5\xef\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01o/'b'\x00\x05N\xb1xN\x9f \xfe\t\xcd\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9a\x8f'b'\x00\x05N\xb1xN\x9f\xa8\xfe\x1c\xce\x01\x01!\x93\xa0\x03\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xce\xf5'b'\x00\x05N\xb1xN\xa0$\xfe\t\xd1\n\x00m\x0e\x00\x00\x00\x00\xd2\x00\x00\x00{I'b'\x00\x05N\xb1xN\xa0\x84\xfe\x1c\xcf\x01\x01\x1e\xc2\xa0\x03\x00R\x9c\x7f\xbd`2;9\xf9\x1cU>\xdd\x00\xc2\xb8\xd1\x10c\xba\xdc\x17\xde9\xa5\\'b'\x00\x05N\xb1xN\xa0\xf4\xfe\x18\xd0\x01\x01\xb2C\xd9\x80\xbd\x93\xe45\xbb\x01ZY>\x14\xae)DX\xa6\x02\x18\xf3\xe7\xb8\xfd\xd3\x89'b'\x00\x05N\xb1xN\xa1`\xfe\x1c\xd1\x01\x01\xa3\x1f:Y\xb9y\x86%9\xad\x01\xd8\xb6\x00\x00\x00\x00\x00\x00\x00\x00x\nr:\x95\x8c(;\x1a|'b'\x00\x05N\xb1xN\xa1\xc0\xfe\x03\xd2\x01\x01\xa5\xc6\x14\x00\xee\xe0'b'\x00\x05N\xb1xN\xa2(\xfe\x0c\xd3\x01\x01\x028)\x94x\xb1N\x05\x00\xd6\xa0\x03\x00\x98\x9f'b'\x00\x05N\xb1xN\xa2\x98\xfe\x16\xd4\x01\x01\x88X\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\xe2'b'\x00\x05N\xb1xN\xa3\x04\xfe\x16\xd5\x01\x01\xc1\xc7\x1fF<\x0fA,7\xe7\x13\xdf8IZ\xb6=\x00\x00\x00\x00\xa5\x03\xfb\x91'b'\x00\x05N\xb1xO\x18;\xfe!\xf0\xff\x00L[n\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00d\xb2'b'\x00\x05N\xb1xO\x9ao\xfe\t\xf1\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x92\x17'b'\x00\x05N\xb1xP6\x90\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU'b'\x00\x05N\xb1xP7H\xfe\x1a\xd7\x01\x01\x1b\xa10-\x0e\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\x8cg'b'\x00\x05N\xb1xP7\xb0\xfe\x16\xd8\x01\x01t\x12\xa1\x03\x00\x05\x004\x00$\xfc\x02\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x029\xb4'b'\x00\x05N\xb1xP8\x14\xfe\x16\xd9\x01\x01\x81\x12\xa1\x03\x00\x02\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff*\x03\x86\x00q\x020o'b'\x00\x05N\xb1xP8l\xfe\x0e\xda\x01\x01\x1d\x12\xa1\x03\x003\xa3iDff\xf6<9\x10o\xa7'b'\x00\x05N\xb1xP8\xc0\xfe\x0e\xdb\x01\x01\x89\x12\xa1\x03\x00\x80\xe8iD33\xb9>6\x15S\xef'b'\x00\x05N\xb1xP9$\xfe\x1f\xdc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8ef'b'\x00\x05N\xb1xP9|\xfe\x06\xdd\x01\x01}\xc5\x14\x00\x00\x03\x00\xb8&'b'\x00\x05N\xb1xP9\xd0\xfe\x04\xde\x01\x01\x98\x00\x00\xa0\x8a(\xfa'b'\x00\x05N\xb1xP:\x1c\xfe\x02\xdf\x01\x01*\x00\x00\xba\x1c'b'\x00\x05N\xb1xP:\x84\xfe\x1e\xe0\x01\x01\x188>+\x0e\x00\x00\x00\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x83\xfe'b'\x00\x05N\xb1xP:\xd4\xfe\x1a\xe1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbd\x9b'b'\x00\x05N\xb1xP;\x1c\xfe\x08\xe2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00XJ'b'\x00\x05N\xb1xP;l\xfe\x15\xe3\x01\x01$\xf02-\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xfb'b'\x00\x05N\xb1xP;\xbc\xfe\x16\xe4\x01\x01#\x13\xa1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xda\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00xu'b'\x00\x05N\xb1xQ\x05\xf3\xfe5\xf2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01F\xa9'b'\x00\x05N\xb1xQ\x1d\x87\xfe!\xf3\xff\x00L\x90\x81\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00&o'b'\x00\x05N\xb1xQ\xbb\xbc\xfe\x14\xe5\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00=\xf0'b'\x00\x05N\xb1xQ\xbc@\xfe\x1c\xe6\x01\x01![\xa1\x03\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04Qn'b'\x00\x05N\xb1xQ\xbc\xac\xfe\x03\xe7\x01\x01Ms\x00\x00-9'b'\x00\x05N\xb1xR\xe3O\xfe5\xf4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd8\x86'b'\x00\x05N\xb1xR\xf9S\xfe!\xf5\xff\x00L\x90\x81\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa5\x89'b'\x00\x05N\xb1xSK,\xfe\x1c\xe8\x01\x01\x1e\xb3\xa1\x03\x00|`\x7f\xbd\xe0\xd5\x199\xa5.U>7\xb4t9Mp\x9a\xbaZ\xda$\xbak\xbc'b'\x00\x05N\xb1xSK\xcc\xfe\x18\xe9\x01\x01\xb2s\xba\x80\xbd:\xb47\xbb\x03qY>{\xb4)DY\xa6\x02\x18\xf3\xe7\xb8\xfd\x861'b"\x00\x05N\xb1xSL,\xfe\x1c\xea\x01\x01\xa3\x08\xcbY\xb9\x01\xc0'9\xbc\xff\xb6\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xe7*^:\x9d'6;\xb2\x14"b'\x00\x05N\xb1xSLx\xfe\x03\xeb\x01\x01\xa5\xc3\x14\x002\xcf'b'\x00\x05N\xb1xSL\xc8\xfe\x0c\xec\x01\x01\x02\x88\xda\x97x\xb1N\x05\x00\xc7\xa1\x03\x00\x16B'b'\x00\x05N\xb1xSM \xfe\x16\xed\x01\x01\x88Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\xae'b'\x00\x05N\xb1xSMx\xfe\x16\xee\x01\x01\xc1\xae\xafN<\x8a4-7\xa7\x08\xae;\xd0[\xb4=\x00\x00\x00\x00\xa5\x03\xcfF'b'\x00\x05N\xb1xSM\xcc\xfe\x1a\xef\x01\x01\x1b/\xdf0\x0e\x00\x00\x00\x00\x05\x005\x00\x1c\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xe2P'b'\x00\x05N\xb1xSN \xfe\x16\xf0\x01\x01t\x03\xa2\x03\x00\x0c\x00;\x002\xfc\x07\x00\x01\x00\xfb\xff\x07\x01\xa0\xff3\x02\xba}'b'\x00\x05N\xb1xSNx\xfe\x16\xf1\x01\x01\x81\x03\xa2\x03\x00\x03\x00B\x00\x1e\xfc\xfc\xff\x01\x00\xfd\xff%\x03\x87\x00v\x02\x90\xed'b'\x00\x05N\xb1xSN\xcc\xfe\x0e\xf2\x01\x01\x1d\x03\xa2\x03\x00\xec\xa2iD33\xd3<:\x10\x9a\xed'b'\x00\x05N\xb1xSO \xfe\x0e\xf3\x01\x01\x89\x03\xa2\x03\x008\xe7iD\xc2\xf5\xae>5\x15\xea\xa8'b'\x00\x05N\xb1xSO\x80\xfe\x1f\xf4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x004?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xce1'b'\x00\x05N\xb1xSO\xd8\xfe\x06\xf5\x01\x01}\xc5\x14\x00\x00\x03\x00\x98x'b'\x00\x05N\xb1xSP(\xfe\x04\xf6\x01\x01\x98\x00\x00\xa0\x8a\xdbr'b'\x00\x05N\xb1xSPl\xfe\x02\xf7\x01\x01*\x00\x00\xd5\xa1'b'\x00\x05N\xb1xSP\xc4\xfe\x1e\xf8\x01\x01\x18xK.\x0e\x00\x00\x00\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cu\xaf'b'\x00\x05N\xb1xSQ\x18\xfe\x1a\xf9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf7\xb1'b'\x00\x05N\xb1xSQl\xfe\x08\xfa\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe0='b'\x00\x05N\xb1xSQ\xc4\xfe\x15\xfb\x01\x01$\xf0\xe10\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00E\x12'b'\x00\x05N\xb1xSR\x18\xfe\x16\xfc\x01\x01#\x05\xa2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00J\xe5'b'\x00\x05N\xb1xSR`\xfe\x03\xfd\x01\x01Ms\x00\x00\x86D'b'\x00\x05N\xb1xT\xbb\xcb\xfe5\xf6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01]d'b'\x00\x05N\xb1xT\xbfT\xfe\x14\xfe\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe2\x9b'b'\x00\x05N\xb1xU!\xbb\xfe!\xf7\xff\x00L\xc4\x8d\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00wb'b'\x00\x05N\xb1xV]\xe4\xfe\x1c\xff\x01\x01!$\xa2\x03\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xa8\x04;X'b'\x00\x05N\xb1xV^\x8c\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd'b'\x00\x05N\xb1xVs \xfe\x1c\x01\x01\x01\x1e\xa4\xa2\x03\x00\xa3\x0f\x7f\xbd\x00\xa9\xfb8S\x13U>b\x8a\xee8~K\x10\xba\x8b\x8f%9\xe3\xdf'b'\x00\x05N\xb1xVs\xa4\xfe\x18\x02\x01\x01\xb2R\xac\x80\xbdF\x8b7\xbb\x02pY>\x8f\xb2)DY\xa6\x02\x18\xf3\xe7\xb8\xfd\x9f\xcb'b'\x00\x05N\xb1xVt\x0c\xfe\x1c\x03\x01\x01\xa3\xc1YZ\xb9\x01\xf4)9~\xa8\x96\xb6\x00\x00\x00\x00\x00\x00\x00\x00d\xe8>:\x0b\xb24;\xa4\xae'b'\x00\x05N\xb1xVt`\xfe\x03\x04\x01\x01\xa5\xc5\x14\x00\xf9-'b'\x00\x05N\xb1xVt\xb4\xfe\x0c\x05\x01\x01\x02\x002\x9bx\xb1N\x05\x00\xb8\xa2\x03\x00$,'b'\x00\x05N\xb1xVu\x0c\xfe\x16\x06\x01\x01\x88Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa4\x96'b'\x00\x05N\xb1xVuh\xfe\x16\x07\x01\x01\xc1\xb8\x0eQ<\xe0\xda,7.\xfbN;9\x17\xb2=\x00\x00\x00\x00\xa5\x03\xd6\xea'b'\x00\x05N\xb1xV\xfb#\xfe5\xf8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe4\xd9'b'\x00\x05N\xb1xW\x11w\xfe!\xf9\xff\x00L\x90z\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd0W'b'\x00\x05N\xb1xW\xd7\xfc\xfe\x1a\x08\x01\x01\x1b\x98\x8b4\x0e\x00\x00\x00\x00\x04\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xacZ'b'\x00\x05N\xb1xW\xd8\x8c\xfe\x16\t\x01\x01t\xf4\xa2\x03\x00\x02\x00<\x00/\xfc\xff\xff\xfe\xff\x06\x00\x07\x01\xa0\xff4\x02\xa97'b'\x00\x05N\xb1xW\xd8\xfc\xfe\x16\n\x01\x01\x81\xf4\xa2\x03\x00\x03\x00?\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x88\x00v\x02pD'b'\x00\x05N\xb1xW\xd9`\xfe\x0e\x0b\x01\x01\x1d\xf4\xa2\x03\x00\x83\xa3iD)\\\x0f=:\x10I\x96'b'\x00\x05N\xb1xW\xd9\xbc\xfe\x0e\x0c\x01\x01\x89\xf4\xa2\x03\x00\xae\xe7iD\xd7\xa3\xb2>7\x15R\xb0'b'\x00\x05N\xb1xW\xda \xfe\x1f\r\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x014?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tx\x8a'b'\x00\x05N\xb1xW\xda\x80\xfe\x06\x0e\x01\x01}\xc5\x14\x00\x00\x03\x00P\xf6'b'\x00\x05N\xb1xW\xda\xd0\xfe\x04\x0f\x01\x01\x98\x00\x00\xa0\x8a\xf5j'b'\x00\x05N\xb1xW\xdb\x18\xfe\x02\x10\x01\x01*\x00\x00UD'b'\x00\x05N\xb1xW\xdbt\xfe\x1e\x11\x01\x01\x18\xc8m4\x0e\x00\x00\x00\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cY\xe7'b'\x00\x05N\xb1xW\xdb\xcc\xfe\x1a\x12\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00%\xd2'b'\x00\x05N\xb1xW\xdc\x18\xfe\x08\x13\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00v\x05'b'\x00\x05N\xb1xW\xdcl\xfe\x15\x14\x01\x01$\xcf\x8d4\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x1e'b'\x00\x05N\xb1xW\xdc\xbc\xfe\x16\x15\x01\x01#\xf5\xa2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfa\xad'b'\x00\x05N\xb1xW\xdd\x04\xfe\x03\x16\x01\x01Ms\x00\x00\t\xfb'b'\x00\x05N\xb1xX\xcb\x9b\xfe5\xfa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01a;'b'\x00\x05N\xb1xX\xf5\xa3\xfe!\xfb\xff\x00L\x90z\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Q\n'b'\x00\x05N\xb1xYm\xac\xfe\x14\x17\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\xb7\x91\xd89'\xd1T\xba8\x02\xff\xb7u\x15"b'\x00\x05N\xb1xYo\xc0\xfe\x18\x1b\x01\x01\xb2m\xa7\x80\xbd\xae\x00:\xbbF}Y>\n\xa7)DZ\xa6\x02\x18\xf3\xe7\xb8\xfdcR'b'\x00\x05N\xb1xZ\xb1?\xfe5\xfc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xff\x14'b'\x00\x05N\xb1xZ\xc7\x7f\xfe!\xfd\xff\x00L\x08z\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa4\xe3'b'\x00\x05N\xb1xZ\xe7\x1c\xfe\x1c\x1c\x01\x01\xa3p\xe9Z\xb9\xa4",9\xda\xddm\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x938:\xd4\xf8D;\x10\xdd'b'\x00\x05N\xb1xZ\xe7\x90\xfe\x03\x1d\x01\x01\xa5\xc5\x14\x00\x82\xda'b'\x00\x05N\xb1xZ\xe7\xfc\xfe\x0c\x1e\x01\x01\x02\xa0)\x9fx\xb1N\x05\x00\xa8\xa3\x03\x00\xda\x89'b'\x00\x05N\xb1xZ\xe8|\xfe\x16\x1f\x01\x01\x88Z\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x11\xd8'b'\x00\x05N\xb1xZ\xe8\xf4\xfe\x16 \x01\x01\xc1\xd4\x00\\<,\xf1-7;\tm;\xb9J\xa1=\x00\x00\x00\x00\xa5\x03-\x02'b'\x00\x05N\xb1xZ\xe9\x80\xfe\x1a!\x01\x01\x1b\xf458\x0e\x00\x00\x00\x00\x05\x004\x00\x1e\xfc\x00\x00\xff\xff\x00\x00\r\x01\xb0\xffm\x01]T'b'\x00\x05N\xb1xZ\xea\x04\xfe\x16"\x01\x01t\xe4\xa3\x03\x00\x07\x004\x00*\xfc\x00\x00\x03\x00\xfc\xff\x07\x01\x9f\xff3\x02md'b'\x00\x05N\xb1xZ\xea\x88\xfe\x16#\x01\x01\x81\xe4\xa3\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfc\xff)\x03\x88\x00t\x02\x8e\x9c'b'\x00\x05N\xb1xZ\xeb\x10\xfe\x0e$\x01\x01\x1d\xe4\xa3\x03\x00\x17\xa3iD\xebQ\xe8<:\x10`\x11'b'\x00\x05N\xb1xZ\xeb\xc0\xfe\x0e%\x01\x01\x89\xe4\xa3\x03\x00\x00\xe8iD33\xb5>7\x15\xbb\x13'b'\x00\x05N\xb1xZ\xecL\xfe\x1f&\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf2\x004?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xaex'b"\x00\x05N\xb1xZ\xec\xbc\xfe\x06'\x01\x01}\xc8\x14\x00\x00\x03\x00\xae\xd3"b'\x00\x05N\xb1xZ\xed \xfe\x04(\x01\x01\x98\x00\x00\xa0\x8a.t'b'\x00\x05N\xb1xZ\xedx\xfe\x02)\x01\x01*\x00\x00&\xd3'b'\x00\x05N\xb1xZ\xed\xe8\xfe\x1e*\x01\x01\x18\x08{7\x0e\x00\x00\x00\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c@a'b'\x00\x05N\xb1xZ\xeeT\xfe\x1a+\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00CZ'b'\x00\x05N\xb1xZ\xee\xac\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf'b'\x00\x05N\xb1xZ\xef\x0c\xfe\x15-\x01\x01$\x9988\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe1'b'\x00\x05N\xb1xZ\xefp\xfe\x16.\x01\x01#\xe5\xa3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00z\xb9'b"\x00\x05N\xb1x[\x9e\x9f\xfe%\xfe\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa2\xe6"b'\x00\x05N\xb1x\\\xa1P\xfe\x03/\x01\x01Ms\x00\x00\x82\xba'b'\x00\x05N\xb1x\\\xb5\xec\xfe\x140\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00S\x9a'b'\x00\x05N\xb1x\\\xb6D\xfe\x031\x01\x01/\xff\x00\x00!\xa9'b'\x00\x05N\xb1x\\\xb6\xcc\xfe\x1c2\x01\x01!\xb5\xa3\x03\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04~B'b'\x00\x05N\xb1x\\\xb70\xfe\x123\x01\x01\xfci\xa4\x03\x004\x00\x01\x00ARMMASK\x00Wr_:'b'\x00\x05N\xb1x\\\xdb\xc7\xfe5\xff\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x010\x03'b'\x00\x05N\xb1x\\\xf2?\xfe!\x00\xff\x00L\x08z\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa8\xb1'b'\x00\x05N\xb1x^\x11\xa8\xfe\t4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xca\xa8'b"\x00\x05N\xb1x^\x12@\xfe\x1c5\x01\x01\x1e\x85\xa4\x03\x00\xdfZ\x7f\xbd@\x14\x089@\x0cU>;\x97\x82:\x9d\xac'\xba\xcc9\xfe\xb9gf"b'\x00\x05N\xb1x^\x12\xb0\xfe\x186\x01\x01\xb2\xde\xc9\x80\xbd\xfe\x048\xbb{\x84Y>G\xb1)D[\xa6\x02\x18\xf3\xe7\xb8\xfd\x80\x02'b'\x00\x05N\xb1x^\x13\x08\xfe\x037\x01\x01Ms\x00\x00F\xcc'b'\x00\x05N\xb1x^\x13\xb8\xfe\x1c8\x01\x01\xa3O~[\xb9\xf1G.9,\x8a/\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xab\xa11:\xb8E8;5\xb3'b'\x00\x05N\xb1x^\x14\x1c\xfe\x039\x01\x01\xa5\xc5\x14\x00\xacz'b'\x00\x05N\xb1x^\x14\x80\xfe\x0c:\x01\x01\x02\x08\xd7\xa2x\xb1N\x05\x00\x9a\xa4\x03\x00~\xfd'b'\x00\x05N\xb1x^\x14\xec\xfe\x16;\x01\x01\x88[\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\t'b'\x00\x05N\xb1x^\x15X\xfe\x16<\x01\x01\xc1\xa6\x03R\x01\x01\x1b\x7f\xe6;\x0e\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffm\x01\x93 'b'\x00\x05N\xb1x_\x864\xfe\x16?\x01\x01t\xd6\xa4\x03\x00\x0b\x008\x00*\xfc\xfe\xff\xfe\xff\xfe\xff\x07\x01\xa0\xff3\x02\x90\xa4'b'\x00\x05N\xb1x_\x86\x94\xfe\x16@\x01\x01\x81\xd6\xa4\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00n\x02\\\xa0'b'\x00\x05N\xb1x_\x86\xe4\xfe\x0eA\x01\x01\x1d\xd6\xa4\x03\x009\xa5iD\xcc\xcc|=;\x10W\x10'b'\x00\x05N\xb1x_\x870\xfe\x0eB\x01\x01\x89\xd6\xa4\x03\x00\xdd\xe7iD\xb8\x1e\xb4>8\x15\xf4\xc9'b'\x00\x05N\xb1x_\x87\x8c\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T`\x0f'b'\x00\x05N\xb1x_\x87\xe0\xfe\x06D\x01\x01}\xc5\x14\x00\x00\x03\x00\xdd,'b'\x00\x05N\xb1x_\x88,\xfe\x04E\x01\x01\x98\x00\x00\xa0\x8a\xa6h'b'\x00\x05N\xb1x_\x88p\xfe\x02F\x01\x01*\x00\x00Wn'b'\x00\x05N\xb1x_\x88\xc8\xfe\x1eG\x01\x01\x180\x8c:\x0e\x00\x00\x00\x00[\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cW 'b'\x00\x05N\xb1x_\x89\x18\xfe\x1aH\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00&\xb4'b'\x00\x05N\xb1x_\x89`\xfe\x08I\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x1a'b'\x00\x05N\xb1x_\x89\xb0\xfe\x15J\x01\x01$N\xe9;\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00@N'b'\x00\x05N\xb1x_\x8a\x00\xfe\x16K\x01\x01#\xd7\xa4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe7\xb1'b'\x00\x05N\xb1x_\x8aD\xfe\x03L\x01\x01Ms\x00\x00S\xe3'b'\x00\x05N\xb1x_\x8a\xe0\xfe\x14M\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00)\xb6'b'\x00\x05N\xb1x`\x92\x1b\xfe5\x04\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xac)'b'\x00\x05N\xb1x`\xbb\xeb\xfe!\x05\xff\x00L\xa1u\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Dz'b'\x00\x05N\xb1xa\x17\xe8\xfe\x1cN\x01\x01!G\xa5\x03\x00[\xa6\x02\x18\xf4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04~\x95'b'\x00\x05N\xb1xa\x18\x94\xfe\x1cO\x01\x01\x1ev\xa5\x03\x00T\x8c\x7f\xbd\x00\xed\xff7\x1e\xf5T>\x02\xec{:\x06I\x80\xbaS\xc2\xd1\xb76\xf4'b'\x00\x05N\xb1xa\x18\xf0\xfe\x18P\x01\x01\xb27\xdb\x80\xbds\xf9=\xbbE\x8cY>p\xad)D[\xa6\x02\x18\xf4\xe7\xb8\xfdw,'b"\x00\x05N\xb1xa\x19H\xfe\x1cQ\x01\x01\xa3\x14\x16\\\xb9aj09\xa0\xa1\xe6\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xca':\xdd(e;\xebj"b'\x00\x05N\xb1xa\x19\x90\xfe\x03R\x01\x01\xa5\xc5\x14\x00\xc1\x0e'b'\x00\x05N\xb1xa\x19\xdc\xfe\x0cS\x01\x01\x02\xa0|\xa6x\xb1N\x05\x00\x8a\xa5\x03\x00\xf9\xff'b'\x00\x05N\xb1xa\x1a,\xfe\x16T\x01\x01\x88[\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xf6'b'\x00\x05N\xb1xa\x1a\x80\xfe\x16U\x01\x01\xc1\x04xR9\x15;d'b'\x00\x05N\xb1xb\xa0$\xfe\x1f\\\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tt#'b'\x00\x05N\xb1xb\xa0\x84\xfe\x06]\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\xb4'b'\x00\x05N\xb1xb\xa0\xd8\xfe\x04^\x01\x01\x98\x00\x00\xa0\x8a\xff>'b'\x00\x05N\xb1xb\xa1 \xfe\x02_\x01\x01*\x00\x00\xa7\x9a'b'\x00\x05N\xb1xb\xa1|\xfe\x1e`\x01\x01\x18X\x9d=\x0e\x00\x00\x00\x00[\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd1\x94'b'\x00\x05N\xb1xb\xa1\xd0\xfe\x1aa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcc\x0f'b'\x00\x05N\xb1xb\xa2\x1c\xfe\x08b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x8c'b'\x00\x05N\xb1xb\xa2l\xfe\x15c\x01\x01$\xb3\x96?\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\xc7'b'\x00\x05N\xb1xb\xa2\xc0\xfe\x16d\x01\x01#\xc8\xa5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc3#'b'\x00\x05N\xb1xd:0\xfe\x03e\x01\x01Ms\x00\x00\xa0\xf9'b'\x00\x05N\xb1xdP{\xfe5\x08\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x90v'b'\x00\x05N\xb1xdQ\x88\xfe\x14f\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa6\x81'b'\x00\x05N\xb1xdR\x10\xfe\x1cg\x01\x01!\x10\xa6\x03\x00\\\xa6\x02\x18\xf4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04\x1fA'b'\x00\x05N\xb1xd\xa0\xcf\xfe!\t\xff\x00L\xded\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x17r'b'\x00\x05N\xb1xe\xae\xa4\xfe\x1ch\x01\x01\x1eh\xa6\x03\x00\xfdi\x7f\xbd\x00\\\xbb8\xa0\xd6T>\xa78\xfe9\xc5\x85\x96\xba\\\x13\x16\xb9\x87\x15'b'\x00\x05N\xb1xe\xaf(\xfe\x18i\x01\x01\xb2\xb3\xcc\x80\xbd\xc9n<\xbb\x86\x8eY>\x00\xc0)D\\\xa6\x02\x18\xf4\xe7\xb8\xfd\xb0%'b'\x00\x05N\xb1xe\xaf\x94\xfe\x1cj\x01\x01\xa3\xd0\xb4\\\xb9H\x8d29\xe8\xe1\\\xb5\x00\x00\x00\x00\x00\x00\x00\x00\xb1+):n4s;a\xcc'b'\x00\x05N\xb1xe\xaf\xe4\xfe\x03k\x01\x01\xa5\xc8\x14\x00\xc5\xc4'b'\x00\x05N\xb1xe\xb0<\xfe\x0cl\x01\x01\x02\x08*\xaax\xb1N\x05\x00|\xa6\x03\x00\x9cn'b'\x00\x05N\xb1xe\xb0\x98\xfe\x16m\x01\x01\x88\\\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe3\x96'b'\x00\x05N\xb1xe\xb0\xf0\xfe\x16n\x01\x01\xc1/+R<\x1b5.7\xac\td<\x1e]\xb4=\x00\x00\x00\x00\xa5\x03\xb9\x00'b'\x00\x05N\xb1xe\xb1<\xfe\x03o\x01\x01Ms\x00\x00s\xdf'b'\x00\x05N\xb1xe\xc5\xa4\xfe\x1ap\x01\x01\x1bD?C\x0e\x00\x00\x00\x00\x05\x005\x00\x1c\xfc\x01\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\x80\x9f'b"\x00\x05N\xb1xe\xc6\x04\xfe\x16q\x01\x01t\xb8\xa6\x03\x00\t\x00>\x00'\xfc\x00\x00\x02\x00\xfe\xff\x07\x01\x9f\xff3\x02\x1b\xca"b'\x00\x05N\xb1xe\xc6`\xfe\x16r\x01\x01\x81\xb8\xa6\x03\x00\x01\x00B\x00 \xfc\xfd\xff\x01\x00\xfd\xff.\x03\x86\x00l\x02\xca.'b'\x00\x05N\xb1xe\xc6\xb4\xfe\x0es\x01\x01\x1d\xb8\xa6\x03\x00\xbb\xa1iD\xc2\xf5\xe8;:\x10\x8b\x97'b'\x00\x05N\xb1xe\xc7\x04\xfe\x0et\x01\x01\x89\xb8\xa6\x03\x00k\xe8iD\\\x8f\xb8>:\x15ji'b'\x00\x05N\xb1xe\xc7`\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0e\x05'b'\x00\x05N\xb1xe\xc7\xb4\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14'b'\x00\x05N\xb1xe\xc8\x04\xfe\x04w\x01\x01\x98\x00\x00\xa0\x8a\xf1\xfb'b'\x00\x05N\xb1xe\xc8H\xfe\x02x\x01\x01*\x00\x00<>'b'\x00\x05N\xb1xe\xc8\xa0\xfe\x1ey\x01\x01\x18\x80\xae@\x0e\x00\x00\x00\x00\\\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c,i'b'\x00\x05N\xb1xe\xc8\xfc\xfe\x1az\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcbb'b'\x00\x05N\xb1xe\xc9D\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe'b'\x00\x05N\xb1xe\xc9\x94\xfe\x15|\x01\x01$\xd7AC\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x011'b'\x00\x05N\xb1xe\xc9\xe4\xfe\x16}\x01\x01#\xb8\xa6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00m\xa1'b'\x00\x05N\xb1xffK\xfe5\n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x15\x94'b'\x00\x05N\xb1xf|\xe3\xfe!\x0b\xff\x00L\xe8O\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb1\x02'b'\x00\x05N\xb1xgG\x98\xfe\x14~\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00z\xb5'b'\x00\x05N\xb1xgH\x00\xfe\x03\x7f\x01\x01Ms\x00\x00\x0b\x84'b'\x00\x05N\xb1xh][\xfe5\x0c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8b\xbb'b'\x00\x05N\xb1xh\xb0#\xfe!\r\xff\x00L\xe8O\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x002\xe4'b'\x00\x05N\xb1xh\xb1\x98\xfe\x1c\x80\x01\x01!\xc4\xa6\x03\x00]\xa6\x02\x18\xf4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa6\x04\xa8x'b'\x00\x05N\xb1xh\xb2\x88\xfe\x1c\x81\x01\x01\x1eY\xa7\x03\x00\x9a\x9f\x7f\xbd\xc0\xa6\xe38\xa8\xd4T>4\x8f\xab9D\x92\r\xba\x99o\xd2\xb9\xef\n'b'\x00\x05N\xb1xh\xb3\x0c\xfe\x18\x82\x01\x01\xb2\xe0\xce\x80\xbdy\x02;\xbb%\x98Y>\xa4\xb0)D]\xa6\x02\x18\xf4\xe7\xb8\xfd\x17O'b'\x00\x05N\xb1xh\xb3t\xfe\x1c\x83\x01\x01\xa3\xacY]\xb9\xd1\xad49h\xf0\x023\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xe8!:|\xf3j;\xb4['b'\x00\x05N\xb1xh\xb3\xc0\xfe\x03\x84\x01\x01\xa5\xc8\x14\x00\x94m'b'\x00\x05N\xb1xh\xb4\x18\xfe\x0c\x85\x01\x01\x02\xa0\xcf\xadx\xb1N\x05\x00l\xa7\x03\x00\xe1\x8f'b"\x00\x05N\xb1xh\xb4t\xfe\x16\x86\x01\x01\x88]\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6'"b'\x00\x05N\xb1xh\xb4\xc8\xfe\x12\x87\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x02\x1f'b'\x00\x05N\xb1xh\xb5$\xfe\x16\x88\x01\x01\xc1y\xdbW<\x94\xd5-7\xe6\x93\xe9:\xc9\\\xab=\x00\x00\x00\x00\xa5\x03\x19\x9f'b'\x00\x05N\xb1xh\xb5t\xfe\x03\x89\x01\x01Ms\x00\x00!\xda'b'\x00\x05N\xb1xjvo\xfe5\x0e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0eY'b'\x00\x05N\xb1xj\xa0\x7f\xfe!\x0f\xff\x00L\x9dN\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf3o'b'\x00\x05N\xb1xj\xa1t\xfe\x1a\x8a\x01\x01\x1bC\xebF\x0e\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\x7f\x87'b'\x00\x05N\xb1xj\xa2d\xfe\x16\x8b\x01\x01t\xa8\xa7\x03\x00\x07\x005\x00,\xfc\x02\x00\xfe\xff\xfe\xff\x07\x01\xa0\xff4\x02)\x1e'b'\x00\x05N\xb1xj\xa3\x90\xfe\x16\x8c\x01\x01\x81\xa8\xa7\x03\x00\x00\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff.\x03\x88\x00w\x02\xc0\xcc'b'\x00\x05N\xb1xj\xa4\x8c\xfe\x0e\x8d\x01\x01\x1d\xa8\xa7\x03\x00a\xa3iDR\xb8\x06=<\x10\x03\xb4'b'\x00\x05N\xb1xj\xa5|\xfe\x0e\x8e\x01\x01\x89\xa8\xa7\x03\x00 \xe7iD33\xae>:\x15QF'b'\x00\x05N\xb1xj\xa70\xfe\x1f\x8f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x012?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TU\x12'b'\x00\x05N\xb1xj\xa8\x10\xfe\x06\x90\x01\x01}\xc5\x14\x00\x00\x03\x00\xd3\\'b'\x00\x05N\xb1xj\xa8\xb0\xfe\x04\x91\x01\x01\x98\x00\x00\xa0\x8ac\x8a'b'\x00\x05N\xb1xj\xa90\xfe\x02\x92\x01\x01*\x00\x00\xf3\xf5'b'\x00\x05N\xb1xj\xa9\xa4\xfe\x1e\x93\x01\x01\x18\xe8\xccF\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf5\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cR\xe0'b'\x00\x05N\xb1xj\xaa\x10\xfe\x1a\x94\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xce\xc8'b'\x00\x05N\xb1xj\xaal\xfe\x08\x95\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00:\xde'b'\x00\x05N\xb1xj\xaa\xec\xfe\x15\x96\x01\x01$\xf9\xedF\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xb2'b'\x00\x05N\xb1xj\xabH\xfe\x16\x97\x01\x01#\xa9\xa7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00E7'b'\x00\x05N\xb1xk|3\xfe\x06\x10\xff\x00B\x04\x00\x01\x00\x00\x01\xc6\x08'b'\x00\x05N\xb1xk\xcd\x0c\xfe\x14\x98\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x9c\x9bu:w\xbaT\xba\xe5\x83\xc18\xd6#'b'\x00\x05N\xb1xk\xe5\x18\xfe\x18\x9c\x01\x01\xb2c\xbb\x80\xbd!b<\xbb\\\x9fY>3\xb3)D]\xa6\x02\x18\xf5\xe7\xb8\xfd\x97K'b'\x00\x05N\xb1xk\xe5|\xfe\x12\x9d\x01\x01\xfcV\xa8\x03\x004\x00\x01\x00ARMMASK\x00Wrj\xc2'b'\x00\x05N\xb1xk\xe5\xe4\xfe\t\x9e\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1c\x99'b'\x00\x05N\xb1xlT\xb7\xfe5\x12\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01m*'b'\x00\x05N\xb1xl\x93#\xfe!\x13\xff\x00L\xb0L\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00p='b'\x00\x05N\xb1xmV\xd0\xfe\x1c\x9f\x01\x01\xa3\xd0\x06^\xb9W\xcc69\xb2\x8f`5\x00\x00\x00\x00\x00\x00\x00\x00\x04\x91 :\xc7\xd0\x8e;\xe8\xf8'b'\x00\x05N\xb1xmWH\xfe\x03\xa0\x01\x01\xa5\xc5\x14\x005F'b'\x00\x05N\xb1xmW\x9c\xfe\x0c\xa1\x01\x01\x02 y\xb1x\xb1N\x05\x00]\xa8\x03\x00\x0eq'b'\x00\x05N\xb1xmW\xf4\xfe\x16\xa2\x01\x01\x88]\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x14\xec'b'\x00\x05N\xb1xmXH\xfe\x16\xa3\x01\x01\xc1\xbc\xeaW<\xdc\xc4,7EL#:\xf9Y\xa5=\x00\x00\x00\x00\xa5\x03\x9f7'b'\x00\x05N\xb1xmX\x90\xfe\x03\xa4\x01\x01/\xff\x00\x00\xda\xae'b'\x00\x05N\xb1xml\xe8\xfe\t\xd3\n\x00m"\x00\x00\x00\x00\xd1\x00\x00\x00c\xdc'b'\x00\x05N\xb1xmm4\xfe\x03\xa5\x01\x01Ms\x00\x00\xb3W'b'\x00\x05N\xb1xmm\xc0\xfe\x1a\xa6\x01\x01\x1bQ\x99J\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01\x0f\x17'b'\x00\x05N\xb1xmn\x18\xfe\x16\xa7\x01\x01t\x99\xa8\x03\x00\x05\x006\x00%\xfc\x02\x00\xfe\xff\x01\x00\x07\x01\xa0\xff3\x02\xea\xc0'b'\x00\x05N\xb1xmnp\xfe\x16\xa8\x01\x01\x81\x99\xa8\x03\x00\x03\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff2\x03\x85\x00k\x02\xbe~'b'\x00\x05N\xb1xmn\xbc\xfe\x0e\xa9\x01\x01\x1d\x99\xa8\x03\x00y\xa3iD\xcd\xcc\x0c=<\x10.W'b'\x00\x05N\xb1xmo\x08\xfe\x0e\xaa\x01\x01\x89\x99\xa8\x03\x00\x93\xe7iD\xcd\xcc\xb1>:\x157\x16'b'\x00\x05N\xb1xmo\\\xfe\x1f\xab\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x002?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa6='b'\x00\x05N\xb1xmo\xb0\xfe\x06\xac\x01\x01}\xc5\x14\x00\x00\x03\x00\xe3-'b'\x00\x05N\xb1xmo\xfc\xfe\x04\xad\x01\x01\x98\x00\x00\xa0\x8a\xe1\xc2'b'\x00\x05N\xb1xmp@\xfe\x02\xae\x01\x01*\x00\x00#\x92'b'\x00\x05N\xb1xmp\x94\xfe\x1e\xaf\x01\x01\x18(\xdaI\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf5\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cR\xb7'b'\x00\x05N\xb1xmp\xe8\xfe\x1a\xb0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x005\xa3'b'\x00\x05N\xb1xmq0\xfe\x08\xb1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00.}'b'\x00\x05N\xb1xmq|\xfe\x15\xb2\x01\x01$\x04\x9cJ\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00KK'b'\x00\x05N\xb1xmq\xd0\xfe\x16\xb3\x01\x01#\x9a\xa8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb0\xb5'b'\x00\x05N\xb1xnOC\xfe\t\x14\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xcf\xfa'b'\x00\x05N\xb1xn\xbb\xdf\xfe5\x15\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb9\xf0'b'\x00\x05N\xb1xn\xe60\xfe\x14\xb4\x01\x01J\n\xd7#<\n\xd7#\xdc\x80\xfe9\x84\r\x1c\xbaO\x06\x88\xb9\xd3>'b'\x00\x05N\xb1xp\x87\xa8\xfe\x18\xb8\x01\x01\xb2\xceq\x80\xbd\x84\x82:\xbba\xa4Y>3\xb3)D]\xa6\x02\x18\xf6\xe7\xb8\xfd\xffg'b'\x00\x05N\xb1xp\x88\x00\xfe\x1c\xb9\x01\x01\xa3g\xbe^\xb9A\xe889\xa1<\xd75\x00\x00\x00\x00\x00\x00\x00\x00\x93\xec=:\xef\x11o;X\xae'b'\x00\x05N\xb1xp\x88D\xfe\x03\xba\x01\x01\xa5\xc5\x14\x00\x9e;'b'\x00\x05N\xb1xp\x88\x90\xfe\x0c\xbb\x01\x01\x02\xa0"\xb5x\xb1N\x05\x00M\xa9\x03\x00?&'b'\x00\x05N\xb1xp\x88\xe0\xfe\x16\xbc\x01\x01\x88]\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc8:'b'\x00\x05N\xb1xp\x890\xfe\x16\xbd\x01\x01\xc1\xc6\xc1W<\xd0\x9e,7\xd6\xc4Y;\x19\x92\xb5=\x00\x00\x00\x00\xa5\x03\x01D'b'\x00\x05N\xb1xp\xc2\xcf\xfe5\x17\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01<\x12'b'\x00\x05N\xb1xp\xd9\xb7\xfe!\x18\xff\x00LsC\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00d\xee'b'\x00\x05N\xb1xq\xe6@\xfe\x1a\xbf\x01\x01\x1b\xb3CN\x0e\x00\x00\x00\x00\x02\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xae\xffn\x01\xd5\x84'b"\x00\x05N\xb1xq\xe6\xbc\xfe\x16\xc0\x01\x01t\x8a\xa9\x03\x00\t\x00A\x00'\xfc\xff\xff\xfe\xff\x01\x00\x07\x01\xa0\xff4\x02m0"b'\x00\x05N\xb1xq\xe7\x18\xfe\x16\xc1\x01\x01\x81\x8a\xa9\x03\x00\x03\x00A\x00 \xfc\xfd\xff\x01\x00\xfd\xff.\x03\x87\x00n\x02\x0cX'b'\x00\x05N\xb1xq\xe7l\xfe\x0e\xc2\x01\x01\x1d\x8a\xa9\x03\x00\x94\xa4iD\x1e\x85S=<\x100\xfe'b'\x00\x05N\xb1xq\xe7\xb8\xfe\x0e\xc3\x01\x01\x89\x8a\xa9\x03\x00[\xe7iD=\n\xb0>;\x15\xd1\x01'b'\x00\x05N\xb1xq\xe8\x14\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T*\xd0'b'\x00\x05N\xb1xq\xe8p\xfe\x06\xc5\x01\x01}\xc5\x14\x00\x00\x03\x00W\xeb'b'\x00\x05N\xb1xq\xe8\xc4\xfe\x04\xc6\x01\x01\x98\x00\x00\xa0\x8avz'b'\x00\x05N\xb1xq\xe9\x10\xfe\x02\xc7\x01\x01*\x00\x00\x9fw'b'\x00\x05N\xb1xq\xe9l\xfe\x1e\xc8\x01\x01\x18P\xebL\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf6\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xaa\xa8'b'\x00\x05N\xb1xq\xe9\xc8\xfe\x1a\xc9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00c\xe5'b'\x00\x05N\xb1xq\xea\x18\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2'b'\x00\x05N\xb1xq\xeap\xfe\x15\xcb\x01\x01$+FN\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15a'b'\x00\x05N\xb1xq\xea\xc8\xfe\x16\xcc\x01\x01#\x8a\xa9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00U\xd3'b'\x00\x05N\xb1xq\xeb\x14\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\x00\x05N\xb1xq\xeb\xac\xfe\x14\xce\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x0c\x10\x889\x03\xa9Q\xba\x83\x81\xef\xb7\x04b'b'\x00\x05N\xb1xsm\xc8\xfe\x18\xd1\x01\x01\xb2\xe5H\x80\xbd@V>\xbb\xfe\xb3Y>\xa4\xb0)D^\xa6\x02\x18\xf6\xe7\xb8\xfd\xef\xec'b'\x00\x05N\xb1xsn\x10\xfe\x03\xd2\x01\x01Ms\x00\x00\xc4C'b'\x00\x05N\xb1xsn\xa8\xfe\x1c\xd3\x01\x01\xa3u\x80_\xb9\x80\x05;9\xc5\x83\x1f6\x00\x00\x00\x00\x00\x00\x00\x00l\nL:\n"\x83;\xd1O'b'\x00\x05N\xb1xsn\xec\xfe\x03\xd4\x01\x01\xa5\xc5\x14\x00\x92\xd8'b'\x00\x05N\xb1xsoH\xfe\x0c\xd5\x01\x01\x028\xc8\xb8x\xb1N\x05\x00>\xaa\x03\x00\xe2\x05'b'\x00\x05N\xb1xso\xa4\xfe\x16\xd6\x01\x01\x88^\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8e\xa4'b'\x00\x05N\xb1xso\xfc\xfe\x16\xd7\x01\x01\xc1C\x04U<\x16\xa9,7\xdd\x8d\xd0:\x83:\xbb=\x00\x00\x00\x00\xa5\x03\xb7\xa0'b'\x00\x05N\xb1xt\xc2\x8f\xfe5\x1b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x00M'b'\x00\x05N\xb1xu\x01C\xfe!\x1c\xff\x00L\x84I\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00:W'b'\x00\x05N\xb1xu\x02\x0c\xfe\x1a\xd8\x01\x01\x1b\x85\xf0Q\x0e\x00\x00\x00\x00\x02\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\xb3\t'b'\x00\x05N\xb1xu\x02\x8c\xfe\x16\xd9\x01\x01t{\xaa\x03\x00\t\x001\x00,\xfc\x03\x00\x00\x00\xfd\xff\x07\x01\xa1\xff4\x02\xc8\xf9'b"\x00\x05N\xb1xu\x02\xf4\xfe\x16\xda\x01\x01\x81{\xaa\x03\x00\x03\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfc\xff'\x03\x87\x00l\x02\xae\xac"b'\x00\x05N\xb1xu\x03P\xfe\x0e\xdb\x01\x01\x1d{\xaa\x03\x00\x06\xa4iD\x00\x000=;\x10Yq'b'\x00\x05N\xb1xu\x03\xa4\xfe\x0e\xdc\x01\x01\x89{\xaa\x03\x00\xc9\xe7iD\xe1z\xb3>:\x15\xd3('b'\x00\x05N\xb1xu\x04\x08\xfe*\xdd\x01\x01\x96s\xe7f\xbc\x10m\x01\x00;\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xec\xfd'b'\x00\x05N\xb1xu\x04l\xfe\x1f\xde\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd2^'b'\x00\x05N\xb1xu\x04\xc8\xfe\x06\xdf\x01\x01}\xc5\x14\x00\x00\x03\x00\x9a\x8d'b'\x00\x05N\xb1xu\x05\x1c\xfe\x04\xe0\x01\x01\x98\x00\x00\xa0\x8aP)'b'\x00\x05N\xb1xu\x05h\xfe\x02\xe1\x01\x01*\x00\x00\xd1L'b'\x00\x05N\xb1xu\x05\xc4\xfe\x1e\xe2\x01\x01\x18x\xfcO\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf6\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cR\xce'b'\x00\x05N\xb1xu\x06D\xfe\x1a\xe3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc4\x19'b'\x00\x05N\xb1xu\x06\x9c\xfe\x08\xe4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb6W'b'\x00\x05N\xb1xu\x06\xf4\xfe\x15\xe5\x01\x01$\x19\xf4Q\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x13'b'\x00\x05N\xb1xu\x07L\xfe\x16\xe6\x01\x01#{\xaa\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfeB'b'\x00\x05N\xb1xv~\xc8\xfe\x03\xe7\x01\x01Ms\x00\x00-9'b'\x00\x05N\xb1xv\x7f\x9c\xfe\x14\xe8\x01\x01J\n\xd7#<\n\xd7#Gv\xa0:\xec\x01w\xba9{\x04:\xcd\x80'b'\x00\x05N\xb1xx\x03P\xfe\x18\xeb\x01\x01\xb22\x1e\x80\xbd\xcf\x03>\xbb\x86\x9fY>f\xb6)D^\xa6\x02\x18\xf7\xe7\xb8\xfd\xdb\xaf'b'\x00\x05N\xb1xx\x03\xa8\xfe\x1c\xec\x01\x01\xa3\xb1I`\xb9\xac&=9\x85UQ6\x00\x00\x00\x00\x00\x00\x00\x00\x86\xeb/:\x18\xa4e;\xea\xd4'b'\x00\x05N\xb1xx\x03\xf0\xfe\x03\xed\x01\x01\xa5\xc5\x14\x00\x19\x99'b'\x00\x05N\xb1xx\x04<\xfe\x0c\xee\x01\x01\x02\xa0u\xbcx\xb1N\x05\x00/\xab\x03\x00?\xfa'b'\x00\x05N\xb1xx\x04\x90\xfe\x16\xef\x01\x01\x88^\xa6\x02\x18\xf7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x92\xf2'b'\x00\x05N\xb1xx\x04\xe0\xfe\x16\xf0\x01\x01\xc1\xb4\x88V<\xb5o-7"\x98\xc0;\xa4\xdf\xa9=\x00\x00\x00\x00\xa5\x03\x8e\x80'b'\x00\x05N\xb1xx\x05$\xfe\x03\xf1\x01\x01Ms\x00\x00\xe4\x7f'b'\x00\x05N\xb1xx\x05\xb4\xfe\x1a\xf2\x01\x01\x1b\x8f\x9bU\x0e\x00\x00\x00\x00\x04\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x85\xbc'b'\x00\x05N\xb1xx\x06\x08\xfe\x16\xf3\x01\x01tk\xab\x03\x00\r\x005\x00-\xfc\x00\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x02t\xb9'b'\x00\x05N\xb1xx\x06`\xfe\x16\xf4\x01\x01\x81k\xab\x03\x00\x00\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x87\x00n\x02g\xbe'b'\x00\x05N\xb1xx\x06\xac\xfe\x0e\xf5\x01\x01\x1dk\xab\x03\x00\xc5\xa2iD)\\\xbf<:\x10R 'b'\x00\x05N\xb1xx\x06\xf4\xfe\x0e\xf6\x01\x01\x89k\xab\x03\x00\xf4\xe7iD\n\xd7\xb4>;\x15\xe67'b'\x00\x05N\xb1xx\x07L\xfe\x1f\xf7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TO\xfd'b'\x00\x05N\xb1xx\x07\xa0\xfe\x06\xf8\x01\x01}\xc2\x14\x00\x00\x03\x00\xee\x08'b'\x00\x05N\xb1xx\x07\xe8\xfe\x04\xf9\x01\x01\x98\x00\x00\xa0\x8a\xf3\xe4'b'\x00\x05N\xb1xx\x08,\xfe\x02\xfa\x01\x01*\x00\x00\x9a\x8f'b'\x00\x05N\xb1xx\x08\x80\xfe\x1e\xfb\x01\x01\x18\x98\xbbR\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf7\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cdV'b'\x00\x05N\xb1xx\x08\xe4\xfe\x1a\xfc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00 x'b'\x00\x05N\xb1xx\t,\xfe\x08\xfd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa3%'b'\x00\x05N\xb1xx\tx\xfe\x15\xfe\x01\x01$\xef\x9dU\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x92'b'\x00\x05N\xb1xx\t\xc8\xfe\x16\xff\x01\x01#l\xab\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08N'b'\x00\x05N\xb1xx\xb7\xff\xfe5\x1f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1b\x80'b'\x00\x05N\xb1xx\xe2W\xfe! \xff\x00L\xd0$\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00J\xbd'b'\x00\x05N\xb1xy\x91\xe0\xfe\x14\x00\x01\x01J\n\xd7#<\n\xd7#Y\x99\x8a\xb9\xad\x03\xb6\xbaZMJ\xba\xa4\xd0'b'\x00\x05N\xb1x{#\xe0\xfe\x18\x04\x01\x01\xb2`\xbc\x7f\xbd\x97\xd2C\xbb\xfd\xabY>G\xb1)D^\xa6\x02\x18\xf8\xe7\xb8\xfdu1'b"\x00\x05N\xb1x{$D\xfe\x1c\x05\x01\x01\xa32\x1ca\xb9\xd9E?9\x91$\x816\x00\x00\x00\x00\x00\x00\x00\x00H\x83':k\x11E;\xedL"b'\x00\x05N\xb1x{$\x9c\xfe\x03\x06\x01\x01\xa5\xc5\x14\x00\x96&'b'\x00\x05N\xb1x{$\xf0\xfe\x0c\x07\x01\x01\x02\x08#\xc0x\xb1N\x05\x00 \xac\x03\x00\xf1\x85'b'\x00\x05N\xb1x{%L\xfe\x16\x08\x01\x01\x88^\xa6\x02\x18\xf8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xedS'b'\x00\x05N\xb1x{%\xb4\xfe\x16\t\x01\x01\xc1\x90\x06X<\x01\xdc,77\xa0\xee:*\xbe\xa5=\x00\x00\x00\x00\xa5\x03>\xba'b'\x00\x05N\xb1x{&\x00\xfe\x03\n\x01\x01Ms\x00\x00\x13\x9b'b'\x00\x05N\xb1x{:d\xfe\x12\x0b\x01\x01\xfcA\xac\x03\x004\x00\x01\x00ARMMASK\x00Wr;\x85'b"\x00\x05N\xb1x|8\xb3\xfe%#\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x19\xb3"b'\x00\x05N\xb1x|d+\xfe5$\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x12q'b'\x00\x05N\xb1x|\x8eo\xfe!%\xff\x00L@%\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00_}'b'\x00\x05N\xb1x|\xc5\xbc\xfe\t\x0c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc14'b'\x00\x05N\xb1x|\xc6X\xfe\x1a\r\x01\x01\x1b\xbdJY\x0e\x00\x00\x00\x00\x03\x002\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xb6\xda'b'\x00\x05N\xb1x|\xc6\xd4\xfe\x16\x0e\x01\x01t\\\xac\x03\x00\x0b\x006\x00,\xfc\xff\xff\xfc\xff\x01\x00\x07\x01\xa0\xff3\x02\x13\x9c'b'\x00\x05N\xb1x|\xc7T\xfe\x16\x0f\x01\x01\x81\\\xac\x03\x00\x03\x00A\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00g\x02e6'b'\x00\x05N\xb1x|\xc7\xc4\xfe\x0e\x10\x01\x01\x1d\\\xac\x03\x00I\xa3iD\xd7\xa3\x00=<\x10\xbf7'b'\x00\x05N\xb1x|\xc80\xfe\x0e\x11\x01\x01\x89\\\xac\x03\x00\xf2\xe6iD\x8f\xc2\xac><\x15\xb7\xdb'b'\x00\x05N\xb1x|\xc8\xac\xfe\x1f\x12\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x85\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TXS'b'\x00\x05N\xb1x|\xc9 \xfe\x06\x13\x01\x01}\xc5\x14\x00\x00\x03\x00{0'b'\x00\x05N\xb1x|\xc9\x88\xfe\x04\x14\x01\x01\x98\x00\x00\xa0\x8a\xac<'b'\x00\x05N\xb1x|\xc9\xe8\xfe\x02\x15\x01\x01*\x00\x00\xf6\xb4'b'\x00\x05N\xb1x|\xca\x80\xfe\x1e\x16\x01\x01\x18\xe8\xddX\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf8\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x15\xb0'b'\x00\x05N\xb1x|\xca\xf8\xfe\x1a\x17\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf2\x1b'b'\x00\x05N\xb1x|\xcb\\\xfe\x08\x18\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe9&'b'\x00\x05N\xb1x|\xcb\xc0\xfe\x15\x19\x01\x01$wMY\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfdc'b'\x00\x05N\xb1x|\xcc \xfe\x16\x1a\x01\x01#]\xac\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00w\xb2'b'\x00\x05N\xb1x|\xccx\xfe\t\xd4\n\x00m\t\x00\x00\x00\x00\xd0\x00\x00\x00U\x16'b'\x00\x05N\xb1x|\xcc\xc4\xfe\x03\x1b\x01\x01/\xff\x00\x00\x029'b'\x00\x05N\xb1x}\xaa\x9b\xfe\t&\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03st'b'\x00\x05N\xb1x~0\xc8\xfe\x14\x1c\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xbf8'b'\x00\x05N\xb1x~1H\xfe\x03\x1d\x01\x01Ms\x00\x00e\\'b'\x00\x05N\xb1x~E\xb4\xfe\x1c\x1e\x01\x01!A\xac\x03\x00^\xa6\x02\x18\xf8\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\x97@'b"\x00\x05N\xb1x~F(\xfe\x1c\x1f\x01\x01\x1e\xfc\xac\x03\x00'\xc3}\xbd\x80pV8\x00\xa7T>\xad\xde\xef9u\x07\x13\xba\xab\xcf\t\xba!\x18"b'\x00\x05N\xb1x~F\x80\xfe\x18 \x01\x01\xb2\xba\x92\x7f\xbd\x1a\xc0A\xbb\x90\xc5Y>\xc2\xb5)D^\xa6\x02\x18\xf8\xe7\xb8\xfd\xc1\xdc'b"\x00\x05N\xb1x~]\xf7\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xddf"b'\x00\x05N\xb1x~u/\xfe!(\xff\x00L\xa3.\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00_*'b'\x00\x05N\xb1x\x7f\xb1\xd8\xfe\x1c!\x01\x01\xa3\x94\xf9a\xb9\xd0bA9\xcf\x1b\x9a6\x00\x00\x00\x00\x00\x00\x00\x00XE\x02:,\xc9\x0b;\x9d\\'b'\x00\x05N\xb1x\x7f\xb2<\xfe\x03"\x01\x01\xa5\xc5\x14\x00\xb8\x86'b'\x00\x05N\xb1x\x7f\xb2\x90\xfe\x0c#\x01\x01\x02\xa0\xc8\xc3x\xb1N\x05\x00\x11\xad\x03\x00\xea\xe8'b'\x00\x05N\xb1x\x7f\xb2\xe8\xfe\x16$\x01\x01\x88_\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x94\x93'b'\x00\x05N\xb1x\x7f\xb3X\xfe\x16%\x01\x01\xc1\xfcqQ>\x15\x12\x88'b'\x00\x05N\xb1x\x7f\xb7\x04\xfe\x1f,\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf0\xd6'b'\x00\x05N\xb1x\x7f\xb7`\xfe\x06-\x01\x01}\xc8\x14\x00\x00\x03\x00&\xc4'b'\x00\x05N\xb1x\x7f\xb7\xac\xfe\x04.\x01\x01\x98\x00\x00\xa0\x8a1\xd0'b'\x00\x05N\xb1x\x7f\xb7\xf0\xfe\x02/\x01\x01*\x00\x00\xeb\x8b'b'\x00\x05N\xb1x\x7f\xb8D\xfe\x1e0\x01\x01\x18(\xeb[\x0e\x00\x00\x00\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c-\x91'b'\x00\x05N\xb1x\x7f\xb8\x94\xfe\x1a1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00p\xf2'b'\x00\x05N\xb1x\x7f\xb8\xdc\xfe\x082\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00{\xb5'b'\x00\x05N\xb1x\x7f\xb9,\xfe\x153\x01\x01$\xea\xf7\\\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00s\xd3'b'\x00\x05N\xb1x\x7f\xb9\x84\xfe\x164\x01\x01#M\xad\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00[\xb9'b'\x00\x05N\xb1x\x802\xef\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01d\xdb'b'\x00\x05N\xb1x\x80o\xc7\xfe!*\xff\x00L\xa3.\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdew'b'\x00\x05N\xb1x\x81n\x94\xfe\x145\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00|\x90'b'\x00\x05N\xb1x\x81o,\xfe\x036\x01\x01Ms\x00\x00\xf9M'b'\x00\x05N\xb1x\x81\x84L\xfe\x1c7\x01\x01!\t\xad\x03\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04_\xe4'b'\x00\x05N\xb1x\x82\\\x1b\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe19'b'\x00\x05N\xb1x\x82\x86\xdf\xfe!,\xff\x00L\xa3.\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00]\x91'b'\x00\x05N\xb1x\x82\xc1\xa0\xfe\x1c8\x01\x01\x1e\xed\xad\x03\x00\xb6;~\xbd\x80\xeb\xec8bxT>P\x15\xda9\xe56\x01\xba\x9ei\xc4\xb8\r\x13'b'\x00\x05N\xb1x\x82\xc2,\xfe\x189\x01\x01\xb2K\xaa\x7f\xbd\xb4\xd5?\xbb \xb1Y>G\xb1)D_\xa6\x02\x18\xf9\xe7\xb8\xfd\xd1\x12'b'\x00\x05N\xb1x\x82\xc2\x9c\xfe\x1c:\x01\x01\xa3\xd7\xe1b\xb9\n\x85C9\xbe\x8d\xb36\x00\x00\x00\x00\x00\x00\x00\x00D(\xf09\xb0Z?;\xf7\x06'b'\x00\x05N\xb1x\x82\xc3\x04\xfe\x03;\x01\x01\xa5\xc5\x14\x00\xc3q'b'\x00\x05N\xb1x\x82\xc3l\xfe\x0c<\x01\x01\x02 r\xc7x\xb1N\x05\x00\x01\xae\x03\x00\xdb\x81'b'\x00\x05N\xb1x\x82\xc3\xe0\xfe\x16=\x01\x01\x88_\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00kO'b'\x00\x05N\xb1x\x82\xc4P\xfe\x16>\x01\x01\xc1\xf8\xddN<\x9a\xdc*7\r\xe9\xab:\x9f\xbd\xc3=\x00\x00\x00\x00\xa5\x03\x0e\x95'b'\x00\x05N\xb1x\x82\xc4\xe4\xfe\x03@\x01\x01Ms\x00\x001\xd8'b'\x00\x05N\xb1x\x84I0\xfe\x1aA\x01\x01\x1b\x80\xa2`\x0e\x00\x00\x00\x00\x04\x006\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffl\x01\x96\x17'b'\x00\x05N\xb1x\x84I\xc0\xfe\x16B\x01\x01t>\xae\x03\x00\x0b\x007\x00(\xfc\x01\x00\xff\xff\x01\x00\x07\x01\xa0\xff4\x02\xf7\x8a'b'\x00\x05N\xb1x\x84J,\xfe\x16C\x01\x01\x81>\xae\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff%\x03\x87\x00p\x02^,'b'\x00\x05N\xb1x\x84J\x8c\xfe\x0eD\x01\x01\x1d>\xae\x03\x00\xc0\xa3iDff\x1e==\x10\x1c}'b'\x00\x05N\xb1x\x84J\xe4\xfe\x0eE\x01\x01\x89>\xae\x03\x00\xd9\xe6iD\x00\x00\xac>>\x15\x81<'b'\x00\x05N\xb1x\x84KD\xfe\x1fF\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x006?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd8\xa8'b'\x00\x05N\xb1x\x84K\xa0\xfe\x06G\x01\x01}\xc2\x14\x00\x00\x03\x00v\x15'b'\x00\x05N\xb1x\x84K\xf4\xfe\x04H\x01\x01\x98\x00\x00\xa0\x8ate'b'\x00\x05N\xb1x\x84L<\xfe\x02I\x01\x01*\x00\x00\xa3w'b'\x00\x05N\xb1x\x84L\x98\xfe\x1eJ\x01\x01\x18h\xf8^\x0e\x00\x00\x00\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xda\xd5'b'\x00\x05N\xb1x\x84L\xf0\xfe\x1aK\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00k\xf3'b'\x00\x05N\xb1x\x84MH\xfe\x08L\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdc\t'b'\x00\x05N\xb1x\x84M\x9c\xfe\x15M\x01\x01$\x02\xa5`\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8c'b'\x00\x05N\xb1x\x84M\xf0\xfe\x16N\x01\x01#>\xae\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00T\xdc'b'\x00\x05N\xb1x\x84N@\xfe\x14O\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00]\xa2'b'\x00\x05N\xb1x\x84\x85G\xfe5-\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x7f\x16'b'\x00\x05N\xb1x\x84\xb0\x8f\xfe!.\xff\x00LV\x0e\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00.\xb2'b'\x00\x05N\xb1x\x85\xc7d\xfe\x1cP\x01\x01!\x9a\xae\x03\x00_\xa6\x02\x18\xfa\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04;>'b'\x00\x05N\xb1x\x85\xc7\xec\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02'b'\x00\x05N\xb1x\x85\xc8\x88\xfe\x1cR\x01\x01\x1e\xde\xae\x03\x00\x15$~\xbd R 9\x82lT>\xda\x84\x1e:\xeb\x88\xf78=%\x18:\xc3('b'\x00\x05N\xb1x\x85\xc8\xe0\xfe\x18S\x01\x01\xb2\xe6\x9e\x7f\xbd\x1c\xd6>\xbb\xac\xb7Y>R\xb8)D_\xa6\x02\x18\xfa\xe7\xb8\xfd\x82\xb7'b'\x00\x05N\xb1x\x85\xc94\xfe\x1cT\x01\x01\xa3\x1f\xd1c\xb9\xb1\xacE9Z\x13\xcc6\x00\x00\x00\x00\x00\x00\x00\x00|\x1a\xd49\x08Y);\xac\xaa'b'\x00\x05N\xb1x\x85\xc9x\xfe\x03U\x01\x01\xa5\xc6\x14\x00\x02\xb7'b'\x00\x05N\xb1x\x85\xc9\xc4\xfe\x0cV\x01\x01\x02\xa0\x1b\xcbx\xb1N\x05\x00\xf2\xae\x03\x00\xa5F'b'\x00\x05N\xb1x\x85\xca\x14\xfe\x16W\x01\x01\x88_\xa6\x02\x18\xfa\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xad\xfe'b'\x00\x05N\xb1x\x85\xcad\xfe\x16X\x01\x01\xc1\xbe%S<\xfa\x89*7d\xfa\xd8;\xeb\x8a\xc6=\x00\x00\x00\x00\xa5\x03\xb5x'b'\x00\x05N\xb1x\x86\x9e\x07\xfe5/\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfa\xf4'b'\x00\x05N\xb1x\x86\xc7\xf3\xfe!0\xff\x00LF\x06\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00-\xf0'b'\x00\x05N\xb1x\x87]\x1c\xfe\x1aY\x01\x01\x1b\x0bNd\x0e\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\x82\x11'b'\x00\x05N\xb1x\x87]\xb8\xfe\x16Z\x01\x01t.\xaf\x03\x00\x06\x000\x00!\xfc\x00\x00\x00\x00\xff\xff\x07\x01\x9f\xff3\x02x\xa8'b'\x00\x05N\xb1x\x87^@\xfe\x16[\x01\x01\x81.\xaf\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff&\x03\x88\x00v\x024e'b'\x00\x05N\xb1x\x87^\xac\xfe\x0e\\\x01\x01\x1d.\xaf\x03\x00\xe7\xa4iD\xebQh=>\x10\xd2S'b'\x00\x05N\xb1x\x87_\x14\xfe\x0e]\x01\x01\x89.\xaf\x03\x00\xc6\xe7iDff\xb3>?\x15\xc7\x80'b'\x00\x05N\xb1x\x87_\x84\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TT\xba'b'\x00\x05N\xb1x\x87_\xf0\xfe\x06_\x01\x01}\xc5\x14\x00\x00\x03\x00\x81\x1f'b'\x00\x05N\xb1x\x87`P\xfe\x04`\x01\x01\x98\x00\x00\xa0\x8a\x87\xed'b'\x00\x05N\xb1x\x87`\xa8\xfe\x02a\x01\x01*\x00\x00\xcc\xca'b'\x00\x05N\xb1x\x87a\x14\xfe\x1eb\x01\x01\x18\x90\tb\x0e\x00\x00\x00\x00_\xa6\x02\x18\xfa\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1fR'b'\x00\x05N\xb1x\x87a|\xfe\x1ac\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb5\x8d'b'\x00\x05N\xb1x\x87a\xdc\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91'b'\x00\x05N\xb1x\x87b8\xfe\x15e\x01\x01$`Pd\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86o'b'\x00\x05N\xb1x\x87b\x94\xfe\x16f\x01\x01#/\xaf\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x10\xbb'b'\x00\x05N\xb1x\x87b\xe4\xfe\x03g\x01\x01Ms\x00\x00\xcf\xf2'b'\x00\x05N\xb1x\x88\xb5\x1b\xfe51\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1ce'b'\x00\x05N\xb1x\x88\xd0\xb4\xfe\x14h\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\\0'b'\x00\x05N\xb1x\x88\xd1$\xfe\x1ci\x01\x01!c\xaf\x03\x00`\xa6\x02\x18\xfb\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xca\xae'b'\x00\x05N\xb1x\x89\r\xc3\xfe!2\xff\x00LF\x06\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xac\xad'b'\x00\x05N\xb1x\x8aY\xa4\xfe\x1cj\x01\x01\x1e\xcf\xaf\x03\x00\x90l~\xbd\x80D\xdd8\xe9\x80T>D/\x93:\xd9\xb6\xb5\xba#B\x90\xb9s\xad'b'\x00\x05N\xb1x\x8aZ$\xfe\x18k\x01\x01\xb2^\x85\x7f\xbd%\xf2C\xbb\xc6\xd6Y>\xcd\xac)D`\xa6\x02\x18\xfb\xe7\xb8\xfdL\x8b'b'\x00\x05N\xb1x\x8aZp\xfe\x03l\x01\x01Ms\x00\x00\xa3U'b'\x00\x05N\xb1x\x8a[8\xfe\x1cm\x01\x01\xa3+\xced\xb9~\xd7G9\xe7\xa7\xe56\x00\x00\x00\x00\x00\x00\x00\x00\x1c\xb5\xda9q\xfe\xe9:\r\t'b'\x00\x05N\xb1x\x8a[\xa4\xfe\x03n\x01\x01\xa5\xc2\x14\x00\n\x8f'b'\x00\x05N\xb1x\x8a\\\x10\xfe\x0co\x01\x01\x02 \xc5\xcex\xb1N\x05\x00\xe3\xaf\x03\x00q@'b'\x00\x05N\xb1x\x8a\\\x88\xfe\x16p\x01\x01\x88`\xa6\x02\x18\xfb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xded'b'\x00\x05N\xb1x\x8a\\\xf8\xfe\x12q\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00K\xe7'b'\x00\x05N\xb1x\x8a]l\xfe\x16r\x01\x01\xc1\xe2\x16N<\xfb\xf8(7\xfb\xd5\xf2:L\xdd\xb4=\x00\x00\x00\x00\xa5\x03\x83A'b'\x00\x05N\xb1x\x8a]\xe4\xfe\x1as\x01\x01\x1bE\xfbg\x0e\x00\x00\x00\x00\x05\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01\xed8'b'\x00\x05N\xb1x\x8a^\\\xfe\x16t\x01\x01t\x1f\xb0\x03\x00\x04\x000\x002\xfc\x03\x00\x00\x00\xfe\xff\x08\x01\xa0\xff4\x02I\xee'b'\x00\x05N\xb1x\x8a^\xd4\xfe\x16u\x01\x01\x81\x1f\xb0\x03\x00\x02\x00@\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x86\x00q\x02H\xa0'b'\x00\x05N\xb1x\x8a_(\xfe\x0ev\x01\x01\x1d\x1f\xb0\x03\x00\xbe\xa3iD{\x14\x1e=>\x10\x0cK'b'\x00\x05N\xb1x\x8a_t\xfe\x0ew\x01\x01\x89\x1f\xb0\x03\x00~\xe7iD\xf6(\xb1>@\x150k'b'\x00\x05N\xb1x\x8a_\xc8\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdd\xc4'b'\x00\x05N\xb1x\x8a`\x18\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08'b'\x00\x05N\xb1x\x8a`d\xfe\x04z\x01\x01\x98\x00\x00\xa0\x8a#\xf6'b'\x00\x05N\xb1x\x8a`\xa8\xfe\x02{\x01\x01*\x00\x00R\x96'b'\x00\x05N\xb1x\x8a`\xf8\xfe\x1e|\x01\x01\x18\xb8\x1ae\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfc\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cA\xed'b'\x00\x05N\xb1x\x8aaL\xfe\x1a}\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00e)'b'\x00\x05N\xb1x\x8aa\x90\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\x00\x05N\xb1x\x8aa\xdc\xfe\x15\x7f\x01\x01$\xfd\xfdg\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00l0'b'\x00\x05N\xb1x\x8ab,\xfe\x16\x80\x01\x01# \xb0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc08'b'\x00\x05N\xb1x\x8abx\xfe\x12\x81\x01\x01\xfc,\xb0\x03\x004\x00\x01\x00ARMMASK\x00Wr\x19\xa6'b'\x00\x05N\xb1x\x8a\xd0\x0f\xfe53\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x99\x87'b'\x00\x05N\xb1x\x8a\xe6?\xfe!4\xff\x00L:\x14\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa9\xb4'b'\x00\x05N\xb1x\x8c\x07\xac\xfe\t\x82\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x11S'b'\x00\x05N\xb1x\x8c\x08H\xfe\t\xd5\n\x00m\x02\x00\x00\x00\x00\xd1\x00\x00\x00\xbb~'b'\x00\x05N\xb1x\x8c\x08\xc0\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc'b'\x00\x05N\xb1x\x8c\x1d\\\xfe\x14\x84\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x1eH'b"\x00\x05N\xb1x\x8c\x7f\xa3\xfe%5\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa8\x1e"b'\x00\x05N\xb1x\x8c\xab\xbb\xfe56\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc8\xbf'b'\x00\x05N\xb1x\x8c\xe9\x9b\xfe!7\xff\x00L:\x14\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe0C'b'\x00\x05N\xb1x\x8c\xfe\xd3\xfe\t8\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xaaC'b'\x00\x05N\xb1x\x8de\xe0\xfe\x1c\x85\x01\x01!,\xb0\x03\x00`\xa6\x02\x18\xfc\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x01\x00\xa4\x04\x7f\x8d'b"\x00\x05N\xb1x\x8dfp\xfe\x1c\x86\x01\x01\x1e\xc0\xb0\x03\x00\xb3\x88~\xbd\x00\xd2\xbe7'sT>vp\x9b\xb9\x17\xeb\xb9\xba0\xcc\x0f:nO"b'\x00\x05N\xb1x\x8df\xf4\xfe\x18\x87\x01\x01\xb2\xc1\xa0\x7f\xbdX\xdcE\xbb\xd2\xd4Y>{\xb4)D`\xa6\x02\x18\xfc\xe7\xb8\xfdm\x94'b'\x00\x05N\xb1x\x8dgh\xfe\x03\x88\x01\x01/\xff\x00\x00H#'b'\x00\x05N\xb1x\x8dh \xfe\x1c\x89\x01\x01\xa3\x9f\xd8e\xb9\xf8\x05J9\x90F\x007\x00\x00\x00\x00\x00\x00\x00\x00\xff0\xf09\x9eb\xc2:a\x82'b'\x00\x05N\xb1x\x8dh\x84\xfe\x03\x8a\x01\x01\xa5\xc3\x14\x00\x8c\x9d'b'\x00\x05N\xb1x\x8dh\xec\xfe\x0c\x8b\x01\x01\x02\x88r\xd2x\xb1N\x05\x00\xd4\xb0\x03\x00\xb6?'b'\x00\x05N\xb1x\x8di\\\xfe\x16\x8c\x01\x01\x88`\xa6\x02\x18\xfc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc2\x07'b"\x00\x05N\xb1x\x8di\xc4\xfe\x16\x8d\x01\x01\xc1\x8c\xe8D<2\xb8'7\x03\xf1\x82;\x0f\xdf\xb1=\x00\x00\x00\x00\xa5\x03 \xe8"b'\x00\x05N\xb1x\x8dj$\xfe\x03\x8e\x01\x01Ms\x00\x00/F'b'\x00\x05N\xb1x\x8e\xa3W\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\xf7'b'\x00\x05N\xb1x\x8e\xb9S\xfe!:\xff\x00L \n\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdf\x98'b'\x00\x05N\xb1x\x8f\x018\xfe\x1a\x8f\x01\x01\x1b\xca\xack\x0e\x00\x00\x00\x00\x03\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffn\x01\xe6#'b'\x00\x05N\xb1x\x8f\x01\xd4\xfe\x16\x90\x01\x01t\x11\xb1\x03\x00\x0c\x007\x00.\xfc\xff\xff\x01\x00\xfe\xff\x07\x01\xa0\xff4\x02rk'b'\x00\x05N\xb1x\x8f\x02L\xfe\x16\x91\x01\x01\x81\x11\xb1\x03\x00\x00\x00B\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x86\x00o\x02\x04)'b'\x00\x05N\xb1x\x8f\x02\xb0\xfe\x0e\x92\x01\x01\x1d\x11\xb1\x03\x00\xf0\xa4iD\\\x8fj=>\x10A\xcf'b'\x00\x05N\xb1x\x8f\x03\x0c\xfe\x0e\x93\x01\x01\x89\x11\xb1\x03\x007\xe6iD\x85\xeb\xa6>@\x15\xb6g'b'\x00\x05N\xb1x\x8f\x03t\xfe\x1f\x94\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d6?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa5\t'b'\x00\x05N\xb1x\x8f\x03\xd4\xfe\x06\x95\x01\x01}\xc5\x14\x00\x00\x03\x00\x17W'b'\x00\x05N\xb1x\x8f\x04,\xfe\x04\x96\x01\x01\x98\x00\x00\xa0\x8a\x81c'b'\x00\x05N\xb1x\x8f\x04|\xfe\x02\x97\x01\x01*\x00\x00P\x05'b'\x00\x05N\xb1x\x8f\x04\xdc\xfe\x1e\x98\x01\x01\x18\x08=k\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x95\x0b'b'\x00\x05N\xb1x\x8f\x058\xfe\x1a\x99\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdf\x18'b'\x00\x05N\xb1x\x8f\x05\x84\xfe\x08\x9a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x11\xeb'b'\x00\x05N\xb1x\x8f\x05\xdc\xfe\x15\x9b\x01\x01$\xde\xafk\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9R'b'\x00\x05N\xb1x\x8f\x064\xfe\x16\x9c\x01\x01#\x12\xb1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa1)'b'\x00\x05N\xb1x\x8f\x06|\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97'b'\x00\x05N\xb1x\x90~\xf3\xfe5;\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbe\x15'b'\x00\x05N\xb1x\x90\xa8\xb3\xfe!<\xff\x00L \n\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\\~'b'\x00\x05N\xb1x\x90\xa9\x80\xfe\x14\x9e\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xeb\x1d'b'\x00\x05N\xb1x\x90\xaa$\xfe\x1c\x9f\x01\x01!\xf5\xb0\x03\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04~7'b'\x00\x05N\xb1x\x90\xaa\xec\xfe\x1c\xa0\x01\x01\x1e\xb1\xb1\x03\x00\x14J~\xbd\x00\xee\r9yVT>?3\xab9\xb4\xc5\xb5\xba\xac\xbf\xe2\xb9$\x92'b'\x00\x05N\xb1x\x90\xab\x9c\xfe\x18\xa1\x01\x01\xb2\x97y\x7f\xbd\xe5\xf0C\xbb\x95\xd3Y>\x8f\xb2)D`\xa6\x02\x18\xfd\xe7\xb8\xfd\x80s'b'\x00\x05N\xb1x\x91\xfcP\xfe\x1c\xa2\x01\x01\xa3\xdc\xe9f\xb9Q;L9\xb0\x84\r7\x00\x00\x00\x00\x00\x00\x00\x00o\xed\xff9\xf6\xdf\x07;%\xe4'b'\x00\x05N\xb1x\x91\xfc\xc0\xfe\x03\xa3\x01\x01\xa5\xc5\x14\x00\xe5\xcc'b'\x00\x05N\xb1x\x91\xfd\x18\xfe\x0c\xa4\x01\x01\x02@f\xd6x\xb1N\x05\x00\xc6\xb1\x03\x002\xa6'b'\x00\x05N\xb1x\x91\xfd\x98\xfe\x16\xa5\x01\x01\x88`\xa6\x02\x18\xfd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0b]'b'\x00\x05N\xb1x\x91\xfe\x0c\xfe\x16\xa6\x01\x01\xc1XKD<\x8dE%7\xd6\xb1\x01:Bn\xc0=\x00\x00\x00\x00\xa5\x03\xf6Z'b'\x00\x05N\xb1x\x91\xfep\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\'b'\x00\x05N\xb1x\x91\xff\x1c\xfe\x1a\xa8\x01\x01\x1b\xa1Zo\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x01\x00\xff\xff\x00\x00\x0b\x01\xb0\xffn\x01\x1b\x99'b'\x00\x05N\xb1x\x91\xff\x94\xfe\x16\xa9\x01\x01t\x02\xb2\x03\x00\t\x007\x00(\xfc\x00\x00\x00\x00\x00\x00\x06\x01\x9f\xff3\x02\xbc\xae'b'\x00\x05N\xb1x\x92\x00\x08\xfe\x16\xaa\x01\x01\x81\x02\xb2\x03\x00\x02\x00A\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff&\x03\x8b\x00n\x02c\x9d'b'\x00\x05N\xb1x\x92\x00t\xfe\x0e\xab\x01\x01\x1d\x02\xb2\x03\x00\x8f\xa3iDp=\x12=>\x10&J'b'\x00\x05N\xb1x\x92\x00\xdc\xfe\x0e\xac\x01\x01\x89\x02\xb2\x03\x00\x94\xe6iD\n\xd7\xa9>A\x15\x06\x97'b'\x00\x05N\xb1x\x92\x01L\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e3?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95\x06'b'\x00\x05N\xb1x\x92\x01\xa0\xfe\x06\xae\x01\x01}\xc5\x14\x00\x00\x03\x00\xc1\x86'b'\x00\x05N\xb1x\x92\x01\xf0\xfe\x04\xaf\x01\x01\x98\x00\x00\xa0\x8a\x1bY'b'\x00\x05N\xb1x\x92\x024\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1'b'\x00\x05N\xb1x\x92\x02\x88\xfe\x1e\xb1\x01\x01\x180Nn\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x11\x83'b'\x00\x05N\xb1x\x92\x02\xd8\xfe\x1a\xb2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00L!'b'\x00\x05N\xb1x\x92\x03\x1c\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv'b'\x00\x05N\xb1x\x92\x03l\xfe\x15\xb4\x01\x01$p]o\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7i'b'\x00\x05N\xb1x\x92\x03\xbc\xfe\x16\xb5\x01\x01#\x03\xb2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06F'b'\x00\x05N\xb1x\x92B\xb7\xfe5=\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01 :'b'\x00\x05N\xb1x\x92l\xc7\xfe!>\xff\x00L\xc0\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc2\x9f'b'\x00\x05N\xb1x\x93\xa8\x8c\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86'b'\x00\x05N\xb1x\x93\xbd\x90\xfe\x14\xb7\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00X+'b'\x00\x05N\xb1x\x93\xbd\xfc\xfe\x1c\xb8\x01\x01!\xbe\xb1\x03\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\x1f)'b'\x00\x05N\xb1x\x94.\x97\xfe5?\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa5\xd8'b'\x00\x05N\xb1x\x94m\xbb\xfe!@\xff\x00L\xc0\xf6\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa0\xe3'b'\x00\x05N\xb1x\x95/\x94\xfe\x1c\xb9\x01\x01\x1e\xa2\xb2\x03\x00\xca\x07~\xbd\xc0\x8b:9\xf6jT>\xce\xba\xf69\x0cl~\xbai!^:^a'b'\x00\x05N\xb1x\x950\x14\xfe\x18\xba\x01\x01\xb2x)\x7f\xbd?\x13E\xbb\\\xe7Y>\xeb\xa1)D`\xa6\x02\x18\xfe\xe7\xb8\xfd\xe7\x88'b'\x00\x05N\xb1x\x950l\xfe\x1c\xbb\x01\x01\xa3S\x06h\xb9\xbeyN9C\x18\x1b7\x00\x00\x00\x00\x00\x00\x00\x00X\xc8\x00:\xb1\xa7\xe8:dE'b'\x00\x05N\xb1x\x950\xb4\xfe\x03\xbc\x01\x01\xa5\xc2\x14\x00\x0eq'b'\x00\x05N\xb1x\x951\x00\xfe\x0c\xbd\x01\x01\x02\xd8\x0b\xdax\xb1N\x05\x00\xb6\xb2\x03\x00`\xab'b'\x00\x05N\xb1x\x951l\xfe\x16\xbe\x01\x01\x88`\xa6\x02\x18\xfe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xae\x98'b'\x00\x05N\xb1x\x951\xd8\xfe\x16\xbf\x01\x01\xc1h_G<\x19\x1e$7C^)<\\\xbc\xb6=\x00\x00\x00\x00\xa5\x03\x11V'b'\x00\x05N\xb1x\x952l\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\x00\x05N\xb1x\x96"#\xfe5A\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x81\xa0'b'\x00\x05N\xb1x\x96L\xa7\xfe!B\xff\x00LZ\x05\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd7m'b'\x00\x05N\xb1x\x96\xa2@\xfe\x1a\xc2\x01\x01\x1b\xe7\x05s\x0e\x00\x00\x00\x00\x05\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01v\xb4'b'\x00\x05N\xb1x\x96\xa2\xcc\xfe\x16\xc3\x01\x01t\xf3\xb2\x03\x00\x06\x003\x00!\xfc\x02\x00\x00\x00\xfb\xff\x07\x01\xa1\xff4\x02\x0f 'b'\x00\x05N\xb1x\x96\xa34\xfe\x16\xc4\x01\x01\x81\xf3\xb2\x03\x00\x01\x00?\x00"\xfc\xfd\xff\x02\x00\xfd\xff*\x03\x88\x00o\x02$9'b'\x00\x05N\xb1x\x96\xa3\x88\xfe\x0e\xc5\x01\x01\x1d\xf3\xb2\x03\x00\x18\xa3iD\xc2\xf5\xe8<>\x10\x92M'b'\x00\x05N\xb1x\x96\xa4\x04\xfe\x0e\xc6\x01\x01\x89\xf3\xb2\x03\x00\xd4\xe6iD\n\xd7\xab>A\x15\xf3\xdb'b'\x00\x05N\xb1x\x96\xa4\x90\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0n'b'\x00\x05N\xb1x\x96\xa5\x10\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\'b'\x00\x05N\xb1x\x96\xa5\x84\xfe\x04\xc9\x01\x01\x98\x00\x00\xa0\x8a^\xec'b'\x00\x05N\xb1x\x96\xa5\xec\xfe\x02\xca\x01\x01*\x00\x00\xd0Y'b'\x00\x05N\xb1x\x96\xa6p\xfe\x1e\xcb\x01\x01\x18X_q\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfe\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1c\xc5'b'\x00\x05N\xb1x\x96\xa6\xf0\xfe\x1a\xcc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb4,'b'\x00\x05N\xb1x\x96\xa7\\\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca'b'\x00\x05N\xb1x\x96\xa7\xd8\xfe\x15\xce\x01\x01$\x8d\x08s\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00a\x9a'b'\x00\x05N\xb1x\x96\xa8@\xfe\x16\xcf\x01\x01#\xf3\xb2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x13\x92'b'\x00\x05N\xb1x\x96\xa8\xa4\xfe\x14\xd0\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf6\xf6'b'\x00\x05N\xb1x\x96\xa8\xfc\xfe\x03\xd1\x01\x01Ms\x00\x00\x14\xc9'b'\x00\x05N\xb1x\x98\x11\xef\xfe5C\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x04B'b'\x00\x05N\xb1x\x98(?\xfe!D\xff\x00LZ\x05\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00T\x8b'b"\x00\x05N\xb1x\x98=\xf8\xfe\x1c\xd2\x01\x01!O\xb3\x03\x00`\xa6\x02\x18\xff\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa3\x04'\x14"b'\x00\x05N\xb1x\x98>\x84\xfe\x1c\xd3\x01\x01\x1e\x93\xb3\x03\x00a\xca}\xbd@\x0f\xe38)MT>\xa0@\xa19W/\xab\xba\xef\xfb\xf98;+'b'\x00\x05N\xb1x\x98>\xe0\xfe\x18\xd4\x01\x01\xb2\x89\xe0~\xbd*%G\xbb\x11\xdfY>\\\xaf)D`\xa6\x02\x18\xff\xe7\xb8\xfd\xcb\xf1'b'\x00\x05N\xb1x\x98?4\xfe\x1c\xd5\x01\x01\xa3b.i\xb9#\xbbP9\x1e\x05)7\x00\x00\x00\x00\x00\x00\x00\x00\xdb=\x04:\xc8\x85\x0f;\xba\x0f'b'\x00\x05N\xb1x\x98?|\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3'b'\x00\x05N\xb1x\x98?\xc4\xfe\x0c\xd7\x01\x01\x02X\xb5\xddx\xb1N\x05\x00\xa7\xb3\x03\x002a'b'\x00\x05N\xb1x\x98@\x14\xfe\x16\xd8\x01\x01\x88`\xa6\x02\x18\xff\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb8\xc4'b'\x00\x05N\xb1x\x98@d\xfe\x16\xd9\x01\x01\xc1\xcf\xeeEB\x15)\xeb'b'\x00\x05N\xb1x\x99\xc78\xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00}\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\xbb'b'\x00\x05N\xb1x\x99\xc7\x88\xfe\x06\xe1\x01\x01}\xc8\x14\x00\x00\x03\x00\xc7y'b'\x00\x05N\xb1x\x99\xc7\xd4\xfe\x04\xe2\x01\x01\x98\x00\x00\xa0\x8a\xaa\xb2'b'\x00\x05N\xb1x\x99\xc8\x18\xfe\x02\xe3\x01\x01*\x00\x00j{'b'\x00\x05N\xb1x\x99\xc8\x84\xfe\x1e\xe4\x01\x01\x18\x98lt\x0e\x00\x00\x00\x00`\xa6\x02\x18\xff\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa7\xac'b'\x00\x05N\xb1x\x99\xc8\xd8\xfe\x1a\xe5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00^\x97'b'\x00\x05N\xb1x\x99\xc9 \xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\'b'\x00\x05N\xb1x\x99\xc9\x94\xfe\x15\xe7\x01\x01$\xf8\xb5v\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00?\x07'b'\x00\x05N\xb1x\x99\xc9\xe4\xfe\x16\xe8\x01\x01#\xe4\xb3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\xec'b'\x00\x05N\xb1x\x99\xca0\xfe\x12\xe9\x01\x01\xfc\x19\xb4\x03\x004\x00\x01\x00ARMMASK\x00Wr\x9c\xa1'b'\x00\x05N\xb1x\x99\xcb\xe7\xfe5E\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9am'b'\x00\x05N\xb1x\x99\xe1\xbf\xfe!F\xff\x00L)\xf0\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00HZ'b'\x00\x05N\xb1x\x9bS8\xfe\t\xea\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa2Z'b'\x00\x05N\xb1x\x9bS\xb4\xfe\x03\xeb\x01\x01Ms\x00\x00O\x02'b'\x00\x05N\xb1x\x9bh\x1c\xfe\x14\xec\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x95\x1b'b'\x00\x05N\xb1x\x9bhx\xfe\t\xd6\n\x00m\x01\x00\x00\x00\x00\xd1\x00\x00\x00\xec\x89'b'\x00\x05N\xb1x\x9bh\xd0\xfe\x1c\xed\x01\x01!\x18\xb4\x03\x00`\xa6\x02\x18\x00\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\xcc\x7f'b'\x00\x05N\xb1x\x9b\xa5\xd7\xfe5G\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1f\x8f'b'\x00\x05N\xb1x\x9b\xbc\x7f\xfe!H\xff\x00L)\xf0\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xde\xc2'b'\x00\x05N\xb1x\x9cO+\xfe\tI\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03G\r'b"\x00\x05N\xb1x\x9c\xbe\xd3\xfe%J\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xed9"b'\x00\x05N\xb1x\x9c\xbf\xa0\xfe\x1c\xee\x01\x01\x1e\x85\xb4\x03\x00\xef\xbd}\xbd\x00\xfd\x079_aT>\xe6\xee\xf49S\x95\xae\xba\xec\xd1\xec\xb9N\x02'b'\x00\x05N\xb1x\x9c\xc0\x14\xfe\x18\xef\x01\x01\xb2\xdb\xb3~\xbd\x96\xfeK\xbbq\xf4Y>R\xa8)D`\xa6\x02\x18\x00\xe8\xb8\xfd\xfe\xf9'b'\x00\x05N\xb1x\x9c\xc0x\xfe\x1c\xf0\x01\x01\xa3\xe5bj\xb9\x84\xfeR9\x9a\x0277\x00\x00\x00\x00\x00\x00\x00\x00\xc2w\x00:;\x14\x0b;\x01\x13'b'\x00\x05N\xb1x\x9c\xc0\xc4\xfe\x03\xf1\x01\x01\xa5\xc8\x14\x00\x8cr'b'\x00\x05N\xb1x\x9c\xc1\x14\xfe\x0c\xf2\x01\x01\x02\xc0b\xe1x\xb1N\x05\x00\x98\xb4\x03\x00\x05g'b'\x00\x05N\xb1x\x9c\xc1h\xfe\x16\xf3\x01\x01\x88`\xa6\x02\x18\x00\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe5r'b'\x00\x05N\xb1x\x9c\xc1\xbc\xfe\x16\xf4\x01\x01\xc1\xb0yL<\xc5d 7\xce\x11\xc0;?$\xb9=\x00\x00\x00\x00\xa5\x03%\xa6'b'\x00\x05N\xb1x\x9c\xc2\x08\xfe\x03\xf5\x01\x01Ms\x00\x00:i'b'\x00\x05N\xb1x\x9c\xd6|\xfe\x1a\xf6\x01\x01\x1be_z\x0e\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\xf85'b'\x00\x05N\xb1x\x9c\xd6\xd8\xfe\x16\xf7\x01\x01t\xd4\xb4\x03\x00\t\x006\x00+\xfc\x04\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02V\xae'b'\x00\x05N\xb1x\x9c\xd70\xfe\x16\xf8\x01\x01\x81\xd4\xb4\x03\x00\x00\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x88\x00p\x02\xe1^'b'\x00\x05N\xb1x\x9c\xd7\x84\xfe\x0e\xf9\x01\x01\x1d\xd4\xb4\x03\x00C\xa4iD)\\?=?\x10{\xdf'b'\x00\x05N\xb1x\x9c\xd7\xd0\xfe\x0e\xfa\x01\x01\x89\xd4\xb4\x03\x00\xdd\xe6iD\xb8\x1e\xac>B\x15\xfex'b'\x00\x05N\xb1x\x9c\xd8,\xfe*\xfb\x01\x01\x96s\xe7f\xbc\x10m\x01\x00?\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00j\t'b'\x00\x05N\xb1x\x9c\xd8\x84\xfe\x1f\xfc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe7\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9f\xe8'b'\x00\x05N\xb1x\x9c\xd8\xd8\xfe\x06\xfd\x01\x01}\xc5\x14\x00\x00\x03\x002\xc4'b'\x00\x05N\xb1x\x9c\xd9$\xfe\x04\xfe\x01\x01\x98\x00\x00\xa0\x8a\x11\r'b'\x00\x05N\xb1x\x9c\xd9h\xfe\x02\xff\x01\x01*\x00\x009\x7f'b'\x00\x05N\xb1x\x9c\xd9\xbc\xfe\x1e\x00\x01\x01\x18\xc0}w\x0e\x00\x00\x00\x00_\xa6\x02\x18\x00\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cW\xe3'b'\x00\x05N\xb1x\x9c\xda\x10\xfe\x1a\x01\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe4\xa6'b'\x00\x05N\xb1x\x9c\xdaT\xfe\x08\x02\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0bZ'b'\x00\x05N\xb1x\x9c\xda\xa4\xfe\x15\x03\x01\x01$\x90bz\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00]|'b'\x00\x05N\xb1x\x9c\xda\xf4\xfe\x16\x04\x01\x01#\xd5\xb4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0c\xc0'b'\x00\x05N\xb1x\x9d\x96\x0f\xfe5K\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01#\xd0'b'\x00\x05N\xb1x\x9d\xac\xcb\xfe!L\xff\x00Lj\xfe\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xce\xc7'b'\x00\x05N\xb1x\x9eIP\xfe\x03\x05\x01\x01/\xff\x00\x00wR'b'\x00\x05N\xb1x\x9e^\x04\xfe\x14\x06\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00/\x93'b'\x00\x05N\xb1x\x9e^p\xfe\x03\x07\x01\x01Ms\x00\x00\xce!'b'\x00\x05N\xb1x\x9f\xac\x9b\xfe5M\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbd\xff'b'\x00\x05N\xb1x\x9f\xd3\xa8\xfe\x1c\x08\x01\x01!\xe1\xb4\x03\x00_\xa6\x02\x18\x00\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xfd\x88'b'\x00\x05N\xb1x\x9f\xd4H\xfe\x1c\t\x01\x01\x1et\xb5\x03\x00\x18G}\xbd\xa0\xaf-9\xe0\x86T>\xd5\xa0\xb6:\x1dx\xad\xba\x07\xb5\x1d:\x81w'b'\x00\x05N\xb1x\x9f\xd4\xb0\xfe\x18\n\x01\x01\xb2\x0cC~\xbd\x9f@J\xbb\x10\x1cZ>\xae\xa7)D_\xa6\x02\x18\x00\xe8\xb8\xfd\x04\xc7'b'\x00\x05N\xb1x\x9f\xd5\x18\xfe\x1c\x0b\x01\x01\xa3\x96\xa3k\xb9\xe1AU9W\tE7\x00\x00\x00\x00\x00\x00\x00\x00\xe5@\n:k\xed\xce:\x9d\r'b'\x00\x05N\xb1x\x9f\xd5h\xfe\x03\x0c\x01\x01\xa5\xc5\x14\x00E\x00'b'\x00\x05N\xb1x\x9f\xd5\xb8\xfe\x0c\r\x01\x01\x02X\x08\xe5x\xb1N\x05\x00\x88\xb5\x03\x00\xcc\xd9'b'\x00\x05N\xb1x\x9f\xd6\x14\xfe\x16\x0e\x01\x01\x88_\xa6\x02\x18\x00\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x04\x04'b'\x00\x05N\xb1x\x9f\xd6l\xfe\x16\x0f\x01\x01\xc1/mE<\xf2\x15\x1f7\xe5\xdf\xbc;~\xf8\xa3=\x00\x00\x00\x00\xa5\x03\xd7)'b'\x00\x05N\xb1x\xa0\x10\x83\xfe!N\xff\x00Lj\xfe\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00O\x9a'b'\x00\x05N\xb1x\xa1b\x98\xfe\x1a\x10\x01\x01\x1b\x08\x0c~\x0e\x00\x00\x00\x00\x05\x006\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\xf7\xb7'b'\x00\x05N\xb1x\xa1c\x0c\xfe\x16\x11\x01\x01t\xc5\xb5\x03\x00\x05\x009\x00.\xfc\xfe\xff\x00\x00\xff\xff\x07\x01\xa0\xff4\x02\xf1m'b'\x00\x05N\xb1x\xa1ch\xfe\x16\x12\x01\x01\x81\xc5\xb5\x03\x00\x01\x00?\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x85\x00j\x02\x1d\x02'b'\x00\x05N\xb1x\xa1c\xb8\xfe\x0e\x13\x01\x01\x1d\xc5\xb5\x03\x003\xa3iDff\xf6D\x15\x1d\xa2'b'\x00\x05N\xb1x\xa1d`\xfe\x1f\x15\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x016?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96\xe5'b'\x00\x05N\xb1x\xa1d\xc4\xfe\x06\x16\x01\x01}\xc5\x14\x00\x00\x03\x00\xbf;'b'\x00\x05N\xb1x\xa1e \xfe\x04\x17\x01\x01\x98\x00\x00\xa0\x8a\xab\xea'b'\x00\x05N\xb1x\xa1ep\xfe\x02\x18\x01\x01*\x00\x00\xb9\x9a'b'\x00\x05N\xb1x\xa1e\xd4\xfe\x1e\x19\x01\x01\x18(\x9c}\x0e\x00\x00\x00\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa9\xcf'b'\x00\x05N\xb1x\xa1f4\xfe\x1a\x1a\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe3\xcb'b'\x00\x05N\xb1x\xa1f\x8c\xfe\x08\x1b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1e('b'\x00\x05N\xb1x\xa1f\xe8\xfe\x15\x1c\x01\x01$\x9c\x0e~\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9fS'b'\x00\x05N\xb1x\xa1gD\xfe\x16\x1d\x01\x01#\xc6\xb5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfc\xfb'b'\x00\x05N\xb1x\xa1g\x98\xfe\x03\x1e\x01\x01Ms\x00\x00\xb5\xd6'b'\x00\x05N\xb1x\xa1\xa6\xf7\xfe5O\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x018\x1d'b'\x00\x05N\xb1x\xa1\xd1\x97\xfe!P\xff\x00L\xe6\x18\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd5\x9b'b'\x00\x05N\xb1x\xa2\xe3l\xfe\x14\x1f\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00<\xf3'b'\x00\x05N\xb1x\xa2\xe3\xe0\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\x00\x05N\xb1x\xa2\xe4\x80\xfe\x1c!\x01\x01!\xa9\xb5\x03\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xfaq'b'\x00\x05N\xb1x\xa2\xe4\xe8\xfe\x1c"\x01\x01\x1ee\xb6\x03\x00K\x91}\xbd\xc0\xb7\xb48\xd1\x87T>RS\xb29\x94\xb9\x18:\xd5\x9a\x0b\xb8\x89\t'b'\x00\x05N\xb1x\xa2\xe5<\xfe\x18#\x01\x01\xb2\x9aP~\xbd\x8e\x9dN\xbb\xb9+Z>\x99\xa9)D_\xa6\x02\x18\x02\xe8\xb8\xfd\x8c"'b'\x00\x05N\xb1x\xa3\xa5k\xfe5Q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xde\x8c'b'\x00\x05N\xb1x\xa3\xbb\x87\xfe!R\xff\x00L\x11\x19\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x97\x17'b"\x00\x05N\xb1x\xa4g\x14\xfe\x1c$\x01\x01\xa3Q\xefl\xb9L\x85W9\xc30S7\x00\x00\x00\x00\x00\x00\x00\x00,\x9a :\xb6'\xd0:\x16\xed"b'\x00\x05N\xb1x\xa4g\x80\xfe\x03%\x01\x01\xa5\xc5\x14\x00\xb6\x1a'b'\x00\x05N\xb1x\xa4g\xd4\xfe\x0c&\x01\x01\x02\xc0\xb5\xe8x\xb1N\x05\x00z\xb6\x03\x00\x97\xc8'b"\x00\x05N\xb1x\xa4h\\\xfe\x16'\x01\x01\x88_\xa6\x02\x18\x02\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x07\xe3"b'\x00\x05N\xb1x\xa4h\xd0\xfe\x16(\x01\x01\xc1f\xd6@<~\x00\x1d7\xcaR{;T$\xb5=\x00\x00\x00\x00\xa5\x03\xc5\x06'b'\x00\x05N\xb1x\xa4iH\xfe\x1a)\x01\x01\x1b\xf7\xb6\x81\x0e\x00\x00\x00\x00\x02\x005\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01 \xf1'b'\x00\x05N\xb1x\xa4i\xbc\xfe\x16*\x01\x01t\xb6\xb6\x03\x00\t\x008\x000\xfc\x00\x00\xff\xff\xfd\xff\x07\x01\xa0\xff4\x02\xf4\x8b'b'\x00\x05N\xb1x\xa4j0\xfe\x16+\x01\x01\x81\xb6\xb6\x03\x00\x02\x00@\x00!\xfc\xfc\xff\x01\x00\xfc\xff,\x03\x89\x00n\x02\xc33'b'\x00\x05N\xb1x\xa4j\x98\xfe\x0e,\x01\x01\x1d\xb6\xb6\x03\x00\xfc\xa2iDG\xe1\xdaC\x15)\x07'b'\x00\x05N\xb1x\xa4kx\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tah'b'\x00\x05N\xb1x\xa4k\xe8\xfe\x06/\x01\x01}\xc5\x14\x00\x00\x03\x00KA'b'\x00\x05N\xb1x\xa4lP\xfe\x040\x01\x01\x98\x00\x00\xa0\x8ap\xf4'b'\x00\x05N\xb1x\xa4l\x9c\xfe\x021\x01\x01*\x00\x00\x03\xb8'b'\x00\x05N\xb1x\xa4l\xfc\xfe\x1e2\x01\x01\x18P\xad\x80\x0e\x00\x00\x00\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xf0\x13'b'\x00\x05N\xb1x\xa4m\x8c\xfe\x1a3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\tp'b'\x00\x05N\xb1x\xa4m\xe4\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8'b'\x00\x05N\xb1x\xa4n@\xfe\x155\x01\x01$\x9d\xb9\x81\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x95'b'\x00\x05N\xb1x\xa4n\x9c\xfe\x166\x01\x01#\xb6\xb6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00pa'b'\x00\x05N\xb1x\xa4n\xec\xfe\x037\x01\x01Ms\x00\x00F\xcc'b'\x00\x05N\xb1x\xa5\x8d\xbb\xfe5S\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01[n'b'\x00\x05N\xb1x\xa5\xa4\x03\xfe!T\xff\x00L\x11\x19\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x14\xf1'b'\x00\x05N\xb1x\xa5\xf3\xcc\xfe\x148\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00C8'b'\x00\x05N\xb1x\xa5\xf4H\xfe\x1c9\x01\x01!r\xb6\x03\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x01\x00\xa5\x04\x8c\xcc'b'\x00\x05N\xb1x\xa5\xf4\xa4\xfe\x03:\x01\x01Ms\x00\x00\x9bv'b'\x00\x05N\xb1x\xa7dK\xfe5U\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc5A'b'\x00\x05N\xb1x\xa7y\x10\xfe\x1c;\x01\x01\x1eV\xb7\x03\x00q\x93}\xbd\x80\xb7\x1090\x85T>R$\x1e\xb8e\xfdn\xba|\x9f\xfa9G\x8e'b'\x00\x05N\xb1x\xa7y\x88\xfe\x18<\x01\x01\xb2\xb6>~\xbd \x82M\xbb#3Z>\x99\xa9)D_\xa6\x02\x18\x03\xe8\xb8\xfdIr'b'\x00\x05N\xb1x\xa7y\xec\xfe\x1c=\x01\x01\xa3IDn\xb9\xab\xcdY9\xe5 a7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x0c:pze;1\xc5'b'\x00\x05N\xb1x\xa7z\\\xfe\x03>\x01\x01\xa5\xc2\x14\x00\x83\xb1'b'\x00\x05N\xb1x\xa7z\xbc\xfe\x0c?\x01\x01\x02@_\xecx\xb1N\x05\x00j\xb7\x03\x00J\xba'b'\x00\x05N\xb1x\xa7{\x18\xfe\x16@\x01\x01\x88_\xa6\x02\x18\x03\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Y\xed'b'\x00\x05N\xb1x\xa7{p\xfe\x16A\x01\x01\xc1Q\x1f=E\x15\x8e\x7f'b'\x00\x05N\xb1x\xa8\xfdP\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d6?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x12\xb5'b'\x00\x05N\xb1x\xa8\xfd\xa0\xfe\x06I\x01\x01}\xc2\x14\x00\x00\x03\x00\xab\\'b'\x00\x05N\xb1x\xa8\xfd\xec\xfe\x04J\x01\x01\x98\x00\x00\xa0\x8a\x8e\xfe'b'\x00\x05N\xb1x\xa8\xfe0\xfe\x02K\x01\x01*\x00\x00\x18@'b'\x00\x05N\xb1x\xa8\xfe\x88\xfe\x1eL\x01\x01\x18\x90\xba\x83\x0e\x00\x00\x00\x00_\xa6\x02\x18\x03\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x0e\x17'b'\x00\x05N\xb1x\xa8\xfe\xdc\xfe\x1aM\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf1}'b'\x00\x05N\xb1x\xa8\xff$\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02'b'\x00\x05N\xb1x\xa8\xfft\xfe\x15O\x01\x01$[i\x85\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3b'b'\x00\x05N\xb1x\xa8\xff\xc4\xfe\x16P\x01\x01#\xa8\xb7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe3\x99'b'\x00\x05N\xb1x\xa9\x00\x08\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02'b'\x00\x05N\xb1x\xa9\x00\xa8\xfe\x14R\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00%\xc4'b'\x00\x05N\xb1x\xa9\x00\xf8\xfe\x12S\x01\x01\xfc\x04\xb8\x03\x004\x00\x01\x00ARMMASK\x00Wr&d'b'\x00\x05N\xb1x\xa9M/\xfe5W\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01@\xa3'b'\x00\x05N\xb1x\xa9cc\xfe!X\xff\x00L\x86\x17\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdc\x82'b'\x00\x05N\xb1x\xaa\x824\xfe\tT\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1aN'b'\x00\x05N\xb1x\xaa\x82\xc8\xfe\x1cU\x01\x01!\x03\xb8\x03\x00_\xa6\x02\x18\x04\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa5\x041h'b'\x00\x05N\xb1x\xaa\x83,\xfe\t\xd7\n\x00m\x01\x00\x00\x00\x00\xcf\x00\x00\x00\xfe"'b'\x00\x05N\xb1x\xaa\x83x\xfe\x03V\x01\x01Ms\x00\x00\xf8\x9e'b'\x00\x05N\xb1x\xaa\x84\x04\xfe\x1cW\x01\x01\x1eG\xb8\x03\x00\x8fC}\xbd\xc0\x07\xae8\xb3\x90T>\x90Y\xcc8\xa8}A\xba!\xe2\xb9\xb8\x84!'b'\x00\x05N\xb1x\xaa\x84|\xfe\x18X\x01\x01\xb2}\x03~\xbds\nQ\xbb\x1cR\xa8)D_\xa6\x02\x18\x04\xe8\xb8\xfdF\x8a'b'\x00\x05N\xb1x\xaa\x84\xe8\xfe\x1cY\x01\x01\xa3\x0c\x9ao\xb9\xe6\x1c\\95\xc2m7\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x82\x0b:#C\x83;\x80\xcb'b'\x00\x05N\xb1x\xaa\x85D\xfe\x03Z\x01\x01\xa5\xc5\x14\x00}#'b'\x00\x05N\xb1x\xaa\x85\xa4\xfe\x0c[\x01\x01\x02\xc0\x08\xf0x\xb1N\x05\x00[\xb8\x03\x00d0'b'\x00\x05N\xb1x\xaa\x86\x0c\xfe\x16\\\x01\x01\x88_\xa6\x02\x18\x04\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x13\xc2'b'\x00\x05N\xb1x\xaa\x86t\xfe\x12]\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00`\x0e'b'\x00\x05N\xb1x\xaa\x86\xdc\xfe\x16^\x01\x01\xc1\xcdz@<\x12\xeb\x197q\xdd\xbe;9\xca\xa9=\x00\x00\x00\x00\xa5\x03R\xea'b'\x00\x05N\xb1x\xab)\x0b\xfe5Y\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf9\x1e'b'\x00\x05N\xb1x\xabgc\xfe!Z\xff\x00LM\x1f\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe7\xd2'b'\x00\x05N\xb1x\xab\xaa\xef\xfe\t[\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03D&'b'\x00\x05N\xb1x\xac\x1e`\xfe\x1a_\x01\x01\x1b\xa5\x11\x89\x0e\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xaf\xffn\x01\x9c\xe1'b"\x00\x05N\xb1x\xac\x1e\xdc\xfe\x16`\x01\x01t\x97\xb8\x03\x00\x02\x008\x00'\xfc\x00\x00\x00\x00\xfe\xff\x06\x01\xa1\xff3\x02\xa7A"b'\x00\x05N\xb1x\xac\x1f<\xfe\x16a\x01\x01\x81\x97\xb8\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x86\x00o\x02"Y'b'\x00\x05N\xb1x\xac\x1f\x88\xfe\x0eb\x01\x01\x1d\x98\xb8\x03\x000\xa3iD\xb8\x1e\xf5<@\x10\x1d\xb1'b'\x00\x05N\xb1x\xac\x1f\xd8\xfe\x0ec\x01\x01\x89\x98\xb8\x03\x00w\xe7iD\x85\xeb\xb0>F\x15d\xec'b'\x00\x05N\xb1x\xac 4\xfe\x1fd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tb\x0c'b'\x00\x05N\xb1x\xac \x88\xfe\x06e\x01\x01}\xc8\x14\x00\x00\x03\x00\x89\xb5'b'\x00\x05N\xb1x\xac \xd4\xfe\x04f\x01\x01\x98\x00\x00\xa0\x8a\x98I'b'\x00\x05N\xb1x\xac!\x18\xfe\x02g\x01\x01*\x00\x00\x01\x92'b'\x00\x05N\xb1x\xac!l\xfe\x1eh\x01\x01\x18\xb8\xcb\x86\x0e\x00\x00\x00\x00_\xa6\x02\x18\x04\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x82j'b'\x00\x05N\xb1x\xac!\xc0\xfe\x1ai\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\n\x16'b'\x00\x05N\xb1x\xac"\x08\xfe\x08j\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x92\xa1'b'\x00\x05N\xb1x\xac"X\xfe\x15k\x01\x01$\xaf\x14\x89\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00E>'b'\x00\x05N\xb1x\xac"\xa8\xfe\x16l\x01\x01#\x98\xb8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xeb\x07'b'\x00\x05N\xb1x\xac"\xec\xfe\x03m\x01\x01Ms\x00\x00\x1c\xd4'b"\x00\x05N\xb1x\xac\xe8\xff\xfe%\\\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\\\x94"b'\x00\x05N\xb1x\xad\x12s\xfe5]\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe2\xd3'b'\x00\x05N\xb1x\xad;\xfb\xbb9\xfd\xeb.\xba\x927\xaa8\x1a\xf8'b'\x00\x05N\xb1x\xafR\x10\xfe\x18s\x01\x01\xb2\xe9\x0c~\xbd\xfd\xccT\xbb\x8eCZ>G\xb1)D^\xa6\x02\x18\x05\xe8\xb8\xfd\xbe#'b'\x00\x05N\xb1x\xafRx\xfe\x1ct\x01\x01\xa3\x0c\xf8p\xb9\x84r^9m\x1fz7\x00\x00\x00\x00\x00\x00\x00\x00ce\r:\xaab[;\xbck'b'\x00\x05N\xb1x\xafR\xc8\xfe\x03u\x01\x01\xa5\xc5\x14\x00?$'b'\x00\x05N\xb1x\xafS\x18\xfe\x0cv\x01\x01\x02X\xae\xf3x\xb1N\x05\x00K\xb9\x03\x00\x02\x94'b'\x00\x05N\xb1x\xafSt\xfe\x16w\x01\x01\x88^\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x83\xb5'b'\x00\x05N\xb1x\xafS\xcc\xfe\x16x\x01\x01\xc1\xa7LF<\x12\xad\x187K\xca\xc9:\xe6\xe3\xb4=\x00\x00\x00\x00\xa5\x03H\xc0'b'\x00\x05N\xb1x\xafT(\xfe\x1ay\x01\x01\x1b\xd3\xb9\x8c\x0e\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01s\x17'b'\x00\x05N\xb1x\xafT\x80\xfe\x16z\x01\x01t\x87\xb9\x03\x00\x05\x00>\x00$\xfc\x03\x00\x00\x00\xfb\xff\x07\x01\xa0\xff4\x02."'b'\x00\x05N\xb1x\xafT\xfc\xfe\x16{\x01\x01\x81\x87\xb9\x03\x00\x04\x00@\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x87\x00p\x02]\x84'b'\x00\x05N\xb1x\xafUT\xfe\x0e|\x01\x01\x1d\x87\xb9\x03\x00O\xa3iDp=\x02=?\x10\x94T'b'\x00\x05N\xb1x\xafU\xa0\xfe\x0e}\x01\x01\x89\x87\xb9\x03\x00g\xe7iD\xa4p\xb0>F\x15{\xc3'b'\x00\x05N\xb1x\xafU\xf8\xfe\x1f~\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc]'b'\x00\x05N\xb1x\xafVP\xfe\x06\x7f\x01\x01}\xc5\x14\x00\x00\x03\x00\x0b\xfd'b'\x00\x05N\xb1x\xafV\x9c\xfe\x04\x80\x01\x01\x98\x00\x00\xa0\x8a\n8'b'\x00\x05N\xb1x\xafV\xe0\xfe\x02\x81\x01\x01*\x00\x00T\xe8'b'\x00\x05N\xb1x\xafW4\xfe\x1e\x82\x01\x01\x18\xe0\xdc\x89\x0e\x00\x00\x00\x00^\xa6\x02\x18\x05\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf0\xb2'b'\x00\x05N\xb1x\xafW\x88\xfe\x1a\x83\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xec\xb0'b'\x00\x05N\xb1x\xafW\xd0\xfe\x08\x84\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00G\x81'b'\x00\x05N\xb1x\xafX \xfe\x15\x85\x01\x01$\xf1\xbc\x8c\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00/\x07'b'\x00\x05N\xb1x\xafXp\xfe\x16\x86\x01\x01#\x88\xb9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\n\x18'b'\x00\x05N\xb1x\xb0\x8d\xf8\xfe\x03\x87\x01\x01Ms\x00\x00,\xea'b'\x00\x05N\xb1x\xb0\x8e\xb8\xfe\x14\x88\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xc8\x93'b'\x00\x05N\xb1x\xb0\xde\xcf\xfe5a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01?\xf8'b'\x00\x05N\xb1x\xb0\xf5g\xfe!b\xff\x00L\xc8\x18\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00$\xd3'b'\x00\x05N\xb1x\xb2>\xac\xfe\x1c\x89\x01\x01!\x94\xb9\x03\x00^\xa6\x02\x18\x05\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x01\x00\xa5\x04\xfb.'b'\x00\x05N\xb1x\xb2?4\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P'b'\x00\x05N\xb1x\xb2S\xa8\xfe\x1c\x8b\x01\x01\x1e(\xba\x03\x00G\xf8}\xbd\xc0\x7f\xda8*\x94T>\x17Qb:\xbcO\xee\xb9\xb8\xb1\x939\xc5\xd3'b"\x00\x05N\xb1x\xb2T\x18\xfe\x18\x8c\x01\x01\xb2\x85'~\xbdO\x89U\xbb\x17]Z>\x8f\xb2)D^\xa6\x02\x18\x05\xe8\xb8\xfd\x14\x95"b'\x00\x05N\xb1x\xb2T|\xfe\x1c\x8d\x01\x01\xa3K_r\xb9H\xcf`9\xcc@\x837\x00\x00\x00\x00\x00\x00\x00\x00\xab\xa6\x0b:-\xab6;\xa8L'b'\x00\x05N\xb1x\xb2T\xcc\xfe\x03\x8e\x01\x01\xa5\xc5\x14\x00\xc8\xc0'b'\x00\x05N\xb1x\xb2U \xfe\x0c\x8f\x01\x01\x02\xa0\r\xf7x\xb1N\x05\x00<\xba\x03\x00\x18B'b'\x00\x05N\xb1x\xb2U|\xfe\x16\x90\x01\x01\x88^\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00G\x15\x961'b'\x00\x05N\xb1x\xb3\x9ad\xfe\x1f\x97\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0b\x016?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0\x98'b'\x00\x05N\xb1x\xb3\x9a\xd0\xfe\x06\x98\x01\x01}\xc5\x14\x00\x00\x03\x00y\xe0'b'\x00\x05N\xb1x\xb3\x9b(\xfe\x04\x99\x01\x01\x98\x00\x00\xa0\x8a\xa9\xf5'b'\x00\x05N\xb1x\xb3\x9bt\xfe\x02\x9a\x01\x01*\x00\x00\x1f+'b'\x00\x05N\xb1x\xb3\x9b\xd4\xfe\x1e\x9b\x01\x01\x18`\xf7\x8f\x0e\x00\x00\x00\x00^\xa6\x02\x18\x06\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c\xf0\xc7'b'\x00\x05N\xb1x\xb3\x9c<\xfe\x1a\x9c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x08\xd1'b'\x00\x05N\xb1x\xb3\x9c\x84\xfe\x08\x9d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00R\xf3'b'\x00\x05N\xb1x\xb3\x9c\xd8\xfe\x15\x9e\x01\x01$|k\x90\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e\xd6'b'\x00\x05N\xb1x\xb3\x9d(\xfe\x16\x9f\x01\x01#y\xba\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06j'b'\x00\x05N\xb1x\xb3\x9dp\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b'\x00\x05N\xb1x\xb4\x84\xdf\xfe5e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01$5'b'\x00\x05N\xb1x\xb4\x9a\xfb\xfe!f\xff\x00L\xbe!\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa75'b'\x00\x05N\xb1x\xb50H\xfe\x14\xa1\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xad\x88'b'\x00\x05N\xb1x\xb50\xd4\xfe\x1c\xa2\x01\x01!\\\xba\x03\x00^\xa6\x02\x18\x06\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x01\x00\xa4\x045\xd9'b'\x00\x05N\xb1x\xb51D\xfe\x03\xa3\x01\x01Ms\x00\x00\x02J'b'\x00\x05N\xb1x\xb51\xdc\xfe\x1c\xa4\x01\x01\x1e\x18\xbb\x03\x00\xba\xdb}\xbd@\x9d690iT>\xbe\xa4b9\x1c\xf6\xf7\xb9\x12\xcc\x01\xb8R\xfc'b'\x00\x05N\xb1x\xb52X\xfe\x18\xa5\x01\x01\xb28\x0c~\xbd\xe7\x87S\xbb\x02IZ>\xeb\xa1)D^\xa6\x02\x18\x06\xe8\xb8\xfd\xe3s'b'\x00\x05N\xb1x\xb6\x84\xdf\xfe5g\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa1\xd7'b'\x00\x05N\xb1x\xb6\x9c\x1b\xfe!h\xff\x00L\x1d\x04\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00s\x95'b'\x00\x05N\xb1x\xb6\xb7\xcc\xfe\x1c\xa6\x01\x01\xa3>\xd1s\xb9\x081c9t\xa5\x897\x00\x00\x00\x00\x00\x00\x00\x00N"\x16:\xbe\xbb\xf5:\x93o'b'\x00\x05N\xb1x\xb6\xb8D\xfe\x03\xa7\x01\x01\xa5\xc5\x14\x00;\xda'b'\x00\x05N\xb1x\xb6\xb8\xa8\xfe\x0c\xa8\x01\x01\x02@\x05\xfbx\xb1N\x05\x00-\xbb\x03\x00\x08x'b'\x00\x05N\xb1x\xb6\xb9 \xfe\x16\xa9\x01\x01\x88]\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa07'b'\x00\x05N\xb1x\xb6\xb9t\xfe\x16\xaa\x01\x01\xc1l/OH\x15\x16\xc2'b'\x00\x05N\xb1x\xb6\xbb`\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x93\xe2'b'\x00\x05N\xb1x\xb6\xbb\xb0\xfe\x06\xb1\x01\x01}\xc8\x14\x00\x00\x03\x00\x87\xc5'b'\x00\x05N\xb1x\xb6\xbb\xfc\xfe\x04\xb2\x01\x01\x98\x00\x00\xa0\x8a]\xab'b'\x00\x05N\xb1x\xb6\xbc@\xfe\x02\xb3\x01\x01*\x00\x00\xa5\t'b'\x00\x05N\xb1x\xb6\xbc\x94\xfe\x1e\xb4\x01\x01\x18\x88\x08\x93\x0e\x00\x00\x00\x00]\xa6\x02\x18\x07\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd8\x9e'b'\x00\x05N\xb1x\xb6\xbc\xe4\xfe\x1a\xb5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe2j'b'\x00\x05N\xb1x\xb6\xbd,\xfe\x08\xb6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00me'b'\x00\x05N\xb1x\xb6\xbd|\xfe\x15\xb7\x01\x01$2\x15\x94\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xc7'b'\x00\x05N\xb1x\xb6\xbd\xcc\xfe\x16\xb8\x01\x01#i\xbb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x00\xb1'b'\x00\x05N\xb1x\xb8]\x8c\xfe\x03\xb9\x01\x01Ms\x00\x00\xa97'b'\x00\x05N\xb1x\xb8^D\xfe\x14\xba\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00iD'b'\x00\x05N\xb1x\xb8^\xa4\xfe\x1c\xbb\x01\x01!%\xbb\x03\x00]\xa6\x02\x18\x07\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\xc2\xd9'b'\x00\x05N\xb1x\xb8_\x04\xfe\x12\xbc\x01\x01\xfc\xed\xbb\x03\x004\x00\x01\x00ARMMASK\x00Wr\x93w'b'\x00\x05N\xb1x\xb8`\x03\xfe5i\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x18j'b'\x00\x05N\xb1x\xb8b?\xfe!j\xff\x00L\x1d\x04\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf2\xc8'b'\x00\x05N\xb1x\xb9\xe2\x84\xfe\t\xbd\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9d\xbf'b'\x00\x05N\xb1x\xb9\xe3\x04\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\x00\x05N\xb1x\xb9\xf7l\xfe\x1c\xbf\x01\x01\x1e\t\xbc\x03\x00(\xda}\xbd\xa0\x9e\x159v|T>\x18\x97\x9c9\x91\xe7o\xbauU\xc58U\xf2'b'\x00\x05N\xb1x\xb9\xf7\xc8\xfe\x18\xc0\x01\x01\xb2\xd3\xd8}\xbd\xcf\xe6T\xbbvaZ>{\xb4)D]\xa6\x02\x18\x07\xe8\xb8\xfd\xc3\xff'b'\x00\x05N\xb1x\xb9\xf8\x18\xfe\t\xd8\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00=\x91'b'\x00\x05N\xb1x\xb9\xf8l\xfe\x1c\xc1\x01\x01\xa3\x96Mu\xb9#\x93e9Y&\x907\x00\x00\x00\x00\x00\x00\x00\x00P|\x06:\x1a\xd02;\x196'b'\x00\x05N\xb1x\xb9\xf8\xb0\xfe\x03\xc2\x01\x01\xa5\xc5\x14\x00[\x9e'b'\x00\x05N\xb1x\xb9\xf8\xf8\xfe\x0c\xc3\x01\x01\x02\xc0\xae\xfex\xb1N\x05\x00\x1d\xbc\x03\x00\xc3\xbc'b'\x00\x05N\xb1x\xb9\xf9H\xfe\x16\xc4\x01\x01\x88]\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00E\x8c'b'\x00\x05N\xb1x\xb9\xf9\x98\xfe\x16\xc5\x01\x01\xc1\xc1\x89M<\x9e\xac\x177~\xc6\x89;\x14y\xb5=\x00\x00\x00\x00\xa5\x03\xae?'b'\x00\x05N\xb1x\xba)g\xfe5k\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9d\x88'b'\x00\x05N\xb1x\xbaU\x07\xfe!l\xff\x00Li\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x05\x86'b'\x00\x05N\xb1x\xbb\x1d\x17\xfe\tm\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03A['b'\x00\x05N\xb1x\xbbm\xd4\xfe\x1a\xc7\x01\x01\x1b\xa7\xbd\x97\x0e\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\x9d\x1b'b'\x00\x05N\xb1x\xbbn@\xfe\x16\xc8\x01\x01tY\xbc\x03\x00\x02\x002\x000\xfc\xfd\xff\xff\xff\xfc\xff\x07\x01\xa0\xff3\x02\xa6\xc5'b'\x00\x05N\xb1x\xbbn\xa0\xfe\x16\xc9\x01\x01\x81Y\xbc\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff$\x03\x88\x00j\x02\xfe+'b'\x00\x05N\xb1x\xbbn\xf0\xfe\x0e\xca\x01\x01\x1dY\xbc\x03\x00\xe7\xa4iD\xebQh=A\x10\x9b\xbf'b'\x00\x05N\xb1x\xbbo<\xfe\x0e\xcb\x01\x01\x89Y\xbc\x03\x00A\xe7iDp=\xaf>H\x15\x81\xdb'b'\x00\x05N\xb1x\xbbo\x94\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x005?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{\t'b'\x00\x05N\xb1x\xbbo\xe8\xfe\x06\xcd\x01\x01}\xc5\x14\x00\x00\x03\x00\xfdW'b'\x00\x05N\xb1x\xbbp4\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05'b'\x00\x05N\xb1x\xbbpx\xfe\x02\xcf\x01\x01*\x00\x00s\xa9'b'\x00\x05N\xb1x\xbbp\xe0\xfe\x1e\xd0\x01\x01\x18\xc8\x15\x96\x0e\x00\x00\x00\x00]\xa6\x02\x18\x07\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c7\x05'b'\x00\x05N\xb1x\xbbq<\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf'b'\x00\x05N\xb1x\xbbq\x88\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5'b'\x00\x05N\xb1x\xbbq\xd4\xfe\x15\xd3\x01\x01$\xd7\xbf\x97\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xc0'b'\x00\x05N\xb1x\xbbr$\xfe\x16\xd4\x01\x01#Z\xbc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00~\xe0'b'\x00\x05N\xb1x\xbbrl\xfe\x03\xd5\x01\x01Ms\x00\x00\xca\xdf'b'\x00\x05N\xb1x\xbb\x86\xcc\xfe\x14\xd6\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xec\xef'b'\x00\x05N\xb1x\xbc\x0b\xf7\xfe5n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcc\xb0'b'\x00\x05N\xb1x\xbc"#\xfe!o\xff\x00Li\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Lq'b'\x00\x05N\xb1x\xbc\xfc\x18\xfe\x1c\xd7\x01\x01!\xb5\xbc\x03\x00]\xa6\x02\x18\x08\xe8\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04PG'b'\x00\x05N\xb1x\xbc\xfc\x98\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\x00\x05N\xb1x\xbd\x11 \xfe\x1c\xd9\x01\x01\x1e\xf9\xbc\x03\x00-\x06~\xbd\xa0\x9b#9I|T>S\xdc\x0c\xba\n\x92\xdc\xba>\x87\x959+\xfd'b'\x00\x05N\xb1x\xbd\x11\x94\xfe\x18\xda\x01\x01\xb2\x19\xc0}\xbd^\x10V\xbbqiZ>\x14\xae)D]\xa6\x02\x18\x08\xe8\xb8\xfdg#'b'\x00\x05N\xb1x\xbd\x11\xf4\xfe\x1c\xdb\x01\x01\xa31\xd3v\xb9\xe3\xf4g9\xdb\xf9\x967\x00\x00\x00\x00\x00\x00\x00\x00V\xe4\t:\xc9\xdd\r;\x03\xb1'b'\x00\x05N\xb1x\xbd\x12D\xfe\x03\xdc\x01\x01\xa5\xc3\x14\x00\xb4\xbe'b'\x00\x05N\xb1x\xbd\x12\xb0\xfe\x0c\xdd\x01\x01\x02(\\\x02y\xb1N\x05\x00\x0e\xbd\x03\x00\x0e\x1b'b'\x00\x05N\xb1x\xbd\x13$\xfe\x16\xde\x01\x01\x88]\xa6\x02\x18\x08\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa2\xfc'b'\x00\x05N\xb1x\xbd\x13\x88\xfe\x16\xdf\x01\x01\xc1\xa5\xb0L<\xf7:\x177&M7:n\xcc\xc5=\x00\x00\x00\x00\xa5\x03\xfc\xe9'b"\x00\x05N\xb1x\xbd+\xa3\xfe%p\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00/\xc7"b'\x00\x05N\xb1x\xbe\x17?\xfe5q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01`\xd4'b'\x00\x05N\xb1x\xbeA\x7f\xfe!r\xff\x00LW\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00#\xce'b'\x00\x05N\xb1x\xbeo\x04\xfe\x03\xe0\x01\x01/\xff\x00\x00\xf5\xdd'b'\x00\x05N\xb1x\xbe\x84\x00\xfe\x1a\xe1\x01\x01\x1b\xc8h\x9b\x0e\x00\x00\x00\x00\x05\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xfc\xce'b"\x00\x05N\xb1x\xbe\x84`\xfe\x16\xe2\x01\x01tI\xbd\x03\x00\x0b\x009\x00'\xfc\x01\x00\x02\x00\x03\x00\x07\x01\xa0\xff3\x02Fo"b'\x00\x05N\xb1x\xbe\x84\xbc\xfe\x16\xe3\x01\x01\x81I\xbd\x03\x00\x00\x00@\x00\x1e\xfc\xfc\xff\x01\x00\xfd\xff)\x03\x87\x00o\x02\xab\x8c'b'\x00\x05N\xb1x\xbe\x85\x10\xfe\x0e\xe4\x01\x01\x1dI\xbd\x03\x00\xef\xa3iDp=*=@\x104T'b'\x00\x05N\xb1x\xbe\x85`\xfe\x0e\xe5\x01\x01\x89I\xbd\x03\x00\xdd\xe7iD\xb8\x1e\xb4>I\x15/\x88'b'\x00\x05N\xb1x\xbe\x85\xf4\xfe\x1f\xe6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x005?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x97q'b'\x00\x05N\xb1x\xbe\x86|\xfe\x06\xe7\x01\x01}\xc5\x14\x00\x00\x03\x00\xff\xa2'b'\x00\x05N\xb1x\xbe\x87\x00\xfe\x04\xe8\x01\x01\x98\x00\x00\xa0\x8a\x9aV'b'\x00\x05N\xb1x\xbe\x87\x90\xfe\x02\xe9\x01\x01*\x00\x00=\x92'b'\x00\x05N\xb1x\xbe\x88<\xfe\x1e\xea\x01\x01\x18\x08#\x99\x0e\x00\x00\x00\x00]\xa6\x02\x18\x08\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c.x'b'\x00\x05N\xb1x\xbe\x88\xdc\xfe\x1a\xeb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x02\x00'b'\x00\x05N\xb1x\xbe\x89|\xfe\x08\xec\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdez'b'\x00\x05N\xb1x\xbe\x8a4\xfe\x15\xed\x01\x01$Sk\x9b\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x9d'b'\x00\x05N\xb1x\xbe\x8a\xdc\xfe\x16\xee\x01\x01#J\xbd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb6\xa6'b'\x00\x05N\xb1x\xbe\x8b,\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14'b'\x00\x05N\xb1x\xbf\xfb\xc4\xfe\x14\xf0\x01\x01J\n\xd7#<\n\xd7#\xb9\x97\x08:\xeb\x8b\x13\xba\xe9\x8f\x1b\xb9\x17T'b'\x00\x05N\xb1x\xc1z\xf8\xfe\x18\xf3\x01\x01\xb2\x18\xed}\xbd\xb7rV\xbb\xfbrZ>\x8f\xb2)D]\xa6\x02\x18\t\xe8\xb8\xfd\x04p'b'\x00\x05N\xb1x\xc1{T\xfe\x1c\xf4\x01\x01\xa3\xac^x\xb9\xabXj9\x80\xd2\x9d7\x00\x00\x00\x00\x00\x00\x00\x00%\xfd":\xf9\x0c,;7\x16'b'\x00\x05N\xb1x\xc1{\x9c\xfe\x03\xf5\x01\x01\xa5\xc5\x14\x00\xdd\xef'b'\x00\x05N\xb1x\xc1{\xe8\xfe\x0c\xf6\x01\x01\x02\xc0\x01\x06y\xb1N\x05\x00\xfe\xbd\x03\x00\x1a\x8e'b'\x00\x05N\xb1x\xc1|<\xfe\x16\xf7\x01\x01\x88]\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00k\xa6'b'\x00\x05N\xb1x\xc1|\x94\xfe\x16\xf8\x01\x01\xc1\xf5\x01K\x80\xfe\x1a\x15\x01\x01\x1b\xec\xa4\xbd\x0e\x00\x00\x00\x00\x03\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\r\x01\xb0\xffn\x01WX'b'\x00\x05N\xb1x\xe1>\xfc\xfe\x16\x16\x01\x01t\r\xc6\x03\x00\x11\x009\x00%\xfc\x01\x00\x00\x00\x04\x00\x07\x01\xa1\xff3\x02\xf8\xdb'b'\x00\x05N\xb1x\xe1?X\xfe\x16\x17\x01\x01\x81\r\xc6\x03\x00\x04\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x85\x00n\x02\xf8\xfd'b'\x00\x05N\xb1x\xe1?\xa8\xfe\x0e\x18\x01\x01\x1d\r\xc6\x03\x002\xa3iD\x8f\xc2\xf5<@\x10\xf0\xbb'b'\x00\x05N\xb1x\xe1?\xf8\xfe\x0e\x19\x01\x01\x89\r\xc6\x03\x00i\xe8iD\xe1z\xb8>J\x15\xc3\xca'b'\x00\x05N\xb1x\xe1@P\xfe\x1f\x1a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00B\x015?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb6/'b'\x00\x05N\xb1x\xe1@\xa4\xfe\x06\x1b\x01\x01}\xc5\x14\x00\x00\x03\x00\xd1\x8c'b'\x00\x05N\xb1x\xe1@\xf8\xfe\x04\x1c\x01\x01\x98\x00\x00\x80\x8a]@'b'\x00\x05N\xb1x\xe1A@\xfe\x02\x1d\x01\x01*\x00\x00\x1aj'b'\x00\x05N\xb1x\xe1A\x94\xfe\x1e\x1e\x01\x01\x18\xc0\xcd\xbd\x0e\x00\x00\x00\x00]\xa6\x02\x18\r\xe8\xb8\xfd:f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd5b'b'\x00\x05N\xb1x\xe1A\xe8\xfe\x1a\x1f\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x004\x02'b'\x00\x05N\xb1x\xe1B<\xfe\x08 \x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xe4'b'\x00\x05N\xb1x\xe1B\x8c\xfe\x15!\x01\x01$T\xf4\xbd\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x0f'b'\x00\x05N\xb1x\xe1B\xdc\xfe\x16"\x01\x01#!\xc6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00"\xcf'b'\x00\x05N\xb1x\xe1C$\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81'b'\x00\x05N\xb1x\xe2\xc2o\xfe5\x9c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01=\xfd'b'\x00\x05N\xb1x\xe2\xc3\x84\xfe\x14$\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\x03\xcd'b'\x00\x05N\xb1x\xe2\xc4 \xfe\x1c%\x01\x01!\x18\xc6\x03\x00]\xa6\x02\x18\t\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfc\xff\x02\x00\x01\x00\xa4\x04\xedO'b'\x00\x05N\xb1x\xe2\xc4\xa0\xfe\x1c&\x01\x01 \x9a\xc6\x03\x00\xcb\xf7\x04\xbeZ\xc6\x8b?\xed\x99\xa8>\xce\xe0B\xbd$\xac\xc6<\x03\xac0\xbc`\x9c'b"\x00\x05N\xb1x\xe2\xc5\x04\xfe\x1c'\x01\x01\x1e\xc2\xc6\x03\x00\xd8g~\xbd\xe0F\xb69\xdbqT>\xfe\xe3\xef\xb9\xf6\xe5\x01\xbb\x1e\x81E\xbbx\x9e"b'\x00\x05N\xb1x\xe2\xc5p\xfe\x18(\x01\x01\xb2\xd4`\x83\xbd\x82\xd46\xbb\x88\x8bZ>\xcd\x9c)D]\xa6\x02\x18\r\xe8\xb8\xfd\xf6\x89'b'\x00\x05N\xb1x\xe2\xdb\xf7\xfe!\x9d\xff\x00L?\x07\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x7f\xb1'b'\x00\x05N\xb1x\xe4i\xa8\xfe\x1c)\x01\x01\xa3\xca;z\xb9\xa1\xb4l9\xd2`\xa57\x00\x00\x00\x00\x00\x00\x00\x00u\x115=\t\xb9\x88;\xbe:'b'\x00\x05N\xb1x\xe4j\x18\xfe\x03*\x01\x01\xa5\xc5\x14\x00\x04\xab'b'\x00\x05N\xb1x\xe4jl\xfe\x0c+\x01\x01\x02\xb0\x85(y\xb1N\x05\x00\xd6\xc6\x03\x00\x1d\x1e'b'\x00\x05N\xb1x\xe4j\xc4\xfe\x16,\x01\x01\x88]\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf8\x8b'b'\x00\x05N\xb1x\xe4k\x18\xfe\x12-\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\n\n'b'\x00\x05N\xb1x\xe4kl\xfe\x16.\x01\x01\xc1\x12P\x86<\xa6@Y<\xb2\xb0\xca9\xaa\x13\xab=\x00\x00\x00\x00?\x03\xfb\x91'b'\x00\x05N\xb1x\xe4k\xe0\xfe\x030\x01\x01Ms\x00\x00HP'b'\x00\x05N\xb1x\xe4\x80\x9c\xfe\x1a1\x01\x01\x1bFQ\xc1\x0e\x00\x00\x00\x00\x05\x003\x00\x1c\xfc\xfc\xff\xff\xff\t\x00\t\x01\xad\xffk\x01Hp'b'\x00\x05N\xb1x\xe4\x81\x08\xfe\x162\x01\x01t\xfe\xc6\x03\x00\x10\x00<\x00&\xfc\x00\x00\xff\xff\x06\x00\x05\x01\x9d\xff2\x02\x1b~'b'\x00\x05N\xb1x\xe4\x81x\xfe\x163\x01\x01\x81\xfe\xc6\x03\x00\x05\x00@\x00"\xfc\x00\x00\xfc\xff\xfe\xff!\x03\x85\x00n\x02\xb2n'b'\x00\x05N\xb1x\xe4\x81\xd4\xfe\x0e4\x01\x01\x1d\xfe\xc6\x03\x00K\xa4iD\xaeGA=C\x10P)'b'\x00\x05N\xb1x\xe4\x820\xfe\x0e5\x01\x01\x89\xfe\xc6\x03\x00\x0c\xe8iD\x99\x99\xb5>O\x15\x13f'b'\x00\x05N\xb1x\xe4\x82\xa0\xfe*6\x01\x01\x96s\xe7f\xbc\x10m\x01\x00C\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00M\xb7'b'\x00\x05N\xb1x\xe4\x83\x0c\xfe\x1f7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x017?Q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd6-'b'\x00\x05N\xb1x\xe4\x83p\xfe\x068\x01\x01}\xc5\x14\x00\x00\x03\x00\xe8\x90'b'\x00\x05N\xb1x\xe4\x83\xcc\xfe\x049\x01\x01\x98\x00\x00\x80\x8a|\xc5'b'\x00\x05N\xb1x\xe4\x84\x1c\xfe\x02:\x01\x01*\x00\x00\x81\xce'b'\x00\x05N\xb1x\xe4\x84\x80\xfe\x1e;\x01\x01\x18\x00\xdb\xc0\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cI\x8a'b'\x00\x05N\xb1x\xe4\x84\xe4\xfe\x1a<\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00a"'b'\x00\x05N\xb1x\xe4\x85<\xfe\x08=\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00P\x80'b'\x00\x05N\xb1x\xe4\x85\x8c\xfe\x15>\x01\x01$\x98\x9f\xc1\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00-\xb0'b'\x00\x05N\xb1x\xe4\x85\xdc\xfe\x16?\x01\x01#\x12\xc7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc2\x05'b'\x00\x05N\xb1x\xe4\x9d\xd7\xfe5\x9e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb8\x1f'b'\x00\x05N\xb1x\xe4\xd8#\xfe!\x9f\xff\x00L\x16\x0b\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00DR'b'\x00\x05N\xb1x\xe5\xda@\xfe\x14@\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00P\x82'b'\x00\x05N\xb1x\xe5\xda\xb0\xfe\x03A\x01\x01Ms\x00\x00\x8eY'b'\x00\x05N\xb1x\xe5\xefd\xfe\x1cB\x01\x01!\xe0\xc6\x03\x00\\\xa6\x02\x18\n\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfc\xff\x02\x00\x00\x00\xa5\x04\xe5J'b'\x00\x05N\xb1x\xe5\xef\xe8\xfe\x1cC\x01\x01 \x8a\xc7\x03\x00\x9dQ\x0f\xbeg(\x8d?.\xff\xa9>J\x87L\xbd\x0b\xdb\xd9<\xc27\x19\xbc\xeb\x18'b'\x00\x05N\xb1x\xe6\x92\x83\xfe5\xa0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe0\xd6'b'\x00\x05N\xb1x\xe6\xcd\x9b\xfe!\xa1\xff\x00L\x16\x0b\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbd\xc6'b'\x00\x05N\xb1x\xe7p\x08\xfe\x12D\x01\x01\xfc\xb0\xc7\x03\x004\x00\x01\x00ARMMASK\x00WrC\xe8'b'\x00\x05N\xb1x\xe7p\x9c\xfe\tE\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03I\xcb'b"\x00\x05N\xb1x\xe7\x85L\xfe\x1cF\x01\x01\x1e\xb2\xc7\x03\x00x\x8b~\xbd\x80K,:'yT>\xb6\x12\x86;\x0b\x0e\x057}\x94\x8e\xbb\xb1\xf8"b'\x00\x05N\xb1x\xe7\x85\xb4\xfe\x18G\x01\x01\xb2m,\x84\xbd_=-\xbb>\x81Z>\xb8\x8e)D\\\xa6\x02\x18\x0f\xe8\xb8\xfd\xb0\xf3'b'\x00\x05N\xb1x\xe7\x86\x04\xfe\t\xdb\n\x00m\x02\x00\x00\x00\x00\xd0\x00\x00\x00\xf1\x94'b'\x00\x05N\xb1x\xe7\x86X\xfe\x1cH\x01\x01\xa3v\xf6{\xb9\x84\xd5n9*6\xae7\x00\x00\x00\x00\x00\x00\x00\x00T\x90\xf4<\x03U\x81;\x9f\x90'b'\x00\x05N\xb1x\xe7\x86\xa0\xfe\x03I\x01\x01\xa5\xc6\x14\x00\x18\xd7'b'\x00\x05N\xb1x\xe7\x86\xe8\xfe\x0cJ\x01\x01\x020/,y\xb1N\x05\x00\xc6\xc7\x03\x00\x7f\x81'b'\x00\x05N\xb1x\xe7\x87<\xfe\x16K\x01\x01\x88\\\xa6\x02\x18\x0b\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5\xb1'b'\x00\x05N\xb1x\xe7\x87\x8c\xfe\x16L\x01\x01\xc1\xa8\xc5\x81P\x15\xd4\xf1'b'\x00\x05N\xb1x\xe7\x8a\\\xfe\x1fT\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x007?\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x137'b'\x00\x05N\xb1x\xe7\x8a\xb0\xfe\x06U\x01\x01}\xc2\x14\x00\x00\x03\x00\x11\xcf'b'\x00\x05N\xb1x\xe7\x8a\xfc\xfe\x04V\x01\x01\x98\x00\x00\x80\x8a\x0eB'b'\x00\x05N\xb1x\xe7\x8b@\xfe\x02W\x01\x01*\x00\x00KD'b'\x00\x05N\xb1x\xe7\x8b\xb8\xfe\x1eX\x01\x01\x18@\xe8\xc3\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x11\xe9'b'\x00\x05N\xb1x\xe7\x8c\x0c\xfe\x1aY\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x9eB'b'\x00\x05N\xb1x\xe7\x8cT\xfe\x08Z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe2N'b'\x00\x05N\xb1x\xe8\xbb\x7f\xfe5\xa2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01e4'b"\x00\x05N\xb1x\xe8\xf8T\xfe%[\x01\x01'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x!!B4\x91t\xc03\xb3)D\x00\x00\x10\x00\xff\x06\x00\x00\x01\x9c\x15"b'\x00\x05N\xb1x\xe8\xf8\xd8\xfe\x15\\\x01\x01$\xb7\x99\xc5\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xf6'b'\x00\x05N\xb1x\xe8\xf94\xfe\x16]\x01\x01#\x16\xc8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb7\x98'b'\x00\x05N\xb1x\xe9\x17\x07\xfe!\xa3\xff\x00L\xed\x11\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbbn'b'\x00\x05N\xb1x\xe9J\xef\xfe\t\xa4\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03y\x0f'b'\x00\x05N\xb1x\xea\x86\x1c\xfe\x14^\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\n\xd7#<\x0b\x00\x08\x00\xbeO'b'\x00\x05N\xb1x\xea\x86\xb8\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1x\xea\x9bx\xfe\x1c`\x01\x01!p\xc8\x03\x00[\xa6\x02\x18\x0c\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfb\xff\x02\x00\x00\x00\xa5\x040\xb9'b'\x00\x05N\xb1x\xea\x9c\x00\xfe\x1ca\x01\x01 \x8f\xc8\x03\x00]\x9b\x19\xbe>\xbc\x8e?\'\x1b\xaa> #[\xbd\x93q\xd8<\xe2\xe6"\xbcL\xbe'b'\x00\x05N\xb1x\xea\x9cd\xfe\x1cb\x01\x01\x1e\xb7\xc8\x03\x00\x8e\x19\x7f\xbd\x9c/\xa2:$\x9cT>\xa9\xda\x84;l\x7f\xbc\xb8\x87\xa3/:\xe2\x82'b'\x00\x05N\xb1x\xea\x9c\xc4\xfe\x18c\x01\x01\xb2\x9cf\x84\xbd\x90\x0c\x15\xbb\xf1\x89Z>f\x86)D\\\xa6\x02\x18\x0f\xe8\xb8\xfdl\x9e'b'\x00\x05N\xb1x\xeb\x03\xaf\xfe5\xa5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb1\xee'b'\x00\x05N\xb1x\xeb\x1aC\xfe!\xa6\xff\x00L\x9e-\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb6u'b'\x00\x05N\xb1x\xeb\xf9\xcc\xfe\x1cd\x01\x01\xa3[\xd3}\xb9\xb2\x18q9}\xa5\xb97\x00\x00\x00\x00\x00\x00\x00\x00}\x80\xc7<+~\xb1;\xca\x91'b'\x00\x05N\xb1x\xeb\xfap\xfe\x03e\x01\x01\xa5\xc5\x14\x00G\x7f'b'\x00\x05N\xb1x\xeb\xfb\x10\xfe\x0cf\x01\x01\x02\xd0&0y\xb1N\x05\x00\xcb\xc8\x03\x00$\x92'b'\x00\x05N\xb1x\xeb\xfb\xb4\xfe\x16g\x01\x01\x88[\xa6\x02\x18\x0c\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdc.'b'\x00\x05N\xb1x\xeb\xfcP\xfe\x16h\x01\x01\xc1 $\x9a<\x9b\x1cc<\xa2\x9a\x16:\xd6i\x88=\x00\x00\x00\x00?\x03\xe4c'b'\x00\x05N\xb1x\xeb\xfc\xf8\xfe\x1ai\x01\x01\x1b\xb3\xab\xc8\x0e\x00\x00\x00\x00\x05\x00?\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\n\x01\xac\xffk\x01Hm'b'\x00\x05N\xb1x\xeb\xfd\x90\xfe\x16j\x01\x01t\xe0\xc8\x03\x00\n\x00B\x00)\xfc\x01\x00\x00\x00\xff\xff\x04\x01\x9f\xff2\x02;\xd5'b'\x00\x05N\xb1x\xeb\xfd\xf4\xfe\x16k\x01\x01\x81\xe0\xc8\x03\x00\x04\x00H\x00\x1d\xfc\xfc\xff\x04\x00\xfc\xff(\x03\x85\x00t\x02;\xdf'b'\x00\x05N\xb1x\xeb\xfeH\xfe\x0el\x01\x01\x1d\xe0\xc8\x03\x00\xef\xa6iD\xb8\x1e\xb5=D\x10:}'b'\x00\x05N\xb1x\xeb\xfe\xc8\xfe\x0em\x01\x01\x89\xe0\xc8\x03\x00~\xe9iD\xf5(\xc1>P\x15n\x0f'b'\x00\x05N\xb1x\xeb\xffL\xfe\x1fn\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d ?\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{\t'b'\x00\x05N\xb1x\xeb\xff\xb0\xfe\x06o\x01\x01}\xc2\x14\x00\x00\x03\x00VK'b'\x00\x05N\xb1x\xec\x00\x08\xfe\x04p\x01\x01\x98\x00\x00\x80\x8a(\x11'b'\x00\x05N\xb1x\xec\x00h\xfe\x02q\x01\x01*\x00\x00\x05\x7f'b'\x00\x05N\xb1x\xec\x00\xc8\xfe\x1er\x01\x01\x18\x80\xf5\xc6\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb9\xd9'b'\x00\x05N\xb1x\xec\x01$\xfe\x1as\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x009\xbe'b'\x00\x05N\xb1x\xec\x01t\xfe\x08t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xcb'b'\x00\x05N\xb1x\xec\x01\xc4\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2'b'\x00\x05N\xb1x\xec\x16\xb8\xfe\x15v\x01\x01$\x0c\x95\xc9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xdej\xbd\xf9~\xec\xc5$\x11\xbbLp5\xbb_5\xcc\xba\xbbr'b'\x00\x05N\xb1x\xef+(\xfe\x18~\x01\x01\xb2%h\x84\xbd\xa2\x02\xfa\xba\x1d\x86Z>3\x83)D[\xa6\x02\x18\x10\xe8\xb8\xfd>\x0e'b'\x00\x05N\xb1x\xef+\x84\xfe\x1a\x7f\x01\x01\x1b\xf0U\xcc\x0e\x00\x00\x00\x00\x00\x007\x00!\xfc\x00\x00\x00\x00\x01\x00\x0b\x01\xae\xffk\x01\xb4o'b'\x00\x05N\xb1x\xef+\xdc\xfe\x16\x80\x01\x01t\xd0\xc9\x03\x00\x07\x007\x00+\xfc\x00\x00\x00\x00\x00\x00\x04\x01\x9e\xff2\x02\x89\xb4'b'\x00\x05N\xb1x\xef,L\xfe\x16\x81\x01\x01\x81\xd0\xc9\x03\x00\x00\x00C\x00"\xfc\xfb\xff\x02\x00\xff\xff\'\x03\x84\x00j\x02\x11o'b'\x00\x05N\xb1x\xef,\xcc\xfe\x0e\x82\x01\x01\x1d\xd0\xc9\x03\x00f\xa6iD\x00\x00\xa4=D\x10\xb5\xec'b'\x00\x05N\xb1x\xef-8\xfe\x0e\x83\x01\x01\x89\xd0\xc9\x03\x00\xe0\xe9iD33\xc4>Q\x15$\x0f'b'\x00\x05N\xb1x\xef-\xcc\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe6\x00 ?\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Te|'b'\x00\x05N\xb1x\xef.l\xfe\x06\x85\x01\x01}\xc8\x14$\x00\x03\x00\x9cE'b'\x00\x05N\xb1x\xef.\xf0\xfe\x04\x86\x01\x01\x98\x00\x00\x80\x8a.\x9f'b'\x00\x05N\xb1x\xef/d\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0'b'\x00\x05N\xb1x\xef/\xf0\xfe\x1e\x88\x01\x01\x18\x90\n\xca\x0e\x00\x00\x00\x00[\xa6\x02\x18\x10\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cJ\xba'b'\x00\x05N\xb1x\xef0h\xfe\x1a\x89\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00S+'b'\x00\x05N\xb1x\xef0\xc4\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1'b'\x00\x05N\xb1x\xef1(\xfe\x1c\x8b\x01\x01\xa3\xf3\xd8\x7f\xb99\x84s9c\x06\xc87\x00\x00\x00\x00\x00\x00\x00\x00O4\xb0\xe5\xf7z\xbd\xc1\x06\x00=F\x9fC\xbch\x93'b'\x00\x05N\xb1x\xf2\xe3\xdf\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Yk'b'\x00\x05N\xb1x\xf2\xfaS\xfe!\xaf\xff\x00Lq,\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe7\xdb'b'\x00\x05N\xb1x\xf3\xae\x10\xfe\x1a\x97\x01\x01\x1b\x95\x02\xd0\x0e\x00\x00\x00\x00\x07\x007\x00\x1d\xfc\x00\x00\xfd\xff\x00\x00\t\x01\xae\xffl\x01\x14\xdc'b'\x00\x05N\xb1x\xf3\xae\xdc\xfe\x16\x98\x01\x01t\xc1\xca\x03\x00\x0c\x00=\x000\xfc\xff\xff\x00\x00\xfc\xff\x04\x01\x9f\xff2\x02\x1e\xb3'b'\x00\x05N\xb1x\xf3\xaf`\xfe\x16\x99\x01\x01\x81\xc1\xca\x03\x00\x05\x00A\x00\x1b\xfc\xfb\xff\xfe\xff\xfd\xff.\x03\x82\x00t\x02\xf8%'b'\x00\x05N\xb1x\xf3\xaf\xcc\xfe\x0e\x9a\x01\x01\x1d\xc1\xca\x03\x00;\xa5iD\xb8\x1e}=D\x10\xfdg'b'\x00\x05N\xb1x\xf3\xb0(\xfe\x0e\x9b\x01\x01\x89\xc1\xca\x03\x00\x10\xe9iDR\xb8\xbd>R\x15$\xd4'b'\x00\x05N\xb1x\xf3\xb0\x94\xfe\x1f\x9c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00 ?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T:\x11'b'\x00\x05N\xb1x\xf3\xb2\xb4\xfe\x06\x9d\x01\x01}\xc8\x14\x00\x00\x03\x00\xf2\xc5'b'\x00\x05N\xb1x\xf3\xb3\x14\xfe\x04\x9e\x01\x01\x98\x00\x00\x80\x8ap\x1f'b'\x00\x05N\xb1x\xf3\xb3`\xfe\x02\x9f\x01\x01*\x00\x00\xbc\xdb'b'\x00\x05N\xb1x\xf3\xb3\xc8\xfe\x1e\xa0\x01\x01\x18\xf8(\xd0\x0e\x00\x00\x00\x00Z\xa6\x02\x18\x10\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x04\xe8'b'\x00\x05N\xb1x\xf3\xb4(\xfe\x1a\xa1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8dU'b'\x00\x05N\xb1x\xf3\xb4|\xfe\x08\xa2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\t)'b"\x00\x05N\xb1x\xf3\xb4\xd8\xfe\x1c\xa3\x01\x01\x1e\xd5\xca\x03\x00\xc2o\x80\xbdn\xb9\x05;'LT>y\x91\xdb:D\x90\x85\xba*K\xbc:\xe4M"b'\x00\x05N\xb1x\xf3\xb50\xfe\x18\xa4\x01\x01\xb2:\x81\x84\xbd\x06\x14\xd7\xba`NZ>G\x81)DZ\xa6\x02\x18\x10\xe8\xb8\xfd\x186'b'\x00\x05N\xb1x\xf3\xb5\x88\xfe\x1c\xa5\x01\x01\xa3\xa3\xdc\x80\xb9F\xbcu9x\xf0\xd67\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\x80<\xce\xf0\xae;\xec\xcb'b'\x00\x05N\xb1x\xf3\xb5\xd0\xfe\x03\xa6\x01\x01\xa5\xc8\x14\x00\x0b\xd0'b'\x00\x05N\xb1x\xf3\xb6 \xfe\x0c\xa7\x01\x01\x020d8y\xb1N\x05\x00\xe9\xca\x03\x00\xeaP'b'\x00\x05N\xb1x\xf3\xb6\x80\xfe\x16\xa8\x01\x01\x88Y\xa6\x02\x18\x0f\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe2\xe8'b'\x00\x05N\xb1x\xf3\xb6\xe0\xfe\x16\xa9\x01\x01\xc1,.\x8e<\xbc\x0e\xf7;^r\x11:\x1d\x15\xb4=\x00\x00\x00\x00?\x03\xa4\x1a'b'\x00\x05N\xb1x\xf3\xb7l\xfe\x03\xab\x01\x01Ms\x00\x00\xbeg'b'\x00\x05N\xb1x\xf4\xbcg\xfe5\xb0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbf\xfa'b'\x00\x05N\xb1x\xf4\xe6;\xfe!\xb1\xff\x00L\x1a\xfa\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc4\x14'b'\x00\x05N\xb1x\xf5\x1f\xf8\xfe\x15\xac\x01\x01$6\x89\xd1\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00PE'b'\x00\x05N\xb1x\xf5 x\xfe\x16\xad\x01\x01#%\xcb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb1\xd5'b'\x00\x05N\xb1x\xf5 \xd8\xfe\x14\xae\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\n\xd7#<\x0b\x00\x08\x00\x1d\xbc'b'\x00\x05N\xb1x\xf5!4\xfe\x03\xaf\x01\x01Ms\x00\x00`q'b'\x00\x05N\xb1x\xf6\x9c\xd7\xfe5\xb2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01:\x18'b'\x00\x05N\xb1x\xf6\xb4\x0f\xfe!\xb3\xff\x00L\x1a\xfa\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00EI'b'\x00\x05N\xb1x\xf6\xb4\xc0\xfe\x12\xb0\x01\x01\xfc\x9b\xcb\x03\x004\x00\x01\x00ARMMASK\x00Wr\xbd\xf0'b'\x00\x05N\xb1x\xf6\xb5@\xfe\t\xb1\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03)\x8e'b'\x00\x05N\xb1x\xf6\xb5\xa8\xfe\x1c\xb2\x01\x01!\x7f\xcb\x03\x00X\xa6\x02\x18\x0f\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfa\xff\x02\x00\x01\x00\xa2\x04\x1fv'b'\x00\x05N\xb1x\xf6\xb6\x0c\xfe\x1c\xb3\x01\x01 \x9d\xcb\x03\x00\x1c\xd9<\xbe&\x85\x92?\x12\x98\xab>\x93\x9e\x89\xbd\xf1\xce\xf4<\xb2\xebE\xbc\xacy'b'\x00\x05N\xb1x\xf6\xb6|\xfe\t\xdc\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x84b'b'\x00\x05N\xb1x\xf6\xb7\x00\xfe\x1a\xb4\x01\x01\x1b5\xaf\xd3\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x01\x00\xfe\xff\x02\x00\t\x01\xac\xffk\x01\xc9G'b'\x00\x05N\xb1x\xf6\xb7|\xfe\x16\xb5\x01\x01t\xb1\xcb\x03\x00\x11\x007\x00(\xfc\x00\x00\x03\x00\x01\x00\x04\x01\x9f\xff2\x02g\xd6'b'\x00\x05N\xb1x\xf6\xb7\xf8\xfe\x16\xb6\x01\x01\x81\xb1\xcb\x03\x00\x00\x00@\x00\x1d\xfc\xfd\xff\x01\x00\xff\xff#\x03\x8a\x00m\x02\x98\xd9'b'\x00\x05N\xb1x\xf6\xb8h\xfe\x0e\xb7\x01\x01\x1d\xb2\xcb\x03\x00!\xa7iD)\\\xbb=E\x10\x81\x8b'b'\x00\x05N\xb1x\xf6\xb8\xdc\xfe\x0e\xb8\x01\x01\x89\xb2\xcb\x03\x00\x0f\xeaiD\x14\xae\xc5>R\x15\xd5\xd0'b'\x00\x05N\xb1x\xf6\xb9\x9c\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01 ?\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd5\xb7'b'\x00\x05N\xb1x\xf6\xba\\\xfe\x06\xba\x01\x01}\xbb\x14\x00\x00\x03\x00\xbc>'b'\x00\x05N\xb1x\xf6\xba\xdc\xfe\x04\xbb\x01\x01\x98\x00\x00\x80\x8aQ\x9a'b'\x00\x05N\xb1x\xf6\xbbT\xfe\x02\xbc\x01\x01*\x00\x00Q\x10'b'\x00\x05N\xb1x\xf6\xbb\xe8\xfe\x1e\xbd\x01\x01\x18\x18\xe8\xd2\x0e\x00\x00\x00\x00Y\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x1e\x81'b'\x00\x05N\xb1x\xf6\xbc|\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4'b'\x00\x05N\xb1x\xf6\xbd\x00\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M'b'\x00\x05N\xb1x\xf6\xbd\x90\xfe\x1c\xc0\x01\x01\x1e\xd9\xcb\x03\x00\xa6\xfb\x80\xbd~"\x1f;\x1b\x12T>\xad\xab\x86;\x8e\xf1B\xbb\xa1\xb5M\xb9\xc6W'b'\x00\x05N\xb1x\xf6\xbeD\xfe\x18\xc1\x01\x01\xb2]\xce\x84\xbds\x08\xaf\xba;#Z>)|)DY\xa6\x02\x18\x11\xe8\xb8\xfdK%'b'\x00\x05N\xb1x\xf8A\xfc\xfe\x1c\xc2\x01\x01\xa3\xeb\xd3\x81\xb9\xd0\xe8w9\x84\x95\xe77\x00\x00\x00\x00\x00\x00\x00\x00+\x13e<\xa4\x10\xcb;vW'b'\x00\x05N\xb1x\xf8Bx\xfe\x03\xc3\x01\x01\xa5\xe2\x14\x00\x96\xc7'b'\x00\x05N\xb1x\xf8B\xd0\xfe\x0c\xc4\x01\x01\x02\xb8_R\x15\xe1\xea'b'\x00\x05N\xb1x\xf9\xce\x94\xfe\x1f\xd1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti\xf4'b'\x00\x05N\xb1x\xf9\xcfH\xfe\x06\xd2\x01\x01}\xc5\x14\x00\x00\x03\x00\xf4:'b'\x00\x05N\xb1x\xf9\xcf\xe0\xfe\x04\xd3\x01\x01\x98\x00\x00\x80\x8a\xc1\xf4'b'\x00\x05N\xb1x\xf9\xd0`\xfe\x02\xd4\x01\x01*\x00\x008j'b'\x00\x05N\xb1x\xf9\xd0\xc8\xfe\x1e\xd5\x01\x01\x18X\xf5\xd5\x0e\x00\x00\x00\x00X\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x12\xb2'b'\x00\x05N\xb1x\xfat\xaf\xfe5\xb7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01k 'b'\x00\x05N\xb1x\xfa\xb2\x9b\xfe!\xb8\xff\x00L\xa5\xd3\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd6\x06'b'\x00\x05N\xb1x\xfb;\x10\xfe\x1a\xd6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x87\x84'b'\x00\x05N\xb1x\xfb;\x8c\xfe\x08\xd7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x001\xb6'b'\x00\x05N\xb1x\xfb;\xf4\xfe\x1c\xd8\x01\x01!G\xcc\x03\x00W\xa6\x02\x18\x10\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x03\x00\x00\x00\xa1\x04\xb1E'b'\x00\x05N\xb1x\xfb\xdc\xe2\x93\xbdM\x1f\xf6<\xb2T\xa7\xbbv\x1e'b'\x00\x05N\xb1x\xfb<\xc0\xfe\x1c\xda\x01\x01\x1e\xde\xcc\x03\x00\xb2\x00\x82\xbd\xf6\xa3E;\xd0\xd4S>\xb8D\x1a9I\x8f\x9f\xba\xf2\xcc\xd5\xba^<'b'\x00\x05N\xb1x\xfb=\x1c\xfe\x18\xdb\x01\x01\xb2\xd5\x99\x85\xbd2Hx\xba\xcd\x04Z>\\\x7f)DX\xa6\x02\x18\x11\xe8\xb8\xfd=\xf9'b"\x00\x05N\xb1x\xfb=t\xfe\x1c\xdc\x01\x01\xa3-\xd6\x82\xb96\tz9\x16(\xfa7\x00\x00\x00\x00\x00\x00\x00\x00.\n`<\x9c\x1e\xd5;c'"b'\x00\x05N\xb1x\xfb=\xbc\xfe\x03\xdd\x01\x01\xa5\xc8\x14\x00\x1e\xff'b'\x00\x05N\xb1x\xfb>\x0c\xfe\x0c\xde\x01\x01\x02pS@y\xb1N\x05\x00\xf2\xcc\x03\x00\xcd\x7f'b'\x00\x05N\xb1x\xfb>d\xfe\x16\xdf\x01\x01\x88V\xa6\x02\x18\x10\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa9\x94'b'\x00\x05N\xb1x\xfb>\xb8\xfe\x16\xe0\x01\x01\xc1\xb0\x07\xa0<*\xb4\xa2;\xe1\xe6\xf19\x00\x10\x94=\x00\x00\x00\x00?\x03s\xc5'b'\x00\x05N\xb1x\xfb?\x04\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\x00\x05N\xb1x\xfci\x07\xfe5\xb9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd2\x9d'b'\x00\x05N\xb1x\xfc\xa8\x0f\xfe!\xba\xff\x00L\x04\xac\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf7\xec'b'\x00\x05N\xb1x\xfc\xd5|\xfe\x15\xe2\x01\x01$b\x7f\xd9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00L\x0c'b'\x00\x05N\xb1x\xfc\xd6 \xfe\x16\xe3\x01\x01#.\xcd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9d\x92'b'\x00\x05N\xb1x\xfe5\xe4\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3'b'\x00\x05N\xb1x\xfe6\xac\xfe\x14\xe5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\x0b\xf2'b'\x00\x05N\xb1x\xfe7\x0c\xfe\x1a\xe6\x01\x01\x1b\xbf\x05\xdb\x0e\x00\x00\x00\x00\x06\x007\x00\x13\xfc\x00\x00\x00\x00\x00\x00\n\x01\xac\xffh\x01C\x1d'b'\x00\x05N\xb1x\xfe7d\xfe\x16\xe7\x01\x01t\x92\xcd\x03\x00\r\x00<\x00%\xfc\x04\x00\x07\x00\xfd\xff\x04\x01\x9f\xff2\x02\x95J'b'\x00\x05N\xb1x\xfe7\xbc\xfe\x16\xe8\x01\x01\x81\x92\xcd\x03\x00\x04\x00C\x00\x19\xfc\xff\xff\x01\x00\xfc\xff)\x03\x87\x00j\x02\x99\xcd'b'\x00\x05N\xb1x\xfe8\x08\xfe\x0e\xe9\x01\x01\x1d\x92\xcd\x03\x00\xab\xa6iD\xd7\xa3\xac=E\x10\xf2D'b'\x00\x05N\xb1x\xfe8T\xfe\x0e\xea\x01\x01\x89\x92\xcd\x03\x00\x99\xe9iD\x00\x00\xc2>T\x15D\xde'b'\x00\x05N\xb1x\xfe8\xac\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tlc'b'\x00\x05N\xb1x\xfe9\x00\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce'b"\x00\x05N\xb1x\xfe9L\xfe\x04\xed\x01\x01\x98\x00\x00\x80\x8a\xb9'"b'\x00\x05N\xb1x\xfe9\x90\xfe\x02\xee\x01\x01*\x00\x00%U'b'\x00\x05N\xb1x\xfe9\xe8\xfe\x1e\xef\x01\x01\x18\xa0T\xd9\x0e\x00\x00\x00\x00Y\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf2`'b'\x00\x05N\xb1x\xfe:<\xfe\x1a\xf0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x05m'b'\x00\x05N\xb1x\xfe:\x84\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e'b'\x00\x05N\xb1x\xfe:\xd8\xfe\x1c\xf2\x01\x01!$\xcd\x03\x00V\xa6\x02\x18\x11\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x02\x00\x00\x00\xa1\x04{\x93'b'\x00\x05N\xb1x\xfe;8\xfe\x1c\xf3\x01\x01 \xba\xcd\x03\x00Y\x0bU\xbe\xe7\x13\x94?\x02\xe6\xac>\xb9O\x9d\xbd1\xca\xb4<\xc3\xeeZ\xbb\x8d\xe5'b"\x00\x05N\xb1x\xfe\xe8&k\xbb\xf3\th:\xc4\x9bZ:[0'b'\x00\x05N\xb1x\xff\xf5\xec\xfe\x18\xf6\x01\x01\xb2\x9d\x1c\x86\xbd\xb1\\(\xba\xde\x07Z>\xa4\x80)DX\xa6\x02\x18\x12\xe8\xb8\xfd\x9eV'b'\x00\x05N\xb1x\xff\xf6\x80\xfe\x1c\xf7\x01\x01\xa3\x9b\xef\x83\xb9\xf1\xf6{9V\xd4\x068\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xc1E<\xc1\xf3\xbf;rz'b'\x00\x05N\xb1x\xff\xf6\xec\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U'b'\x00\x05N\xb1x\xff\xf7P\xfe\x0c\xf9\x01\x01\x02\xf8NDy\xb1N\x05\x00\xf7\xcd\x03\x00E\x0e'b'\x00\x05N\xb1x\xff\xf7\xb8\xfe\x16\xfa\x01\x01\x88V\xa6\x02\x18\x11\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003\r'b'\x00\x05N\xb1x\xff\xf8\x18\xfe\x16\xfb\x01\x01\xc1\x1d\xf9\x87<\x8d\xe4)\x00\x1d\xfc\xfc\xff\x04\x00\xfc\xff$\x03\x86\x00o\x02I\xf4'b'\x00\x05N\xb1y\x01Q\xfc\xfe\x0e\x03\x01\x01\x1d\x83\xce\x03\x00\n\xa7iD\xe1z\xb8=F\x10\xf5\xd0'b'\x00\x05N\xb1y\x01RH\xfe\x0e\x04\x01\x01\x89\x83\xce\x03\x00\x99\xe9iD\x00\x00\xc2>T\x15a\x86'b'\x00\x05N\xb1y\x01R\xa4\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TN\xb4'b'\x00\x05N\xb1y\x01R\xf4\xfe\x06\x06\x01\x01}\xc8\x14\x00\x00\x03\x00\xb5d'b'\x00\x05N\xb1y\x01S<\xfe\x04\x07\x01\x01\x98\x00\x00\x80\x8a\x04\x16'b'\x00\x05N\xb1y\x01S\x80\xfe\x02\x08\x01\x01*\x00\x00p/'b'\x00\x05N\xb1y\x01S\xd8\xfe\x1e\t\x01\x01\x18\xc0\x13\xdc\x0e\x00\x00\x00\x00X\xa6\x02\x18\x12\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd2\xb5'b'\x00\x05N\xb1y\x01T,\xfe\x1a\n\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00o\xf8'b'\x00\x05N\xb1y\x01Tt\xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer'b'\x00\x05N\xb1y\x01T\xc4\xfe\x14\x0c\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\xb5\xa6'b'\x00\x05N\xb1y\x02W\xcb\xfe5\xc0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01"?'b'\x00\x05N\xb1y\x02\x82S\xfe!\xc1\xff\x00L\xa1\xb0\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x07l'b'\x00\x05N\xb1y\x02\xfb\x0c\xfe\x1c\r\x01\x01!\xa1\xce\x03\x00U\xa6\x02\x18\x11\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x02\x00\x01\x00\xa0\x04k\xe4'b'\x00\x05N\xb1y\x02\xfb\xac\xfe\x1c\x0e\x01\x01 \xc0\xce\x03\x00\xa67_\xbe\xb6\xa6\x94?\xb8\xc9\xac>>u\x9c\xbd\rB\xce<\x8cV3\xbc\x9bj'b'\x00\x05N\xb1y\x02\xfc\x0c\xfe\x1c\x0f\x01\x01\x1e\xe8\xce\x03\x00\xdfs\x83\xbd\x16\x8bj;v\xcfS>c\xbcc:\x8b7\x80\xbb2\xa2\x89\xba\xfa\xc5'b'\x00\x05N\xb1y\x02\xfcd\xfe\x18\x10\x01\x01\xb2\xd7\xa4\x86\xbd\x80\xb9\xab\xb9\xe5\x04Z>G\x81)DX\xa6\x02\x18\x12\xe8\xb8\xfd,\x8e'b'\x00\x05N\xb1y\x02\xfc\xc8\xfe\x03\x11\x01\x01Ms\x00\x00\x07g'b'\x00\x05N\xb1y\x02\xfdl\xfe\x1c\x12\x01\x01\xa3\x81\x15\x85\xb9 \xaf}9\x1c\n\x118\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xbeFU\x15J\xcf'b'\x00\x05N\xb1y\x05\xefd\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0e\x1c'b'\x00\x05N\xb1y\x05\xef\xe0\xfe\x06!\x01\x01}\xc8\x14\x00\x00\x03\x00\xd9&'b'\x00\x05N\xb1y\x05\xf0T\xfe\x04"\x01\x01\x98\x00\x00\x80\x8a%\x93'b'\x00\x05N\xb1y\x05\xf0\xcc\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81'b'\x00\x05N\xb1y\x06\x06@\xfe\x02$\x01\x01*\x00\x00i\xfd'b'\x00\x05N\xb1y\x06\x06\xd4\xfe\x1e%\x01\x01\x18(2\xe2\x0e\x00\x00\x00\x00W\xa6\x02\x18\x12\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf2\xdd'b'\x00\x05N\xb1y\x06\x07<\xfe\x1a&\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00R\x8a'b"\x00\x05N\xb1y\x06\x07\xb4\xfe\x08'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc"b'\x00\x05N\xb1y\x06\x084\xfe\x12(\x01\x01\xfc\x86\xcf\x03\x004\x00\x01\x00ARMMASK\x00Wr\xeaa'b'\x00\x05N\xb1y\x06\x08\xac\xfe\t)\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03C1'b'\x00\x05N\xb1y\x06\t\x0c\xfe\t\xdd\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00n\x1c'b'\x00\x05N\xb1y\x06\t`\xfe\x14*\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\xc1\xf7'b'\x00\x05N\xb1y\x06\t\xbc\xfe\x1c+\x01\x01!i\xcf\x03\x00T\xa6\x02\x18\x12\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf8\xff\x01\x00\x01\x00\xa1\x049,'b'\x00\x05N\xb1y\x06\n$\xfe\x1c,\x01\x01 \xc4\xcf\x03\x00\x10\xb4h\xbe1<\x95?\xcfT\xad>\xe3,\xa7\xbd\xf5\x08\xa3<\xc2\x001\xbcfc'b'\x00\x05N\xb1y\x069S\xfe5\xc4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x019\xf2'b'\x00\x05N\xb1y\x06c\x93\xfe!\xc5\xff\x00LV\xab\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00N\xb3'b'\x00\x05N\xb1y\x07\x8b\xc0\xfe\x1c-\x01\x01\x1e\xed\xcf\x03\x00\xae\x08\x84\xbd\xde_q;\xb2\xddS>\xa0]\xf09\x83\xb9h\xbb\x1cr5:)7'b'\x00\x05N\xb1y\x07\x8cp\xfe\x18.\x01\x01\xb2~E\x87\xbd\xc0\xf7\x93\xb8=\x0bZ>\xebq)DW\xa6\x02\x18\x12\xe8\xb8\xfdm\x97'b'\x00\x05N\xb1y\x07\x8c\xf0\xfe\x03/\x01\x01Ms\x00\x00\x82\xba'b'\x00\x05N\xb1y\x07\xa1\xf0\xfe\x1c0\x01\x01\xa3VE\x86\xb9NB\x7f9\t\xb8\x1b8\x00\x00\x00\x00\x00\x00\x00\x00j\xb9gLy\xb1N\x05\x00\x01\xd0\x03\x00\xe1F'b'\x00\x05N\xb1y\x07\xa3$\xfe\x163\x01\x01\x88T\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xac.'b'\x00\x05N\xb1y\x07\xa3\x94\xfe\x164\x01\x01\xc1\x02m\xa0<\x8cg6<<[\xde9l\xf9\x8f=\x00\x00\x00\x00?\x03B\x1b'b'\x00\x05N\xb1y\x08+c\xfe\t\xc6\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03}\x14'b'\x00\x05N\xb1y\x08,+\xfe5\xc6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbc\x10'b'\x00\x05N\xb1y\x08VC\xfe!\xc8\xff\x00L\xd1\xb5\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbfy'b'\x00\x05N\xb1y\t\n8\xfe\x155\x01\x01$Np\xe5\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00%\xe9'b'\x00\x05N\xb1y\t\x0b\x00\xfe\x166\x01\x01#=\xd0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00S-'b'\x00\x05N\xb1y\t\x0b\xf4\xfe\x1a7\x01\x01\x1bd\x0c\xe6\x0e\x00\x00\x00\x00\x04\x002\x00\x1a\xfc\xfe\xff\x00\x00\x01\x00\t\x01\xad\xffl\x01\xe7*'b'\x00\x05N\xb1y\t\x0c\x9c\xfe\x168\x01\x01te\xd0\x03\x00\x07\x00+\x00\'\xfc\xfa\xff\x05\x00\xfd\xff\x05\x01\x9f\xff2\x02"\x91'b'\x00\x05N\xb1y\t\r\x14\xfe\x169\x01\x01\x81e\xd0\x03\x00\x04\x00=\x00\x18\xfc\xfa\xff\x01\x00\xfd\xff+\x03\x85\x00m\x02\xb1m'b'\x00\x05N\xb1y\t\r|\xfe\x0e:\x01\x01\x1de\xd0\x03\x00\xac\xa6iD\xcd\xcc\xac=F\x10\x81#'b'\x00\x05N\xb1y\t\r\xf0\xfe\x0e;\x01\x01\x89e\xd0\x03\x00k\xeaiD\\\x8f\xc8>V\x15d/'b'\x00\x05N\xb1y\t\x0eT\xfe\x1f<\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\n'b'\x00\x05N\xb1y\t\x0e\xac\xfe\x06=\x01\x01}\xc8\x14\x00\x00\x03\x00c\xb5'b'\x00\x05N\xb1y\t\x0f\x00\xfe\x04>\x01\x01\x98\x00\x00\x80\x8a\x9e,'b'\x00\x05N\xb1y\t\x0fH\xfe\x02?\x01\x01*\x00\x00">'b'\x00\x05N\xb1y\t\x0f\xa8\xfe\x1e@\x01\x01\x188G\xe5\x0e\x00\x00\x00\x00W\xa6\x02\x18\x12\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c\xe6q'b'\x00\x05N\xb1y\t\x10\x0c\xfe\x1aA\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd4h'b'\x00\x05N\xb1y\t\x10\\\xfe\x08B\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Z9'b'\x00\x05N\xb1y\t\x10\xac\xfe\x03C\x01\x01Ms\x00\x00\xe1R'b'\x00\x05N\xb1y\n\x0b\xbf\xfe5\xc9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01OX'b'\x00\x05N\xb1y\n"[\xfe!\xca\xff\x00L\xd1\xb5\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00>$'b'\x00\x05N\xb1y\n\x9c\x9c\xfe\x14D\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x08\x00\xc9\xc1'b'\x00\x05N\xb1y\n\x9dp\xfe\x1cE\x01\x01!3\xd0\x03\x00S\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf8\xff\x01\x00\x00\x00\xa0\x04\x8eC'b'\x00\x05N\xb1y\n\x9e \xfe\x1cF\x01\x01 \xc9\xd0\x03\x00\xdc\x94q\xbe\x14\\\x95?\xbfm\xae>_\xcb\xad\xbdr^8<\xa2=\xf1\xbb\xf2\xe3'b'\x00\x05N\xb1y\n\x9e\xb8\xfe\x03G\x01\x01Ms\x00\x00?D'b'\x00\x05N\xb1y\n\xb3D\xfe\x1cH\x01\x01\x1e\xf1\xd0\x03\x00\xab\xf0\x84\xbdv\xeb|;\x1f\xbbS>\xb5\xb8\xfe\xb9\x1f&\xbd\xba\xf1{\xd3\xb8nU'b'\x00\x05N\xb1y\n\xb3\xb4\xfe\x18I\x01\x01\xb2q\xda\x87\xbd \xd7D\xb9d\xf9Y>\xeb\x81)DW\xa6\x02\x18\x12\xe8\xb8\xfd\x8b\x9e'b'\x00\x05N\xb1y\x0b\xce7\xfe5\xcb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xca\xba'b'\x00\x05N\xb1y\x0b\xf7\xf7\xfe!\xcc\xff\x00L\x91\x9e\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xde\x8b'b'\x00\x05N\xb1y\x0cB\x08\xfe\x1cJ\x01\x01\xa3v\x83\x87\xb9QJ\x809\x02\xcd&8\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xad\x88'b'\x00\x05N\xb1y\x0cCL\xfe\x16M\x01\x01\x88S\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x08\xca'b'\x00\x05N\xb1y\x0cC\xa8\xfe\x16N\x01\x01\xc1q\xad\xe6<\r\x02^<\xa5\xef\xc69\xe0P\x89=\x00\x00\x00\x00?\x03\xef\x0c'b'\x00\x05N\xb1y\x0cD\x04\xfe\x15O\x01\x01$\x9ci\xe9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfc'b'\x00\x05N\xb1y\x0cD`\xfe\x16P\x01\x01#A\xd1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x001\x16'b'\x00\x05N\xb1y\x0cD\xbc\xfe\x1aQ\x01\x01\x1b0\xb8\xe9\x0e\x00\x00\x00\x00\x08\x007\x00\x15\xfc\xff\xff\xff\xff\x00\x00\t\x01\xad\xffk\x01\xad\x12'b'\x00\x05N\xb1y\x0cE\x14\xfe\x16R\x01\x01tV\xd1\x03\x00\t\x001\x00"\xfc\xff\xff\x04\x00\x00\x00\x04\x01\x9e\xff2\x02f\xcc'b'\x00\x05N\xb1y\x0cEl\xfe\x16S\x01\x01\x81V\xd1\x03\x00\x05\x00A\x00\x18\xfc\xfe\xff\x01\x00\xfc\xff%\x03\x81\x00q\x02w\x8f'b'\x00\x05N\xb1y\x0cE\xbc\xfe\x0eT\x01\x01\x1dV\xd1\x03\x00\xd3\xa6iD\x99\x99\xb1=F\x10k`'b'\x00\x05N\xb1y\x0cF\x0c\xfe\x0eU\x01\x01\x89V\xd1\x03\x00\x99\xe9iD\x00\x00\xc2>V\x15/\x0b'b'\x00\x05N\xb1y\x0cFh\xfe*V\x01\x01\x96s\xe7f\xbc\x14m\x01\x00F\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x08\xdd'b'\x00\x05N\xb1y\x0cF\xc4\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb3~'b'\x00\x05N\xb1y\x0cG\x18\xfe\x06X\x01\x01}\xc8\x14\x00\x00\x03\x00(\x91'b'\x00\x05N\xb1y\r\x1d?\xfe!\xcd\xff\x00L\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80?\x16\x00\x01\xfa\x009\n'b'\x00\x05N\xb1y\r\xbf\x87\xfe5\xce\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9b\x82'b'\x00\x05N\xb1y\r\xd5\x8f\xfe!\xcf\xff\x00L\x91\x9e\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x97|'b'\x00\x05N\xb1y\r\xf0\xf4\xfe\x04Y\x01\x01\x98\x00\x00\x80\x8a&\xd4'b'\x00\x05N\xb1y\r\xf1\xa4\xfe\x02Z\x01\x01*\x00\x00\x04j'b'\x00\x05N\xb1y\r\xf28\xfe\x1e[\x01\x01\x18\x98\xa2\xe8\x0e\x00\x00\x00\x00W\xa6\x02\x18\x13\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x83\x95'b'\x00\x05N\xb1y\r\xf2\xa4\xfe\x1a\\\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00I\x8b'b'\x00\x05N\xb1y\r\xf2\xfc\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V'b'\x00\x05N\xb1y\r\xf3P\xfe\x03^\x01\x01Ms\x00\x00D\xb3'b'\x00\x05N\xb1y\r\xf3\xf0\xfe\x14_\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x08\x00\x16\xaa'b'\x00\x05N\xb1y\r\xf4D\xfe\x03`\x01\x01M\x16\x00\x00r\x99'b"\x00\x05N\xb1y\x0e\x83c\xfe%\xd0\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x98\xf8"b'\x00\x05N\xb1y\x0f<\xec\xfe\x1ca\x01\x01!\xc4\xd1\x03\x00S\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\x00\x00\x00\x00\xa0\x04\r\xda'b'\x00\x05N\xb1y\x0f=|\xfe\x1cb\x01\x01 \xce\xd1\x03\x00\x1b\x91z\xbe\xc9\x98\x95?^\x88\xae>>\x9e\xc7\xbd90\x02;\xd4\xdd\xd9\xbb\x97\x95'b'\x00\x05N\xb1y\x0f=\xd4\xfe\x03c\x01\x01Ms\x00\x00\x11\xe4'b'\x00\x05N\xb1y\x0fR\xa8\xfe\x1cd\x01\x01\x1e\xf7\xd1\x03\x00\x9c\xef\x85\xbd\xc3r\x82;\x1a\xd5S>\x0f~\xdb\xbb@\xc6\x0e\xbc\x94_\x88;Z\xd7'b'\x00\x05N\xb1y\x0fS\x04\xfe\x18e\x01\x01\xb2\x08{\x88\xbd\xe0\xfd\r9U\x01Z>\x85{)DW\xa6\x02\x18\x14\xe8\xb8\xfdL\xd0'b'\x00\x05N\xb1y\x0fS\\\xfe\x1cf\x01\x01\xa3\xc7\xc3\x88\xb9\xb1\xc8\x809r%28\x00\x00\x00\x00\x00\x00\x00\x00}\xf6i<\xf5\x87{;\xd9\xb0'b'\x00\x05N\xb1y\x0fS\xb0\xfe\x03g\x01\x01\xa5\xc5\x14\x00(t'b'\x00\x05N\xb1y\x0fT\x08\xfe\x0ch\x01\x01\x02x-Ty\xb1N\x05\x00\x0b\xd2\x03\x00\xb4\x84'b'\x00\x05N\xb1y\x0fTX\xfe\x16i\x01\x01\x88R\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Z\x1b'b'\x00\x05N\xb1y\x0fT\xa8\xfe\x16j\x01\x01\xc1\x9b\xda\xac<\xf5j\xa3X\x15\x0e\x9a'b'\x00\x05N\xb1y\x10\xa1\xec\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00:\x01\xc4>\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x89L'b'\x00\x05N\xb1y\x10\xa2H\xfe\x06r\x01\x01}\xc5\x14\x00\x00\x03\x00eJ'b'\x00\x05N\xb1y\x10\xa2\x98\xfe\x04s\x01\x01\x98\x00\x00\x80\x8a/\xc7'b'\x00\x05N\xb1y\x10\xa2\xe0\xfe\x02t\x01\x01*\x00\x00\xa6\x8f'b'\x00\x05N\xb1y\x10\xa38\xfe\x1eu\x01\x01\x18\xa0e\xeb\x0e\x00\x00\x00\x00W\xa6\x02\x18\x14\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c&I'b'\x00\x05N\xb1y\x10\xa3\x90\xfe\x1av\x01\x01>\x99\x99y\xc0\xe1z\x14\xbf)#\xb8=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xb7\x00\x00\x00\xb4\x0f'b'\x00\x05N\xb1y\x10\xa3\xe4\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5'b'\x00\x05N\xb1y\x10\xa44\xfe\x15x\x01\x01$a\xb4\xed\x0ei\x04\xa8\x04]\x04\xaf\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xba'b'\x00\x05N\xb1y\x10\xa4\x84\xfe\x16y\x01\x01#[\xd2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd0\x85'b'\x00\x05N\xb1y\x10\xa4\xcc\xfe\x03z\x01\x01Ms\x00\x00j\x13'b'\x00\x05N\xb1y\x11\x8cO\xfe5\xd3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb2\x04'b'\x00\x05N\xb1y\x11\xde\x03\xfe!\xd4\xff\x00LS\xb1\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9cN'b'\x00\x05N\xb1y\x12Rl\xfe\x14{\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x0f\x00\x9f\xb8'b'\x00\x05N\xb1y\x12S\x00\xfe\x1c|\x01\x01!\x8e\xd2\x03\x00R\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\x00\x00\x00\x00\xa1\x04*\x1e'b'\x00\x05N\xb1y\x12St\xfe\x1c}\x01\x01 \xd4\xd2\x03\x00\xddV\x81\xbe\x04\xbc\x95?\x87&\xaf>\xa6\x93\xc7\xbd\xfe\x03\xbe\xba\xd2\x91L\xba\xf5\xf1'b'\x00\x05N\xb1y\x12S\xc8\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b'\x00\x05N\xb1y\x13\x9d\xab\xfe5\xd5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01,+'b'\x00\x05N\xb1y\x13\xd7\xe7\xfe!\xd6\xff\x00LS\xb1\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1d\x13'b'\x00\x05N\xb1y\x13\xd8\xf0\xfe\x1c\x7f\x01\x01\x1e\xfc\xd2\x03\x0087\x87\xbd\xcf\x10\x9e;[\xd4S>\x89\xb5\x15\xbcx\xe3\t\xbb\xdc\xbd\t3c)DW\xa6\x02\x18\x14\xe8\xb8\xfd\x07\x94'b'\x00\x05N\xb1y\x13\xd9\xd0\xfe\x1c\x81\x01\x01\xa3\xc9\x02\x8a\xb9=\x1f\x819\xac\xc1=8\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x1aM<\x8c\xba\x87;\xd0\xbd'b'\x00\x05N\xb1y\x13\xda\x1c\xfe\x03\x82\x01\x01\xa5\xc5\x14\x00\xaa\xfb'b'\x00\x05N\xb1y\x13\xdah\xfe\x0c\x83\x01\x01\x02\x00)Xy\xb1N\x05\x00\x11\xd3\x03\x00\x00\xe3'b'\x00\x05N\xb1y\x13\xda\xbc\xfe\x16\x84\x01\x01\x88R\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x17\xc6'b'\x00\x05N\xb1y\x13\xdb\x10\xfe\x16\x85\x01\x01\xc1\xc6]\xd8G\x101%'b'\x00\x05N\xb1y\x13\xdc\xe4\xfe\x0e\x8b\x01\x01\x898\xd3\x03\x00\x89\xeeiD\xe1z\xe9>X\x15U\xaf'b'\x00\x05N\xb1y\x13\xdd<\xfe\x1f\x8c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xae\x00\xc4>[\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T]\xc2'b'\x00\x05N\xb1y\x13\xdd\x90\xfe\x06\x8d\x01\x01}\xc6\x14\x00\x00\x03\x00\x962'b'\x00\x05N\xb1y\x13\xdd\xdc\xfe\x04\x8e\x01\x01\x98\x00\x00\x80\x8a\xe4\xe0'b'\x00\x05N\xb1y\x13\xde$\xfe\x02\x8f\x01\x01*\x00\x00un'b'\x00\x05N\xb1y\x13\xdex\xfe\x1e\x90\x01\x01\x18\xb0z\xee\x0e\x00\x00\x00\x00V\xa6\x02\x18\x14\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cK\xf7'b'\x00\x05N\xb1y\x13\xde\xcc\xfe\x1a\x91\x01\x01>=\nw\xc0\xf6(\x1c\xbf\x01\xa3~>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xb2\x00\x00\x00O?'b'\x00\x05N\xb1y\x13\xdf\x18\xfe\x08\x92\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00y\xc6'b'\x00\x05N\xb1y\x15=\xc8\xfe\x15\x93\x01\x01$G\xb2\xf1\x0e\xf8\x04\xf5\x04\xd7\x04+\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaaX'b'\x00\x05N\xb1y\x15>d\xfe\x16\x94\x01\x01#`\xd3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbfa'b'\x00\x05N\xb1y\x15>\xb4\xfe\x03\x95\x01\x01Ms\x00\x00;\xba'b'\x00\x05N\xb1y\x15SH\xfe\x12\x96\x01\x01\xfcr\xd3\x03\x004\x00\x01\x00ARMMASK\x00Wr\xc0\xb4'b'\x00\x05N\xb1y\x15S\xb0\xfe\t\x97\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xfe\xa9'b'\x00\x05N\xb1y\x15T\x10\xfe\t\xde\n\x00m\x02\x00\x00\x00\x00\xcf\x00\x00\x00\x1e\xc7'b'\x00\x05N\xb1y\x15Td\xfe\x14\x98\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x17\x00X\x84'b'\x00\x05N\xb1y\x15\x90O\xfe5\xd7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa9\xc9'b'\x00\x05N\xb1y\x15\xe2+\xfe!\xd8\xff\x00L\xb4\xb5\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x003&'b'\x00\x05N\xb1y\x16\xe3\xc0\xfe\x1c\x99\x01\x01!W\xd3\x03\x00Q\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\xff\xff\x00\x00\xa0\x04y\x96\xc3\xbd^.9\xbc3\xa8\xb8\xbbJ\xb8'b'\x00\x05N\xb1y\x16\xe4\xd0\xfe\x03\x9b\x01\x01Ms\x00\x006\x8a'b'\x00\x05N\xb1y\x16\xf9d\xfe\x1c\x9c\x01\x01\x1e\x02\xd4\x03\x00\x89\xd1\x88\xbdA1\xab;\xaf>T>\xff\xc8\x81\xbbw\x933\xbc\x10\xdd\x85<|\xe1'b"\x00\x05N\xb1y\x16\xf9\xc8\xfe\x18\x9d\x01\x01\xb2\xda+\x8b\xbd\xb3R\xa5:\xb4xZ>\n')DV\xa6\x02\x18\x14\xe8\xb8\xfd\x11\xec"b'\x00\x05N\xb1y\x16\xfa\x1c\xfe\x1c\x9e\x01\x01\xa3O@\x8b\xb9\xf5N\x819}\x05J8\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xfcD<\x04V\xc4;e\xa6'b'\x00\x05N\xb1y\x16\xfa`\xfe\x03\x9f\x01\x01\xa5\xc6\x14\x00\xc2?'b'\x00\x05N\xb1y\x16\xfa\xa8\xfe\x0c\xa0\x01\x01\x02\xf0f\\y\xb1N\x05\x00\x16\xd4\x03\x00\xecn'b'\x00\x05N\xb1y\x16\xfa\xfc\xfe\x16\xa1\x01\x01\x88Q\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8e^'b'\x00\x05N\xb1y\x16\xfbL\xfe\x16\xa2\x01\x01\xc1a~\x96G\x10\xf2\xb3'b'\x00\x05N\xb1y\x18t\x1c\xfe\x0e\xa7\x01\x01\x89*\xd4\x03\x00E\xf4iD\x14\xae\x0b?Y\x15:\xe5'b'\x00\x05N\xb1y\x18tt\xfe\x1f\xa8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00C\x00\xc4>\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TU\xf0'b'\x00\x05N\xb1y\x18t\xcc\xfe\x06\xa9\x01\x01}\xb5\x14\x00\x00\x03\x00k7'b'\x00\x05N\xb1y\x18u\x14\xfe\x04\xaa\x01\x01\x98\x00\x00\x80\x8a8('b'\x00\x05N\xb1y\x18uX\xfe\x02\xab\x01\x01*\x00\x00\x80b'b'\x00\x05N\xb1y\x18u\xac\xfe\x1e\xac\x01\x01\x18\x00\x9d\xf4\x0e\x00\x00\x00\x00U\xa6\x02\x18\x15\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x97\xee'b'\x00\x05N\xb1y\x18v\x04\xfe\x1a\xad\x01\x01>\\\x8fr\xc0\xa4p=\xbf\x02\xd3\xdc>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xa9\x00\x00\x00\xaas'b'\x00\x05N\xb1y\x18vL\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12'b'\x00\x05N\xb1y\x18v\x9c\xfe\x15\xaf\x01\x01$\xc3\xb0\xf5\x0eq\x05\x93\x05\x80\x05\xa6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xaa'b'\x00\x05N\xb1y\x18v\xec\xfe\x16\xb0\x01\x01#f\xd4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x01S'b'\x00\x05N\xb1y\x18w4\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a'b'\x00\x05N\xb1y\x19\xcb\x8f\xfe5\xdc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01AL'b'\x00\x05N\xb1y\x19\xe8\x8c\xfe\x14\xb2\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\n\xd7#<\x0b\x00%\x00\xd3\xf2'b'\x00\x05N\xb1y\x19\xe98\xfe\x1c\xb3\x01\x01! \xd4\x03\x00P\xa6\x02\x18\x12\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf7\xff\xfd\xff\x01\x00\xa1\x04+Z'b'\x00\x05N\xb1y\x19\xe9\xd4\xfe\x1c\xb4\x01\x01 \xdf\xd4\x03\x00\x85\x96\x8a\xbe\xb0\x9a\x95?\x91I\xad>\x7f\xe4\xcb\xbd\xb2i\x1b\xbdAv\xa0\xbc\x88\xf2'b'\x00\x05N\xb1y\x1a\x11?\xfe!\xdd\xff\x00LO\x02\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x81\x98'b'\x00\x05N\xb1y\x1bf\x84\xfe\x1c\xb5\x01\x01\x1e\x08\xd5\x03\x00W\x13\xa7\xbd=e\x8e;f\xb2S>\xf1p9\xbeu\x18\xb7\xbc\x94\\\xc4\xba\xc8\t'b'\x00\x05N\xb1y\x1bg\x0c\xfe\x18\xb6\x01\x01\xb2\xc2L\xa5\xbd@\xeb\xbf8\x1d#Z>\xeb\x91(DU\xa6\x02\x18\x15\xe8\xb8\xfd\xcc\xef'b'\x00\x05N\xb1y\x1bgd\xfe\x03\xb7\x01\x01Ms\x00\x00\xa4\x07'b'\x00\x05N\xb1y\x1b|4\xfe\x1a\xb8\x01\x01\x1b\xdes\xf8\x0e\x00\x00\x00\x00\x02\x00(\x00\xf6\xfbK\xff\xec\xff\t\x00\x07\x01\xa4\xffe\x01]\xb7'b'\x00\x05N\xb1y\x1b|\xf4\xfe\x16\xb9\x01\x01t\x1b\xd5\x03\x00\x02\x00/\x00\xfc\xfbI\xff\x00\x00\x05\x00\xfa\x00M\xff\x05\x02pl'b'\x00\x05N\xb1y\x1b}\\\xfe\x16\xba\x01\x01\x81\x1b\xd5\x03\x00\xff\xff0\x00\xf8\xfbY\xff\x08\x00\x00\x00\x1c\x03.\x00r\x024\x07'b'\x00\x05N\xb1y\x1b}\xb8\xfe\x0e\xbb\x01\x01\x1d\x1b\xd5\x03\x00.\xc0iDp=\xf7>G\x10\xda\x83'b'\x00\x05N\xb1y\x1b~\x10\xfe\x0e\xbc\x01\x01\x89\x1b\xd5\x03\x004\x04jD\x85kK?Y\x15\xe9i'b'\x00\x05N\xb1y\x1b~t\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xc0\x00\xc4>4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x809'b'\x00\x05N\xb1y\x1b~\xe0\xfe\x06\xbe\x01\x01}\xc2\x14\x00\x00\x03\x00\x9c0'b'\x00\x05N\xb1y\x1b\x7f<\xfe\x04\xbf\x01\x01\x98\x00\x00\x80\x8a\xb4\xa5'b'\x00\x05N\xb1y\x1b\x7f\x90\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0'b'\x00\x05N\xb1y\x1b\x7f\xf0\xfe\x1e\xc1\x01\x01\x18(\xae\xf7\x0e\x00\x00\x00\x00U\xa6\x02\x18\x15\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cdT'b'\x00\x05N\xb1y\x1b\x80L\xfe\x1a\xc2\x01\x01>33c\xc0\xf5(\\\xbf\x8d\x8c"?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8b\x00\x00\x00g\xcb'b'\x00\x05N\xb1y\x1b\x80\xa0\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa'b'\x00\x05N\xb1y\x1b\x80\xf8\xfe\x1c\xc4\x01\x01\xa3M\x89\x8c\xb9V;\x819^\x8bX8\x00\x00\x00\x00\x00\x00\x00\x00n\xa3?<\xa4\xb12<\x01\xaf'b'\x00\x05N\xb1y\x1b\x81<\xfe\x03\xc5\x01\x01\xa5\xbd\x14\x00\xc8\xbd'b'\x00\x05N\xb1y\x1b\x81\x84\xfe\x0c\xc6\x01\x01\x02\x90^`y\xb1N\x05\x00/\xd5\x03\x00\xc36'b'\x00\x05N\xb1y\x1b\x81\xf0\xfe\x16\xc7\x01\x01\x88P\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x18\x18'b'\x00\x05N\xb1y\x1b\x82<\xfe\x16\xc8\x01\x01\xc1\x8e\xb1\xa9<23\xb7<\x89Q\xd09o\xbc\x8b=\x00\x00\x00\x00?\x03b"'b'\x00\x05N\xb1y\x1b\xc7\xdb\xfe5\xde\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc4\xae'b'\x00\x05N\xb1y\x1b\xf2\xb3\xfe!\xdf\xff\x00L`\x96\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf8\xee'b'\x00\x05N\xb1y\x1c\xfc\x9c\xfe\x15\xc9\x01\x01$\xe9\xae\xf9\x0e\x05\x06!\x06\x06\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf"'b'\x00\x05N\xb1y\x1c\xfd`\xfe\x16\xca\x01\x01#l\xd5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\n\x8f'b'\x00\x05N\xb1y\x1c\xfd\xdc\xfe\x03\xcb\x01\x01Ms\x00\x00\xbf\xb4'b'\x00\x05N\xb1y\x1d\xd5\x7f\xfe5\xe0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9cg'b'\x00\x05N\xb1y\x1d\xd7\xeb\xfe!\xe1\xff\x00L`\x96\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x01z'b'\x00\x05N\xb1y\x1e\x8f\xb4\xfe\x14\xcc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\n\xd7#>\x0b\x001\x00\xb2\xf8'b'\x00\x05N\xb1y\x1e\x90H\xfe\x1c\xcd\x01\x01!\xb2\xd5\x03\x00P\xa6\x02\x18\x10\xe8\xb8\xfd\x9a[\n\x00\n\x00\x00\x00\xfa\xff\xee\xff\x17\x00\x99\x04\xc6\xbc'b'\x00\x05N\xb1y\x1e\x90\xc0\xfe\x1c\xce\x01\x01 \xe4\xd5\x03\x00\x87F\x8e\xbef\xd9\x92?<%\x9f>v\x9bx\xbd\x8a\xf6@\xbe\x80\xabn\xbe\xc1Y'b'\x00\x05N\xb1y\x1e\x91\x18\xfe\x03\xcf\x01\x01Ms\x00\x00a\xa2'b'\x00\x05N\xb1y\x1e\x91\xa4\xfe\x1a\xd0\x01\x01\x1b\xfe \xfc\x0e\x00\x00\x00\x00\xfa\xff\xfa\xff\xa8\xfb\x96\x00\xbb\xff\xeb\xff\x0b\x01\x9c\xff`\x01\xa8J'b'\x00\x05N\xb1y\x1e\x92\x04\xfe\x16\xd1\x01\x01t\x0c\xd6\x03\x00\xf7\xff\x03\x00\xa8\xfb\x91\x00\xc1\xff\xf3\xff\x02\x015\xff\xf8\x01\xe2\x0c'b'\x00\x05N\xb1y\x1e\x92d\xfe\x16\xd2\x01\x01\x81\x0c\xd6\x03\x00\xf8\xff\x0b\x00\x94\xfb\x8e\x00\xb3\xff\xed\xff*\x03\r\x00m\x02u\x1e'b'\x00\x05N\xb1y\x1e\x92\xbc\xfe\x0e\xd3\x01\x01\x1d\x0c\xd6\x03\x00"\xc8iD\xa4p\x1b?G\x10\xfd\x8f'b'\x00\x05N\xb1y\x1e\x93\x10\xfe\x0e\xd4\x01\x01\x89\x0c\xd6\x03\x00\x9d\rjD\\\x0fq?Z\x15\x90\x8b'b'\x00\x05N\xb1y\x1e\x93t\xfe\x1f\xd5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x00q=\xb3\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TD\xde'b'\x00\x05N\xb1y\x1e\x93\xd0\xfe\x06\xd6\x01\x01}\xc2\x14\x00\x00\x03\x00\xb9\xa3'b'\x00\x05N\xb1y\x1e\x94(\xfe\x04\xd7\x01\x01\x98\x00\x00\x80\x8a$\xcb'b'\x00\x05N\xb1y\x1e\x94x\xfe\x02\xd8\x01\x01*\x00\x00\xa2\xdb'b"\x00\x05N\xb1y\x1e\xc5\x97\xfe%\xe2\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00o;"b'\x00\x05N\xb1y\x1f\x90?\xfe5\xe3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Sp'b'\x00\x05N\xb1y\x1f\xa6[\xfe!\xe4\xff\x00L`\x96\x94A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcbk'b'\x00\x05N\xb1y \x01\xec\xfe\x1e\xd9\x01\x01\x18P\xbf\xfa\x0e\x00\x00\x00\x00T\xa6\x02\x18\x15\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cO/'b'\x00\x05N\xb1y \x02\xa0\xfe\x1a\xda\x01\x01>\x85\xeb\xf1\xbf{\x14n\xbf.\xe4N?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00`\x00\x00\x00W\x11'b'\x00\x05N\xb1y \x03\x18\xfe\x08\xdb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xed\x8d'b'\x00\x05N\xb1y \x03\x94\xfe\x1c\xdc\x01\x01\x1e \xd6\x03\x00\x98\x1a\xa1\xbd>\xc0\xf6\xbc\xa3)R>Y\xb81>\xf5C\xd1\xbd\xce\xbb\x17\xbd\x93<'b'\x00\x05N\xb1y \x04\x08\xfe\x18\xdd\x01\x01\xb2B\x05\xa9\xbd92\x08\xbd\x8b2X>\xaeG(DT\xa6\x02\x18\x15\xe8\xb8\xfd\xd7\x02'b'\x00\x05N\xb1y \x04l\xfe\x1c\xde\x01\x01\xa3\x14\xbf\x8d\xb9g\xf5\x809\xbc\xf0g8\x00\x00\x00\x00\x00\x00\x00\x00\xba}1\x0b\x003\x00\xacv'b'\x00\x05N\xb1y#$D\xfe\x03\xe8\x01\x01Ms\x00\x00\x9f\x88'b'\x00\x05N\xb1y#8\xfc\xfe\x1c\xe9\x01\x01!z\xd6\x03\x00Q\xa6\x02\x18\x08\xe8\xb8\xfd\xfe[\n\x00n\x00\x00\x00\x07\x00\xe0\xff6\x00\x85\x04\x19\xf1'b'\x00\x05N\xb1y#9p\xfe\x1c\xea\x01\x01 \xe9\xd6\x03\x00\x86{\x84\xbe\x0b\xad\x8a?\x8d\x86X>\xf8H\xa2=\xe4?\xa8\xbe\xf2\xab\x0b\xbf\xe5<'b'\x00\x05N\xb1y#9\xcc\xfe\x1a\xeb\x01\x01\x1b\x9a\xcf\xff\x0e\x00\x00\x00\x00\x15\x00\xfc\xff\xb5\xfb\xf2\x00\xfa\xff\xf4\xff\x16\x01\xaf\xffZ\x01\xee\xb2'b'\x00\x05N\xb1y#: \xfe\x16\xec\x01\x01t\xfd\xd6\x03\x00\x19\x00\r\x00\xbf\xfb\xe3\x00\x03\x00\t\x00\x0c\x01J\xff\xf5\x01\xd7g'b'\x00\x05N\xb1y#:x\xfe\x16\xed\x01\x01\x81\xfd\xd6\x03\x00\x0f\x00\x0f\x00\xb7\xfb\xb6\x00\x03\x00\x14\x001\x03\x0c\x00\x85\x02\xcf\x84'b'\x00\x05N\xb1y#:\xc4\xfe\x0e\xee\x01\x01\x1d\xfd\xd6\x03\x00&\xbbiD\x00\x00\xcf>H\x10g\xb2'b'\x00\x05N\xb1y#;\x10\xfe\x0e\xef\x01\x01\x89\xfd\xd6\x03\x00\x14\xfeiD\x85\xeb2?Z\x15\x03\xa4'b'\x00\x05N\xb1y#;h\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00+\x01q=t\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0b$'b'\x00\x05N\xb1y#;\xb8\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&'b'\x00\x05N\xb1y#<\x04\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N'b'\x00\x05N\xb1y#33\xb3>\x8f\xc2\xf5\xbc\x9b!Z?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00j\x00\x00\x00\x97?'b'\x00\x05N\xb1y#=`\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\x00\x05N\xb1y#=\xb0\xfe\x1c\xf7\x01\x01\x1e%\xd7\x03\x00^\xad\xd1\xbc\x03\xd9\x1d\xbd\xc2\x88O>\x8e\x18y>E\x1b|<\xa8\x90\xbe:\x15\xb7'b'\x00\x05N\xb1y#>\x00\xfe\x18\xf8\x01\x01\xb2\\\xae\xf3\xbc)\xe61\xbda\xbcT>G\xc1(DT\xa6\x02\x18\x13\xe8\xb8\xfdO\xc4'b"\x00\x05N\xb1y#>P\xfe\x1c\xf9\x01\x01\xa37\xf8\x8e\xb9\x91m\x8099\xf6y8\x00\x00\x00\x00\x00\x00\x00\x00'\x88)<\xbc\x1c\xeb<\xb2\xa7"b'\x00\x05N\xb1y#>\x94\xfe\x03\xfa\x01\x01\xa5\xc6\x14\x00\xa2{'b'\x00\x05N\xb1y#>\xd8\xfe\x0c\xfb\x01\x01\x02\xf0\x9bhy\xb1N\x05\x009\xd7\x03\x00\xddZ'b'\x00\x05N\xb1y#?(\xfe\x16\xfc\x01\x01\x88S\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Rw'b'\x00\x05N\xb1y#?p\xfe\x12\xfd\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xe7n'b'\x00\x05N\xb1y#?\xbc\xfe\x16\xfe\x01\x01\xc1\xb6\x1d\xf1<\xa0_\xbc<\xc3\x0cA;OY\xa7=\x00\x00\x00\x00?\x03qi'b'\x00\x05N\xb1y#U\xaf\xfe5\xe7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01H\xbd'b'\x00\x05N\xb1y#k\xaf\xfe!\xe8\xff\x00LG\x88\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9c\xff'b'\x00\x05N\xb1y$\xec0\xfe\x12\x00\x01\x01\xfc`\xd7\x03\x004\x00\x01\x00ARMMASK\x00Wr\xde='b'\x00\x05N\xb1y$\xec\xa4\xfe\t\x01\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\x9a\xf7'b'\x00\x05N\xb1y$\xed\x04\xfe\t\xdf\n\x00m\x00\x00\x00\x00\x00\xd7\x00\x00\x00\xda\x0f'b'\x00\x05N\xb1y$\xedL\xfe\x03\x02\x01\x01Ms\x00\x00\xaf\xb6'b'\x00\x05N\xb1y%\x15\xdc\xfe\x15\x03\x01\x01$\xab\xa6\x01\x0f<\x06\xf6\x05\x1d\x06\xfa\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00]\xff'b'\x00\x05N\xb1y%\x17\xfc\xfe\x16\x04\x01\x01#v\xd7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\tN'b'\x00\x05N\xb1y%0W\xfe5\xe9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf1\x00'b'\x00\x05N\xb1y%Z\xcb\xfe!\xea\xff\x00L\xdaG\x91A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x16R'b'\x00\x05N\xb1y&\xb3\xb0\xfe\x14\x05\x01\x01J\xcc\xccL>\xcc\xccL>\xaeGa>=\n\x17?\x0b\x001\x00\x934'b'\x00\x05N\xb1y&\xb40\xfe\x03\x06\x01\x01Ms\x00\x00q\xa0'b'\x00\x05N\xb1y&\xb4\xd0\xfe\x1a\x07\x01\x01\x1b\x13~\x03\x0f\x00\x00\x00\x00\x1f\x00\xf0\xff3\xfc\x95\x00\x83\x00"\x00\x19\x01\xbf\xff]\x01e{'b'\x00\x05N\xb1y&\xb5,\xfe\x16\x08\x01\x01t\xef\xd7\x03\x00 \x00\xf8\xff;\xfc\x90\x00\x83\x00\x17\x00\x0c\x01]\xff\xfe\x01P\xc0'b'\x00\x05N\xb1y&\xb5\x84\xfe\x16\t\x01\x01\x81\xef\xd7\x03\x00\x12\x00\xff\xff/\xfc\xab\x00^\x00\x11\x00E\x03*\x00w\x02\xde\x95'b'\x00\x05N\xb1y&\xb5\xf0\xfe\x0e\n\x01\x01\x1d\xef\xd7\x03\x00\x9d\xabiD\xa4p%>H\x10_\xe2'b'\x00\x05N\xb1y&\xb6T\xfe\x0e\x0b\x01\x01\x89\xef\xd7\x03\x00\xfd\xeeiD\xb8\x1e\xed>[\x15s4'b'\x00\x05N\xb1y&\xb6\xc4\xfe\x1f\x0c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb0\x00q=\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf8\xe7'b'\x00\x05N\xb1y&\xb7,\xfe\x06\r\x01\x01}\xcb\x14\x00\x00\x03\x00\xc2\x8e'b'\x00\x05N\xb1y&\xb7\xa4\xfe\x04\x0e\x01\x01\x98\x00\x00\x80\x8a3$'b'\x00\x05N\xb1y&\xb8\x04\xfe\x02\x0f\x01\x01*\x00\x00h\xe8'b'\x00\x05N\xb1y&\xb8p\xfe\x1e\x10\x01\x01\x18\xb8\xdd\x00\x0f\x00\x00\x00\x00X\xa6\x02\x18\x08\xe8\xb8\xfd\x02g\n\x00F\x00\xff\xff\x13\x00|J\x03\x0c\xcaJ'b'\x00\x05N\xb1y&\xb8\xdc\xfe\x1a\x11\x01\x01>\xf5(\xfc?ff\xc6?\x17+;?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00t\x00\x00\x005\x1e'b'\x00\x05N\xb1y&\xb98\xfe\x08\x12\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00'b'\x00\x05N\xb1y&\xb9\xa4\xfe\x1c\x13\x01\x01!C\xd7\x03\x00W\xa6\x02\x18\xfe\xe7\xb8\xfd\x8a\\\n\x00\xfa\x00\x00\x00\x15\x00\xdf\xff:\x00\x99\x04g\xe5'b'\x00\x05N\xb1y&\xba\x04\xfe\x1c\x14\x01\x01 \x03\xd8\x03\x00H\xc6H\xbe3\x84\x7f?\x8d\xca\x8e=j\x91^>\x82\xcc\xad\xbe)\x8e\x16\xbfvX'b'\x00\x05N\xb1y&\xd0+\xfe\t\xeb\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf2\xd3'b"\x00\x05N\xb1y'E\xeb\xfe5\xec\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa08"b"\x00\x05N\xb1y'[\xfb\xfe!\xed\xff\x00L\xdaG\x91A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00]\x1e"b'\x00\x05N\xb1y(\x16\xe4\xfe\x1c\x15\x01\x01\x1e,\xd8\x03\x00i%`<\x10*\xa0\xbc\x94\x11S>\x8em\x06>\xfb&,>\xa3\x8ez;\xc2\xb1'b'\x00\x05N\xb1y(\x17\xac\xfe\x18\x16\x01\x01\xb2\xc6\xfd9<\x89x\xd8\xbc\x03\tX>Rx)DX\xa6\x02\x18\x08\xe8\xb8\xfd1\xdb'b'\x00\x05N\xb1y(\x18 \xfe\x1c\x17\x01\x01\xa3p\x0e\x90\xb9\x97*\x7f9\xc3`\x878\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\x98=\n\xd7>33\xb3>\x85\xeb\x11?\x0c\x001\x00\x9a\x05'b'\x00\x05N\xb1y)\xbe\xb0\xfe\x1a \x01\x01\x1b\xfc-\x07\x0f\x00\x00\x00\x00\x03\x00\xe5\xff%\xfc(\x00\x86\x00\x00\x00\x15\x01\xc6\xffa\x01\xa1m'b'\x00\x05N\xb1y)\xbf\x14\xfe\x16!\x01\x01t\xe0\xd8\x03\x00\x08\x00\xf9\xff0\xfc\x10\x00\x88\x00\x13\x00\x02\x01a\xff\x02\x02\xf1\xa0'b'\x00\x05N\xb1y)\xbfx\xfe\x16"\x01\x01\x81\xe0\xd8\x03\x00\x00\x00\x00\x00$\xfc\n\x00\x8e\x00\x07\x00\x1c\x03E\x00g\x02\xa5\x85'b'\x00\x05N\xb1y)\xbf\xcc\xfe\x0e#\x01\x01\x1d\xe0\xd8\x03\x00\xab\xa5iD\xd7\xa3\x8c=H\x10\xeb\x84'b'\x00\x05N\xb1y)\xc0 \xfe\x0e$\x01\x01\x89\xe0\xd8\x03\x00=\xeaiD\xb8\x1e\xc7>[\x15Kk'b'\x00\x05N\xb1y)\xc0\x84\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1b\x01q=\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\xef'b'\x00\x05N\xb1y)\xc0\xe4\xfe\x06&\x01\x01}\xc5\x14\x00\x00\x03\x00p\xa8'b"\x00\x05N\xb1y)\xc14\xfe\x04'\x01\x01\x98\x00\x00\x80\x8a=\xe1"b'\x00\x05N\xb1y)\xc1\x88\xfe\x02(\x01\x01*\x00\x00\xf3L'b'\x00\x05N\xb1y)\xc1\xd8\xfe\x03)\x01\x01Ms\x00\x003\xa7'b'\x00\x05N\xb1y)\xd6T\xfe\x1e*\x01\x01\x18\xf0\x03\x07\x0f\x00\x00\x00\x00\\\xa6\x02\x18\x02\xe8\xb8\xfdfg\n\x00F\x00\xff\xff*\x00\x82s\x03\x0c\\\xba'b'\x00\x05N\xb1y)\xd6\xc0\xfe\x1a+\x01\x01>ff6@\xd7\xa3@@\x8f\xeb\x1d?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00|\x00\x00\x00\\G'b'\x00\x05N\xb1y+&H\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf'b'\x00\x05N\xb1y+&\xd0\xfe\x1c-\x01\x01!\xd6\xd8\x03\x00_\xa6\x02\x18\xf5\xe7\xb8\xfd\x02]\n\x00r\x01\x00\x00\x17\x00\xe3\xff8\x00\xc2\x04W\x08'b"\x00\x05N\xb1y+'D\xfe\x1c.\x01\x01 \t\xd9\x03\x00\x84?\xde\xbdg\x8bk?\x8e\xdcZ\xbd\x18\xebp>n\xb9\x97\xbet\x1b\x10\xbf6f"b"\x00\x05N\xb1y+'\xa4\xfe\x1c/\x01\x01\x1e0\xd9\x03\x00\n)\xeb\xb7j\xff<\xf0,\x04>)\x9b\xe8\xbb\x99\xdd"b"\x00\x05N\xb1y+'\xfc\xfe\x180\x01\x01\xb2\xad\xf6\xe1<+t\x9d<\x06z_>)\x8c)D\\\xa6\x02\x18\x02\xe8\xb8\xfd\xff\x08"b'\x00\x05N\xb1y+(X\xfe\x1c1\x01\x01\xa3b/\x91\xb9[\xaf|9\x0bL\x928\x00\x00\x00\x00\x00\x00\x00\x00\x02\xe8\xb9<\xba{\xb0<\xd0<'b'\x00\x05N\xb1y+(\xbc\xfe\x032\x01\x01\xa5\xc8\x14\x00OV'b'\x00\x05N\xb1y+)\x1c\xfe\x0c3\x01\x01\x020\x8bpy\xb1N\x05\x00D\xd9\x03\x00(\x04'b'\x00\x05N\xb1y+)\x88\xfe\x164\x01\x01\x88`\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb7\xac'b'\x00\x05N\xb1y+)\xf0\xfe\x165\x01\x01\xc1E\xc0\xc0<\xe2\xce\xe0<\xa1\x8c\x14[\x15]\xf6'b'\x00\x05N\xb1y.,\x10\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00A\x01\x19=K\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\xa5'b'\x00\x05N\xb1y.,`\xfe\x06?\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e0'b'\x00\x05N\xb1y.,\xac\xfe\x04@\x01\x01\x98\x00\x00\x80\x8a\x85\x19'b'\x00\x05N\xb1y.,\xf0\xfe\x02A\x01\x01*\x00\x00O\xa9'b'\x00\x05N\xb1y.-D\xfe\x1eB\x01\x01\x18\x18\x15\n\x0f\x00\x00\x00\x00a\xa6\x02\x18\xfc\xe7\xb8\xfd\xc0g\n\x00F\x00\xff\xff3\x00\xe0y\x03\x0c\x92\x86'b'\x00\x05N\xb1y.-\x98\xfe\x1aC\x01\x01>\xcc\xccL@\xd7\xa3P@\x87\xa0\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x7f\x00\x00\x00y{'b'\x00\x05N\xb1y.-\xdc\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$'b'\x00\x05N\xb1y..,\xfe\x14E\x01\x01J\\\x8f\x02?\\\x8f\x02?\xd7\xa3\xf0>\\\x8f\x02?\x0c\x001\x00\xae\x1a'b'\x00\x05N\xb1y..p\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b'\x00\x05N\xb1y.B\xc8\xfe\x1cG\x01\x01!\x9f\xd9\x03\x00e\xa6\x02\x18\xed\xe7\xb8\xfdz]\n\x00\xea\x01\x00\x00\x11\x00\xe6\xff3\x00\xcb\x04;\x85'b'\x00\x05N\xb1y.C0\xfe\x1cH\x01\x01 \r\xda\x03\x00\xb9\x9c\x08\xbd\xc5fZ?aI,\xbePF0>Es\x87\xbe\x8a\x00\x03\xbf\xcd\x85'b"\x00\x05N\xb1y.\xef'\xfe%\xf4\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xde\x96"b'\x00\x05N\xb1y.\xf1s\xfe5\xf5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x92s'b'\x00\x05N\xb1y/\t\x1f\xfe!\xf6\xff\x00L\t\xf2\x98A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00v\x12'b'\x00\x05N\xb1y/\xa2\xf8\xfe\x1cI\x01\x01\x1e5\xda\x03\x00\xc6\xa9\x10=\xeeq\x1d=\xd9\xdd[>\x10\xc1|=\xdb\xa7\x15=-\xfb+<\x12h'b'\x00\x05N\xb1y/\xa3t\xfe\x18J\x01\x01\xb2q\xee\t=n\xf3\t=\xf4\xa9`>\xae\xb7)Da\xa6\x02\x18\xfc\xe7\xb8\xfd\x93P'b'\x00\x05N\xb1y/\xa3\xd8\xfe\x1cK\x01\x01\xa30Y\x92\xb9\xd3qy9\xda>\x9d8\x00\x00\x00\x00\x00\x00\x00\x00\xee\x9a\xf6<\xdd\xf7T<\xac\x9a'b'\x00\x05N\xb1y/\xa4$\xfe\x03L\x01\x01\xa5\xc8\x14\x00;\xee'b'\x00\x05N\xb1y/\xa4x\xfe\x0cM\x01\x01\x02\xd0\x82ty\xb1N\x05\x00J\xda\x03\x00\x1f['b"\x00\x05N\xb1y/\xa4\xd0\xfe\x16N\x01\x01\x88g\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00'\xcf"b'\x00\x05N\xb1y/\xa5H\xfe\x16O\x01\x01\xc1^`)=in\xce<\xdd\x1ed;\xb9\xabn<\x00\x00\x00\x00?\x03\xcc\xa7'b'\x00\x05N\xb1y/\xa5\xbc\xfe\x03P\x01\x01/\xff\x00\x00\x9f\xfb'b'\x00\x05N\xb1y/\xba\x9c\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02'b'\x00\x05N\xb1y0\xe0\xe3\xfe5\xf7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x17\x91'b'\x00\x05N\xb1y1\x0c\x03\xfe!\xf8\xff\x00L-\xc2\x99A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00q\xb3'b'\x00\x05N\xb1y13\x08\xfe\x15R\x01\x01$\x1b\x9c\r\x0f\xee\x05\xff\x05@\x06\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xb9'b'\x00\x05N\xb1y13x\xfe\x16S\x01\x01#\x86\xda\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1bl'b'\x00\x05N\xb1y13\xd8\xfe\x1aT\x01\x01\x1bl\x86\x0e\x0f\x00\x00\x00\x00\x0f\x00\xf5\xffD\xfc;\x00\xf4\xff\x1b\x00\x02\x01\xd1\xffp\x01\r\xd9'b'\x00\x05N\xb1y14,\xfe\x16U\x01\x01t\xc2\xda\x03\x00\x12\x00\xf5\xffL\xfcL\x00\xf7\xff\x0e\x00\xee\x00l\xff\x12\x02\x87\xef'b'\x00\x05N\xb1y14\x80\xfe\x16V\x01\x01\x81\xc2\xda\x03\x00\x08\x00\xf4\xff4\xfcF\x00\xe6\xff\x12\x00\x12\x03;\x00\x87\x02\x8d\x11'b'\x00\x05N\xb1y14\xd0\xfe\x0eW\x01\x01\x1d\xc2\xda\x03\x00\x15\x9fiD\xf6(\x0c\xbdI\x10%\xab'b'\x00\x05N\xb1y15\x1c\xfe\x0eX\x01\x01\x89\xc2\xda\x03\x00\x8e\xe1iD\xd7\xa3\x81>\\\x15r\x0e'b'\x00\x05N\xb1y15t\xfe\x1fY\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1e\x01\x19=A\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x07\xe0'b'\x00\x05N\xb1y15\xc8\xfe\x06Z\x01\x01}\xc5\x14\x00\x00\x03\x00E\x14'b'\x00\x05N\xb1y16\x14\xfe\x04[\x01\x01\x98\x00\x00\x80\x8a\xdcO'b'\x00\x05N\xb1y16X\xfe\x02\\\x01\x01*\x00\x00\xc92'b'\x00\x05N\xb1y16\xac\xfe\x1e]\x01\x01\x18@&\r\x0f\x00\x00\x00\x00f\xa6\x02\x18\xf6\xe7\xb8\xfd$h\n\x00F\x00\xff\xff-\x00\x04|\x03\x0c@p'b'\x00\x05N\xb1y17(\xfe\x1a^\x01\x01>\xaeGa@\xa4pM@\n\x9f\xc9>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x81\x00\x00\x00\x83\x93'b'\x00\x05N\xb1y17t\xfe\x08_\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfb]'b'\x00\x05N\xb1y17\xb8\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b'\x00\x05N\xb1y2\xd0O\xfe5\xf9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xae,'b'\x00\x05N\xb1y2\xe6\xe8\xfe\x14a\x01\x01J\x1e\x85\xeb>\x1e\x85\xeb>\x99\x99\x19?\xaeG\xe1>\x0c\x00/\x00\x0e\xf1'b'\x00\x05N\xb1y2\xe7t\xfe\x1cb\x01\x01!h\xda\x03\x00j\xa6\x02\x18\xe6\xe7\xb8\xfd\xf2]\n\x00b\x02\x00\x00\n\x00\xea\xff*\x00\xda\x04\x8dc'b'\x00\x05N\xb1y2\xe7\xf4\xfe\x1cc\x01\x01 \x12\xdb\x03\x00s\x04\xfb<.\xf3K?\x83\xf8\x95\xbe\x9d#\xdc=ZDe\xbe\xac2\xda\xbe\x11\x14'b'\x00\x05N\xb1y2\xe8p\xfe\x1cd\x01\x01\x1e:\xdb\x03\x00\x87===:\xa8\x15=\xda\xb1^>\xba\xee\xcd;)f\x17\xbc\xef\x8c\xa5<\xf1X'b'\x00\x05N\xb1y2\xe8\xf0\xfe\x18e\x01\x01\xb2\xd6\x1d8=\xa8\xe9\x02=\xa9\xa0c>\x85\xbb)Di\xa6\x02\x18\xf2\xe7\xb8\xfd`\xc9'b'\x00\x05N\xb1y2\xe9D\xfe\x12f\x01\x01\xfcL\xdb\x03\x004\x00\x01\x00ARMMASK\x00Wr\xd1\xd2'b"\x00\x05N\xb1y2\xe9\xa8\xfe\tg\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03'\x1f"b'\x00\x05N\xb1y2\xea\x10\xfe\t\xe0\n\x00m\x07\x00\x00\x00\x00\xd2\x00\x00\x00\xf7\x01'b'\x00\x05N\xb1y2\xebG\xfe!\xfa\xff\x00L-\xc2\x99A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0\xee'b'\x00\x05N\xb1y4e\\\xfe\x1ch\x01\x01\xa39}\x93\xb9A0u9\xe6\xfc\xa78\x00\x00\x00\x00\x00\x00\x00\x00\x8b"\xdb<\x11\xf8\xf5;\xdb\x05'b'\x00\x05N\xb1y4f\x04\xfe\x03i\x01\x01\xa5\xc8\x14\x00\xaa\xcf'b'\x00\x05N\xb1y4f\x90\xfe\x0cj\x01\x01\x02X~xy\xb1N\x05\x00O\xdb\x03\x00x\xc1'b'\x00\x05N\xb1y4g,\xfe\x16k\x01\x01\x88k\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00wU'b'\x00\x05N\xb1y4g\xcc\xfe\x16l\x01\x01\xc1\xea\xd7\xf8s'b'\x00\x05N\xb1y4\xaa\xcb\xfe5\xfb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01+\xce'b'\x00\x05N\xb1y4\xc1O\xfe!\xfc\xff\x00L \x9a\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\xca'b'\x00\x05N\xb1y5\xe0\x98\xfe\x1aq\x01\x01\x1b;6\x12\x0f\x00\x00\x00\x00\x06\x00\xdb\xffH\xfc\xf7\xff\xe5\xff\xff\xff\x01\x01\xd4\xffq\x01\xa8B'b'\x00\x05N\xb1y5\xe1 \xfe\x16r\x01\x01t\xb3\xdb\x03\x00\x0c\x00\xda\xffF\xfc\xf6\xff\xec\xff\x02\x00\xf3\x00p\xff\x13\x02\x0e\xc1'b'\x00\x05N\xb1y5\xe1\x90\xfe\x16s\x01\x01\x81\xb3\xdb\x03\x00\x05\x00\xeb\xffJ\xfc\xf7\xff\xf0\xff\xf9\xff\x1d\x03H\x00\x80\x02\x11\xda'b'\x00\x05N\xb1y5\xe1\xf0\xfe\x0et\x01\x01\x1d\xb3\xdb\x03\x00\x82\x9eiD\xc2\xf50\xbdI\x10\xec\xa9'b'\x00\x05N\xb1y5\xe2H\xfe\x0eu\x01\x01\x89\xb3\xdb\x03\x00\xd9\xe0iD\x00\x00x>]\x15\x86\xdb'b'\x00\x05N\xb1y5\xe2\xac\xfe*v\x01\x01\x96s\xe7f\xbc\x07m\x01\x00I\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x19\x11'b'\x00\x05N\xb1y5\xe3\x0c\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x19=\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xbb\x01'b'\x00\x05N\xb1y5\xe3h\xfe\x06x\x01\x01}\xc6\x14\x00\x00\x03\x00\x83\xf5'b'\x00\x05N\xb1y5\xe3\xbc\xfe\x04y\x01\x01\x98\x00\x00\x80\x8a\x1f#'b'\x00\x05N\xb1y5\xe4\x04\xfe\x02z\x01\x01*\x00\x00\x87\t'b'\x00\x05N\xb1y5\xe4\\\xfe\x1e{\x01\x01\x18\x803\x10\x0f\x00\x00\x00\x00i\xa6\x02\x18\xf2\xe7\xb8\xfdjh\n\x00F\x00\xff\xff!\x00\x99|\x03\x0c\xcd\x1f'b'\x00\x05N\xb1y5\xe4\xb4\xfe\x1a|\x01\x01>\x99\x99Y@p=:@Ge\x91>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x82\x00\x00\x00N\xeb'b'\x00\x05N\xb1y5\xe4\xfc\xfe\x08}\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x01\xe3'b'\x00\x05N\xb1y5\xe5D\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b'\x00\x05N\xb1y5\xfa \xfe\x14\x7f\x01\x01J\xc2\xf5\xa8>\xc2\xf5\xa8>\x8f\xc25?{\x14\xae>\x0c\x00/\x00\xcb\x03'b'\x00\x05N\xb1y6\x88o\xfe\t\xfd\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03H\x0b'b'\x00\x05N\xb1y6\x89#\xfe5\xfd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb5\xe1'b"\x00\x05N\xb1y6\x9f'\xfe!\xff\xff\x00L \x9a\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x12="b'\x00\x05N\xb1y7R\x88\xfe\x1c\x80\x01\x01!\xf9\xdb\x03\x00n\xa6\x02\x18\xe2\xe7\xb8\xfdj^\n\x00\xda\x02\x00\x00\x05\x00\xef\xff \x00\xe1\x04p\xae'b'\x00\x05N\xb1y7S\x1c\xfe\x1c\x81\x01\x01 \x18\xdc\x03\x00v!\x8f=\x93\xe7B?t\x90\xd1\xbe\xd7@g=\x99\x96/\xbeD\xc1\xa4\xbe)\x87'b'\x00\x05N\xb1y7S\x88\xfe\x1c\x82\x01\x01\x1e@\xdc\x03\x00>\xff?=\xae\x85\xf6<\t\xfd^>\xc7\xd2)<\xef\xe9\xd6\xbbX_T\xbcB\xe1'b'\x00\x05N\xb1y7S\xec\xfe\x18\x83\x01\x01\xb2\xe7\xbe:=\x8e\x97\xd3<\xb72d>\xf6\xd8)Dm\xa6\x02\x18\xee\xe7\xb8\xfdR\xae'b'\x00\x05N\xb1y7T<\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`'b'\x00\x05N\xb1y7T\xe4\xfe\x1c\x85\x01\x01\xa3_s\x94\xb9\x91!p9c\x8a\xb28\x00\x00\x00\x00\x00\x00\x00\x00\xe4$\x18=\xfa\x11\xd3;m6'b'\x00\x05N\xb1y7UH\xfe\x03\x86\x01\x01\xa5\xc5\x14\x00t\xed'b'\x00\x05N\xb1y7U\xac\xfe\x0c\x87\x01\x01\x02\xf8u|y\xb1N\x05\x00T\xdc\x03\x00\xa5`'b'\x00\x05N\xb1y7V\x1c\xfe\x16\x88\x01\x01\x88o\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\x85'b'\x00\x05N\xb1y7V\x8c\xfe\x16\x89\x01\x01\xc1\x9d\xb8~=a\x10\xe4<\xcf\x89)<\x016]<\x00\x00\x00\x00?\x03\xd2\xd9'b'\x00\x05N\xb1y8@#\xfe5\x00\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb7\xe4'b'\x00\x05N\xb1y8j\x0b\xfe!\x01\xff\x00L\xe8\xe9\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00YG'b'\x00\x05N\xb1y9\x05\xe8\xfe\x15\x8a\x01\x01$W\x94\x15\x0f\xe1\x05\xee\x05L\x06\xf6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1,'b'\x00\x05N\xb1y9\x06l\xfe\x16\x8b\x01\x01#\x90\xdc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x000\xa8'b'\x00\x05N\xb1y9\x06\xd8\xfe\x1a\x8c\x01\x01\x1b\xf6\xe1\x15\x0f\x00\x00\x00\x00\x13\x00\xe3\xffW\xfc\x1a\x00\x14\x00\xe9\xff\x06\x01\xd4\xffo\x01\xaa:'b'\x00\x05N\xb1y9\x074\xfe\x16\x8d\x01\x01t\xa4\xdc\x03\x00\x15\x00\xed\xffw\xfc\x1e\x00#\x00\xea\xff\xf4\x00t\xff\x14\x02\xa7?'b'\x00\x05N\xb1y9\x07\x8c\xfe\x16\x8e\x01\x01\x81\xa4\xdc\x03\x00\x11\x00\xe6\xffa\xfc\x1d\x00\n\x00\xe7\xff\n\x03I\x00\x84\x02k\xbd'b'\x00\x05N\xb1y9\x07\xd8\xfe\x0e\x8f\x01\x01\x1d\xa4\xdc\x03\x00\x93\x9fiD\x99\x99\xd9\xbcJ\x10};'b'\x00\x05N\xb1y9\x08(\xfe\x0e\x90\x01\x01\x89\xa4\xdc\x03\x00\x01\xe1iD\xe1zz>^\x15I\xd9'b'\x00\x05N\xb1y9\x08\x80\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\x1d=\xd9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TaQ'b'\x00\x05N\xb1y9\x08\xd0\xfe\x06\x92\x01\x01}\xc3\x14\x00\x00\x03\x00<\xaf'b'\x00\x05N\xb1y9\t\x1c\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12'b'\x00\x05N\xb1y9\t`\xfe\x02\x94\x01\x01*\x00\x00>\xad'b'\x00\x05N\xb1y9\t\xb4\xfe\x1e\x95\x01\x01\x18\xa8D\x13\x0f\x00\x00\x00\x00o\xa6\x02\x18\xeb\xe7\xb8\xfd\ni\n\x00F\x00\xff\xff)\x00\xfc~\x03\x0c9~'b'\x00\x05N\xb1y9\n\x08\xfe\x1a\x96\x01\x01>\x8f\xc2U@\x85\xebA@\x1c\x1bI>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x83\x00\x00\x00\xce\x15'b'\x00\x05N\xb1y9\nP\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5'b'\x00\x05N\xb1y9\n\x94\xfe\x03\x98\x01\x01Ms\x00\x00\xe6\x00'b'\x00\x05N\xb1y: W\xfe5\x02\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x012\x06'b'\x00\x05N\xb1y:^S\xfe!\x03\xff\x00L\xe8\xe9\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd8\x1a'b'\x00\x05N\xb1y:s\xa8\xfe\x14\x99\x01\x01J=\nW>=\nW>\xcc\xccL?=\nW>\x0c\x000\x00R\xd1'b'\x00\x05N\xb1y:t,\xfe\x1c\x9a\x01\x01!\xc2\xdc\x03\x00q\xa6\x02\x18\xe0\xe7\xb8\xfd\xba^\n\x00*\x03\x00\x00\x02\x00\xf6\xff\x14\x00\xd5\x04k\x12'b'\x00\x05N\xb1y:t\xb4\xfe\x1c\x9b\x01\x01 \x1d\xdd\x03\x00k\x18\xd8=\xe0\x88=?s\x88\xfa\xbe\xa9\xe5\xa8<\xc8\x8b\xd1\xbd\x1erU\xbet\xd8'b'\x00\x05N\xb1y<\x10\xcc\xfe\x1c\x9c\x01\x01\x1eE\xdd\x03\x00\x954R=\xe6\xc3\x11=ce\\>\x01=\x90\xbc\x06\x18\xee\x14\xce)Do\xa6\x02\x18\xeb\xe7\xb8\xfdd\x02'b'\x00\x05N\xb1y<\x12\x00\xfe\x03\x9e\x01\x01Ms\x00\x00W\x1d'b'\x00\x05N\xb1y<(\xaf\xfe5\x04\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xac)'b'\x00\x05N\xb1y<\xaec\xfe!\x05\xff\x00L\xe8\xe9\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\xfc'b"\x00\x05N\xb1y<\xafL\xfe\x1c\x9f\x01\x01\xa3ME\x95\xb9c=j9]\xb5\xbc8\x00\x00\x00\x00\x00\x00\x00\x00\x11\xb9.='\xfc\x9d;\t\xda"b'\x00\x05N\xb1y<\xaf\xa4\xfe\x03\xa0\x01\x01\xa5\xc5\x14\x005F'b'\x00\x05N\xb1y<\xaf\xf4\xfe\x0c\xa1\x01\x01\x02\x98m\x80y\xb1N\x05\x00Y\xdd\x03\x00a\x96'b'\x00\x05N\xb1y<\xb0d\xfe\x16\xa2\x01\x01\x88q\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00y\xb7'b'\x00\x05N\xb1y<\xb0\xc8\xfe\x16\xa3\x01\x01\xc1\x9c\xf4\x16=\xc2\x1c\xe0^\x15\xf4\xf6'b'\x00\x05N\xb1y<\xb2\xb4\xfe\x1f\xa9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00(\x01\x1d=\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd1\x05'b'\x00\x05N\xb1y<\xb3\x04\xfe\x06\xaa\x01\x01}\xc8\x145\x00\x03\x00^\x04'b'\x00\x05N\xb1y<\xb3P\xfe\x04\xab\x01\x01\x98\x00\x00\x80\x8a\xc5e'b'\x00\x05N\xb1y<\xb3\x90\xfe\x02\xac\x01\x01*\x00\x00\x98\xa5'b'\x00\x05N\xb1y<\xb3\xe4\xfe\x1e\xad\x01\x01\x18\xf8f\x19\x0f\x00\x00\x00\x00q\xa6\x02\x18\xea\xe7\xb8\xfd333@\x14\xae7@\x8a\xa2\x10>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x84\x00\x00\x00\x98\xf1'b'\x00\x05N\xb1y=\x80\x98\xfe\x08\xaf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00x\x17'b'\x00\x05N\xb1y=\x81\x0c\xfe\x15\xb0\x01\x01$\x0c\xe1\x19\x0f\xf7\x05\x11\x06O\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xa3'b'\x00\x05N\xb1y=\x81h\xfe\x16\xb1\x01\x01#\xaa\xdd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00V+'b'\x00\x05N\xb1y=\x81\xb4\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90'b'\x00\x05N\xb1y=\xd1\xe8\xfe\x14\xb3\x01\x01J\x00\x00\x80>\x00\x00\x80>\xf5(\\?\x99\x99\x19>\x0c\x000\x00\xcd2'b'\x00\x05N\xb1y>`/\xfe5\x06\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01)\xcb'b'\x00\x05N\xb1y>\x9eo\xfe!\x07\xff\x00L%\xf0\x99A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00l\xc8'b'\x00\x05N\xb1y>\xf0\x0c\xfe\x1c\xb4\x01\x01!\x8b\xdd\x03\x00s\xa6\x02\x18\xe0\xe7\xb8\xfd\xf6^\n\x00f\x03\x00\x00\xff\xff\xfd\xff\x0f\x00\xc6\x04;<'b'\x00\x05N\xb1y>\xf0\x90\xfe\x1c\xb5\x01\x01 "\xde\x03\x00\xf4\xa6\xfd=\xb3\x9a>?\xd5+\x0c\xbfT\xb1\x9d\xbc\x99/\xfa\xbcr\x8d\x1e\xbet\x06'b'\x00\x05N\xb1y>\xf0\xec\xfe\x1c\xb6\x01\x01\x1eJ\xde\x03\x00u\x00\x08=}\xf2&=\xb6=[>u\xd8\xb3\xbd\x83*E=Z\xa7\xb7;ut'b'\x00\x05N\xb1y>\xf1@\xfe\x18\xb7\x01\x01\xb2A\xd1\x05=\r6\x16=hF`>\xc2\xd5)Ds\xa6\x02\x18\xeb\xe7\xb8\xfd\xb8\xd8'b'\x00\x05N\xb1y>\xf1\x88\xfe\x03\xb8\x01\x01Ms\x00\x00\x16\xb6'b'\x00\x05N\xb1y>\xf2\x14\xfe\x1c\xb9\x01\x01\xa3\xf8\xd4\x95\xb9:{c9\xc2\x9a\xc68\x00\x00\x00\x00\x00\x00\x00\x00Q\x18\x1c=\x88\x14\xb5;\xa0\xc9'b'\x00\x05N\xb1y>\xf2d\xfe\x03\xba\x01\x01\xa5\xc8\x14\x00\x11\xb0'b'\x00\x05N\xb1y>\xf2\xd8\xfe\x0c\xbb\x01\x01\x028e\x84y\xb1N\x05\x00_\xde\x03\x00\x08\x07'b'\x00\x05N\xb1y>\xf3,\xfe\x16\xbc\x01\x01\x88s\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5T'b'\x00\x05N\xb1y>\xf3|\xfe\x16\xbd\x01\x01\xc1\tz4=H!\x1a=\x01\x86~:\xa4)\x80;\x00\x00\x00\x00?\x03\xd7\x01'b"\x00\x05N\xb1y?6\xcb\xfe%\x08\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x1d\x95"b'\x00\x05N\xb1y@Tg\xfe5\t\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xda\x83'b'\x00\x05N\xb1y@j\x83\xfe!\n\xff\x00LuR\x99A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbd\xb3'b'\x00\x05N\xb1y@\x97h\xfe\x03\xbe\x01\x01/\xff\x00\x00q\xd3'b'\x00\x05N\xb1y@\x988\xfe\x1a\xbf\x01\x01\x1b\xfe?\x1d\x0f\x00\x00\x00\x00\x12\x00\xd9\xff2\xfc\xdf\xff\x1a\x00\x10\x00\x02\x01\xd1\xffs\x01j6'b'\x00\x05N\xb1y@\x98\xbc\xfe\x16\xc0\x01\x01t\x87\xde\x03\x00\x18\x00\xd9\xff?\xfc\xd9\xff!\x00\xfc\xff\xf0\x00o\xff\x13\x02\xce\x10'b'\x00\x05N\xb1y@\x99\x18\xfe\x16\xc1\x01\x01\x81\x87\xde\x03\x00\x0e\x00\xe2\xff:\xfc\xc6\xff"\x00\t\x00\n\x03G\x00q\x02\xbb\xf0'b'\x00\x05N\xb1y@\x99\x90\xfe\x0e\xc2\x01\x01\x1d\x87\xde\x03\x00K\x9eiDR\xb8>\xbdJ\x10\xfd\xd0'b'\x00\x05N\xb1y@\x9a\x00\xfe\x0e\xc3\x01\x01\x89\x87\xde\x03\x00u\xe1iDG\xe1\x80>`\x15\x8c\x1a'b'\x00\x05N\xb1y@\x9a\x84\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00V\x01\x1d=\xc3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8bw'b'\x00\x05N\xb1y@\x9a\xfc\xfe\x06\xc5\x01\x01}\xc2\x14\x00\x00\x03\x00O,'b'\x00\x05N\xb1y@\x9bh\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy'b'\x00\x05N\xb1y@\x9b\xc8\xfe\x02\xc7\x01\x01*\x00\x00\x9fw'b'\x00\x05N\xb1y@\x9cD\xfe\x1e\xc8\x01\x01\x18\x00*\x1c\x0f\x00\x00\x00\x00s\xa6\x02\x18\xeb\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\x95d'b'\x00\x05N\xb1y@\x9c\xbc\xfe\x1a\xc9\x01\x01>\xa4p\r@\x14\xae7@\x85w\xc5=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\x9b\xf5'b'\x00\x05N\xb1y@\x9d(\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2'b'\x00\x05N\xb1y@\x9dx\xfe\x15\xcb\x01\x01$\xb4\xdb\x1d\x0f\xf0\x05\x01\x06C\x06\xf3\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xdd'b'\x00\x05N\xb1y@\x9d\xc8\xfe\x16\xcc\x01\x01#\xaf\xde\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00_\xd1'b'\x00\x05N\xb1yB\x05H\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\x00\x05N\xb1yB\x05\xf8\xfe\x14\xce\x01\x01J{\x14.>{\x14.>fff?\xaeG\xe1=\x0c\x000\x00\xc5\xb4'b'\x00\x05N\xb1yB\x06X\xfe\x1c\xcf\x01\x01!\t\xdf\x03\x00s\xa6\x02\x18\xe2\xe7\xb8\xfd\x1e_\n\x00\x8e\x03\x00\x00\xf8\xff\xff\xff\n\x00\xc5\x04\x15*'b'\x00\x05N\xb1yB\x06\xbc\xfe\x1c\xd0\x01\x01 (\xdf\x03\x00E\xf2\x04>OrC?\x14m\x15\xbf\xf2@\xb0\xbd\x87<:\xbc\xdb!\xd8\xbd\x10@'b'\x00\x05N\xb1yB\x07\x14\xfe\t\xe1\n\x00m\x08\x00\x00\x00\x00\xd8\x00\x00\x00i\x9e'b'\x00\x05N\xb1yB\n{\xfe5\x0b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01_a'b"\x00\x05N\xb1yB4'\xfe!\x0c\xff\x00LuR\x99A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00>U"b'\x00\x05N\xb1yC\x9e\xb8\xfe\x12\xd1\x01\x01\xfc:\xdf\x03\x004\x00\x01\x00ARMMASK\x00Wr\x06?'b'\x00\x05N\xb1yC\x9f0\xfe\t\xd2\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xc2g'b'\x00\x05N\xb1yC\x9f\x8c\xfe\x03\xd3\x01\x01Ms\x00\x00{\xc2'b'\x00\x05N\xb1yC\xa0L\xfe\x1c\xd4\x01\x01\x1eP\xdf\x03\x00\x82x\xd9<\x01\x8d>=lbZ>RQ\xb4\xbc\\\xedN=\x8a\xd13<\xc0\x97'b'\x00\x05N\xb1yC\xa0\xe8\xfe\x18\xd5\x01\x01\xb2\xedJ\xd5<#\x03.=9\x84_>p\xcd)Dt\xa6\x02\x18\xec\xe7\xb8\xfd\xbf\xac'b'\x00\x05N\xb1yC\xa1|\xfe\x1c\xd6\x01\x01\xa3\x89\x16\x96\xb9^\xd1[9\xd6,\xd08\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xe0\x10=\x05x\xb0;\x94\xfe'b'\x00\x05N\xb1yC\xa1\xf4\xfe\x03\xd7\x01\x01\xa5\xc5\x14\x00BR'b'\x00\x05N\xb1yC\xa2p\xfe\x0c\xd8\x01\x01\x02\xd8\\\x88y\xb1N\x05\x00d\xdf\x03\x00\xa4\xc9'b'\x00\x05N\xb1yC\xa3\x18\xfe\x16\xd9\x01\x01\x88s\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa1C'b'\x00\x05N\xb1yC\xa3\xb8\xfe\x12\xda\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x8a{'b'\x00\x05N\xb1yC\xa4P\xfe\x16\xdb\x01\x01\xc1\xd7\xb5Y=\xf2\xb1\x1b=\xd2\x1a\x01<.\xf8\xc0<\x00\x00\x00\x00?\x03%\xb1'b'\x00\x05N\xb1yC\xa5$\xfe\x1a\xdd\x01\x01\x1b\xac\xef \x0f\x00\x00\x00\x00\x03\x00\xe5\xff \xfc\xf0\xff\x1b\x00\xf3\xff\xfc\x00\xcf\xffu\x01\n\xba'b'\x00\x05N\xb1yC\xa5\xf0\xfe\x16\xde\x01\x01tx\xdf\x03\x00\x04\x00\xe5\xff6\xfc\xdf\xff%\x00\x03\x00\xed\x00h\xff\x11\x02t\x85'b'\x00\x05N\xb1yC\xa6\x8c\xfe\x16\xdf\x01\x01\x81x\xdf\x03\x00\x00\x00\xe2\xff&\xfc\xf4\xff\x1a\x00\xfe\xff\x1f\x031\x00\x87\x02\xab\xf4'b'\x00\x05N\xb1yC\xa7\x14\xfe\x0e\xe0\x01\x01\x1dx\xdf\x03\x00r\x9eiD\xb8\x1e5\xbdJ\x10&\xfc'b'\x00\x05N\xb1yC\xa7\x94\xfe\x0e\xe1\x01\x01\x89x\xdf\x03\x00F\xe0iD\xcc\xccn>_\x15\xf4\xdf'b'\x00\x05N\xb1yC\xa84\xfe\x1f\xe2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00\x1d=\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Txi'b'\x00\x05N\xb1yC\xa8\xbc\xfe\x06\xe3\x01\x01}\xc2\x14\x00\x00\x03\x00\xb2;'b'\x00\x05N\xb1yC\xa9L\xfe\x04\xe4\x01\x01\x98\x00\x00\x80\x8a\x8e\x15'b'\x00\x05N\xb1yC\xa9\xfc\xfe\x02\xe5\x01\x01*\x00\x00\xa7#'b'\x00\x05N\xb1yC\xaa\x98\xfe\x1e\xe6\x01\x01\x18(;\x1f\x0f\x00\x00\x00\x00t\xa6\x02\x18\xec\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\x07\x8b'b'\x00\x05N\xb1yC\xab,\xfe\x1a\xe7\x01\x01>\xebQ\xf8?G\xe1\x1a@R;\x94=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\xbc$'b'\x00\x05N\xb1yC\xab\xa8\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl'b'\x00\x05N\xb1yC\xfb\xe7\xfe5\r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc1N'b'\x00\x05N\xb1yD\x12?\xfe!\x0e\xff\x00L\x86\xc3\x98A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbe\xfc'b'\x00\x05N\xb1yE*\xe8\xfe\x15\xe9\x01\x01$\x14\xdc!\x0f\x00\x06\xfb\x05-\x06\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00~%'b'\x00\x05N\xb1yE+x\xfe\x16\xea\x01\x01#\xb5\xdf\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9e-'b'\x00\x05N\xb1yE+\xd8\xfe\x03\xeb\x01\x01Ms\x00\x00O\x02'b'\x00\x05N\xb1yE\xb1\xe7\xfe5\x0f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01D\xac'b'\x00\x05N\xb1yE\xdb\xcb\xfe!\x10\xff\x00L\x86\xc3\x98A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x02\x98'b'\x00\x05N\xb1yF\x12\x17\xfe\t\x11\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9cw'b'\x00\x05N\xb1yF\xa9x\xfe\x14\xec\x01\x01J\xebQ8>\xebQ8>{\x14n?\x8f\xc2u=\x0c\x000\x00\xa1\x8d'b'\x00\x05N\xb1yF\xaa@\xfe\x1c\xed\x01\x01!\xd3\xdf\x03\x00r\xa6\x02\x18\xe5\xe7\xb8\xfd2_\n\x00\xa2\x03\x00\x00\xf0\xff\xfe\xff\x06\x00\xbd\x04h\xd8'b'\x00\x05N\xb1yF\xaa\xe4\xfe\x1c\xee\x01\x01 -\xe0\x03\x00S\xcf\xf5=\xc8\xa4I?\xa4\xe5\x1b\xbf\xf9\xd9$\xbe\x1f@\xae\xbcg\xb7\x8b\xbd\xce`'b'\x00\x05N\xb1yF\xabL\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14'b'\x00\x05N\xb1yF\xd4\xd8\xfe\x1c\xf0\x01\x01\x1eU\xe0\x03\x00\xf0\x87\x87<\xdd\xee;=8\x1cX>N\x02\xfc<\xbb\xc4D\xbc\xc5\xcb\x81\xbc\\s'b'\x00\x05N\xb1yF\xd5<\xfe\x18\xf1\x01\x01\xb2\xfa[z<;t/=\xde(]>{\xd4)Du\xa6\x02\x18\xed\xe7\xb8\xfdIN'b'\x00\x05N\xb1yG\xad/\xfe5\x12\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01m*'b"\x00\x05N\xb1yG\xd7'\xfe!\x13\xff\x00L\x95Z\x97A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00)\t"b'\x00\x05N\xb1yH"\\\xfe\x1a\xf2\x01\x01\x1b\xd3\x9e$\x0f\x00\x00\x00\x00\x0c\x00\xe1\xff2\xfc\xf6\xff\xf5\xff\x04\x00\x01\x01\xc9\xffr\x01\x16\x8b'b'\x00\x05N\xb1yH"\xe4\xfe\x16\xf3\x01\x01tj\xe0\x03\x00\x08\x00\xe1\xff4\xfc\x02\x00\xfd\xff\xef\xff\xec\x00f\xff\x12\x02\x95\xd4'b'\x00\x05N\xb1yH#\\\xfe\x16\xf4\x01\x01\x81j\xe0\x03\x00\x06\x00\xee\xff#\xfc\xe9\xff\xf5\xff\xfd\xff\x19\x039\x00\x8f\x02\x17\x19'b'\x00\x05N\xb1yH#\xe4\xfe\x0e\xf5\x01\x01\x1dj\xe0\x03\x00)\x9ciD\x14\xae\xa3\xbdJ\x10\xb0\xa5'b'\x00\x05N\xb1yH$`\xfe\x0e\xf6\x01\x01\x89j\xe0\x03\x00\x8b\xe0iD\xb8\x1es>a\x15S\x18'b'\x00\x05N\xb1yH$\xf8\xfe\x1f\xf7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xee<\xdb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T$`'b'\x00\x05N\xb1yH%\x80\xfe\x06\xf8\x01\x01}\xc6\x14\x00\x00\x03\x00\x98g'b'\x00\x05N\xb1yH%\xf4\xfe\x04\xf9\x01\x01\x98\x00\x00\x80\x8a\xc8\xe7'b'\x00\x05N\xb1yH&`\xfe\x02\xfa\x01\x01*\x00\x00\x9a\x8f'b'\x00\x05N\xb1yH&\xfc\xfe\x1e\xfb\x01\x01\x188P"\x0f\x00\x00\x00\x00u\xa6\x02\x18\xed\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x12\x00\xf8\x83\x03\x0c\te'b"\x00\x05N\xb1yH'\xa0\xfe\x1a\xfc\x01\x01>\xd7\xa3\xf0?\x99\x99\xd9?\xd7\xef9=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x88\x00\x00\x00\xfc\xa5"b'\x00\x05N\xb1yH(\x04\xfe\x08\xfd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa3%'b'\x00\x05N\xb1yH(x\xfe\x1c\xfe\x01\x01\xa3\x0e\x08\x96\xb9\xf4\xa8R9\xd16\xda8\x00\x00\x00\x00\x00\x00\x00\x00\xbel\x07=: \x86;^\x98'b'\x00\x05N\xb1yH(\xd8\xfe\x03\xff\x01\x01\xa5\xc8\x14\x00\x81B'b'\x00\x05N\xb1yH)<\xfe\x0c\x00\x01\x01\x02\x98\xa2\x8cy\xb1N\x05\x00~\xe0\x03\x00\xbf\xd4'b'\x00\x05N\xb1yH)\xa8\xfe\x16\x01\x01\x01\x88r\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00l\xdf'b'\x00\x05N\xb1yH*8\xfe\x16\x02\x01\x01\xc1\x8fC\x7f= _\x13=\x05e\xdc;T\x83\xa2<\x00\x00\x00\x00?\x03\x9f]'b'\x00\x05N\xb1yH*\xb8\xfe\x15\x03\x01\x01$\x98\xd7%\x0f\x11\x06\x17\x06/\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa3'b'\x00\x05N\xb1yH+4\xfe\x16\x04\x01\x01#\xba\xe0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc9\xae'b'\x00\x05N\xb1yH+\xa0\xfe\x03\x05\x01\x01Ms\x00\x00\xa1*'b'\x00\x05N\xb1yI\x90S\xfe5\x14\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf3\x05'b'\x00\x05N\xb1yI\xa6\x00\xfe\x14\x06\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\n\xd7#=\x0b\x000\x00\xd7b'b'\x00\x05N\xb1yI\xa7{\xfe!\x15\xff\x00L\x95Z\x97A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaa\xef'b'\x00\x05N\xb1yK]D\xfe\x1c\x07\x01\x01!\x9c\xe0\x03\x00p\xa6\x02\x18\xe7\xe7\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xe9\xff\xfd\xff\x04\x00\xa0\x04-\xf4'b'\x00\x05N\xb1yK^\x10\xfe\x1c\x08\x01\x01 2\xe1\x03\x00\xec\x83\xc3=\xdb\x94N?\xf3\x0f!\xbfaPl\xbe\xc8\x1f\x1f\xbd\xe0c0\xbd-\xcb'b'\x00\x05N\xb1yK^|\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11'b'\x00\x05N\xb1yKr\xf0\xfe\x1a\n\x01\x01\x1b\xbdI(\x0f\x00\x00\x00\x00\x0b\x00\xda\xff\x13\xfc\x19\x00@\xff\t\x00\x00\x01\xcd\xffr\x01\xc3\xf6'b'\x00\x05N\xb1yKsH\xfe\x16\x0b\x01\x01tZ\xe1\x03\x00\n\x00\xe1\xff\x1e\xfc\x11\x00X\xff\xe8\xff\xf0\x00i\xff\x12\x02S\xd9'b'\x00\x05N\xb1yKs\xa0\xfe\x16\x0c\x01\x01\x81Z\xe1\x03\x00\x0e\x00\xea\xff\x19\xfc\xe4\xff\x1d\xff\xfa\xff\xfb\x02A\x00\x84\x02ik'b'\x00\x05N\xb1yKs\xf0\xfe\x0e\r\x01\x01\x1dZ\xe1\x03\x00\x9b\x9biD\xa4p\xb5\xbdJ\x10\xd3\xc7'b'\x00\x05N\xb1yKt<\xfe\x0e\x0e\x01\x01\x89Z\xe1\x03\x00\xc9\xdfiD\xc2\xf5f>a\x15\xf8\xc7'b'\x00\x05N\xb1yKt\x94\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x17\x01\xee<\xd1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T6B'b'\x00\x05N\xb1yKt\xe4\xfe\x06\x10\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xce'b'\x00\x05N\xb1yKu0\xfe\x04\x11\x01\x01\x98\x00\x00\x80\x8a\x8fM'b'\x00\x05N\xb1yKut\xfe\x02\x12\x01\x01*\x00\x00\xees'b'\x00\x05N\xb1yKu\xec\xfe\x1e\x13\x01\x01\x18`a%\x0f\x00\x00\x00\x00u\xa6\x02\x18\xf1\xe7\xb8\xfd2i\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\xa3j'b'\x00\x05N\xb1yKv<\xfe\x1a\x14\x01\x01>\xd7\xa3\x00@\x99\x99Y?\n\xa5\xb9<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\x83\xfc'b'\x00\x05N\xb1yKv\x84\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18'b'\x00\x05N\xb1yKv\xd8\xfe\x1c\x16\x01\x01\x1en\xe1\x03\x00\xa0\xf7\xa1<\xd0"\xbc<\r\xc0R>H\xf6\x10=;\x9e5\xbe.\xe4\x1a;@\x85'b'\x00\x05N\xb1yKw(\xfe\x18\x17\x01\x01\xb2\xc7\x93\x92<\xa5I\xae<9"X>\xae\xe7)Dv\xa6\x02\x18\xef\xe7\xb8\xfd\xc2M'b'\x00\x05N\xb1yKwt\xfe\x1c\x18\x01\x01\xa3|\xaa\x95\xb9f6I9^i\xe38\x00\x00\x00\x00\x00\x00\x00\x00\x96\t\xd8<\xd8+Y;\x90\x15'b'\x00\x05N\xb1yKw\xb8\xfe\x03\x19\x01\x01\xa5\xc6\x14\x00\x91\xe9'b'\x00\x05N\xb1yKx\x00\xfe\x0c\x1a\x01\x01\x02P\x96\x90y\xb1N\x05\x00\x82\xe1\x03\x00*\xa8'b'\x00\x05N\xb1yKxL\xfe\x16\x1b\x01\x01\x88o\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x190'b'\x00\x05N\xb1yKx\x9c\xfe\x16\x1c\x01\x01\xc1x\xa1{=\xd4\x98\x17=w\x92"<\xd6sh<\x00\x00\x00\x00?\x03\xad\xd1'b'\x00\x05N\xb1yK\xa9o\xfe5\x16\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01v\xe7'b'\x00\x05N\xb1yK\xbf\xff\xfe!\x17\xff\x00L&\xbe\x93A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00w\x88'b'\x00\x05N\xb1yL\xcd<\xfe\x03\x1d\x01\x01Ms\x00\x00e\\'b'\x00\x05N\xb1yL\xe1\xdc\xfe\x15\x1e\x01\x01$\x8c\xd2)\x0f\x17\x06)\x066\x06\xbe\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00>\xb9'b'\x00\x05N\xb1yL\xe2<\xfe\x16\x1f\x01\x01#\xbf\xe1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x004\xc1'b'\x00\x05N\xb1yMT\xaf\xfe5\x18\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcfZ'b'\x00\x05N\xb1yM~w\xfe!\x19\xff\x00L&\xbe\x93A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1\x10'b'\x00\x05N\xb1yNB\xf4\xfe\x14 \x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xebQx?\n\xd7\xa3<\x0b\x001\x00\xcd\xa0'b'\x00\x05N\xb1yNC\\\xfe\x03!\x01\x01Ms\x00\x00\x8f\x8a'b'\x00\x05N\xb1yNj\xb8\xfe\x1c"\x01\x01!-\xe2\x03\x00m\xa6\x02\x18\xe9\xe7\xb8\xfdZ_\n\x00\xca\x03\x00\x00\xea\xff\xfd\xff\x02\x00\x8a\x04h\\'b'\x00\x05N\xb1yNkP\xfe\x1c#\x01\x01 7\xe2\x03\x00<\x88w=\t\xddR?\x98\xa5#\xbf+\x1bk\xbe\x8az\n\xbd\x1d\xb2\xb2\xbc@2'b'\x00\x05N\xb1yNk\xcc\xfe\x1a$\x01\x01\x1b\xc1\xf8+\x0f\x00\x00\x00\x00\x06\x00\xda\xff\x1c\xfc\x02\x00\x1a\x00\xed\xff\t\x01\xcc\xffk\x01"\x1e'b'\x00\x05N\xb1yNl,\xfe\x16%\x01\x01tK\xe2\x03\x00\x06\x00\xe0\xff+\xfc\xf4\xff\x10\x00\xfb\xff\xf9\x00l\xff\x0b\x02,3'b'\x00\x05N\xb1yNl\x90\xfe\x16&\x01\x01\x81K\xe2\x03\x00\x03\x00\xec\xff\x17\xfc\xe6\xff\xf7\xff\xfe\xff,\x03F\x00v\x02\xfa\xaf'b"\x00\x05N\xb1yNl\xe4\xfe\x0e'\x01\x01\x1dL\xe2\x03\x00e\x9eiD\xebQ8\xbdJ\x10V\x82"b'\x00\x05N\xb1yNm8\xfe\x0e(\x01\x01\x89L\xe2\x03\x00\xd3\xdeiD\x99\x99W>`\x15\xf3\xa8'b'\x00\x05N\xb1yNm\x98\xfe\x1f)\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x00\xee<\xeb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdc\xa3'b'\x00\x05N\xb1yNm\xf0\xfe\x06*\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0d'b'\x00\x05N\xb1yObo\xfe5\x1a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01J\xb8'b"\x00\x05N\xb1yOw\xd3\xfe%\x1b\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x92\x00"b'\x00\x05N\xb1yOxo\xfe!\x1b\xff\x00L&\xbe\x93A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00`M'b'\x00\x05N\xb1yO\xe2\xd0\xfe\x04+\x01\x01\x98\x00\x00\x80\x8a\x12\xa1'b'\x00\x05N\xb1yO\xe3<\xfe\x02,\x01\x01*\x00\x00\x85#'b'\x00\x05N\xb1yO\xe3\xa4\xfe\x1e-\x01\x01\x18\xc8\x7f+\x0f\x00\x00\x00\x00t\xa6\x02\x18\xf2\xe7\xb8\xfd\x14i\n\x00F\x00\xff\xff\x08\x00\xf8\x83\x03\x0c`\xf7'b'\x00\x05N\xb1yO\xe4\x08\xfe\x1a.\x01\x01>\\\x8f\x02@p=\n?po\xc0<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00{{'b'\x00\x05N\xb1yO\xe4\\\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1'b'\x00\x05N\xb1yO\xe4\xc4\xfe\x1c0\x01\x01\x1et\xe2\x03\x00\xa4\xcb\xdcP>\xeer\r\xbc\xe2\xe5\xfb<\x83H\x0e=I\x82'b'\x00\x05N\xb1yO\xe58\xfe\x181\x01\x01\xb2\xa5<\xd0\n\xd7)Dt\xa6\x02\x18\xf2\xe7\xb8\xfd\x05t'b'\x00\x05N\xb1yO\xe5\xa8\xfe\x1c2\x01\x01\xa3O\xeb\x94\xb9n\xab>9\xed\xc0\xec8\x00\x00\x00\x00\x00\x00\x00\x00\x01c\xb2<\x95z\xb8;\xc8&'b'\x00\x05N\xb1yO\xe6\x04\xfe\x033\x01\x01\xa5\xc5\x14\x00\x7f\\'b'\x00\x05N\xb1yO\xe6h\xfe\x0c4\x01\x01\x02\xf0\x8d\x94y\xb1N\x05\x00\x88\xe2\x03\x00Z\x85'b'\x00\x05N\xb1yO\xe6\xd4\xfe\x165\x01\x01\x88l\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb9\xf2'b'\x00\x05N\xb1yO\xe7@\xfe\x166\x01\x01\xc1\xb2\xcdx=i\xe9\x18=\xdf\n\x82;\xcd\xc4\xbc<\x00\x00\x00\x00?\x03\xa3W'b'\x00\x05N\xb1yO\xe7\x9c\xfe\x037\x01\x01Ms\x00\x00F\xcc'b'\x00\x05N\xb1yP8\xb8\xfe\x038\x01\x01/\xff\x00\x00"\x05'b'\x00\x05N\xb1yPc{\xfe\x06\x1d\xff\x00B\x04\x00\x01\x00\x00\x01\xa8\xbf'b'\x00\x05N\xb1yQE\xa8\xfe\x159\x01\x01$\xd6\xd0-\x0f\x03\x06\x1e\x069\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\xfa'b'\x00\x05N\xb1yQFT\xfe\x16:\x01\x01#\xc4\xe2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00=\xc0'b'\x00\x05N\xb1yQF\xe8\xfe\x14;\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xebQx?\x8f\xc2\xf5<\x0b\x000\x00 \xc2'b'\x00\x05N\xb1yQGT\xfe\t\xe2\n\x00m\x02\x00\x00\x00\x00\xda\x00\x00\x00\xb8:'b'\x00\x05N\xb1yQ\x83\xfb\xfe5\x1e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Qu'b'\x00\x05N\xb1yQ\x9aC\xfe!\x1f\xff\x00Li\x05\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00n\xf6'b"\x00\x05N\xb1yR\xd5\xf8\xfe\x12<\x01\x01\xfc'\xe3\x03\x004\x00\x01\x00ARMMASK\x00Wr;\xf8"b'\x00\x05N\xb1yR\xd6\x98\xfe\t=\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03(\x98'b'\x00\x05N\xb1yR\xd7\x1c\xfe\x1a>\x01\x01\x1b\xb7\xa9/\x0f\x00\x00\x00\x00\x02\x00\xe4\xff"\xfc\x13\x00\xa5\xff(\x00\x0b\x01\xce\xffh\x01\xa5w'b'\x00\x05N\xb1yR\xd7\x84\xfe\x16?\x01\x01t=\xe3\x03\x00\n\x00\xd7\xffA\xfc\x19\x00\xc4\xff\xfb\xff\xf7\x00l\xff\x08\x02\x93Y'b"\x00\x05N\xb1yR\xd7\xe8\xfe\x16@\x01\x01\x81=\xe3\x03\x00\xfe\xff\xec\xff'\xfc\xed\xff\x9d\xff\x17\x001\x037\x00\x86\x02j\xa1"b'\x00\x05N\xb1yR\xd8l\xfe\x0eA\x01\x01\x1d=\xe3\x03\x00w\x9fiD\x14\xae\xe7\xbcI\x10`P'b'\x00\x05N\xb1yR\xd8\xd8\xfe\x0eB\x01\x01\x89=\xe3\x03\x00F\xe0iD\xcc\xccn>_\x15\xc4\xf6'b'\x00\x05N\xb1yR\xd9H\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xce<\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xff\xdb'b'\x00\x05N\xb1yR\xd9\xac\xfe\x06D\x01\x01}\xc2\x14\x00\x00\x03\x00\xc5\xeb'b'\x00\x05N\xb1yR\xda\x08\xfe\x03E\x01\x01Ms\x00\x00PO'b'\x00\x05N\xb1yR\xda\x98\xfe\x04F\x01\x01\x98\x00\x00\x80\x8a\x9a\xbd'b'\x00\x05N\xb1yR\xda\xec\xfe\x02G\x01\x01*\x00\x00\x82\xf1'b'\x00\x05N\xb1yR\xdbP\xfe\x1eH\x01\x01\x18\xf0\x90.\x0f\x00\x00\x00\x00r\xa6\x02\x18\xf5\xe7\xb8\xfd\x00i\n\x00F\x00\xff\xff\t\x00\xf8\x83\x03\x0c\x06\xf1'b'\x00\x05N\xb1yR\xdb\xb4\xfe\x1aI\x01\x01>\x85\xeb\xf1?\x1e\x85\xeb>{\x90\xa2<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\xac\xe8'b'\x00\x05N\xb1yR\xdc\x08\xfe\x08J\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x002\x14'b'\x00\x05N\xb1yR\xdcd\xfe\x1cK\x01\x01!\xf6\xe2\x03\x00j\xa6\x02\x18\xec\xe7\xb8\xfdZ_\n\x00\xca\x03\x00\x00\xea\xff\xff\xff\x02\x00\x8f\x04`\xea'b'\x00\x05N\xb1yR\xdc\xc8\xfe\x1cL\x01\x01 R\xe3\x03\x00\x88^\xeb<\x01QY?\x18\xd2#\xbf\xa0\xf2e\xbeP{\x88\xbcE\xda\xbb\xbc\xfe\x15'b'\x00\x05N\xb1yR\xdd\x18\xfe\x1cM\x01\x01\x1ey\xe3\x03\x00\n\xd6\xfe\xea\xe1\x98=(\xedK\xbae^\xb6<,l'b'\x00\x05N\xb1yR\xddl\xfe\x18N\x01\x01\xb2\x87\xb8\xea<)Q\x14<\x90\x89U>\xd7\xc3)Dr\xa6\x02\x18\xf5\xe7\xb8\xfdB\xd3'b'\x00\x05N\xb1ySES\xfe5 \xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\t\xbc'b'\x00\x05N\xb1yS\x83\x8f\xfe!!\xff\x00L\xb2\xd0\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00y\x84'b'\x00\x05N\xb1yT\x82\x8c\xfe\x1cO\x01\x01\xa3\xdb\xe1\x93\xb9\xeb:39\xf8E\xf68\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xa9\x9c<\x01\xf6v;1u'b'\x00\x05N\xb1yT\x82\xfc\xfe\x03P\x01\x01\xa5\xc5\x14\x00\xae\x05'b'\x00\x05N\xb1yT\x83T\xfe\x0cQ\x01\x01\x02x\x89\x98y\xb1N\x05\x00\x8e\xe3\x03\x00O\xcc'b'\x00\x05N\xb1yT\x83\xac\xfe\x16R\x01\x01\x88i\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xad1'b'\x00\x05N\xb1yT\x83\xfc\xfe\x16S\x01\x01\xc1R\x94n=r(/=U\xf8\xee;+\x06\x84<\x00\x00\x00\x00?\x038\xd0'b'\x00\x05N\xb1yT\x84t\xfe\x03U\x01\x01Ms\x00\x00(\x14'b'\x00\x05N\xb1yT\x85\x00\xfe\x15V\x01\x01$\xd1\xcd1\x0f\x15\x06)\x06=\x06\x07\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xe8'b'\x00\x05N\xb1yT\x85x\xfe\x16W\x01\x01#\xca\xe3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0c\x90'b'\x00\x05N\xb1yUU\xcb\xfe5"\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8c^'b'\x00\x05N\xb1yU\x82\x1b\xfe\t#\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03 \xf9'b'\x00\x05N\xb1yU\x82\xcb\xfe!#\xff\x00L\xb2\xd0\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf8\xd9'b'\x00\x05N\xb1yU\xe1l\xfe\x14X\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\x8f\xc2\xf5<\x0b\x001\x00J\x81'b'\x00\x05N\xb1yU\xe1\xe8\xfe\x1aY\x01\x01\x1b\x92X3\x0f\x00\x00\x00\x00\xfd\xff\xd5\xff\x0f\xfc\x04\x00\x10\x00\x00\x00\x11\x01\xd0\xfff\x01$:'b'\x00\x05N\xb1yU\xe2D\xfe\x16Z\x01\x01t/\xe4\x03\x00\xfe\xff\xd4\xff\x17\xfc\xf2\xff\t\x00\x07\x00\xf9\x00h\xff\x04\x02\xb5\xf3'b'\x00\x05N\xb1yU\xe2\x9c\xfe\x16[\x01\x01\x81/\xe4\x03\x00\xfb\xff\xe8\xff\t\xfc\xfb\xff\xfa\xff\x0f\x00\n\x03\\\x00h\x02/e'b"\x00\x05N\xb1yU\xe2\xec\xfe\x0e\\\x01\x01\x1d/\xe4\x03\x00/\x9fiD\x8f\xc2\x05\xbdJ\x10U'"b'\x00\x05N\xb1yU\xe3<\xfe\x0e]\x01\x01\x89/\xe4\x03\x00\xc5\xe2iD)\\\x8b>a\x15\xf2\xa8'b'\x00\x05N\xb1yU\xe3\xa0\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xce<\xe3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tn!'b'\x00\x05N\xb1yU\xe4\x0c\xfe\x06_\x01\x01}\xc5\x14\x00\x00\x03\x00\x81\x1f'b'\x00\x05N\xb1yU\xe4d\xfe\x04`\x01\x01\x98\x00\x00\x80\x8a\xbc\xee'b'\x00\x05N\xb1yU\xe4\xb4\xfe\x03a\x01\x01Ms\x00\x00~\xef'b'\x00\x05N\xb1yU\xe5$\xfe\x02b\x01\x01*\x00\x00\xa2b'b'\x00\x05N\xb1yU\xe5\x9c\xfe\x1ec\x01\x01\x18\x00\xa61\x0f\x00\x00\x00\x00p\xa6\x02\x18\xf7\xe7\xb8\xfd\xf6h\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\x9e\xa7'b'\x00\x05N\xb1yU\xe6\x00\xfe\x1ad\x01\x01>\xc2\xf5\xc8?\xebQ\xb8>\x14o)=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\x95\x97'b'\x00\x05N\xb1yU\xe6T\xfe\x08e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x94'b'\x00\x05N\xb1yW/\xdf\xfe5%\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01X\x84'b'\x00\x05N\xb1yWFC\xfe!&\xff\x00L\xb2\xd0\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x002\xc8'b'\x00\x05N\xb1yWp\x18\xfe\x1cf\x01\x01!\xc0\xe3\x03\x00h\xa6\x02\x18\xf0\xe7\xb8\xfd<_\n\x00\xac\x03\x00\x00\xea\xff\x02\x00\x03\x00\xa6\x04\x1cA'b'\x00\x05N\xb1yWp\xb4\xfe\x1cg\x01\x01 W\xe4\x03\x00\xd8\xf6\xa2\xbaD[a?\xe7\x10\x1e\xbf%gg\xbew\xd1\xe1<\x90]\x19\xbd\x1e\xeb'b'\x00\x05N\xb1yWq0\xfe\x1ch\x01\x01\x1e\x7f\xe4\x03\x00\xc2+\x0b=\x9a$q;\x04\x99U>\xcc]^\xbd\xfb\x93q\xbd\xd7r0=\x86\x99'b'\x00\x05N\xb1yWq\xb0\xfe\x18i\x01\x01\xb2\xb4\x8a\x03=\xa1>#;\xf0\xe3Y>\x85\xdb)Dp\xa6\x02\x18\xf7\xe7\xb8\xfd\x18\xc8'b'\x00\x05N\xb1yWr(\xfe\x1cj\x01\x01\xa3^\x8b\x92\xb99\xea&9\x97\xd7\xff8\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1f\x8a<\xd8\xe8];\x96\xe3'b'\x00\x05N\xb1yWr\x8c\xfe\x03k\x01\x01\xa5\xc8\x14\x00\xc5\xc4'b'\x00\x05N\xb1yWr\xf4\xfe\x0cl\x01\x01\x02h\xc7\x9cy\xb1N\x05\x00\x93\xe4\x03\x00\xf6\xc4'b'\x00\x05N\xb1yWsh\xfe\x16m\x01\x01\x88h\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x93\x03'b'\x00\x05N\xb1yWs\xd8\xfe\x16n\x01\x01\xc1\xd5m{=\xc27?=\xb5\x8fF:\xcc\x90\xda<\x00\x00\x00\x00?\x03\xda\x8d'b'\x00\x05N\xb1yWt8\xfe\x03o\x01\x01Ms\x00\x00s\xdf'b'\x00\x05N\xb1yX\xed\xd4\xfe\x15p\x01\x01$\x82\xcc5\x0f\x07\x06#\x06a\x06\xe4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x814'b'\x00\x05N\xb1yX\xee\\\xfe\x16q\x01\x01#\xd0\xe4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x000\x83'b"\x00\x05N\xb1yY*\xe3\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xddf"b'\x00\x05N\xb1yY.\x03\xfe!(\xff\x00L\xdd\xd8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00w\x91'b'\x00\x05N\xb1yZ\x8b\x8c\xfe\x1ar\x01\x01\x1bj\x077\x0f\x00\x00\x00\x00\x06\x00\xd6\xff\x16\xfc\xe0\xff\x1a\x00\xf8\xff\x0e\x01\xcd\xfff\x01VG'b'\x00\x05N\xb1yZ\x8c\x10\xfe\x16s\x01\x01t \xe5\x03\x00\x0e\x00\xda\xff$\xfc\xe7\xff\x0b\x00\xfd\xff\xfb\x00g\xff\x02\x02I\x06'b'\x00\x05N\xb1yZ\x8cl\xfe\x16t\x01\x01\x81 \xe5\x03\x00\x03\x00\xe0\xff\x19\xfc\xe7\xff\x10\x00\xf2\xff\x1c\x036\x00}\x02\xfd\xed'b'\x00\x05N\xb1yZ\x8c\xbc\xfe\x0eu\x01\x01\x1d \xe5\x03\x00y\x9ciD\x99\x99\x99\xbdK\x10\xba\x87'b'\x00\x05N\xb1yZ\x8d\x0c\xfe\x0ev\x01\x01\x89 \xe5\x03\x00\xac\xdfiD33e>c\x15\xf8\xdc'b'\x00\x05N\xb1yZ\x8dd\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x01\xce<5\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8be'b'\x00\x05N\xb1yZ\x8d\xbc\xfe\x06x\x01\x01}\xc5\x14\x00\x00\x03\x00\xed]'b'\x00\x05N\xb1yZ\x8e\x08\xfe\x03y\x01\x01Ms\x00\x00\xba\x99'b'\x00\x05N\xb1yZ\x8e\xa4\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5'b'\x00\x05N\xb1yZ\x8e\xec\xfe\x02{\x01\x01*\x00\x00R\x96'b'\x00\x05N\xb1yZ\x8f@\xfe\x1e|\x01\x01\x18(\xb74\x0f\x00\x00\x00\x00o\xa6\x02\x18\xfa\xe7\xb8\xfd\xe2h\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\xd6\x93'b'\x00\x05N\xb1yZ\x8f\x94\xfe\x1a}\x01\x01>33\x93?ff\xe6>\\\x90\x14=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\xd1\xee'b'\x00\x05N\xb1yZ\x8f\xdc\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\x00\x05N\xb1yZ\x90,\xfe\x14\x7f\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\n\xd7#=\x0b\x001\x00\xa9\xc1'b'\x00\x05N\xb1yZ\x90\x80\xfe\x1c\x80\x01\x01!R\xe5\x03\x00f\xa6\x02\x18\xf5\xe7\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xec\xff\x04\x00\x04\x00\xaa\x04\xab\xbb'b'\x00\x05N\xb1yZ\x90\xe0\xfe\x1c\x81\x01\x01 \\\xe5\x03\x00\xd7\x0e\xc9\xbc?\x91k?\xaah \xbfy5M\xbeL\x89>=\x8b\xcf:\xbdV\xd7'b'\x00\x05N\xb1yZ\xc6\xd7\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01d\xdb'b'\x00\x05N\xb1yZ\xf0\xf7\xfe!*\xff\x00L\xdd\xd8\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf6\xcc'b'\x00\x05N\xb1y\\\x01@\xfe\x1c\x82\x01\x01\x1e\x85\xe5\x03\x00\xbc.\xba<\x84#\xd5:\njU>\xe1\xc8}\xbdY\x9bL=X@\x06;\x1d#'b'\x00\x05N\xb1y\\\x01\xd4\xfe\x18\x83\x01\x01\xb2}\x93\xa6<@3\xf4\xb8C\xf5Y>\xe1\xda)Dn\xa6\x02\x18\xfd\xe7\xb8\xfd\xfe#'b'\x00\x05N\xb1y\\\x02h\xfe\x1c\x84\x01\x01\xa3:\xe9\x90\xb9Ye\x199n\xc5\x049\x00\x00\x00\x00\x00\x00\x00\x00)\xa4\x84<\xe0 4;\xaaE'b'\x00\x05N\xb1y\\\x02\xe0\xfe\x03\x85\x01\x01\xa5\xc6\x14\x00iB'b'\x00\x05N\xb1y\\\x03X\xfe\x0c\x86\x01\x01\x02\xd8\xc6\xa0y\xb1N\x05\x00\x99\xe5\x03\x00z\x9c'b'\x00\x05N\xb1y\\\x03\xd8\xfe\x16\x87\x01\x01\x88f\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00r\xcb'b'\x00\x05N\xb1y\\\x04T\xfe\x16\x88\x01\x01\xc1/\x7fw=\xf7!I=7]\x9b8\x03\x96\xff<\x00\x00\x00\x00?\x03\x8b<'b'\x00\x05N\xb1y\\\x04\xc4\xfe\x03\x89\x01\x01Ms\x00\x00!\xda'b'\x00\x05N\xb1y\\)\xc4\xfe\x15\x8a\x01\x01$\xa3\xc89\x0f\r\x060\x06%\x06\xf1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15*'b'\x00\x05N\xb1y\\*(\xfe\x16\x8b\x01\x01#\xd5\xe5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd3\xf2'b'\x00\x05N\xb1y\\\xd8\xc3\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe19'b'\x00\x05N\xb1y\\\xee\xdf\xfe!,\xff\x00L2\xc3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00q\xe5'b'\x00\x05N\xb1y]\xa3\xc4\xfe\x1a\x8c\x01\x01\x1b\x08\xb3:\x0f\x00\x00\x00\x00\x10\x00\xdf\xff(\xfc\xe0\xffK\x00\xf4\xff\n\x01\xcc\xffi\x01\xaf\x05'b'\x00\x05N\xb1y]\xa4D\xfe\x16\x8d\x01\x01t\x11\xe6\x03\x00\x16\x00\xdf\xff*\xfc\xef\xffQ\x00\xed\xff\xfb\x00i\xff\x05\x02/\xdc'b'\x00\x05N\xb1y]\xa4\xa0\xfe\x16\x8e\x01\x01\x81\x11\xe6\x03\x00\x0b\x00\xf5\xff\x1f\xfc\xf4\xffj\x00\xd0\xff!\x03?\x00|\x02\xa2E'b'\x00\x05N\xb1y]\xa4\xf0\xfe\x0e\x8f\x01\x01\x1d\x11\xe6\x03\x00\xb4\x9ciDp=\x92\xbdK\x10\x1a\xef'b'\x00\x05N\xb1y]\xa5<\xfe\x0e\x90\x01\x01\x89\x11\xe6\x03\x00\xc9\xdfiD\xc2\xf5f>c\x15\x82]'b'\x00\x05N\xb1y]\xa5\x98\xfe*\x91\x01\x01\x96s\xe7f\xbc\x04m\x01\x00K\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xe6\xf2'b'\x00\x05N\xb1y]\xa6\x04\xfe\x1f\x92\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01\xc1<\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x1c\xfa'b'\x00\x05N\xb1y]\xa6X\xfe\x06\x93\x01\x01}\xc8\x14\x00\x00\x03\x00/\x8c'b'\x00\x05N\xb1y]\xa6\xa4\xfe\x04\x94\x01\x01\x98\x00\x00\x80\x8a@\xfb'b'\x00\x05N\xb1y]\xa6\xe8\xfe\x03\x95\x01\x01Ms\x00\x00;\xba'b'\x00\x05N\xb1y]\xa7t\xfe\x02\x96\x01\x01*\x00\x00\x85\x9a'b'\x00\x05N\xb1y]\xa7\xcc\xfe\x1e\x97\x01\x01\x18x\xd9:\x0f\x00\x00\x00\x00m\xa6\x02\x18\x01\xe8\xb8\xfd\xceh\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\xbd\xc8'b'\x00\x05N\xb1y]\xa8 \xfe\x1a\x98\x01\x01>\xe1zT?\x00\x00@?\x85{\xd1<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8a\x00\x00\x00\xb6\x1d'b'\x00\x05N\xb1y]\xa8h\xfe\x08\x99\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xe5'b'\x00\x05N\xb1y]\xa8\xb8\xfe\x14\x9a\x01\x01J{\x14.>{\x14.>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x001\x00\xfd\x91'b'\x00\x05N\xb1y^\xa6G\xfe5-\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x7f\x16'b'\x00\x05N\xb1y^\xbcC\xfe!.\xff\x00L2\xc3\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0\xb8'b'\x00\x05N\xb1y_"\xc8\xfe\x1c\x9b\x01\x01!\x1b\xe6\x03\x00e\xa6\x02\x18\xfa\xe7\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xee\xff\x06\x00\x03\x00\x8a\x04`\xf6'b'\x00\x05N\xb1y_#H\xfe\x1c\x9c\x01\x01 b\xe6\x03\x00\xf8Z \xbdmlw?o\xb4"\xbf\x11`<\xbe\x83\x81~=0\\\xfc\xbc\x97\xb5'b"\x00\x05N\xb1y_#\xa4\xfe\x1c\x9d\x01\x01\x1e\x8a\xe6\x03\x00\xfc@\x9e<\xa5\xe9\x9dH\xe5\x13\xbd\x94\xbdj\xe1\xda)Dm\xa6\x02\x18\x01\xe8\xb8\xfd\x88 'b'\x00\x05N\xb1y_$@\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c'b'\x00\x05N\xb1y_$\xe0\xfe\x1c\xa0\x01\x01\xa3]\x03\x8f\xb9\n\x0e\x0b9e\xbc\t9\x00\x00\x00\x00\x00\x00\x00\x00\x909n<\xf2\x04(;F\x83'b'\x00\x05N\xb1y_%8\xfe\x03\xa1\x01\x01\xa5\xc5\x14\x00\x8a\xc7'b'\x00\x05N\xb1y_%\x8c\xfe\x0c\xa2\x01\x01\x02x\xbe\xa4y\xb1N\x05\x00\x9e\xe6\x03\x00&\x96'b'\x00\x05N\xb1y_%\xe8\xfe\x16\xa3\x01\x01\x88e\xa6\x02\x18\xfc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00,\x95'b'\x00\x05N\xb1y_&@\xfe\x16\xa4\x01\x01\xc1\x04\xb7x=\xb2gR=\x009\xc19\x8b\x8e\xbd<\x00\x00\x00\x00?\x03\x1b\xdf'b"\x00\x05N\xb1y_\xac/\xfe%/\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xbe\x14"b'\x00\x05N\xb1y`\x81\xab\xfe50\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01V\x90'b'\x00\x05N\xb1y`\xd4k\xfe!1\xff\x00L\r\xf2\x90A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc7\x83'b'\x00\x05N\xb1y`\xd5\x10\xfe\x15\xa5\x01\x01$\r\xc5=\x0f2\x06:\x066\x06\xd1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9e'b'\x00\x05N\xb1y`\xd5\x94\xfe\x16\xa6\x01\x01#\xda\xe6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd4B'b'\x00\x05N\xb1y`\xd5\xf0\xfe\x03\xa7\x01\x01/\xff\x00\x00\n$'b'\x00\x05N\xb1y`\xfd\x98\xfe\x1a\xa8\x01\x01\x1b\x17a>\x0f\x00\x00\x00\x00\x04\x00\xde\xff\x1f\xfc\xee\xff\xca\xff\xf6\xff\x08\x01\xcd\xffl\x01DG'b'\x00\x05N\xb1y`\xfe$\xfe\x16\xa9\x01\x01t\x02\xe7\x03\x00\x03\x00\xe1\xff5\xfc\xee\xff\xd9\xff\xf0\xff\xf7\x00g\xff\t\x02\xb8\xa7'b"\x00\x05N\xb1y`\xfe\xa4\xfe\x16\xaa\x01\x01\x81\x02\xe7\x03\x00\x03\x00\xf3\xff'\xfc\xe9\xff\xb7\xff\xed\xff%\x03.\x00\x8a\x02\x95\xcc"b'\x00\x05N\xb1y`\xff\x1c\xfe\x0e\xab\x01\x01\x1d\x02\xe7\x03\x00\xef\x9eiD\x8f\xc2\x15\xbdK\x10o!'b'\x00\x05N\xb1y`\xff\x88\xfe\x0e\xac\x01\x01\x89\x02\xe7\x03\x00\xd2\xe0iD\x1e\x85w>d\x15\xcci'b'\x00\x05N\xb1ya\x00\x08\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x00\xc1<\xe1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb3 'b'\x00\x05N\xb1ya\x00|\xfe\x06\xae\x01\x01}\xc8\x14\x00\x00\x03\x00\x8e\xa8'b'\x00\x05N\xb1ya\x00\xe8\xfe\x04\xaf\x01\x01\x98\x00\x00\x80\x8a Z'b'\x00\x05N\xb1ya\x01p\xfe\t\xe3\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x00\x80\xac'b'\x00\x05N\xb1ybX$\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1'b'\x00\x05N\xb1ybX\xc4\xfe\x1e\xb1\x01\x01\x18\xa0\xea=\x0f\x00\x00\x00\x00m\xa6\x02\x18\x04\xe8\xb8\xfd\xbah\n\x00F\x00\xff\xff\x12\x00\xf8\x83\x03\x0c\x90\xbc'b'\x00\x05N\xb1ybY`\xfe\x1a\xb2\x01\x01>\xb8\x1e\x05?\\\x8fB?\xd7,\x0b=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8f\x00\x00\x00\x9dn'b'\x00\x05N\xb1ybY\xc0\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv'b'\x00\x05N\xb1ybZ \xfe\x12\xb4\x01\x01\xfc\x14\xe7\x03\x004\x00\x01\x00ARMMASK\x00Wr\xef\x84'b'\x00\x05N\xb1ybZ\x80\xfe\t\xb5\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\x95\xf1'b'\x00\x05N\xb1ybZ\xdc\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86'b'\x00\x05N\xb1yboD\xfe\x14\xb7\x01\x01J\xebQ8>\xebQ8>33s?\x8f\xc2\xf5<\x0b\x001\x00\x99:'b'\x00\x05N\xb1ybo\xa4\xfe\x1c\xb8\x01\x01!\xe4\xe6\x03\x00d\xa6\x02\x18\x00\xe8\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xed\xff\x06\x00\x04\x00q\x04eZ'b'\x00\x05N\xb1ybp\x18\xfe\x1c\xb9\x01\x01 f\xe7\x03\x00h\xc2V\xbd\x00\xca\x81?\xfa\x1a \xbf\x14\nD\xbe\x86P\x88=\xc4\x82C\xbdKF'b'\x00\x05N\xb1yb\x9c\x7f\xfe52\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd3r'b'\x00\x05N\xb1yb\xc6\xb7\xfe!3\xff\x00L\r\xf2\x90A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00F\xde'b'\x00\x05N\xb1yc\xd7\xd8\xfe\x1c\xba\x01\x01\x1e\x8f\xe7\x03\x00H\x8b\x95\xd3\x9bH=\xd6\x0b\xdd<\xcd\xa7>=1\x9b'b'\x00\x05N\xb1yc\xd8T\xfe\x18\xbb\x01\x01\xb26\xf8f<\xc6\xb1\x1f\xc2\xd5)Dm\xa6\x02\x18\x04\xe8\xb8\xfdm<'b'\x00\x05N\xb1yc\xd8\xa0\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0'b'\x00\x05N\xb1yc\xd9H\xfe\x1c\xbd\x01\x01\xa39\xe6\x8c\xb9\x95\xea\xf78\xae\xca\x0e9\x00\x00\x00\x00\x00\x00\x00\x00>4j<\xd7\xfb\x04;\x15\x14'b'\x00\x05N\xb1yc\xd9\x98\xfe\x03\xbe\x01\x01\xa5\xc5\x14\x00@-'b'\x00\x05N\xb1yc\xd9\xf4\xfe\x0c\xbf\x01\x01\x020\xb2\xa8y\xb1N\x05\x00\xa3\xe7\x03\x00\xceY'b'\x00\x05N\xb1yc\xdaD\xfe\x16\xc0\x01\x01\x88d\xa6\x02\x18\x01\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\r5'b'\x00\x05N\xb1yc\xda\x90\xfe\x12\xc1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xd4['b'\x00\x05N\xb1yc\xda\xe0\xfe\x16\xc2\x01\x01\xc1)<|=\xbc\xe5S=_\xfe};\xaf(\xb9<\x00\x00\x00\x00?\x03v\xd3'b'\x00\x05N\xb1yd\x8b\x9b\xfe54\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01M]'b'\x00\x05N\xb1yd\xc8\xcf\xfe!5\xff\x00L\x98v\x8fA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa6$'b'\x00\x05N\xb1yd\xdd\xcb\xfe\t5\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9a!'b'\x00\x05N\xb1yeV\xbc\xfe\x15\xc4\x01\x01$\x1d\xc2A\x0f.\x06\x1a\x06$\x06\xd7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00a\xbf'b'\x00\x05N\xb1yeW8\xfe\x16\xc5\x01\x01#\xdf\xe7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00`\x89'b'\x00\x05N\xb1yeW\x98\xfe\x1a\xc6\x01\x01\x1b\xbd\x0fB\x0f\x00\x00\x00\x00\x03\x00\xf6\xff\x1d\xfcJ\x00\x1e\x00\xe9\xff\x0b\x01\xcc\xffj\x01\x95\n'b'\x00\x05N\xb1yeW\xf0\xfe\x16\xc7\x01\x01t\xf3\xe7\x03\x00\x08\x00\xf6\xff*\xfc2\x00"\x00\xfd\xff\xf9\x00m\xff\x08\x02as'b'\x00\x05N\xb1yeXD\xfe\x16\xc8\x01\x01\x81\xf3\xe7\x03\x00\x00\x00\xf7\xff1\xfc\x1b\x00\x1c\x00\x00\x00\x11\x03X\x00m\x02\xdf\xdc'b'\x00\x05N\xb1yeX\x9c\xfe\x0e\xc9\x01\x01\x1d\xf3\xe7\x03\x00B\x9ciD\xe1z\xa0\xbdL\x10\xf1\xa6'b'\x00\x05N\xb1yeX\xf0\xfe\x0e\xca\x01\x01\x89\xf3\xe7\x03\x00P\xe0iD\xa3po>f\x15c\xd1'b'\x00\x05N\xb1yeYP\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00E\x01\xc1<.\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T[\x96'b'\x00\x05N\xb1yeY\xa8\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02'b'\x00\x05N\xb1yeY\xfc\xfe\x04\xcd\x01\x01\x98\x00\x00\x80\x8a\x80\xd0'b'\x00\x05N\xb1yeZH\xfe\x02\xce\x01\x01*\x00\x00\xa66'b'\x00\x05N\xb1yeZ\xa4\xfe\x1e\xcf\x01\x01\x18\xc8\xfb@\x0f\x00\x00\x00\x00m\xa6\x02\x18\x08\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x13\x00\xf8\x83\x03\x0c|\x90'b'\x00\x05N\xb1ye[\x00\xfe\x1a\xd0\x01\x01>\xaeGa>\xf5(\\?\xcd\xa0\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x96\x00\x00\x00\xa8\xb9'b'\x00\x05N\xb1ye[L\xfe\x08\xd1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xab'b'\x00\x05N\xb1ye[\x98\xfe\x03\xd2\x01\x01Ms\x00\x00\xc4C'b'\x00\x05N\xb1yf\xc7w\xfe57\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x82J'b'\x00\x05N\xb1yf\xdd\x9b\xfe!8\xff\x00L\x98v\x8fA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00yK'b'\x00\x05N\xb1yf\xded\xfe\x14\xd3\x01\x01J\\\x8fB>\\\x8fB>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x001\x00[l'b'\x00\x05N\xb1yf\xde\xf4\xfe\x1c\xd4\x01\x01!\xad\xe7\x03\x00c\xa6\x02\x18\x06\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xed\xff\x08\x00\x03\x00x\x04C\x99'b'\x00\x05N\xb1yf\xdfp\xfe\x1c\xd5\x01\x01 l\xe8\x03\x00%Ls\xbd\xeb\x15\x88?$\xe5!\xbf#\xd7C\xbeR\x07\xb3=^\xcc \xbd\xad\xf2'b'\x00\x05N\xb1yf\xdf\xfc\xfe\x1c\xd6\x01\x01\x1e\x94\xe8\x03\x00\x02\x85\x00=\xa0\xad\x86<\x10\xe8L>\xbb\xe1\x1a\xbd\x87\x02\xa9p\xdd)Dm\xa6\x02\x18\x0c\xe8\xb8\xfdm\xd6'b'\x00\x05N\xb1yhvP\xfe\x1c\xd8\x01\x01\xa3\xf4\x91\x8a\xb9ni\xd78\xb5\x03\x149\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x99\x86f\x15\xf0\x14'b'\x00\x05N\xb1yhz\xcc\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xc1<\xd6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TZ\x19'b'\x00\x05N\xb1yh{$\xfe\x06\xe4\x01\x01}\xc6\x14\x00\x00\x03\x00"\xf4'b'\x00\x05N\xb1yh{t\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX'b'\x00\x05N\xb1yh{\xb8\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b'b'\x00\x05N\xb1yh|\x10\xfe\x1e\xe7\x01\x01\x18\xf0\x0cD\x0f\x00\x00\x00\x00m\xa6\x02\x18\x0c\xe8\xb8\xfd\xa6h\n\x00F\x00\xff\xff\x15\x00\xf8\x83\x03\x0c\xd5\xbf'b'\x00\x05N\xb1yh|d\xfe\x1a\xe8\x01\x01>\x1e\x85\xeb\xbe\x99\x99Y?\xd7\xbf\xb8<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xa0\x00\x00\x00\xce\x88'b'\x00\x05N\xb1yh|\xac\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\x00\x05N\xb1yh}\x00\xfe\x15\xea\x01\x01$=\x10F\x0f!\x06\x06\x06\xfd\x05\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x1a'b'\x00\x05N\xb1yh}P\xfe\x16\xeb\x01\x01#\xf9\xe8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb0O'b'\x00\x05N\xb1yh\xb4\x8f\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\xf7'b'\x00\x05N\xb1yh\xcb\x17\xfe!:\xff\x00L\x97\xa0\x8fA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00~8'b'\x00\x05N\xb1yj\x0c@\xfe\x03\xec\x01\x01Ms\x00\x00A\x9e'b'\x00\x05N\xb1yj! \xfe\x14\xed\x01\x01J\xcc\xccL>\xcc\xccL>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x000\x00,\xa9'b'\x00\x05N\xb1yj\x90\x97\xfe5;\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbe\x15'b'\x00\x05N\xb1yj\xbe\xef\xfe!<\xff\x00L\x97\xa0\x8fA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfd\xde'b'\x00\x05N\xb1yl\x96\xe7\xfe5=\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01 :'b'\x00\x05N\xb1yl\x9cK\xfe!>\xff\x00L\x97\xa0\x8fA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00|\x83'b'\x00\x05N\xb1ym\t\xe8\xfe\x1c\xee\x01\x01!?\xe9\x03\x00b\xa6\x02\x18\r\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xeb\xff\r\x00\x03\x00\x92\x04\x99"'b'\x00\x05N\xb1ym\nt\xfe\x1c\xef\x01\x01 q\xe9\x03\x00\xa9\xc9\x8d\xbd\xf7\xd8\x8f?\xc6\xd5"\xbf+]Y\xbe\n1\x07>\xd3\xd1\x17\xbdy\r'b'\x00\x05N\xb1ym\n\xd0\xfe\x1c\xf0\x01\x01\x1e\x99\xe9\x03\x00\xb7CA<\xf0\x84j<\xc5\x10Q>Qk\xb7\xbdW)"\xbc\xc7:\xa7\xbbkG'b'\x00\x05N\xb1ym\x0b$\xfe\x18\xf1\x01\x01\xb2fc\x14\x99\xd9)Dl\xa6\x02\x18\x10\xe8\xb8\xfd\x10\x82'b'\x00\x05N\xb1ym\x0bh\xfe\x03\xf2\x01\x01Ms\x00\x004\xf5'b'\x00\x05N\xb1ym\x1f\xd8\xfe\x1c\xf3\x01\x01\xa3\xbe\x0e\x88\xb9\xcc\x1c\xb58\xd5P\x199\x00\x00\x00\x00\x00\x00\x00\x00\xf8(rg\x156\xb7'b'\x00\x05N\xb1ym\xc4\x08\xfe\x1f\xfd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\xae<\xd7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x92 'b'\x00\x05N\xb1ym\xc4\\\xfe\x06\xfe\x01\x01}\xc5\x14\x00\x00\x03\x00\x81:'b'\x00\x05N\xb1ym\xc4\xac\xfe\x04\xff\x01\x01\x98\x00\x00\x80\x8a\xd7C'b'\x00\x05N\xb1ym\xc4\xf0\xfe\x02\x00\x01\x01*\x00\x00\x9c\xf1'b'\x00\x05N\xb1ym\xc5D\xfe\x1e\x01\x01\x01\x18\x18\x1eG\x0f\x00\x00\x00\x00l\xa6\x02\x18\x10\xe8\xb8\xfd\xa6h\n\x00F\x00\xff\xff\x13\x00\xf8\x83\x03\x0c\xc9\xf7'b"\x00\x05N\xb1ym\xc5\x98\xfe\x1a\x02\x01\x01>\xe1z\x94\xbf\\\x8fB?\x14\xdc\xc9<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xae\x00\x00\x00\xed'"b'\x00\x05N\xb1ym\xc5\xe0\xfe\x08\x03\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa6_'b'\x00\x05N\xb1ym\xc60\xfe\x15\x04\x01\x01$\t\x08J\x0f\x0f\x06\x16\x06&\x06\xf5\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x9d'b'\x00\x05N\xb1ym\xc6\x80\xfe\x16\x05\x01\x01#\xfd\xe9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00~\xfa'b'\x00\x05N\xb1ym\xc6\xc8\xfe\x03\x06\x01\x01Ms\x00\x00q\xa0'b'\x00\x05N\xb1ynQ[\xfe5?\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa5\xd8'b'\x00\x05N\xb1yn\x8b\x14\xfe\x14\x07\x01\x01J\x1e\x85k>\x1e\x85k>\x8f\xc2u?\n\xd7\xa3<\x0b\x001\x00w2'b'\x00\x05N\xb1yn\x8b\x8c\xfe\x1c\x08\x01\x01!\x07\xea\x03\x00a\xa6\x02\x18\x14\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xed\xff\x0c\x00\x03\x00\xa7\x04\x1d\xb8'b'\x00\x05N\xb1yn\x8b\xf4\xfe\x1c\t\x01\x01 v\xea\x03\x0000\xa8\xbd\xf9\xb5\x97?(\t"\xbf\x17\xadH\xbe\xd8\x94\x00>\n(\x01\xbd\xb1#'b'\x00\x05N\xb1yn\xf0\x0b\xfe!@\xff\x00L_\xad\x92A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb2\x06'b"\x00\x05N\xb1yo\xf5w\xfe%A\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00=\xeb"b'\x00\x05N\xb1yp0\x00\xfe\x1c\n\x01\x01\x1e\x9f\xea\x03\x00\xc2\x14N\xbb\ro\x85\xa3\xec.\xbd\xee$^\xbd\x88[\x8d<\xd8\x0f'b'\x00\x05N\xb1yp0|\xfe\x18\x0b\x01\x01\xb2>\xa9\xe2\xbb6\x87\x95<\x96.Y>\xb8\xde)Dk\xa6\x02\x18\x15\xe8\xb8\xfd\xfbl'b'\x00\x05N\xb1yp0\xd8\xfe\x1c\x0c\x01\x01\xa3\xc6n\x85\xb9\x10\x8d\x918\xd6\x9d\x1e9\x00\x00\x00\x00\x00\x00\x00\x00M\x83M<4\x87\xa4;\x8a\xa8'b'\x00\x05N\xb1yp1\x1c\xfe\x03\r\x01\x01\xa5\xc5\x14\x00\xfa\x81'b'\x00\x05N\xb1yp1h\xfe\x0c\x0e\x01\x01\x02(\x95\xb4y\xb1N\x05\x00\xb3\xea\x03\x00\x0fe'b'\x00\x05N\xb1yp1\xbc\xfe\x16\x0f\x01\x01\x88a\xa6\x02\x18\x16\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00pw'b'\x00\x05N\xb1yp2\x0c\xfe\x16\x10\x01\x01\xc1Xs\\="\x07P=\xcc\x98 ;\xad5\r=\x00\x00\x00\x00?\x03\x16,'b'\x00\x05N\xb1yp2\\\xfe\x03\x11\x01\x01Ms\x00\x00\x07g'b'\x00\x05N\xb1yp2\xfc\xfe\x1a\x12\x01\x01\x1b\x19\x1bM\x0f\x00\x00\x00\x00\x12\x00\xe3\xff\x1d\xfc\xe3\xff\xd2\xff\x1d\x00\x05\x01\xc4\xffj\x01\xe4\xf2'b'\x00\x05N\xb1yp3\\\xfe\x16\x13\x01\x01t\xc7\xea\x03\x00\x11\x00\xec\xff<\xfc\xd7\xff\xc1\xff\x1a\x00\xf7\x00`\xff\n\x02\xfe\x07'b'\x00\x05N\xb1yp3\xbc\xfe\x16\x14\x01\x01\x81\xc7\xea\x03\x00\x0e\x00\xf2\xff\x06\xfc\xd0\xff\x9f\xff\x14\x00$\x03?\x00\x81\x02W\xbb'b'\x00\x05N\xb1yp4$\xfe\x0e\x15\x01\x01\x1d\xc7\xea\x03\x00\x97\x9ciD\x85\xeb\x95\xbdL\x10\xd8\xc7'b'\x00\x05N\xb1yp4|\xfe\x0e\x16\x01\x01\x89\xc7\xea\x03\x00\x9b\xe1iD=\n\x82>g\x15\x0e\x8a'b'\x00\x05N\xb1yp5\x08\xfe\x1f\x17\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xae<\xe2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TV/'b'\x00\x05N\xb1yp5h\xfe\x06\x18\x01\x01}\xc8\x14\x00\x00\x03\x00-\\'b'\x00\x05N\xb1yp5\xc0\xfe\x04\x19\x01\x01\x98\x00\x00\x80\x8aE2'b'\x00\x05N\xb1yp6\x0c\xfe\x02\x1a\x01\x01*\x00\x00\x02\xad'b'\x00\x05N\xb1yp6l\xfe\x1e\x1b\x01\x01\x18h@M\x0f\x00\x00\x00\x00j\xa6\x02\x18\x1b\xe8\xb8\xfd\x9ch\n\x00F\x00\xff\xff\x1a\x00\xba\x17\x03\x0c\xdag'b'\x00\x05N\xb1yp6\xc0\xfe\x1a\x1c\x01\x01>\xf5(\xbc\xbf\xcc\xccL?R<\xd0<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xbd\x00\x00\x00!a'b'\x00\x05N\xb1yp7\x04\xfe\x08\x1d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf05'b'\x00\x05N\xb1yp7L\xfe\t\xe4\n\x00m\x92\x00\x00\x00\x00\xdb\x00\x00\x005O'b'\x00\x05N\xb1yp7\x90\xfe\x03\x1e\x01\x01/\xff\x00\x00c\xae'b'\x00\x05N\xb1yp`\x18\xfe\x12\x1f\x01\x01\xfc\x01\xeb\x03\x004\x00\x01\x00ARMMASK\x00Wr\x88\xae'b'\x00\x05N\xb1yp`\xa0\xfe\t \x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xcf,'b'\x00\x05N\xb1yp\xc3\xa3\xfe5B\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01N\xb7'b'\x00\x05N\xb1yq\x00\xab\xfe!C\xff\x00L\xfa\xb4\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00b\x19'b'\x00\x05N\xb1yq\xc4\xc4\xfe\x15!\x01\x01$\x99\x07N\x0f\r\x06\xe0\x05G\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\xfc'b'\x00\x05N\xb1yq\xc5\x8c\xfe\x16"\x01\x01#\x04\xeb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9f='b'\x00\x05N\xb1yq\xc6$\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81'b'\x00\x05N\xb1yq\xdb(\xfe\x14$\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>\x8f\xc2u?\n\xd7\xa3<\x0c\x000\x00Wa'b'\x00\x05N\xb1yr\xb9\xf7\xfe5D\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd0\x98'b'\x00\x05N\xb1yr\xd0\x1f\xfe!E\xff\x00L\xfa\xb4\x95A\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1\xff'b'\x00\x05N\xb1ys3\xb0\xfe\x1c%\x01\x01!\xd1\xea\x03\x00`\xa6\x02\x18\x1b\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf2\xff\x08\x00\x03\x00\xd3\x04\xa7E'b'\x00\x05N\xb1ys4X\xfe\x1c&\x01\x01 |\xeb\x03\x00S8\xb8\xbd\x03\xfb\x9e?\\\xd4"\xbfF/\x10\xbe\xc8\x81\xb1=\xd2\xc3\x02\xbd\'\xd6'b"\x00\x05N\xb1ys4\xb8\xfe\x1c'\x01\x01\x1e\xa4\xeb\x03\x00.\x08\xc7\xbc\xad\xba\x9d;\xc7\x08]>\xb2C\xae\xbd\xb9\x087=\xf1\x9f\x9a;`\xba"b'\x00\x05N\xb1ys5\x10\xfe\x18(\x01\x01\xb2\t0\xe6\xbc\x82\xae\xce;\xa8\x0ea>\xe1\xda)Dh\xa6\x02\x18 \xe8\xb8\xfd\xd1\xbb'b'\x00\x05N\xb1ys5h\xfe\x1a)\x01\x01\x1b|\xc9P\x0f\x00\x00\x00\x00\x16\x00\xd2\xff\x1d\xfc\xcf\xff6\x00\x1e\x00\x0c\x01\xbd\xffi\x015\xf3'b'\x00\x05N\xb1ys5\xbc\xfe\x16*\x01\x01t\xb8\xeb\x03\x00\x15\x00\xd0\xff0\xfc\xcf\xff4\x00\x10\x00\xfa\x00Z\xff\x06\x02\xc8>'b"\x00\x05N\xb1ys6\x14\xfe\x16+\x01\x01\x81\xb8\xeb\x03\x00\x11\x00\xe4\xff\x1b\xfc\xe4\xff%\x00\x18\x00-\x03'\x00}\x02\x14)"b'\x00\x05N\xb1ys6`\xfe\x0e,\x01\x01\x1d\xb8\xeb\x03\x00\xfb\x9ciD\xa4p\x89\xbdM\x10\xeb\x03'b'\x00\x05N\xb1ys6\xac\xfe\x0e-\x01\x01\x89\xb8\xeb\x03\x00L\xe3iD\x99\x99\x8f>i\x15\x18\xd9'b'\x00\x05N\xb1ys7\x04\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00*\x00\xae<\xed\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x80\x9e'b'\x00\x05N\xb1ys7X\xfe\x06/\x01\x01}\xc8\x14\x00\x00\x03\x00\x04o'b'\x00\x05N\xb1ys7\xa4\xfe\x030\x01\x01Ms\x00\x00HP'b'\x00\x05N\xb1ys8X\xfe\x041\x01\x01\x98\x00\x00\x80\x8a\xb6\xba'b'\x00\x05N\xb1ys8\xa0\xfe\x022\x01\x01*\x00\x00m\x10'b'\x00\x05N\xb1ys8\xf4\xfe\x1e3\x01\x01\x18\x90QP\x0f\x00\x00\x00\x00h\xa6\x02\x18 \xe8\xb8\xfd\x92h\n\x00F\x00\xff\xff\x16\x00\xba\x17\x03\x0c\\V'b'\x00\x05N\xb1ys9H\xfe\x1a4\x01\x01>33\xb3\xbf\xaeG\xa1?Rl\xc7<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xcb\x00\x00\x00\xc6R'b'\x00\x05N\xb1ys9\x90\xfe\x085\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x008\xad'b'\x00\x05N\xb1yt<\x7f\xfe\tF\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa3\x92'b'\x00\x05N\xb1yt\x86{\xfe5G\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1f\x8f'b"\x00\x05N\xb1yt\xb8\x03\xfe!H\xff\x00L\xa6$\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbb'"b'\x00\x05N\xb1yt\xcd\xcc\xfe\x1c6\x01\x01\xa35o\x82\xb9\x08\x9cS8Yy$9\x00\x00\x00\x00\x00\x00\x00\x00^eY=\x13\xe2\t<\xd5v\xc1<\x00\x00\x00\x00?\x03U\xf0'b'\x00\x05N\xb1yt\xd0\xcc\xfe\x15<\x01\x01$\xe0\x04R\x0f\x13\x06\xdc\x05D\x069\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\xb8'b'\x00\x05N\xb1yt\xd1D\xfe\x16=\x01\x01#\t\xec\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa2\x92'b'\x00\x05N\xb1yvP\xc8\xfe\x03>\x01\x01Ms\x00\x00E`'b'\x00\x05N\xb1yve\xa0\xfe\x14?\x01\x01J\xaeGa>\xaeGa>\x8f\xc2u?\n\xd7#<\x0c\x001\x00c\x03'b'\x00\x05N\xb1yvf\x0c\xfe\x1c@\x01\x01!c\xec\x03\x00a\xa6\x02\x18\x1f\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf6\xff\x01\x00\x01\x00\xe3\x04j\xf3'b'\x00\x05N\xb1yvft\xfe\x1cA\x01\x01 \x81\xec\x03\x00B\xa8\xaf\xbd$\xd8\xa3?%\x03#\xbf\xfe\x1a\xd3\xbd\x81\x9f\x95<\xf0\xa0\x90\xbc_A'b'\x00\x05N\xb1yv\x96\x83\xfe5I\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2\xf5\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x97\xe5'b'\x00\x05N\xb1yv\xac\xf3\xfe!J\xff\x00L\xa6$\x9bA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00:z'b'\x00\x05N\xb1yw\xe1\x80\xfe\x1aB\x01\x01\x1b\xe4wT\x0f\x00\x00\x00\x00\x15\x00\xe1\xff\x1e\xfc\xe9\xff\xff\xff\xe5\xff\x05\x01\xb9\xffk\x01\x06\x92'b'\x00\x05N\xb1yw\xe2\x0c\xfe\x16C\x01\x01t\xa9\xec\x03\x00\x14\x00\xd4\xff\x1d\xfc\xf7\xff\x10\x00\xeb\xff\xf3\x00T\xff\x07\x02G\r'b'\x00\x05N\xb1yw\xe2l\xfe\x16D\x01\x01\x81\xaa\xec\x03\x00\x10\x00\xec\xff!\xfc\xe8\xff\xfc\xff\xe9\xff#\x03\x1b\x00\x87\x029\x19'b'\x00\x05N\xb1yw\xe2\xbc\xfe\x0eE\x01\x01\x1d\xaa\xec\x03\x00;\x9diD\xa4p\x81\xbdM\x10\xa7A'b'\x00\x05N\xb1yw\xe3\x18\xfe\x0eF\x01\x01\x89\xaa\xec\x03\x00\xd3\xdeiD\x99\x99W>h\x15b\x17'b'\x00\x05N\xb1yw\xe3\x88\xfe\x1fG\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00=\x01\x89<\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa3\xfd'b'\x00\x05N\xb1yw\xe3\xd8\xfe\x06H\x01\x01}\xc5\x14\x00\x00\x03\x00"\xce'b'\x00\x05N\xb1yw\xe4$\xfe\x03I\x01\x01Ms\x00\x002t'b'\x00\x05N\xb1yw\xf8\x80\xfe\x04J\x01\x01\x98\x00\x00\x80\x8a\xb5\xfd'b'\x00\x05N\xb1yw\xf8\xdc\xfe\x02K\x01\x01*\x00\x00\x18@'b'\x00\x05N\xb1yw\xf9D\xfe\x1eL\x01\x01\x18\xb8bS\x0f\x00\x00\x00\x00h\xa6\x02\x18$\xe8\xb8\xfd\x88h\n\x00F\x00\xff\xff\x13\x00\xba\x17\x03\x0c1\xc5'b'\x00\x05N\xb1yw\xf9\xa4\xfe\x1aM\x01\x01>p=J\xbf\xcc\xcc\xcc?\xeb\xa9\xb6<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xd1\x00\x00\x00\x8fT'b'\x00\x05N\xb1yw\xf9\xf4\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02'b'\x00\x05N\xb1yw\xfaP\xfe\x1cO\x01\x01\x1e\xbe\xec\x03\x00\xc2\xe6\xa2\xbc\xfe=\xc49Br<8!\x0b\xf6\xd8)Dh\xa6\x02\x18$\xe8\xb8\xfd!\x94'b'\x00\x05N\xb1yw\xfb\x04\xfe\x1cQ\x01\x01\xa3\xaf\x11\x7f\xb9.\xbd\x088\xbb *9\x00\x00\x00\x00\x00\x00\x00\x00\xd9jN\n\xd7#>\x8f\xc2u?\x00\x00\x00\x00\x0c\x005\x00\x14)'b'\x00\x05N\xb1yz\xd3\xd0\xfe\x1c\\\x01\x01!,\xed\x03\x00a\xa6\x02\x18!\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf6\xff\xfb\xff\xff\xff\x04\x05\xf2/'b'\x00\x05N\xb1yz\xd4<\xfe\x1c]\x01\x01 \x87\xed\x03\x00\xc8\x1a\xa8\xbd\xd1I\xa6?|j!\xbfr/\xd0\xbd\xb0\x9ck\xbd\x81\xbb\x89<\x01\xca'b'\x00\x05N\xb1yz\xd4\x98\xfe\x1a^\x01\x01\x1bC&X\x0f\x00\x00\x00\x00\x15\x00\xf4\xff\xff\xfb8\xff\xd0\xff\xc3\x01\x07\x01\xbc\xffk\x01\x88M'b'\x00\x05N\xb1yz\xd4\xec\xfe\x16_\x01\x01t\x9b\xed\x03\x00\x10\x00\xf3\xff\x00\xfcL\xff\xd3\xff\x97\x01\xf3\x00Y\xff\x0b\x02<<'b'\x00\x05N\xb1yz\xd5\\\xfe\x16`\x01\x01\x81\x9b\xed\x03\x00\x08\x00\xe3\xff\xeb\xfbi\xff\xd8\xff\x93\x01\x17\x03\x1f\x00\x7f\x02[\xf6'b'\x00\x05N\xb1yz\xd5\xb8\xfe\x0ea\x01\x01\x1d\x9b\xed\x03\x00R\x9ciD\\\x8f\x9e\xbdM\x10\xf6\xbd'b'\x00\x05N\xb1yz\xd6\x18\xfe\x0eb\x01\x01\x89\x9b\xed\x03\x00^\xe1iD\xf6(\x80>i\x15\xdas'b'\x00\x05N\xb1yz\xd6\x84\xfe\x1fc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x89<\x0f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sx\x87'b'\x00\x05N\xb1yz\xd6\xe8\xfe\x06d\x01\x01}\xc6\x14\x00\x00\x03\x009f'b'\x00\x05N\xb1yz\xd7H\xfe\x04e\x01\x01\x98\x00\x00\x80\x8a\xa4\x9c'b'\x00\x05N\xb1yz\xd7\x9c\xfe\x02f\x01\x01*\x00\x00\xd4\r'b"\x00\x05N\xb1yz\xd8\x00\xfe\x1eg\x01\x01\x18\xe0sV\x0f\x00\x00\x00\x00h\xa6\x02\x18'\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\x10\x00\xba\x17\x03\x0cm,"b'\x00\x05N\xb1yz\xd8h\xfe\x1ah\x01\x01>Q9\xa3\xbf\x07W\x96?\xa4\x8e\xdc<\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\xc9\xb4'b'\x00\x05N\xb1yz\xd8\xbc\xfe\x08i\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00e\xaf'b'\x00\x05N\xb1yz\xd9 \xfe\x1cj\x01\x01\x1e\xaf\xed\x03\x00\xbd\xb9\x01\xbdf\xb1\xcf<\x03\x8by>\xc5\xa8T\xbe"\x1b\xa0\xbd\xf3\xf5\x0c?\xd3\xd4'b"\x00\x05N\xb1yz\xd9p\xfe\x18k\x01\x01\xb2\xab\x1e\r\xbd\x01\xc0\xef<\x9d\xa8w>G\xe1)Dh\xa6\x02\x18'\xe8\xb8\xfd=\xd7"b'\x00\x05N\xb1yz\xd9\xb4\xfe\x03l\x01\x01Ms\x00\x00\xa3U'b'\x00\x05N\xb1y|8W\xfe5P\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\xb8\x1e\x05\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01nI'b'\x00\x05N\xb1y|N\x8b\xfe!Q\xff\x00L\xe9F\xafA\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0e\xa8'b'\x00\x05N\xb1y|c\xe8\xfe\x1cm\x01\x01\xa3\xddwy\xb9e\x9e\x8674\x8d/9\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xee\x83h\x15\r@'b'\x00\x05N\xb1y\x7f\x87\xa0\xfe\x1f}\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00c\x89<[\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SuA'b'\x00\x05N\xb1y\x7f\x87\xfc\xfe\x06~\x01\x01}\xc8\x14\x00\x00\x03\x00\xd5\x86'b'\x00\x05N\xb1y\x7f\x88P\xfe\x04\x7f\x01\x01\x98\x00\x00\x80\x8a\x00\x87'b'\x00\x05N\xb1y\x7f\x88\x9c\xfe\x02\x80\x01\x01*\x00\x00\x81w'b'\x00\x05N\xb1y\x7f\x88\xf4\xfe\x1e\x81\x01\x01\x18\xe86Y\x0f\x00\x00\x00\x00f\xa6\x02\x18(\xe8\xb8\xfdjh\n\x00F\x00\xff\xff\x07\x00\xba\x17\x03\x0ca\x7f'b'\x00\x05N\xb1y\x7f\x89`\xfe\x1a\x82\x01\x01>\x92\xd63>V\x8a)?p\xd0_=\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\xb9x'b'\x00\x05N\xb1y\x7f\x89\xb8\xfe\x08\x83\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x04\x99'b'\x00\x05N\xb1y\x7f\x8a\x18\xfe\x1c\x84\x01\x01\x1e\xb5\xee\x03\x00I\x08\xb7\xbc\x82\xe4.0>\xb2=\xf8\xac*\xbe\xbe\xcc\xd1>\xc5\xbf'b'\x00\x05N\xb1y\x7f\x8ax\xfe\x18\x85\x01\x01\xb2w\xd1\xdb\xbc\x13\x97\x85<\xbc5\xb5>\x8f\xe2)Df\xa6\x02\x18(\xe8\xb8\xfd\xdf\xf9'b'\x00\x05N\xb1y\x7f\x8a\xc8\xfe\x03\x86\x01\x01Ms\x00\x00\x93k'b'\x00\x05N\xb1y\x7f\x9f\xa0\xfe\x1c\x87\x01\x01\xa3?\x18s\xb9\xd9\x7f\x01\xb6\xf2r59\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x02\xaf\x15\x001\x00\x19j'b'\x00\x05N\xb1y\x82\x85$\xfe\x1a\x93\x01\x01\x1b\x12\x84_\x0f\x00\x00\x00\x00\x19\x00\xdb\xff\x91\xfcy\x00C\x00&\x01\xfd\x00\x97\xffj\x01\x91='b'\x00\x05N\xb1y\x82\x85\xb4\xfe\x16\x94\x01\x01t}\xef\x03\x00\x14\x00\xeb\xff\xb3\xfcd\x00E\x00\x1c\x01\xf7\x00I\xff\x10\x02\xddE'b"\x00\x05N\xb1y\x82\x86\x14\xfe\x16\x95\x01\x01\x81}\xef\x03\x00\x11\x00\xe0\xff\x9a\xfc\x84\x007\x00'\x01\x13\x03\x1a\x00\x85\x02'W"b'\x00\x05N\xb1y\x82\x86d\xfe\x0e\x96\x01\x01\x1d~\xef\x03\x00\x86\x9ciD\x00\x00\x98\xbdM\x10\xde\x1d'b'\x00\x05N\xb1y\x82\x86\xb4\xfe\x0e\x97\x01\x01\x89~\xef\x03\x00}\xe1iD\xb8\x1e\x81>j\x15\x8d+'b'\x00\x05N\xb1y\x82\x87\x10\xfe\x1f\x98\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\x89p=*@=\n\xd7>3\r$=\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\xaf\x00g\x9a\xefc'b'\x00\x05N\xb1y\x82\x88\xf4\xfe\x08\x9e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xfd'b'\x00\x05N\xb1y\x82\x89H\xfe\x1c\x9f\x01\x01!t\xef\x03\x00c\xa6\x02\x18\x1d\xe8\xb8\xfdn_\n\x00\xde\x03\x00\x00\x00\x00\xeb\xff\x07\x00\xef\x08Dk'b'\x00\x05N\xb1y\x82\x89\xa8\xfe\x1c\xa0\x01\x01 \x92\xef\x03\x00Y8~\xbdmU\xa1?\xfc\x1f+\xbf\xfdi\xca;\xe4\xbaZ\xbe\xf6\xf0\x9b\xbd"\xaf'b'\x00\x05N\xb1y\x82\x89\xf0\xfe\x03\xa1\x01\x01Ms\x00\x00mA'b'\x00\x05N\xb1y\x83\xb5#\xfe\tY\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x90\xdb'b'\x00\x05N\xb1y\x84\x08\xd0\xfe\x1c\xa2\x01\x01\x1e\xba\xef\x03\x00\xefvh<\x18\xe5<\x0e\x1a\r>\xcb^[>p\x8d)?\xa10'b'\x00\x05N\xb1y\x84\tX\xfe\x18\xa3\x01\x01\xb2\x883"<\xbb\xbbW<\x93J\xd7>\xeb\xe1)Dg\xa6\x02\x18\'\xe8\xb8\xfd8u'b'\x00\x05N\xb1y\x84\t\xb4\xfe\x1c\xa4\x01\x01\xa3\x82^l\xb9\x1e#\xa7\xb7\x17t;9\x00\x00\x00\x00\x00\x00\x00\x005\xf0\xbc<\xf3oL\n\xd7#>\x00\x00\x80?\n\xd7#=\x1d\x00;\x00\x0f\x1b'b'\x00\x05N\xb1y\x85\xa3\x10\xfe\x1a\xaf\x01\x01\x1b\x9c1c\x0f\x00\x00\x00\x00\xf9\xff\xe3\xff\x9d\xfb\xc8\x00\x9c\xff?\x01\xf0\x00\x8f\xffo\x01\x00\r'b'\x00\x05N\xb1y\x85\xa3d\xfe\x16\xb0\x01\x01to\xf0\x03\x00\xf2\xff\xe7\xff\x84\xfb\xc9\x00\xb6\xff%\x01\xe8\x00)\xff\n\x02^\xd9'b'\x00\x05N\xb1y\x85\xa3\xbc\xfe\x16\xb1\x01\x01\x81o\xf0\x03\x00\xfe\xff\xea\xff\x95\xfb\xba\x00\xe1\xff"\x01\x06\x03\x07\x00\x7f\x02\xb4\x86'b'\x00\x05N\xb1y\x85\xa4\x0c\xfe\x0e\xb2\x01\x01\x1do\xf0\x03\x00\xe5\x9ciD\xf6(\x8c\xbdM\x10\xff8'b'\x00\x05N\xb1y\x85\xa4X\xfe\x0e\xb3\x01\x01\x89o\xf0\x03\x00E\xe0iDR\xb8n>i\x15\xaf\xd3'b'\x00\x05N\xb1y\x85\xa4\xb0\xfe*\xb4\x01\x01\x96s\xe7f\xbc\x05m\x01\x00M\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00=]'b'\x00\x05N\xb1y\x85\xa5\x08\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xe2<\x82\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SW\xd1'b'\x00\x05N\xb1y\x85\xa5X\xfe\x06\xb6\x01\x01}\xc5\x14\x00\x00\x03\x00.K'b'\x00\x05N\xb1y\x85\xa5\xa4\xfe\x04\xb7\x01\x01\x98\x00\x00\x80\x8a~\xda'b"\x00\x05N\xb1y\x85\xa5\xe8\xfe\x02\xb8\x01\x01*\x00\x00'\x7f"b'\x00\x05N\xb1y\x85\xa6<\xfe\x1e\xb9\x01\x01\x18Hnb\x0f\x00\x00\x00\x00h\xa6\x02\x18$\xe8\xb8\xfd\x88h\n\x00F\x00\xff\xff\x10\x00\xba\x17\x03\x0c7\x9d'b"\x00\x05N\xb1y\x85\xa6\x8c\xfe\x1a\xba\x01\x01>\t\x00E@\x04\xc2\xbc\xbd\x14'\x89=\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\xd8="b'\x00\x05N\xb1y\x85\xa6\xd4\xfe\x08\xbb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1c['b'\x00\x05N\xb1y\x85\xeb\x97\xfe5\\\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdb\x10'b'\x00\x05N\xb1y\x86)\xbb\xfe!]\xff\x00Ll\x98\x17B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1\x9d'b'\x00\x05N\xb1y\x87\x18\xd0\xfe\x1c\xbc\x01\x01!=\xf0\x03\x00e\xa6\x02\x18\x1a\xe8\xb8\xfdx_\n\x00\xe8\x03\x00\x00\xfb\xff\xee\xff\r\x00\xf7\x0b\x00@'b'\x00\x05N\xb1y\x87\x19h\xfe\x1c\xbd\x01\x01 \x97\xf0\x03\x00\xb4\x1d\x0e\xbdM\x97\x9d?k\xc3-\xbf\x16\xbd^\xbd=6>\xbe\x98~\r\xbe\x98e'b'\x00\x05N\xb1y\x87\x19\xbc\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\x00\x05N\xb1y\x87\x1aP\xfe\x1c\xbf\x01\x01\x1e\xbf\xf0\x03\x00\xb1\xcd\x7f="#;<2\x92\n?\x819\x10>|\x1d\xf1\xber\x164>\xe1\xe3'b'\x00\x05N\xb1y\x87\x1a\xa8\xfe\x18\xc0\x01\x01\xb2\x86\x99s=\xf23\xaa<\x86\xec\n?{\xe4)Dh\xa6\x02\x18$\xe8\xb8\xfd\xde)'b'\x00\x05N\xb1y\x87\x1a\xfc\xfe\x1c\xc1\x01\x01\xa3?ke\xb9U\x1f\x1f\xb8\x95XA9\x00\x00\x00\x00\x00\x00\x00\x00h\x01\xae'b'\x00\x05N\xb1y\x89\xb3\xab\xfe5`\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x06;'b'\x00\x05N\xb1y\x89\xddw\xfe!a\xff\x00LNF@B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00x\xb1'b'\x00\x05N\xb1y\x8a&(\xfe\x1a\xc9\x01\x01\x1b6\xdff\x0f\x00\x00\x00\x00\x1a\x00\xe8\xff6\xfc\x87\xff\xdd\xff\x82\x02\xf1\x00\x81\xffm\x01 \x06'b'\x00\x05N\xb1y\x8a&\xb4\xfe\x16\xca\x01\x01t`\xf1\x03\x00\x19\x00\xe8\xffF\xfcu\xff\xd5\xff\x81\x02\xec\x00$\xff\r\x02K='b"\x00\x05N\xb1y\x8a' \xfe\x16\xcb\x01\x01\x81`\xf1\x03\x00\x0b\x00\xe9\xff4\xfc\x80\xff\xf1\xff\x89\x02%\x03\xe7\xff~\x02o\x14"b"\x00\x05N\xb1y\x8a'|\xfe\x0e\xcc\x01\x01\x1d`\xf1\x03\x00\xcc\x9ciD33\x8f\xbdM\x10W\x9a"b"\x00\x05N\xb1y\x8a'\xd0\xfe\x0e\xcd\x01\x01\x89`\xf1\x03\x00F\xe1iD\xcc\xcc~>k\x15c\n"b'\x00\x05N\xb1y\x8a(0\xfe\x1f\xce\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\xe2<\xec\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xb9*'b'\x00\x05N\xb1y\x8a(\x94\xfe\x06\xcf\x01\x01}\xc5\x14\x00\x00\x03\x00\xdf\xfc'b'\x00\x05N\xb1y\x8a(\xec\xfe\x04\xd0\x01\x01\x98\x00\x00\x80\x8a\xc6"'b'\x00\x05N\xb1y\x8a)<\xfe\x02\xd1\x01\x01*\x00\x00\x9b\x9a'b'\x00\x05N\xb1y\x8a)\x9c\xfe\x1e\xd2\x01\x01\x18\x88{e\x0f\x00\x00\x00\x00h\xa6\x02\x18"\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\t\x00\xba\x17\x03\x0cMw'b'\x00\x05N\xb1y\x8a)\xfc\xfe\x1a\xd3\x01\x01>,\x82\xd7?\xcc\xdeQ\xbf3\x15n=\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00[\x1d'b'\x00\x05N\xb1y\x8a*L\xfe\x08\xd4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xb8'b'\x00\x05N\xb1y\x8a*\xa4\xfe\x14\xd5\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xb8\x1e\x85?\\\x8fB>#\x00/\x00\xdda'b'\x00\x05N\xb1y\x8a+\x00\xfe\x1c\xd6\x01\x01!\x05\xf1\x03\x00f\xa6\x02\x18\x19\xe8\xb8\xfd\xaa_\n\x00\x1a\x04\x00\x00\xfc\xff\xfd\xff\x11\x00\x9f\x0e\x0c]'b'\x00\x05N\xb1y\x8a+l\xfe\x1c\xd7\x01\x01 \x9c\xf1\x03\x00?-\x06\xbd\xb8\xdf\x9c?\xcb[:\xbf\xeb\xbb,\xbds1\x15\xbd7\xba5\xbe\x1e\x03'b'\x00\x05N\xb1y\x8a+\xbc\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\x00\x05N\xb1y\x8b\x93+\xfe5b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x83\xd9'b'\x00\x05N\xb1y\x8b\xaa\x9f\xfe!c\xff\x00LNF@B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf9\xec'b'\x00\x05N\xb1y\x8b\xab\x84\xfe\x1c\xd9\x01\x01\x1e\xc4\xf1\x03\x00\x05S\x18=\xde~\xcb\xbc\xb09/?\xee\xe6\n\xbd\xe6\x84\xf0=M\x98G?\x88\xa8'b'\x00\x05N\xb1y\x8b\xab\xf0\xfe\x18\xda\x01\x01\xb2\x9d\xb6\x16=\x8c\x87\xa6\xbck>.?\xb8\xde)Dh\xa6\x02\x18"\xe8\xb8\xfd\xbc\xb9'b'\x00\x05N\xb1y\x8b\xacH\xfe\x1c\xdb\x01\x01\xa3\xf0$^\xb9\xbc\xc0i\xb8\xf2\x04G9\x00\x00\x00\x00\x00\x00\x00\x00z6\xeb<[I\xdf<\x03 'b'\x00\x05N\xb1y\x8b\xac\x90\xfe\x03\xdc\x01\x01\xa5\xc8\x14\x00\xa1~'b'\x00\x05N\xb1y\x8b\xac\xdc\xfe\x0c\xdd\x01\x01\x02p^\xd0y\xb1N\x05\x00\xd8\xf1\x03\x00\t\xcd'b'\x00\x05N\xb1y\x8b\xad,\xfe\x16\xde\x01\x01\x88f\xa6\x02\x18\x19\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9d\x83'b'\x00\x05N\xb1y\x8b\xad|\xfe\x16\xdf\x01\x01\xc1\x8c\xc3I=\x08\x1d\xf7<\xee\xa6\xfb:\x08T\xff<\x00\x00\x00\x00?\x03\x1b\x7f'b'\x00\x05N\xb1y\x8dPp\xfe\x15\xe0\x01\x01$h\xa1i\x0f6\x06?\x066\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xb6'b'\x00\x05N\xb1y\x8dQ@\xfe\x16\xe1\x01\x01#\x14\xf2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x009L'b'\x00\x05N\xb1y\x8dQ\xc4\xfe\x03\xe2\x01\x01Ms\x00\x00L\xae'b'\x00\x05N\xb1y\x8dR\xa8\xfe\x1a\xe3\x01\x01\x1b\xaf\x8cj\x0f\x00\x00\x00\x00\x13\x00\xe0\xff\x10\xfc\xa1\xff\x96\x00K\x02\xd9\x00Z\xffj\x01\x04\x9d'b'\x00\x05N\xb1y\x8dS(\xfe\x16\xe4\x01\x01tQ\xf2\x03\x00\x1f\x00\xdb\xff\x14\xfc\x9e\xff\x98\x00-\x02\xd8\x00\xf2\xfe\xff\x01\x8d\xce'b'\x00\x05N\xb1y\x8dS\xa0\xfe\x16\xe5\x01\x01\x81Q\xf2\x03\x00\x11\x00\xee\xff\x0f\xfcv\xff\xa0\x00H\x02\xf5\x02\xc9\xff\x8a\x02\\m'b'\x00\x05N\xb1y\x8dT\x14\xfe\x0e\xe6\x01\x01\x1dQ\xf2\x03\x00\xd7\x9biD\x85\xeb\xad\xbdN\x106\xd0'b'\x00\x05N\xb1y\x8dTp\xfe\x0e\xe7\x01\x01\x89Q\xf2\x03\x00s\xdfiD\x99\x99a>l\x15\xf3\xa1'b'\x00\x05N\xb1y\x8dT\xdc\xfe\x1f\xe8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xe2<{\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sq\xdc'b'\x00\x05N\xb1y\x8dU\\\xfe\x06\xe9\x01\x01}\xc5\x14\x00\x00\x03\x00"\xeb'b'\x00\x05N\xb1y\x8dU\xd0\xfe\x04\xea\x01\x01\x98\x00\x00\x80\x8a[\xce'b'\x00\x05N\xb1y\x8dV0\xfe\x02\xeb\x01\x01*\x00\x00\x86\xa5'b'\x00\x05N\xb1y\x8dV\xa4\xfe\x1e\xec\x01\x01\x18\xb0\x8ch\x0f\x00\x00\x00\x00h\xa6\x02\x18!\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\t\x00\xba\x17\x03\x0c$\x0f'b'\x00\x05N\xb1y\x8dW\x04\xfe\x1a\xed\x01\x01>\xe80\x87?\xc7\x9b\xed=\xf5\xea}=\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00en'b'\x00\x05N\xb1y\x8dWP\xfe\x08\xee\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x84q'b'\x00\x05N\xb1y\x8dX\xbf\xfe5d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1d\xf6'b'\x00\x05N\xb1y\x8doK\xfe!e\xff\x00L\x8a\xb9qB\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00V\x80'b'\x00\x05N\xb1y\x8e\xbe\xfc\xfe\x14\xef\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=p=\x8a?\x99\x99\x19>-\x002\x00\xd0\xb3'b'\x00\x05N\xb1y\x8e\xbfx\xfe\x03\xf0\x01\x01Ms\x00\x00[\xfe'b'\x00\x05N\xb1y\x8e\xc0<\xfe\x1c\xf1\x01\x01!\x97\xf2\x03\x00g\xa6\x02\x18\x1b\xe8\xb8\xfd\xc8_\n\x008\x04\x00\x00\x00\x00\x02\x00\x0e\x00,\x12F^'b'\x00\x05N\xb1y\x8e\xc0\xb8\xfe\x1c\xf2\x01\x01 \xa1\xf2\x03\x00\xb5\xcc\x86\xbc<\x97\x9f?\x8c\x8fB\xbf\xb5\xf4\x92;Zg\xa5<[\xea\x18\xbe\xcfZ'b'\x00\x05N\xb1y\x8e\xc1\x18\xfe\t\xe6\n\x00m\n\x00\x00\x00\x00\xde\x00\x00\x008\x8d'b'\x00\x05N\xb1y\x8e\xc1x\xfe\x1c\xf3\x01\x01\x1e\xc9\xf2\x03\x00}\x92#\x12\x08\xf9>\x17\x98'b'\x00\x05N\xb1y\x8e\xc1\xd4\xfe\x18\xf4\x01\x01\xb2\xe7\xf8D<\xd3b\x81<\xa5tT?\xb8\xde)Dh\xa6\x02\x18"\xe8\xb8\xfda\xa4'b'\x00\x05N\xb1y\x8f S\xfe5f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x98\x14'b"\x00\x05N\xb1y\x8fY#\xfe!g\xff\x00L'0\x91B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x075"b'\x00\x05N\xb1y\x90[\xcc\xfe\x12\xf5\x01\x01\xfc\xdb\xf2\x03\x004\x00\x01\x00ARMMASK\x00Wr<\xca'b'\x00\x05N\xb1y\x90\\\\\xfe\t\xf6\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe3\x1d'b'\x00\x05N\xb1y\x90\\\xc8\xfe\x1c\xf7\x01\x01\xa3z\xa3V\xb9V\x18\x9a\xb8\x91QL9\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x8e\x00=\x82\x057=\xdds'b'\x00\x05N\xb1y\x90]\x10\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U'b'\x00\x05N\xb1y\x90]`\xfe\x0c\xf9\x01\x01\x02\x00\xac\xd4y\xb1N\x05\x00\xde\xf2\x03\x00\xa5\x95'b'\x00\x05N\xb1y\x90]\xb0\xfe\x16\xfa\x01\x01\x88g\xa6\x02\x18\x1c\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x80\x9c'b'\x00\x05N\xb1y\x90^\x00\xfe\x16\xfb\x01\x01\xc1\xfeb =,v\xfd<5t\xee;\xb3A\x7f=\x00\x00\x00\x00?\x03\t\xdb'b'\x00\x05N\xb1y\x90^d\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5'b'\x00\x05N\xb1y\x90^\xfc\xfe\x15\xfd\x01\x01$\xe4\x9em\x0f=\x06s\x06\x08\x06\xbf\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80p'b'\x00\x05N\xb1y\x90_P\xfe\x16\xfe\x01\x01#\x1a\xf3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb3\x9e'b"\x00\x05N\xb1y\x90\x99\xa3\xfe%h\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00p\x80"b'\x00\x05N\xb1y\x91\x1e_\xfe5i\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01k\\'b"\x00\x05N\xb1y\x91H\x1f\xfe!j\xff\x00L'0\x91B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd8Z"b'\x00\x05N\xb1y\x91\xc6l\xfe\x1a\xff\x01\x01\x1b\x88l\x15Q\x97'b'\x00\x05N\xb1y\x91\xc8H\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x005\x00Z\xa9r\x8b?\xa4\x19\x03?\xb8\x0c\x83=\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x00\x00\x19\x92'b'\x00\x05N\xb1y\x91\xca(\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw'b'\x00\x05N\xb1y\x91\xcal\xfe\x03\x0b\x01\x01/\xff\x00\x00zb'b'\x00\x05N\xb1y\x91\xcb\x0c\xfe\x14\x0c\x01\x01J{\x14.>{\x14.>{\x14\x8e?)\\\x0f>7\x000\x00\xb4c'b'\x00\x05N\xb1y\x91\xcbX\xfe\x03\r\x01\x01Ms\x00\x00\x1d\x07'b'\x00\x05N\xb1y\x93\t\xaf\xfe5k\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xee\xbe'b"\x00\x05N\xb1y\x93\x1f\xaf\xfe!l\xff\x00L'0\x91B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\xbc"b'\x00\x05N\xb1y\x93J3\xfe\tm\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03A['b'\x00\x05N\xb1y\x93K\x90\xfe\x1c\x0e\x01\x01!`\xf3\x03\x00h\xa6\x02\x18\x1e\xe8\xb8\xfd\xf0_\n\x00`\x04\x00\x00\x06\x00\xfa\xff\x0b\x00\x8b\x16\x0b\x12'b'\x00\x05N\xb1y\x93L\x08\xfe\x1c\x0f\x01\x01 \xa6\xf3\x03\x002\xd0N;5\x85\xa2?\x02\xffK\xbfry\x7f=\xdf\x95\x7f\xbd\xc4f\xe8\xbd\xec='b'\x00\x05N\xb1y\x93L\x88\xfe\x1c\x10\x01\x01\x1e\xcf\xf3\x03\x00\xbe\xec\x9a\xbc2\xaa\x00=P\x81\x85?3\x13W\xbc\xb5C\x9a==If?\x9d\x0c'b'\x00\x05N\xb1y\x93L\xdc\xfe\x18\x11\x01\x01\xb2Q\xf2\x8d\xbc\x05P\x16=\x9f\x05\x85?p\xed)Di\xa6\x02\x18%\xe8\xb8\xfd\xb8\xa6'b'\x00\x05N\xb1y\x93M0\xfe\x1c\x12\x01\x01\xa3Y\xcdN\xb9\xab\xa4\xbe\xb8\x12\x0fQ9\x00\x00\x00\x00\x00\x00\x00\x00%q\x0c=Y\x93L=\x9a\r'b'\x00\x05N\xb1y\x93Mt\xfe\x03\x13\x01\x01\xa5\xc5\x14\x00\x8f\xea'b'\x00\x05N\xb1y\x93M\xc0\xfe\x0c\x14\x01\x01\x02\xb8\x9f\xd8y\xb1N\x05\x00\xe3\xf3\x03\x00}\xdb'b'\x00\x05N\xb1y\x93N\x10\xfe\x16\x15\x01\x01\x88i\xa6\x02\x18\x1e\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00W\x89'b'\x00\x05N\xb1y\x93N`\xfe\x16\x16\x01\x01\xc1-\xd9!=>$\x0b=T\xe3\xd4;XW{=\x00\x00\x00\x00?\x03\xc0\x8b'b'\x00\x05N\xb1y\x93N\xd0\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\x00\x05N\xb1y\x94\xe4\xdb\xfe5n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbf\x86'b'\x00\x05N\xb1y\x94\xfb\xac\xfe\x15\x19\x01\x01$\x1b\x9cq\x0f\x0f\x06s\x06I\x06\xd4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00bp'b'\x00\x05N\xb1y\x94\xfcP\xfe\x16\x1a\x01\x01#\x1f\xf4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbbk'b'\x00\x05N\xb1y\x94\xfc\xbc\xfe\x1a\x1b\x01\x01\x1b\xa3\xeaq\x0f\x00\x00\x00\x00\xff\xff\xcd\xff\x10\xfc\xe6\xff \x00\x82\x03}\x00\r\xffo\x01\x19T'b'\x00\x05N\xb1y\x94\xfd \xfe\x16\x1c\x01\x01t3\xf4\x03\x00\x00\x00\xdb\xff1\xfc\xce\xff+\x00]\x03\x88\x00\x9d\xfe\xff\x01\xf4;'b'\x00\x05N\xb1y\x94\xfd\x84\xfe\x16\x1d\x01\x01\x813\xf4\x03\x00\xf9\xff\xd1\xff\x1f\xfc\xbb\xff8\x00x\x03w\x02\x83\xffv\x02\xf4\x8a'b'\x00\x05N\xb1y\x94\xfd\xe8\xfe\x0e\x1e\x01\x01\x1d3\xf4\x03\x00\x94\x9ciDp=\x96\xbdN\x10\x88\xf8'b'\x00\x05N\xb1y\x94\xfeH\xfe\x0e\x1f\x01\x01\x893\xf4\x03\x00F\xe1iD\xcc\xcc~>m\x15\x05\xe2'b'\x00\x05N\xb1y\x94\xfe\xb8\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80eZ\xb7\xf2.?\xe4\xca\xd9?R\xfe\x8a=\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x00\x007\xc5'b'\x00\x05N\xb1y\x95\x00\xdc\xfe\x08&\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xf9'b"\x00\x05N\xb1y\x95\x02\x17\xfe!o\xff\x00L\xe5\\\xb3B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00p'"b"\x00\x05N\xb1y\x96\x80\xf8\xfe\x03'\x01\x01Ms\x00\x00>\x97"b'\x00\x05N\xb1y\x96\x81\xe0\xfe\x14(\x01\x01J\n\xd7#>\n\xd7#>\x85\xeb\x91?\xcc\xcc\xcc=D\x005\x00\x04\xf4'b'\x00\x05N\xb1y\x96\x82P\xfe\x1c)\x01\x01!)\xf4\x03\x00k\xa6\x02\x18\x1d\xe8\xb8\xfd\x04`\n\x00t\x04\x00\x00\x0b\x00\xed\xff\x0c\x00M\x1b\xc6]'b'\x00\x05N\xb1y\x96\x83\x0c\xfe\x1c*\x01\x01 \xab\xf4\x03\x00p\xf1*=\xd6\xc4\xa1?\xfa1R\xbf\xbf\xfb\xe9=9\xe2E\xbew\xe4\xfa\xbd\xc7\x17'b'\x00\x05N\xb1y\x96\xdbO\xfe5p\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Y\x17'b'\x00\x05N\xb1y\x97.\x0b\xfe!q\xff\x00L\xe5\\\xb3B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xccC'b'\x00\x05N\xb1y\x98\x07\xb4\xfe\x1c+\x01\x01\x1e\xd4\xf4\x03\x00B\x05\x0e\xbc\x11l\x1e=\x13,\xa0?\xe0\xe8\x13=&\xcf/\xbd\x04\xebV?"E'b"\x00\x05N\xb1y\x98\x08,\xfe\x18,\x01\x01\xb2\xd0\x95\xcf\xbb\x8d-5=\xb1\xb0\x9f?\x99\xf9)Dk\xa6\x02\x18'\xe8\xb8\xfd\x9f\xdc"b'\x00\x05N\xb1y\x98\x08\x84\xfe\x1c-\x01\x01\xa3\xc2\x92F\xb9\x8c\x81\xe2\xb8y\x80U9\x00\x00\x00\x00\x00\x00\x00\x00\xe6b\x1b=76U=w\x0f'b'\x00\x05N\xb1y\x98\x08\xcc\xfe\x03.\x01\x01\xa5\xc8\x14\x00U6'b'\x00\x05N\xb1y\x98\t$\xfe\x0c/\x01\x01\x02X\x97\xdcy\xb1N\x05\x00\xe8\xf4\x03\x00\x10&'b'\x00\x05N\xb1y\x98\t\xc0\xfe\x160\x01\x01\x88l\xa6\x02\x18\x1d\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x81\x80'b'\x00\x05N\xb1y\x98\n \xfe\x161\x01\x01\xc1S\x83)=\x89\x91\n=+\xd9im\x153\xd0'b'\x00\x05N\xb1y\x98 \xec\xfe\x1f8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01Z<\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S>P'b'\x00\x05N\xb1y\x98!@\xfe\x069\x01\x01}\xc5\x14\x00\x00\x03\x00y\xc5'b'\x00\x05N\xb1y\x98!\x8c\xfe\x04:\x01\x01\x98\x00\x00\x80\x8a{\x13'b'\x00\x05N\xb1y\x98!\xd0\xfe\x02;\x01\x01*\x00\x00TQ'b'\x00\x05N\xb1y\x98"$\xfe\x1e<\x01\x01\x18P\xd1t\x0f\x00\x00\x00\x00m\xa6\x02\x18\'\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x0b\x00\xba\x17\x03\x0c\xda\x85'b'\x00\x05N\xb1y\x98"x\xfe\x1a=\x01\x01>\x9c\xdb\xf1?\xe6\x1f?>G\xe2\x87=\x00\x00\x00\x00\x00\x00\x00\x00Y\x00\x00\x00\x00\x00g7'b'\x00\x05N\xb1y\x98"\xc0\xfe\x08>\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x8e'b'\x00\x05N\xb1y\x98\xdbo\xfe5r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdc\xf5'b'\x00\x05N\xb1y\x99\x05w\xfe!s\xff\x00Lz\xd0\xd2B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaeW'b'\x00\x05N\xb1y\x99y\xa4\xfe\x15?\x01\x01$i\xe5u\x0f\x10\x06\x0b\x06\x17\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07G'b'\x00\x05N\xb1y\x99z@\xfe\x16@\x01\x01#8\xf5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf8\xce'b'\x00\x05N\xb1y\x99z\xc8\xfe\x03A\x01\x01Ms\x00\x00\x8eY'b'\x00\x05N\xb1y\x99\x8f\xac\xfe\x14B\x01\x01J\xaeG\xe1=\xaeG\xe1==\n\x97?\n\xd7\xa3=Q\x003\x00\xcfW'b'\x00\x05N\xb1y\x9a\xceo\xfe5t\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01B\xda'b'\x00\x05N\xb1y\x9b\x05\x17\xfe!u\xff\x00Lz\xd0\xd2B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00-\xb1'b'\x00\x05N\xb1y\x9b-\x90\xfe\x1cC\x01\x01!\xf2\xf4\x03\x00o\xa6\x02\x18\x19\xe8\xb8\xfd6`\n\x00\xa6\x04\x00\x00\x0f\x00\xe4\xff\x07\x00\x92 :}'b'\x00\x05N\xb1y\x9b.<\xfe\x1cD\x01\x01 \xb1\xf5\x03\x00 \x82\xaf=[8\x9d?\xb0\xe2\\\xbf-\xae\x1a>I\xc1\x90\xbe\xcc\xdc\xa2\xbd\xfeD'b'\x00\x05N\xb1y\x9b.\xb8\xfe\x1cE\x01\x01\x1e\xd9\xf5\x03\x00\xa4\'\xfb<\x10\xa7\x03<=\xe5\xbe?\x1c\xf0\x0f>\xec\xcf1\xbdpxp?")'b'\x00\x05N\xb1y\x9b/(\xfe\x18F\x01\x01\xb2|Z\r=n\xfcCn\x15\x82M'b'\x00\x05N\xb1y\x9c\xb5\x04\xfe\x1fR\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x008\x01\x18<\xaa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xf1\x81'b'\x00\x05N\xb1y\x9c\xb5p\xfe\x06S\x01\x01}\xc5\x14\x00\x00\x03\x00~\xfd'b'\x00\x05N\xb1y\x9c\xb5\xcc\xfe\x04T\x01\x01\x98\x00\x00\x80\x8a\xf4\xd9'b'\x00\x05N\xb1y\x9c\xb6\x1c\xfe\x02U\x01\x01*\x00\x00\xf0s'b'\x00\x05N\xb1y\x9c\xb6x\xfe\x1eV\x01\x01\x18x\xe2w\x0f\x00\x00\x00\x00p\xa6\x02\x18$\xe8\xb8\xfd\xbah\n\x00F\x00\xff\xff\x16\x00\x84\x05\x03\x0c\x92\x96'b'\x00\x05N\xb1y\x9c\xb6\xcc\xfe\x1aW\x01\x01>\x195%@]\x8d\xc9\xbf\xeb\xca\x98=\x00\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00\x00\x00\x81\x8d'b'\x00\x05N\xb1y\x9c\xb7\x14\xfe\x08X\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb8E'b'\x00\x05N\xb1y\x9c\xb7h\xfe\x15Y\x01\x01$\x16\xe2y\x0f\n\x06\x1e\x06\x18\x06\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00h\xd5'b'\x00\x05N\xb1y\x9c\xb7\xc0\xfe\x16Z\x01\x01#=\xf6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe6\xa9'b'\x00\x05N\xb1y\x9c\xcfG\xfe5v\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc78'b'\x00\x05N\xb1y\x9d\n\xcb\xfe!w\xff\x00LH4\xf4B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00~Q'b'\x00\x05N\xb1y\x9e\x0c\x80\xfe\x03[\x01\x01Ms\x00\x00%$'b'\x00\x05N\xb1y\x9e!h\xfe\x14\\\x01\x01J\xaeGa>\xaeGa>G\xe1\x9a?\x8f\xc2\xf5=_\x002\x00jF'b'\x00\x05N\xb1y\x9e!\xdc\xfe\t\xe7\n\x00m\x07\x00\x00\x00\x00\xdb\x00\x00\x00\x14 'b'\x00\x05N\xb1y\x9e"<\xfe\x1c]\x01\x01!\x84\xf6\x03\x00s\xa6\x02\x18\x13\xe8\xb8\xfdT`\n\x00\xc4\x04\x00\x00\n\x00\xe1\xff\x0c\x00\x0c&\x12\xbf'b'\x00\x05N\xb1y\x9e"\xa8\xfe\x1c^\x01\x01 \xb7\xf6\x03\x00:\xd1\x05>\x988\x96?b\xead\xbf4L\xd4=\xb8\xaa\xa0\xbeR`\xfe\xbd`\x9c'b'\x00\x05N\xb1y\x9e\xf7\xdb\xfe5x\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01~\x85'b'\x00\x05N\xb1y\x9f"\x13\xfe!y\xff\x00LH4\xf4B\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe8\xc9'b'\x00\x05N\xb1y\x9f\xa9x\xfe\x12_\x01\x01\xfc\xc8\xf6\x03\x004\x00\x01\x00ARMMASK\x00WrX\xe5'b'\x00\x05N\xb1y\x9f\xaaT\xfe\t`\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x87C'b'\x00\x05N\xb1y\x9f\xab\x00\xfe\x1ca\x01\x01\x1e\xde\xf6\x03\x00\xb4\xa9<=\xeeuN\xbc\xa4\x96\xde?\xccp"\xbdv\x8e\x8b\xbd\xca\xcd}?\xf9Q'b'\x00\x05N\xb1y\x9f\xab\x98\xfe\x18b\x01\x01\xb2\xf8\x02V=\xdbs8\xbcR4\xde?\xae\xe7)Dr\xa6\x02\x18\x1f\xe8\xb8\xfdyA'b'\x00\x05N\xb1y\x9f\xac$\xfe\x1cc\x01\x01\xa3\xe9{4\xb9\xb7\x8c\x13\xb9\xa4t]9\x00\x00\x00\x00\x00\x00\x00\x00Q\xc7\x0f=%\xf7\x86=\x94<'b'\x00\x05N\xb1y\x9f\xac\x94\xfe\x03d\x01\x01\xa5\xcb\x14\x00\xbaP'b'\x00\x05N\xb1y\x9f\xad\x0c\xfe\x0ce\x01\x01\x02\xb0\x82\xe4y\xb1N\x05\x00\xf2\xf6\x03\x00\xc9\xe3'b'\x00\x05N\xb1y\x9f\xad\x8c\xfe\x16f\x01\x01\x88t\xa6\x02\x18\x11\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x0f'b'\x00\x05N\xb1y\x9f\xae\x08\xfe\x16g\x01\x01\xc1e4\xcd<4_\xae<.4N;_\x03\xe8=\x00\x00\x00\x00?\x03D\x82'b'\x00\x05N\xb1y\x9f\xae\x80\xfe\x1ah\x01\x01\x1b\xee\xf2|\x0f\x00\x00\x00\x00\xea\xff\xdd\xff\xfe\xfb\xf4\xff\xb2\xff\xfa\x03\xeb\xff\x07\xff~\x01\xed\x95'b'\x00\x05N\xb1y\x9f\xae\xe0\xfe\x16i\x01\x01t\x06\xf7\x03\x00\xee\xff\xdf\xff\xfe\xfb\xfb\xff\xbe\xff\xc7\x03\xfa\xff\x85\xfe\x0b\x02Th'b'\x00\x05N\xb1y\x9f\xaf<\xfe\x16j\x01\x01\x81\x06\xf7\x03\x00\xeb\xff\xf7\xff\xfc\xfb\xe1\xff\xbf\xff\xca\x03\xc5\x01p\xff{\x02G\x14'b'\x00\x05N\xb1y\x9f\xaf\x90\xfe\x0ek\x01\x01\x1d\x06\xf7\x03\x00\x9d\x9biD\xb8\x1e\xb5\xbdP\x10\x8e\x95'b'\x00\x05N\xb1y\x9f\xaf\xe4\xfe\x0el\x01\x01\x89\x06\xf7\x03\x00%\xdfiDR\xb8\\>o\x15\xa8\xa2'b'\x00\x05N\xb1y\x9f\xb0\\\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x18<\x93\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x9bo'b'\x00\x05N\xb1y\x9f\xb0\xbc\xfe\x06n\x01\x01}\xc5\x14\x00\x00\x03\x00\xdf\xd9'b'\x00\x05N\xb1y\x9f\xb1\x0c\xfe\x03o\x01\x01Ms\x00\x00s\xdf'b'\x00\x05N\xb1y\x9f\xb1\xa0\xfe\x04p\x01\x01\x98\x00\x00\x80\x8a(\x11'b'\x00\x05N\xb1y\x9f\xb1\xe8\xfe\x02q\x01\x01*\x00\x00\x05\x7f'b'\x00\x05N\xb1y\x9f\xb2P\xfe\x1er\x01\x01\x18\xa0\xf3z\x0f\x00\x00\x00\x00r\xa6\x02\x18\x1f\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x16\x00|\x85\x03\x0c\x04\x07'b'\x00\x05N\xb1y\x9f\xb2\xcc\xfe\x1as\x01\x01>\t\xdf\xda?d\x97D\xc0\xae\xdb\xad=\x00\x00\x00\x00\x00\x00\x00\x00z\x00\x00\x00\x00\x00\xbea'b'\x00\x05N\xb1y\x9f\xb3\x14\xfe\x08t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xcb'b'\x00\x05N\xb1y\xa0\xdd\xef\xfe5z\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfbg'b'\x00\x05N\xb1y\xa0\xf4\x0b\xfe!{\xff\x00LH\x7f\tC\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe4\x9b'b"\x00\x05N\xb1y\xa1\n{\xfe%|\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x88`"b'\x00\x05N\xb1y\xa1\x0bT\xfe\x15u\x01\x01$\xed\xdd}\x0f\x04\x06A\x067\x06\x0f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00`x'b'\x00\x05N\xb1y\xa1\x0b\xd0\xfe\x16v\x01\x01#C\xf7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa1\x9c'b'\x00\x05N\xb1y\xa2\x95\xbb\xfe5}\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01/\xbd'b'\x00\x05N\xb1y\xa2\xad\x97\xfe\t~\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa8\x0e'b'\x00\x05N\xb1y\xa2\xae\xd0\xfe\x03w\x01\x01Ms\x00\x00\xb7\xa9'b'\x00\x05N\xb1y\xa2\xafl\xfe\x03x\x01\x01/\xff\x00\x00\xd3`'b'\x00\x05N\xb1y\xa2\xaf\x9b\xfe!~\xff\x00LH\x7f\tC\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00.\x8a'b'\x00\x05N\xb1y\xa2\xc5d\xfe\x14y\x01\x01J\x00\x00\x80>\x00\x00\x80>\x00\x00\xa0?\n\xd7#>m\x000\x00*Y'b'\x00\x05N\xb1y\xa2\xc5\xe4\xfe\x1cz\x01\x01!L\xf7\x03\x00u\xa6\x02\x18\x0b\xe8\xb8\xfd|`\n\x00\xec\x04\x00\x00\x04\x00\xe2\xff\x0e\x00\xa8+\xb4\xa1'b'\x00\x05N\xb1y\xa2\xc6T\xfe\x1c{\x01\x01 \xbb\xf7\x03\x00\x8e\x82\x18>\x11\x1f\x8e?\x05\xe1n\xbf\xffJK=\xc6\x08\x9d\xbe-\xdd\x16\xbe\xbd]'b'\x00\x05N\xb1y\xa2\xc6\xac\xfe\x1c|\x01\x01\x1e\xe3\xf7\x03\x00\x9e$$=\xa8\xbb \xbd\x8f\xb9\xfe?\xb4\x08\x02>\xf9\x80\x89\xbd\xfa\x1bx?\xb2:'b'\x00\x05N\xb1y\xa2\xc7\x04\xfe\x18}\x01\x01\xb2\xab\xff6=\x84\xfe!\xbd\xbac\xfe?\xd7\xf3)Dt\xa6\x02\x18\x1a\xe8\xb8\xfd!('b'\x00\x05N\xb1y\xa4<\x94\xfe\x1a~\x01\x01\x1b\xef\xa1\x80\x0f\x00\x00\x00\x00\xe1\xff\xcf\xffC\xfc\xbb\x00k\xff\xc3\x03\xac\xff\x15\xff\x80\x01\xc9\xf2'b'\x00\x05N\xb1y\xa4=\\\xfe\x16\x7f\x01\x01t\xf8\xf7\x03\x00\xe9\xff\xd5\xffI\xfc\x8e\x00x\xff\xc5\x03\xbc\xff\x90\xfe\x0b\x02\x0f\xeb'b'\x00\x05N\xb1y\xa4=\xc4\xfe\x16\x80\x01\x01\x81\xf8\xf7\x03\x00\xe2\xff\xd5\xff6\xfc\x9a\x00^\xff\xcc\x03q\x01\x84\xffw\x02ua'b'\x00\x05N\xb1y\xa4>\x18\xfe\x0e\x81\x01\x01\x1d\xf8\xf7\x03\x00\xb5\x9ciD{\x14\x92\xbdP\x10\xdbQ'b'\x00\x05N\xb1y\xa4>h\xfe\x0e\x82\x01\x01\x89\xf8\xf7\x03\x00\xb7\xdeiD\n\xd7U>o\x15<\x12'b'\x00\x05N\xb1y\xa4>\xc4\xfe\x1f\x83\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x002\x01\x18\x1e\x85\x1b@\xcd\xcc\x1c\xc0G\x94\xbd=\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x19\xd5'b'\x00\x05N\xb1y\xa4D\x8c\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1'b'\x00\x05N\xb1y\xa4E\x04\xfe\x1c\x8b\x01\x01\xa3D/*\xb9\x14\xc9$\xb9\x02\xb4`9\x00\x00\x00\x00\x00\x00\x00\x002B\n=\x9fJ\x92=\x85E'b'\x00\x05N\xb1y\xa4E\x80\xfe\x03\x8c\x01\x01\xa5\xc8\x14\x00(@'b'\x00\x05N\xb1y\xa4E\xf4\xfe\x0c\x8d\x01\x01\x02X\xcc\xe8y\xb1N\x05\x00\x0c\xf8\x03\x00&\xc3'b'\x00\x05N\xb1y\xa4F`\xfe\x16\x8e\x01\x01\x88u\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00G\x8e'b'\x00\x05N\xb1y\xa4F\xc4\xfe\x12\x8f\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x0eq'b'\x00\x05N\xb1y\xa4GL\xfe\x16\x90\x01\x01\xc1\xf3\xee\xb6<\x9b\x1d\x9a<\tiU<6\x11\xf8=\x00\x00\x00\x00?\x03\x02n'b'\x00\x05N\xb1y\xa4H \xfe\x15\x92\x01\x01$\x00\xda\x81\x0f5\x06_\x06B\x06\x0c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xf0'b'\x00\x05N\xb1y\xa4H\x80\xfe\x16\x93\x01\x01#H\xf8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd5\x1b'b'\x00\x05N\xb1y\xa4u\x0b\xfe5\x80\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01-\xb8'b"\x00\x05N\xb1y\xa4\xb3k\xfe!\x81\xff\x00L'\xf5\x16C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00s\x12"b'\x00\x05N\xb1y\xa5\xc6\xac\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b'\x00\x05N\xb1y\xa5\xc7\xa0\xfe\x14\x95\x01\x01J\xe1z\x94>\xe1z\x94>\\\x8f\xa2?\xb8\x1e\x05>{\x007\x00?I'b'\x00\x05N\xb1y\xa6\xb3\x8b\xfe5\x82\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa8Z'b"\x00\x05N\xb1y\xa6\xde+\xfe!\x83\xff\x00L'\xf5\x16C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf2O"b'\x00\x05N\xb1y\xa7C\xdc\xfe\x1c\x96\x01\x01!\x16\xf8\x03\x00u\xa6\x02\x18\x04\xe8\xb8\xfd\x90`\n\x00\x00\x05\x00\x00\xfb\xff\xe5\xff\x10\x00\x111x6'b'\x00\x05N\xb1y\xa7D\xf0\xfe\x1c\x97\x01\x01 \xc0\xf8\x03\x00\xab6\x1f>\x16\xc4\x85?\xa1\xcbt\xbf\x18\xa9e\xbd4\n\x8f\xbe\xaf\xdc%\xbe\xf2='b'\x00\x05N\xb1y\xa7E\x84\xfe\x1a\x98\x01\x01\x1b\x88L\x84\x0f\x00\x00\x00\x00\xe0\xff\xfc\xff\xf2\xfb\xaf\xff\xe2\xff\x90\x03\x92\xff2\xff\x89\x014,'b'\x00\x05N\xb1y\xa7F\x00\xfe\x16\x99\x01\x01t\xe8\xf8\x03\x00\xeb\xff\x00\x00\x06\xfc\xba\xff\xe0\xff\x91\x03\x9f\xff\x95\xfe\x0f\x02xi'b'\x00\x05N\xb1y\xa7Fx\xfe\x16\x9a\x01\x01\x81\xe8\xf8\x03\x00\xdb\xff\xfc\xff\xf4\xfb\xbe\xff\xd4\xff\x9c\x03X\x01x\xff\x93\x02\x88\x0b'b'\x00\x05N\xb1y\xa7F\xe4\xfe\x0e\x9b\x01\x01\x1d\xe8\xf8\x03\x00\x82\x9aiD\xe1z\xd8\xbdP\x10\xbc\xb6'b'\x00\x05N\xb1y\xa7GL\xfe\x0e\x9c\x01\x01\x89\xe8\xf8\x03\x00\xc1\xddiD\xe1zF>o\x15\xe3\r'b'\x00\x05N\xb1y\xa7G\xc0\xfe\x1f\x9d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\x18<\xdd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SBv'b'\x00\x05N\xb1y\xa7H \xfe\x06\x9e\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e\x15'b'\x00\x05N\xb1y\xa7H\x90\xfe\x04\x9f\x01\x01\x98\x00\x00\x80\x8a\x8dR'b'\x00\x05N\xb1y\xa7H\xec\xfe\x02\xa0\x01\x01*\x00\x00\x02\x14'b'\x00\x05N\xb1y\xa7I\\\xfe\x1e\xa1\x01\x01\x180#\x84\x0f\x00\x00\x00\x00v\xa6\x02\x18\x0c\xe8\xb8\xfd\xf6h\n\x00F\x00\xff\xff\x16\x00\x89w\x03\x0c\x934'b'\x00\x05N\xb1y\xa7I\xc8\xfe\x1a\xa2\x01\x01>\xa7\xe5\x07\xbf\xad@\xbf\xc0\x00Q\xd9=\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x003\xa4'b'\x00\x05N\xb1y\xa7J$\xfe\x08\xa3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa4,'b'\x00\x05N\xb1y\xa7J\x90\xfe\x1c\xa4\x01\x01\x1e\xfc\xf8\x03\x00h\x15>=0S\xcc\xbdt\xc7\x0f@W6\x88\xbdn\xd8Q;\\\xeej?\xdd8'b'\x00\x05N\xb1y\xa7J\xfc\xfe\x18\xa5\x01\x01\xb2V\xa7W=\x06\x07\xd3\xbd\x83\xad\x0f@\xeb\xf1)Dv\xa6\x02\x18\x0c\xe8\xb8\xfd\xdc\xc2'b'\x00\x05N\xb1y\xa7KP\xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd'b'\x00\x05N\xb1y\xa7`0\xfe\x1c\xa7\x01\x01\xa3){ \xb9\xc6@4\xb9\xe5\xeeb9\x00\x00\x00\x00\x00\x00\x00\x00\xd6\xe3\x0c=\x08+\x9a=x\xca'b'\x00\x05N\xb1y\xa7b8\xfe\x03\xa8\x01\x01\xa5\xc0\x14\x00\xde\x05'b'\x00\x05N\xb1y\xa7b\x8c\xfe\x0c\xa9\x01\x01\x02\x10\xc0\xecy\xb1N\x05\x00\x10\xf9\x03\x00\xe5R'b'\x00\x05N\xb1y\xa7b\xe0\xfe\x16\xaa\x01\x01\x88u\xa6\x02\x18\x02\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1a\xd1'b'\x00\x05N\xb1y\xa7c4\xfe\x16\xab\x01\x01\xc1\xd07\xd7<\x8c\xa4\x16\xaeGa>\xc2\xf5\xa8?\xb8\x1e\x05>\x89\x002\x00y4'b'\x00\x05N\xb1y\xaaz\x9c\xfe\x1c\xb0\x01\x01!\xa7\xf9\x03\x00r\xa6\x02\x18\xfe\xe7\xb8\xfd\xc2`\n\x002\x05\x00\x00\xed\xff\xec\xff\x0b\x00b6\xcd\xda'b'\x00\x05N\xb1y\xaa{\x04\xfe\x1c\xb1\x01\x01 \xc5\xf9\x03\x00\xe5\xd6\xf0=j:\x7f?\x97=\x80\xbft=E\xbeL\x85M\xbe\x84\x1d\xf3\xbdL\x88'b'\x00\x05N\xb1y\xaa{\x88\xfe\x1a\xb2\x01\x01\x1bF\xfa\x87\x0f\x00\x00\x00\x00\xe9\xff\xf5\xff.\xfc\xaf\xff\xb1\x00\xb5\x03n\xffJ\xff\x8b\x01\n\x8c'b'\x00\x05N\xb1y\xaa{\xf8\xfe\x16\xb3\x01\x01t\xd9\xf9\x03\x00\xe9\xff\x04\x00=\xfc\xc2\xff\xaa\x00\x94\x03\x7f\xff\xc1\xfe\x1b\x02w\xa7'b'\x00\x05N\xb1y\xaa|l\xfe\x16\xb4\x01\x01\x81\xd9\xf9\x03\x00\xe1\xff\x12\x003\xfc\x00\x00\x94\x00\x87\x03"\x01\xb2\xff\x88\x02\xa7\x9c'b'\x00\x05N\xb1y\xaa|\xd8\xfe\x0e\xb5\x01\x01\x1d\xd9\xf9\x03\x00\xe1\x9aiD\xd7\xa3\xcc\xbdQ\x10]\xa2'b'\x00\x05N\xb1y\xaa}D\xfe\x0e\xb6\x01\x01\x89\xd9\xf9\x03\x00\x14\xdeiD\x14\xaeK>q\x15\x122'b'\x00\x05N\xb1y\xaa}\xd4\xfe\x1f\xb7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xcd\x00c<5\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S~\xe2'b'\x00\x05N\xb1y\xaa~L\xfe\x06\xb8\x01\x01}\xc5\x14\x00\x00\x03\x00\xf3\x02'b'\x00\x05N\xb1y\xaa~\xb4\xfe\x04\xb9\x01\x01\x98\x00\x00\x80\x8a\xab\x01'b'\x00\x05N\xb1y\xaa\x7f\x14\xfe\x02\xba\x01\x01*\x00\x00\x9cH'b'\x00\x05N\xb1y\xaa\x7fl\xfe\x1e\xbb\x01\x01\x18X4\x87\x0f\x00\x00\x00\x00u\xa6\x02\x18\x06\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x13\x00\x89w\x03\x0cE\xa1'b'\x00\x05N\xb1y\xaa\x7f\xc0\xfe\x1a\xbc\x01\x01>\xcd\xdd7\xc0\xae\x05o\xc0\x14\xd0\xd5=\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x8b\xdb'b'\x00\x05N\xb1y\xaa\x80\x08\xfe\x08\xbd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf2F'b'\x00\x05N\xb1y\xaa\xd4\x03\xfe!\x87\xff\x00L^\x1e"C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\n\x89'b'\x00\x05N\xb1y\xab\xe5\xa8\xfe\x1c\xbe\x01\x01\x1e\x02\xfa\x03\x00(\xbb\x1c;D\xae\x88\xbd]\x16\x1f@\xaa\x97\x1d\xbe\xcf&H>\nDl?\xc5\xe1'b'\x00\x05N\xb1y\xab\xe6@\xfe\x18\xbf\x01\x01\xb2\x04\xad\r\x00\x00\x00\x00?\x03\xa9\x91'b'\x00\x05N\xb1y\xac\xa8\xbb\xfe5\x88\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\n*'b'\x00\x05N\xb1y\xac\xe7\x03\xfe!\x89\xff\x00L\xc7P*C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa5\xef'b'\x00\x05N\xb1y\xadap\xfe\x15\xc6\x01\x01$\xf8\xd1\x89\x0f+\x06P\x06$\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x99'b'\x00\x05N\xb1y\xadb4\xfe\x16\xc7\x01\x01#R\xfa\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\x96'b'\x00\x05N\xb1y\xadb\xd8\xfe\t\xe8\n\x00m\x01\x00\x00\x00\x00\xd6\x00\x00\x00V+'b'\x00\x05N\xb1y\xadcX\xfe\x03\xc8\x01\x01Ms\x00\x00o>'b'\x00\x05N\xb1y\xadc\xf4\xfe\x14\xc9\x01\x01J\xebQ8>\xebQ8>\xcd\xcc\xac?{\x14.>\x96\x002\x00\xd1\x03'b'\x00\x05N\xb1y\xaddL\xfe\x12\xca\x01\x01\xfc\xb4\xfa\x03\x004\x00\x01\x00ARMMASK\x00Wr\xed\xc8'b'\x00\x05N\xb1y\xadd\xa8\xfe\t\xcb\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xbb\x0c'b'\x00\x05N\xb1y\xae\xa7?\xfe5\x8a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8f\xc8'b'\x00\x05N\xb1y\xae\xbd;\xfe!\x8b\xff\x00L\xc7P*C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00$\xb2'b'\x00\x05N\xb1y\xae\xf4\xec\xfe\x1a\xcc\x01\x01\x1bQ\xa9\x8b\x0f\x00\x00\x00\x00\xdf\xff\xf5\xff\x19\xfc\x1b\x00x\x00\x8d\x03*\xffq\xff|\x01EG'b'\x00\x05N\xb1y\xae\xf5\xac\xfe\x16\xcd\x01\x01t\xcb\xfa\x03\x00\xdb\xff\xf8\xff\x1d\xfc\xfa\xffr\x00\x8a\x036\xff\xd9\xfe\x05\x028\xbb'b'\x00\x05N\xb1y\xae\xf6D\xfe\x16\xce\x01\x01\x81\xcb\xfa\x03\x00\xdc\xff\x03\x00\x14\xfc\xf1\xffe\x00\x99\x03\xd9\x00\xd6\xfff\x02\xc90'b'\x00\x05N\xb1y\xae\xf6\xc4\xfe\x0e\xcf\x01\x01\x1d\xcb\xfa\x03\x00\xb3\x9biDff\xb2\xbdQ\x10\nh'b'\x00\x05N\xb1y\xae\xf7P\xfe\x0e\xd0\x01\x01\x89\xcb\xfa\x03\x00\x9d\xdeiDp=T>q\x15>\xd5'b'\x00\x05N\xb1y\xae\xf7\xf0\xfe*\xd1\x01\x01\x96s\xe7f\xbc\x03m\x01\x00Q\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x86\t'b'\x00\x05N\xb1y\xae\xf8t\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x009\x01c<\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xd5u'b'\x00\x05N\xb1y\xae\xf8\xfc\xfe\x06\xd3\x01\x01}\xc8\x14\x00\x00\x03\x00*A'b'\x00\x05N\xb1y\xae\xf9`\xfe\x04\xd4\x01\x01\x98\x00\x00\x80\x8a#\x1d'b'\x00\x05N\xb1y\xae\xf9\xb4\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5'b'\x00\x05N\xb1y\xae\xfa\x18\xfe\x1e\xd6\x01\x01\x18\x80E\x8a\x0f\x00\x00\x00\x00r\xa6\x02\x18\x03\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x12\x00\x89w\x03\x0c{\x05'b'\x00\x05N\xb1y\xae\xfat\xfe\x1a\xd7\x01\x01>\xe6\x8cp\xc0\x82\xfd\xeb\xbf\x85\xbb\xe8=\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\xe7J'b'\x00\x05N\xb1y\xae\xfa\xc4\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83'b'\x00\x05N\xb1y\xae\xfb\x1c\xfe\x1c\xd9\x01\x01!p\xfa\x03\x00m\xa6\x02\x18\xfa\xe7\xb8\xfd\xe0`\n\x00P\x05\x00\x00\xec\xff\xf3\xff\x12\x00#<\xb5/'b'\x00\x05N\xb1y\xae\xfb\x80\xfe\x1c\xda\x01\x01 \xdf\xfa\x03\x00g\x03i=3\x05w?\x8b4\x84\xbf\xda\x9fS\xbe@U\x0e\xbeKS8\xbeRG'b'\x00\x05N\xb1y\xae\xfc\x00\xfe\x1c\xdb\x01\x01\x1e\x07\xfb\x03\x00\x8a\xa3\xd5\xbc\x8e$\xbf\xbcsG.@9+\xd5;\xaf\xaf\xc4=L\xcaq?\x90\x15'b'\x00\x05N\xb1y\xae\xfc\xa8\xfe\x18\xdc\x01\x01\xb24\x97\xb8\xbc4\xeb\xf1\xbc#o.@\n\xe7)Dr\xa6\x02\x18\x03\xe8\xb8\xfdQf'b'\x00\x05N\xb1y\xae\xfd\x14\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\x00\x05N\xb1y\xb0d\xff\xfe5\x8c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x11\xe7'b"\x00\x05N\xb1y\xb0{'\xfe!\x8d\xff\x00L\x97\n0C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xde\x98"b'\x00\x05N\xb1y\xb0|\xe8\xfe\x1c\xde\x01\x01\xa30\x89\x0c\xb9jyQ\xb9\xea\x80e9\x00\x00\x00\x00\x00\x00\x00\x00Xu\x02=\xad\xca\x96=f\xf4'b'\x00\x05N\xb1y\xb0}p\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f'b'\x00\x05N\xb1y\xb0~T\xfe\x0c\xe0\x01\x01\x02P\xaf\xf4y\xb1N\x05\x00\x1b\xfb\x03\x00\x96\xc5'b'\x00\x05N\xb1y\xb0\x7f \xfe\x16\xe1\x01\x01\x88l\xa6\x02\x18\xfa\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa8\x96'b'\x00\x05N\xb1y\xb0\x7f\xb4\xfe\x16\xe2\x01\x01\xc1\x83\xf8\x1d=g{l\x00\x00\x00\x00?\x03\x18!'b'\x00\x05N\xb1y\xb0\x804\xfe\x15\xe3\x01\x01$\n\xcf\x8d\x0f\x16\x06B\x06\x0f\x06\r\x06\x00\x00\x00\x00\x00\x00\x00\x00\x005('b'\x00\x05N\xb1y\xb0\x80\xac\xfe\x16\xe4\x01\x01#W\xfb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb9n'b"\x00\x05N\xb1y\xb1K\xdf\xfe%\x8e\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa5\x89"b'\x00\x05N\xb1y\xb2\x04X\xfe\x03\xe5\x01\x01Ms\x00\x00B2'b'\x00\x05N\xb1y\xb2\x198\xfe\x14\xe6\x01\x01J\x8f\xc2u>\x8f\xc2u>\x85\xeb\xb1?\xebQ8>\xa4\x000\x00\x96\x01'b'\x00\x05N\xb1y\xb2\x19\xa4\xfe\x1a\xe7\x01\x01\x1bCX\x8f\x0f\x00\x00\x00\x00\xdd\xff\xff\xffL\xfc3\x00&\x00\x95\x03\x0f\xff\x9e\xfft\x01\x9e\xb3'b'\x00\x05N\xb1y\xb2\x19\xfc\xfe\x16\xe8\x01\x01t\xbc\xfb\x03\x00\xe4\xff\xfe\xff[\xfc(\x005\x00v\x03\x13\xff\xfd\xfe\x01\x02\xe6%'b'\x00\x05N\xb1y\xb2\x1aT\xfe\x16\xe9\x01\x01\x81\xbc\xfb\x03\x00\xe1\xff\x06\x00N\xfc{\x006\x00^\x03\xb0\x00\xe5\xff}\x02\xf1h'b'\x00\x05N\xb1y\xb2\x1a\xa0\xfe\x0e\xea\x01\x01\x1d\xbc\xfb\x03\x00\x05\x9aiD\xf5(\xe8\xbdQ\x10r\xe5'b'\x00\x05N\xb1y\xb2\x1a\xec\xfe\x0e\xeb\x01\x01\x89\xbc\xfb\x03\x00\x02\xddiD\\\x8f:>q\x15\x0c\xff'b'\x00\x05N\xb1y\xb2\x1bH\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01c<\x0c\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sm\xce'b'\x00\x05N\xb1y\xb2\x1b\x98\xfe\x06\xed\x01\x01}\xc6\x14\x00\x00\x03\x00\x19\x1d'b'\x00\x05N\xb1y\xb2\x1b\xe4\xfe\x03\xee\x01\x01/\xff\x00\x00\xf8\xed'b'\x00\x05N\xb1y\xb2\x1cd\xfe\x04\xef\x01\x01\x98\x00\x00\x80\x8aC\xbc'b'\x00\x05N\xb1y\xb2\x1c\xac\xfe\x02\xf0\x01\x01*\x00\x00\xcdf'b'\x00\x05N\xb1y\xb2\x1d\x00\xfe\x1e\xf1\x01\x01\x18\x90Z\x8d\x0f\x00\x00\x00\x00m\xa6\x02\x18\x01\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x18\x00}f\x03\x0c\xbe\n'b'\x00\x05N\xb1y\xb2\x1dT\xfe\x1a\xf2\x01\x01>\x1e\x85{\xc0\n\xd7\x03@Ge\xda=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\xd6\xa4'b'\x00\x05N\xb1y\xb2\x1d\x9c\xfe\x08\xf3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00%\x15'b'\x00\x05N\xb1y\xb26\x0f\xfe5\x8f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xde\xf0'b'\x00\x05N\xb1y\xb26\x83\xfe\t\x8f\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9b\xc6'b'\x00\x05N\xb1y\xb2\xae\xf7\xfe!\x91\xff\x00L\x97\n0C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe3\xa1'b'\x00\x05N\xb1y\xb3\xd8\xa8\xfe\x1c\xf4\x01\x01!:\xfb\x03\x00h\xa6\x02\x18\xf8\xe7\xb8\xfd\x08a\n\x00x\x05\x00\x00\xf3\xff\xf5\xff\x0e\x00iA\x94\x14'b'\x00\x05N\xb1y\xb3\xd94\xfe\x1c\xf5\x01\x01 \xe6\xfb\x03\x00h\xc5\xaf;q/s?\xc2\xa0\x89\xbf\xf6\xa3\r\xbef\xaa\xee\xbdY\xc4\x12\xbe\x1f['b'\x00\x05N\xb1y\xb3\xd9\x8c\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3'b'\x00\x05N\xb1y\xb3\xeeP\xfe\x1c\xf7\x01\x01\x1e\r\xfc\x03\x008C\xdb\xbc\x8f\xde\xac;~N=@\xe3\x9d<\xbd\xd1\xcd >\x00\x12^?%\x9e'b'\x00\x05N\xb1y\xb3\xee\xb0\xfe\x18\xf8\x01\x01\xb2\xa2?\xbc\xbcT_9\xbb\xe1\x97=@\x99\xe9)Dj\xa6\x02\x18\xfe\xe7\xb8\xfd\xcek'b'\x00\x05N\xb1y\xb3\xef\x08\xfe\x1c\xf9\x01\x01\xa3[P\x02\xb9mH_\xb9\xb7Lf9\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xcd\xc5<="\x8b=\xbf{'b'\x00\x05N\xb1y\xb3\xefd\xfe\x03\xfa\x01\x01\xa5\xc8\x14\x00\xe0\xd5'b'\x00\x05N\xb1y\xb3\xef\xb0\xfe\x0c\xfb\x01\x01\x02\xf0\xa6\xf8y\xb1N\x05\x00!\xfc\x03\x00\x02\xac'b'\x00\x05N\xb1y\xb3\xf0\x00\xfe\x16\xfc\x01\x01\x88h\xa6\x02\x18\xf8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe3\x12'b"\x00\x05N\xb1y\xb3\xf0P\xfe\x16\xfd\x01\x01\xc1u\xbf\xe3\x00\x00\x00\x00?\x03rY"b'\x00\x05N\xb1y\xb4\x88S\xfe5\x92\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf7v'b'\x00\x05N\xb1y\xb4\x9e\xaf\xfe!\x93\xff\x00L\xb193C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00(H'b'\x00\x05N\xb1y\xb5$<\xfe\x15\xff\x01\x01$\x01\xd1\x91\x0f\xf1\x05\n\x06\xa1\x06\x93\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xf4'b'\x00\x05N\xb1y\xb5$\xb4\xfe\x16\x00\x01\x01#^\xfc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbb\xc2'b'\x00\x05N\xb1y\xb5%\x1c\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b'\x00\x05N\xb1y\xb6^\x1b\xfe5\x94\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01iY'b"\x00\x05N\xb1y\xb6\x97h\xfe\x1a\x02\x01\x01\x1b\xb8\x0b\x93\x0f\x00\x00\x00\x00\xec\xff\x0c\x00\xcb\xfb'\x004\x00\x88\x01\xf6\xfe\xe0\xffg\x01\x81\xd7"b'\x00\x05N\xb1y\xb6\x98@\xfe\x16\x03\x01\x01t\xaf\xfc\x03\x00\xe8\xff\x0f\x00\xd4\xfb\x18\x007\x00\x86\x01\xea\xfe\x1b\xff\xea\x01\xc1z'b'\x00\x05N\xb1y\xb6\x98\xf0\xfe\x16\x04\x01\x01\x81\xaf\xfc\x03\x00\xdf\xff\x17\x00\xd3\xfb)\x00A\x00\x8d\x01\x7f\x00\xed\xffo\x02\x98\xca'b'\x00\x05N\xb1y\xb6\x99\x84\xfe\x0e\x05\x01\x01\x1d\xaf\xfc\x03\x00\xe2\x9biD\xe1z\xac\xbdQ\x10\x1c\x02'b'\x00\x05N\xb1y\xb6\x9a,\xfe\x0e\x06\x01\x01\x89\xaf\xfc\x03\x00E\xe0iDR\xb8n>s\x15r/'b"\x00\x05N\xb1y\xb6\x9a\xc4\xfe\x1f\x07\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00'\x01\xe2;\xae\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x04\x01"b'\x00\x05N\xb1y\xb6\x9bL\xfe\x06\x08\x01\x01}\xc8\x14\x00\x00\x03\x00h-'b'\x00\x05N\xb1y\xb6\x9b\xc4\xfe\x04\t\x01\x01\x98\x00\x00\x80\x8a\xd1\xcd'b'\x00\x05N\xb1y\xb6\x9c,\xfe\x02\n\x01\x01*\x00\x00\xcb\x18'b'\x00\x05N\xb1y\xb6\x9c\x98\xfe\x1e\x0b\x01\x01\x18\xc0.\x93\x0f\x00\x00\x00\x00i\xa6\x02\x18\xfe\xe7\xb8\xfd\x14i\n\x00F\x00\xff\xff\x10\x00}f\x03\x0cPx'b'\x00\x05N\xb1y\xb6\x9d\x04\xfe\x1a\x0c\x01\x01>/m4\xc0\x91\x8f\xa0?\xeb\x99\x04>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x18\xd4'b'\x00\x05N\xb1y\xb6\x9dd\xfe\x08\r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00 o'b'\x00\x05N\xb1y\xb6\x9d\xc4\xfe\x14\x0e\x01\x01J\n\xd7#>\n\xd7#>33\xb3?{\x14.>\xaf\x007\x00\xdd\xc4'b'\x00\x05N\xb1y\xb6\x9e,\xfe\x1c\x0f\x01\x01!\xb8\xfc\x03\x00f\xa6\x02\x18\xf7\xe7\xb8\xfd\x12a\n\x00\x82\x05\x00\x00\x00\x00\xf7\xff\x14\x00\x18Es]'b'\x00\x05N\xb1y\xb6\x9e\xac\xfe\x1c\x10\x01\x01 \xeb\xfc\x03\x00\x9al\xbb\xbc\x7f\xabo?\r\xad\x8a\xbfF^\xd4\xbb\x81\x92\xc8\xbdd6Q\xbe\xd8 'b'\x00\x05N\xb1y\xb6\xbe\x0b\xfe!\x95\xff\x00L\xb193C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xab\xae'b'\x00\x05N\xb1y\xb8;\xcc\xfe\x1c\x11\x01\x01\x1e\x13\xfd\x03\x00Vw\xae\xbc\xea \xdc<\xa5\xd6F@u.9\xbb\xd3\xc5\x0c<\xff\xeb\x01?[\xba'b'\x00\x05N\xb1y\xb8\x00\x00\x00\x00?\x03=i'b'\x00\x05N\xb1y\xb8}H\xfe\x15\x19\x01\x01$\x03\xcb\x95\x0f\xc7\x05\xf4\x05x\x06\x82\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\n'b'\x00\x05N\xb1y\xb8}\xac\xfe\x16\x1a\x01\x01#c\xfd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00;\xfd'b'\x00\x05N\xb1y\xb8\xb9\xcf\xfe!\x97\xff\x00L\xb193C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00*\xf3'b'\x00\x05N\xb1y\xb9\xba8\xfe\x1a\x1b\x01\x01\x1b\xa2\xba\x96\x0f\x00\x00\x00\x00\xea\xff\x08\x00\x13\xfc\x1b\x00\xc5\xfft\x00\xec\xfe\xfc\xffk\x01\x9e2'b'\x00\x05N\xb1y\xb9\xba\xb4\xfe\x16\x1c\x01\x01t\xa0\xfd\x03\x00\xe9\xff\x10\x00\x1e\xfc\x18\x00\xc8\xffo\x00\xe4\xfeK\xff\xf3\x01\xff#'b'\x00\x05N\xb1y\xb9\xbb\x14\xfe\x16\x1d\x01\x01\x81\xa0\xfd\x03\x00\xea\xff\x15\x00\x10\xfc-\x00\xad\xffl\x00Z\x00Y\x00J\x02H}'b'\x00\x05N\xb1y\xb9\xbbd\xfe\x0e\x1e\x01\x01\x1d\xa0\xfd\x03\x00O\x9biDG\xe1\xbe\xbdQ\x10\xdf\x14'b'\x00\x05N\xb1y\xb9\xbb\xb4\xfe\x0e\x1f\x01\x01\x89\xa0\xfd\x03\x00\x9c\xdeiD\xf5(T>s\x15\xf0`'b'\x00\x05N\xb1y\xb9\xbc\x0c\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe2;\xde\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\rF'b'\x00\x05N\xb1y\xb9\xbcd\xfe\x06!\x01\x01}\xc5\x14\x00\x00\x03\x00\x96\x08'b'\x00\x05N\xb1y\xb9\xbc\xb0\xfe\x03"\x01\x01Ms\x00\x00_\x00'b'\x00\x05N\xb1y\xb9\xd1p\xfe\x04#\x01\x01\x98\x00\x00\x80\x8a\xd8\xde'b'\x00\x05N\xb1y\xb9\xd1\xc0\xfe\x02$\x01\x01*\x00\x00i\xfd'b'\x00\x05N\xb1y\xb9\xd24\xfe\x1e%\x01\x01\x18\xf0\x91\x96\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfd\xe7\xb8\xfd\x1ei\n\x00F\x00\xff\xff\x04\x00}f\x03\x0c\x82\xc1'b'\x00\x05N\xb1y\xb9\xd2\x8c\xfe\x1a&\x01\x01>6\x01!\xc0d\t\x03=\xa48\x0e>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x11%'b"\x00\x05N\xb1y\xb9\xd2\xd4\xfe\x08'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc"b'\x00\x05N\xb1y\xb9\xd3(\xfe\x14(\x01\x01J\xcc\xccL=\xcc\xccL==\n\xb7?\x8f\xc2u>\xb4\x003\x00au'b'\x00\x05N\xb1y\xba\x7f\x03\xfe5\x98\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01U\x06'b'\x00\x05N\xb1y\xba\xbes\xfe!\x99\xff\x00Ld\xf23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00RC'b'\x00\x05N\xb1y\xbb+\x84\xfe\x1c)\x01\x01!\x96\xfd\x03\x00h\xa6\x02\x18\xf6\xe7\xb8\xfd0a\n\x00\xa0\x05\x00\x00\r\x00\xf9\xff\x17\x00gF\xaa\x8a'b'\x00\x05N\xb1y\xbb,\x1c\xfe\x1c*\x01\x01 \xf0\xfd\x03\x00r\xb6\xf8\xbb\x86\xd6m?`U\x8f\xbf\xe84\n>\xc8\x91\xa1\xbd\xd1ps\xbe\xdf\xd4'b"\x00\x05N\xb1y\xbb,|\xfe\x1c+\x01\x01\x1e\x18\xfe\x03\x00D'\xb7\xbc\xde\x82I<&\xc7H\xc0\x13\xc9\xfd\xbc\xf4\xf9\x04\xbee\x9eK\xba\xb8\xbc"b'\x00\x05N\xb1y\xbb,\xd0\xfe\x18,\x01\x01\xb2\xe8\xa2\x8f\xbcR\x8e\xd3;A\xfcG\xc0\xb8\xfe)Dj\xa6\x02\x18\xfd\xe7\xb8\xfd\x9b5'b'\x00\x05N\xb1y\xbb-\x18\xfe\x03-\x01\x01Ms\x00\x00\xed\xb1'b'\x00\x05N\xb1y\xbb-\xb8\xfe\x1c.\x01\x01\xa3\xef\x86\xda\xb8Owy\xb9_\x9ag9\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xe2\xb0<@\xa02=i\x10'b'\x00\x05N\xb1y\xbb.\x00\xfe\x03/\x01\x01\xa5\xc5\x14\x00e<'b'\x00\x05N\xb1y\xbb.L\xfe\x0c0\x01\x01\x02\x18\x9a\x00z\xb1N\x05\x00,\xfe\x03\x00>5'b'\x00\x05N\xb1y\xbb.\xb4\xfe\x161\x01\x01\x88h\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8d\x1f'b'\x00\x05N\xb1y\xbb/\x10\xfe\x162\x01\x01\xc1B9\x9d<\xda\xfa\xd4<\xca\x06\x88;\xd3\xe4$>\x00\x00\x00\x00?\x03q-'b'\x00\x05N\xb1y\xbc\x8e\xe3\xfe5\x9a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd0\xe4'b'\x00\x05N\xb1y\xbc\xdf\\\xfe\x153\x01\x01$A\xce\x99\x0f\x00\x06!\x06/\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82F'b'\x00\x05N\xb1y\xbc\xdf\xe4\xfe\x164\x01\x01#j\xfe\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00a\x97'b'\x00\x05N\xb1y\xbc\xe0<\xfe\t\xe9\n\x00m\x01\x00\x00\x00\x00\xd7\x00\x00\x00\xf8^'b'\x00\x05N\xb1y\xbc\xe0\x94\xfe\x1a5\x01\x01\x1bhh\x9a\x0f\x00\x00\x00\x00\xf2\xff\x10\x00<\xfc\x0c\x00{\xff+\x00\xf2\xfe\x02\x00o\x01J\xa9'b"\x00\x05N\xb1y\xbc\xe0\xe8\xfe\x166\x01\x01t\x91\xfe\x03\x00\xf2\xff\x14\x00K\xfc\xf9\xff\x82\xff'\x00\xef\xfea\xff\x03\x02\x16\x8d"b'\x00\x05N\xb1y\xbc\xe1<\xfe\x167\x01\x01\x81\x91\xfe\x03\x00\xea\xff\x15\x006\xfc\xfb\xff{\xff"\x00\x83\x00J\x00u\x02\xc7:'b'\x00\x05N\xb1y\xbc\xe1\x8c\xfe\x0e8\x01\x01\x1d\x91\xfe\x03\x00\xb3\x9biDff\xb2\xbdR\x10>\xe8'b'\x00\x05N\xb1y\xbc\xe1\xd8\xfe\x0e9\x01\x01\x89\x91\xfe\x03\x00\xdd\xddiDp=H>s\x15J\xc0'b'\x00\x05N\xb1y\xbc\xe20\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb6\x00\xe2;\xd2\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x11K'b'\x00\x05N\xb1y\xbc\xe2\x80\xfe\x06;\x01\x01}\xc2\x14\x00\x00\x03\x00C\xa9'b'\x00\x05N\xb1y\xbc\xe2\xcc\xfe\x04<\x01\x01\x98\x00\x00\x80\x8ad\xb7'b'\x00\x05N\xb1y\xbd\x1b\xd7\xfe!\x9b\xff\x00L!\xfc3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00o\xd8'b'\x00\x05N\xb1y\xbeO|\xfe\x02=\x01\x01*\x00\x00\x99\t'b'\x00\x05N\xb1y\xbeO\xfc\xfe\x1e>\x01\x01\x18\x18\xa3\x99\x0f\x00\x00\x00\x00m\xa6\x02\x18\xfd\xe7\xb8\xfd\xff\xd6\x13\xc0 F\xc1\xbfG.\x0b>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x90W'b'\x00\x05N\xb1y\xbeP\xa8\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002'b'\x00\x05N\xb1y\xbeP\xf8\xfe\x12A\x01\x01\xfc\xa3\xfe\x03\x004\x00\x01\x00ARMMASK\x00Wrg\x83'b'\x00\x05N\xb1y\xbeQP\xfe\tB\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xec\x1b'b'\x00\x05N\xb1y\xbeQ\xa8\xfe\x03C\x01\x01Ms\x00\x04\x815'b'\x00\x05N\xb1y\xbeR<\xfe\x14D\x01\x01J)\\\x8f=)\\\x8f=\xa4p\xbd?\n\xd7#>\xb4\x005\x00\t@'b'\x00\x05N\xb1y\xbeR\x94\xfe\x1cE\x01\x01!_\xfe\x03\x00k\xa6\x02\x18\xf6\xe7\xb8\xfdXa\n\x00\xc8\x05\x00\x00\x12\x00\xfd\xff\x11\x00|F\x03\x13'b'\x00\x05N\xb1y\xbeR\xf8\xfe\x1cF\x01\x01 \xf6\xfe\x03\x00O\x04&=\xf2\x15n?o\x9b\x94\xbf\xa0\x9d?>\xfc\xdf!\xbdm\xf54\xbe\xbf\xce'b'\x00\x05N\xb1y\xbe\xff/\xfe5\x9c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01N\xcb'b'\x00\x05N\xb1y\xbf\x15w\xfe!\x9d\xff\x00L!\xfc3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xec>'b'\x00\x05N\xb1y\xbf\xd9\xdc\xfe\x1cG\x01\x01\x1e\x1e\xff\x03\x00"/\xe7\xbc=i\xcc\xbcQ\x9eH\xc0\x9e\xe13;v<\x02\xbe\xb0%)\xbdr-'b'\x00\x05N\xb1y\xbf\xdaX\xfe\x18H\x01\x01\xb2N5\xc4\xbc\xe6\n\xfc\xbcg\xd7G\xc0\xc2\xf5)Dq\xa6\x02\x18\xfe\xe7\xb8\xfd\xd6\xbb'b'\x00\x05N\xb1y\xbf\xda\xc0\xfe\x1cI\x01\x01\xa3\x80\xea\xc4\xb8R \x83\xb9Z\x9bh9\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x8d\xae<\xcdE\xdc<\x10\xc3'b'\x00\x05N\xb1y\xbf\xdb\x08\xfe\x03J\x01\x01\xa5\xc5\x14\x00\x05x'b'\x00\x05N\xb1y\xbf\xdbT\xfe\x0cK\x01\x01\x02\xb8\x91\x04z\xb1N\x05\x002\xff\x03\x00\xe6\xd6'b'\x00\x05N\xb1y\xbf\xdb\xa4\xfe\x16L\x01\x01\x88l\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbb\x9f'b"\x00\x05N\xb1y\xbf\xdc\x00\xfe\x16M\x01\x01\xc1\xcep\xe2<\x05k;=\x1e\xf1\xb1;'\xf06>\x00\x00\x00\x00?\x03ER"b'\x00\x05N\xb1y\xbf\xdcT\xfe\x03N\x01\x01Ms\x00\x04\\\x8f'b'\x00\x05N\xb1y\xc0\xbbO\xfe5\x9e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcb)'b'\x00\x05N\xb1y\xc0\xd1\x93\xfe!\x9f\xff\x00L\x94\xf73\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfcT'b'\x00\x05N\xb1y\xc1lX\xfe\x15O\x01\x01$\xf8\xc7\x9d\x0f+\x06\x18\x06/\x06<\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x1d'b'\x00\x05N\xb1y\xc1l\xf8\xfe\x16P\x01\x01#n\xff\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf5b'b'\x00\x05N\xb1y\xc1m\x84\xfe\x1aQ\x01\x01\x1bx\x15\x9e\x0f\x00\x00\x00\x00\xfa\xff\xfe\xff$\xfc&\x00\xb6\xff\xe4\xff\x05\xff\x00\x00y\x01L\xf0'b'\x00\x05N\xb1y\xc1m\xf8\xfe\x16R\x01\x01t\x82\xff\x03\x00\xfa\xff\x05\x00.\xfc \x00\xbc\xff\xf1\xff\xfd\xfe^\xff\r\x02\xd6\xf0'b'\x00\x05N\xb1y\xc1nx\xfe\x16S\x01\x01\x81\x82\xff\x03\x00\xf3\xff\x14\x00-\xfc(\x00\xbb\xff\xde\xff\x8f\x00O\x00\x84\x02\xe3\xe0'b'\x00\x05N\xb1y\xc1n\xe4\xfe\x0eT\x01\x01\x1d\x82\xff\x03\x00%\x99iD{\x14\x02\xbeR\x10\x9ch'b'\x00\x05N\xb1y\xc1oT\xfe\x0eU\x01\x01\x89\x82\xff\x03\x00\xb7\xddiD\n\xd7E>t\x15g\xb8'b'\x00\x05N\xb1y\xc1o\xd0\xfe\x1fV\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01\xe2;\xfc\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe0B'b'\x00\x05N\xb1y\xc1pD\xfe\x06W\x01\x01}\xc5\x14\x00\x00\x03\x00+\xa3'b'\x00\x05N\xb1y\xc1p\xbc\xfe\x04X\x01\x01\x98\x00\x00\x80\x8a\xdb\x99'b'\x00\x05N\xb1y\xc1q$\xfe\x02Y\x01\x01*\x00\x00j\xc2'b'\x00\x05N\xb1y\xc1q\x98\xfe\x1eZ\x01\x01\x18 f\x9c\x0f\x00\x00\x00\x00q\xa6\x02\x18\xfe\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00}f\x03\x0c\x92.'b'\x00\x05N\xb1y\xc1r\x0c\xfe\x1a[\x01\x01>\xfb\xcb\xe4\xbf\xd8\xbc\x18\xc0fN\x07>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc3\xbb'b'\x00\x05N\xb1y\xc1rh\xfe\x08\\\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0cS'b'\x00\x05N\xb1y\xc1r\xb4\xfe\x03]\x01\x01Ms\x00\x04\xf4^'b'\x00\x05N\xb1y\xc1\x89C\xfe\t\xa0\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc0\xfc'b"\x00\x05N\xb1y\xc1\xc0\xbb\xfe%\xa1\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x0035"b'\x00\x05N\xb1y\xc2\x96\xe3\xfe5\xa2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x16\x02'b'\x00\x05N\xb1y\xc2\xd1\xb3\xfe!\xa3\xff\x00L\x94\xf73\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x84\x9d'b'\x00\x05N\xb1y\xc3\r\xec\xfe\x14^\x01\x01J{\x14.>{\x14.>\\\x8f\xc2?\x99\x99\x19>\xb4\x002\x00\r\xb4'b'\x00\x05N\xb1y\xc3\x0ed\xfe\x03_\x01\x01/\xff\x00\x00-J'b'\x00\x05N\xb1y\xc3\x0f8\xfe\x1c`\x01\x01!\xf0\xff\x03\x00p\xa6\x02\x18\xf8\xe7\xb8\xfd\x8aa\n\x00\xfa\x05\x00\x00\x0f\x00\x01\x00\x0e\x00eF\xb4@'b'\x00\x05N\xb1y\xc3\x0f\xac\xfe\x1ca\x01\x01 \xfa\xff\x03\x00\x16\xdf\xc5=\xfdGr?j\xbd\x99\xbf\xe8\xbe >\x97\x1e@<\xfaz\x17\xbe\xc9\xd7'b'\x00\x05N\xb1y\xc3\x10\x08\xfe\x1cb\x01\x01\x1e"\x00\x04\x00\xca\x7f\xc6\xbcn\xd56\xbd\xbd\xf7H\xc0*1 \xbc\xc2\r\xec\xbd*;\xae\xbdU\xfc'b'\x00\x05N\xb1y\xc3\x10p\xfe\x18c\x01\x01\xb2r\xd1\xa1\xbc<\xf8K\xbd\xf0/H\xc0f\xf6)Dv\xa6\x02\x18\x00\xe8\xb8\xfd]\x96'b'\x00\x05N\xb1y\xc4Y\xac\xfe\x03d\x01\x01Ms\x00\x04\x7f\x1f'b'\x00\x05N\xb1y\xc4Zh\xfe\x1ce\x01\x01\xa3\xae*\xaf\xb8p\x95\x89\xb9\x92\x03j9\x00\x00\x00\x00\x00\x00\x00\x001N\x96<@\x88\x8c<\x1c\x82'b'\x00\x05N\xb1y\xc4Z\xd0\xfe\x03f\x01\x01\xa5\xc5\x14\x00\x97\xf5'b'\x00\x05N\xb1y\xc4[8\xfe\x0cg\x01\x01\x02X\x89\x08z\xb1N\x05\x007\x00\x04\x00{\x85'b'\x00\x05N\xb1y\xc4[\xa8\xfe\x16h\x01\x01\x88q\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00;\x91'b'\x00\x05N\xb1y\xc4\\\x10\xfe\x12i\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00_U'b'\x00\x05N\xb1y\xc4\\|\xfe\x16j\x01\x01\xc1\xe5E\xb3<\x18\x14X=o\x8f\xff8A\xcb\x1d>\x00\x00\x00\x00?\x03\xc3\x01'b'\x00\x05N\xb1y\xc4] \xfe\x1al\x01\x01\x1b\xc5\xc2\xa1\x0f\x00\x00\x00\x00\xe4\xff\xf6\xff%\xfcb\xff6\xfeq\xfe\x07\xff\x01\x00|\x01\x04\xd2'b'\x00\x05N\xb1y\xc4]\x90\xfe\x16m\x01\x01ts\x00\x04\x00\xe2\xff\x06\x002\xfca\xffG\xfe|\xfe\x01\xffZ\xff\t\x02s\xfe'b'\x00\x05N\xb1y\xc4^\x04\xfe\x16n\x01\x01\x81s\x00\x04\x00\xdc\xff\x08\x00.\xfc5\xffX\xfey\xfe\x9c\x00E\x00o\x02\xc6\x14'b'\x00\x05N\xb1y\xc4^l\xfe\x0eo\x01\x01\x1ds\x00\x04\x00\x10\x99iD)\\\x03\xbeR\x10],'b'\x00\x05N\xb1y\xc4^\xd8\xfe\x0ep\x01\x01\x89s\x00\x04\x00\x80\xdeiDffR>v\x15\xb6\x19'b'\x00\x05N\xb1y\xc4_0\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xfc;\xc6\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x84\x8d'b'\x00\x05N\xb1y\xc4_\x84\xfe\x06r\x01\x01}\xc5\x14\x00\x00\x03\x00eJ'b'\x00\x05N\xb1y\xc4_\xd0\xfe\x04s\x01\x01\x98\x00\x00\x80\x8a/\xc7'b'\x00\x05N\xb1y\xc4`\x14\xfe\x02t\x01\x01*\x00\x00\xa6\x8f'b'\x00\x05N\xb1y\xc4`h\xfe\x1eu\x01\x01\x18\x80\xc1\x9f\x0f\x00\x00\x00\x00v\xa6\x02\x18\x00\xe8\xb8\xfdPi\n\x00F\x00\xff\xff\x12\x00}f\x03\x0c\xa4Z'b'\x00\x05N\xb1y\xc4`\xbc\xfe\x1av\x01\x01>\xaf\xb1S\xbf\x0e\xaa\xbb\xc0fr\xd6=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0f/'b'\x00\x05N\xb1y\xc4a\x14\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5'b'\x00\x05N\xb1y\xc4al\xfe\x15x\x01\x01$\x86\x12\xa2\x0f6\x06\x14\x06E\x06@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00"\xae'b'\x00\x05N\xb1y\xc4a\xbc\xfe\x16y\x01\x01#\x87\x00\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8f\xb5'b'\x00\x05N\xb1y\xc4\xb3\xb3\xfe5\xa4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x88-'b'\x00\x05N\xb1y\xc4\xe0\x9f\xfe!\xa5\xff\x00L$\xf13\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xea\x08'b'\x00\x05N\xb1y\xc5\xfe\xa0\xfe\x03z\x01\x01Ms\x00\x04\nt'b'\x00\x05N\xb1y\xc6\x13\x80\xfe\x14{\x01\x01J\\\x8fB>\\\x8fB>ff\xc6?\xb8\x1e\x05>\xb1\x006\x00\xde\x84'b'\x00\x05N\xb1y\xc6\xb6\xa7\xfe5\xa6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\r\xcf'b'\x00\x05N\xb1y\xc6\xf5\x13\xfe!\xa7\xff\x00L$\xf13\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00kU'b'\x00\x05N\xb1y\xc7\x81\x90\xfe\x1c|\x01\x01!\xa5\x00\x04\x00t\xa6\x02\x18\xfc\xe7\xb8\xfd\x9ea\n\x00\x0e\x06\x00\x00\x02\x00\x06\x00\x0f\x00\x1bEh:'b'\x00\x05N\xb1y\xc7\x82P\xfe\x1c}\x01\x01 \x00\x01\x04\x009D\x11>BYz?\x15\x0b\x9d\xbfky\xe0<\xd3\x9c\x83=n<#\xbe~\xb5'b'\x00\x05N\xb1y\xc7\x82\xd0\xfe\x1c~\x01\x01\x1e(\x01\x04\x00\xa4\xc2\x94\xbc\x03\xcd\xc6\xbd\xa6CE@\xdf\xf1\x08>a\x00\xd3=4\xcd \xbe\x97\xd2'b"\x00\x05N\xb1y\xc7\x838\xfe\x18\x7f\x01\x01\xb2&a\x81\xbc\xe7t\xd5\xbd\xde\xf8E@p\xfd)D{\xa6\x02\x18\x03\xe8\xb8\xfd'\xa6"b'\x00\x05N\xb1y\xc7\x83\xa0\xfe\x1c\x80\x01\x01\xa3&\xa0\x99\xb8\x80\x1d\x90\xb9\x18\xaak9\x00\x00\x00\x00\x00\x00\x00\x00\xedl\x9f<\xdbD{<\xca\x02'b'\x00\x05N\xb1y\xc7\x83\xf4\xfe\x03\x81\x01\x01\xa5\xc5\x14\x00zq'b'\x00\x05N\xb1y\xc7\x84P\xfe\x0c\x82\x01\x01\x02\xf8\x80\x0cz\xb1N\x05\x00<\x01\x04\x00\xbfY'b'\x00\x05N\xb1y\xc7\x84\xb0\xfe\x16\x83\x01\x01\x88u\xa6\x02\x18\xfd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd7\xc3'b'\x00\x05N\xb1y\xc7\x85\x0c\xfe\x16\x84\x01\x01\xc1\x8dq\xaa<\x815w=^\xb8(;\xa3{>>\x00\x00\x00\x00?\x03\xa8\xfa'b'\x00\x05N\xb1y\xc7\x85\\\xfe\x03\x85\x01\x01Ms\x00\x04#\x86'b'\x00\x05N\xb1y\xc8\xc3\x1f\xfe5\xa8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb4r'b'\x00\x05N\xb1y\xc8\xc7O\xfe!\xa9\xff\x00L\xfb\xb23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x99d'b'\x00\x05N\xb1y\xc8\xfe\xb8\xfe\x1a\x86\x01\x01\x1b\xbbr\xa5\x0f\x00\x00\x00\x00\xeb\xff\xfa\xff\x16\xfcY\x00\x8e\x00\xae\xff \xff\xf0\xff\x89\x01xa'b'\x00\x05N\xb1y\xc8\xffX\xfe\x16\x87\x01\x01te\x01\x04\x00\xee\xff\xf5\xff%\xfcp\x00\x92\x00\xb2\xff\x1b\xffK\xff\x1a\x02\xe3G'b'\x00\x05N\xb1y\xc8\xff\xc0\xfe\x16\x88\x01\x01\x81e\x01\x04\x00\xef\xff\x11\x00\x11\xfcA\x00\x8b\x00\xbd\xff\xa1\x00I\x00w\x02\xe2R'b'\x00\x05N\xb1y\xc9\x00\x18\xfe\x0e\x89\x01\x01\x1de\x01\x04\x00\x0c\x99iD\x99\x99\x03\xbeR\x10~\x13'b'\x00\x05N\xb1y\xc9\x00p\xfe\x0e\x8a\x01\x01\x89e\x01\x04\x00\xcc\xdciD337>v\x15VK'b'\x00\x05N\xb1y\xc9\x00\xd4\xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x01\xfc;7\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SE\xa0'b'\x00\x05N\xb1y\xc9\x010\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf'b'\x00\x05N\xb1y\xc9\x01\x88\xfe\x04\x8d\x01\x01\x98\x00\x00\x80\x8a\xe36'b'\x00\x05N\xb1y\xc9\x01\xd4\xfe\x02\x8e\x01\x01*\x00\x00\xa0\xf1'b'\x00\x05N\xb1y\xc9\x02H\xfe\x1e\x8f\x01\x01\x18\x98\x99\xa5\x0f\x00\x00\x00\x00\x80\xa6\x02\x18\x08\xe8\xb8\xfd2i\n\x00F\x00\xff\xff\x15\x00}f\x03\x0c}\x15'b'\x00\x05N\xb1y\xc9\x02\xa8\xfe\x1a\x90\x01\x01>\xad\xe51>\x1d\x8ef\xc0\xcc\xee\xe3=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00A\\'b'\x00\x05N\xb1y\xc9\x03\x08\xfe\x08\x91\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xc8'b'\x00\x05N\xb1y\xc9\x03`\xfe\x15\x92\x01\x01$\xe9\x0e\xa6\x0f\r\x06?\x06$\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xa9'b'\x00\x05N\xb1y\xc9\x03\xcc\xfe\x16\x93\x01\x01#\x8d\x01\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf9\x03'b'\x00\x05N\xb1y\xca\x91x\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b'\x00\x05N\xb1y\xca\xa6\x00\xfe\x14\x95\x01\x01J=\nW>=\nW>p=\xca?{\x14.>\xaf\x003\x00\x89\xb5'b'\x00\x05N\xb1y\xca\xa6d\xfe\x1c\x96\x01\x01!o\x01\x04\x00u\xa6\x02\x18\x01\xe8\xb8\xfd\xc6a\n\x006\x06\x00\x00\xf5\xff\x08\x00\x0f\x00\xceDp\xd7'b'\x00\x05N\xb1y\xca\xa6\xcc\xfe\x1c\x97\x01\x01 \x05\x02\x04\x00\x01p\x18>\xee\x82\x83?\x7f\xe4\xa1\xbf\x01\x91\xf3\xbd\xf2F\xac=j\xba#\xbe\xca\xd8'b"\x00\x05N\xb1y\xca\xbc'\xfe5\xaa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x011\x90"b'\x00\x05N\xb1y\xca\xd2K\xfe!\xab\xff\x00L\xfb\xb23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x189'b'\x00\x05N\xb1y\xcc\x19\x94\xfe\x1c\x98\x01\x01\x1e.\x02\x04\x00\x8c\xb1\x91<\xd9\xe4l\xbdb{E@6kF>0\xfb(>\xe9X\xa1>\x0e\t'b'\x00\x05N\xb1y\xcc\x1a\x0c\xfe\x18\x99\x01\x01\xb2?\x14\xaa\x00\x00\x00\x00?\x03#\x14'b'\x00\x05N\xb1y\xcc\x1b\xe4\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c'b'\x00\x05N\xb1y\xcc0T\xfe\x1a\xa0\x01\x01\x1b\x97\x1e\xa9\x0f\x00\x00\x00\x00\xf1\xff\x06\x00\x07\xfc\xb1\x00\x9d\x00\x1f\x01\x10\xff\xfc\xff\x88\x01\xf9\r'b'\x00\x05N\xb1y\xcc0\xb4\xfe\x16\xa1\x01\x01tU\x02\x04\x00\xfa\xff\x07\x00\n\xfc\xa1\x00\x9c\x003\x01\x0f\xffR\xff\x15\x02_2'b'\x00\x05N\xb1y\xcc1\x10\xfe\x16\xa2\x01\x01\x81U\x02\x04\x00\xee\xff\x12\x00\x07\xfc\xdb\x00\x8b\x00\x1f\x01\xa8\x008\x00n\x02\xe3l'b'\x00\x05N\xb1y\xcc1`\xfe\x0e\xa3\x01\x01\x1dU\x02\x04\x00\x98\x98iDG\xe1\n\xbeR\x10\x02E'b'\x00\x05N\xb1y\xcc1\xac\xfe\x0e\xa4\x01\x01\x89U\x02\x04\x00r\xdeiD\x1e\x85Q>w\x15:Q'b'\x00\x05N\xb1y\xcc2\x08\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00>\x01\xfc;7\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe1\xc2'b'\x00\x05N\xb1y\xcc2\\\xfe\x06\xa6\x01\x01}\xc6\x14\x00\x00\x03\x00\x05\x92'b'\x00\x05N\xb1y\xcc2\xb4\xfe\x04\xa7\x01\x01\x98\x00\x00\x80\x8a\xea%'b'\x00\x05N\xb1y\xcc3\x08\xfe\t\xea\n\x00m\x16\x00\x00\x00\x00\xdd\x00\x00\x00\xc9\x87'b'\x00\x05N\xb1y\xcc3P\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca'b'\x00\x05N\xb1y\xcc3\xac\xfe\x1e\xa9\x01\x01\x18\xc0\xaa\xa8\x0f\x00\x00\x00\x00\x81\xa6\x02\x18\x0b\xe8\xb8\xfd\x99W\x15?\xe5\t\x03\xc0fz\xea=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf1"'b'\x00\x05N\xb1y\xcc4`\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01'b'\x00\x05N\xb1y\xcc\x96\xe3\xfe5\xac\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaf\xbf'b'\x00\x05N\xb1y\xcc\xadK\xfe!\xad\xff\x00L;\xd93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x11\xab'b'\x00\x05N\xb1y\xcd\x86\xa8\xfe\x12\xac\x01\x01\xfc\x8f\x02\x04\x004\x00\x01\x00ARMMASK\x00Wr%m'b'\x00\x05N\xb1y\xcd\x878\xfe\t\xad\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x06\xe4'b'\x00\x05N\xb1y\xcd\x87\xac\xfe\x15\xae\x01\x01$\x8c\n\xaa\x0f!\x06.\x06\x18\x061\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8s'b'\x00\x05N\xb1y\xcd\x88\x0c\xfe\x16\xaf\x01\x01#\x92\x02\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00{1'b'\x00\x05N\xb1y\xcd\x88\\\xfe\x03\xb0\x01\x01Ms\x00\x00\xaa\x9b'b'\x00\x05N\xb1y\xcd\x9d\x04\xfe\x14\xb1\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>{\x14\xce?{\x14.>\xb2\x005\x00\xe6\x0c'b'\x00\x05N\xb1y\xcesK\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01*]'b'\x00\x05N\xb1y\xce\x89{\xfe!\xaf\xff\x00L;\xd93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x90\xf6'b"\x00\x05N\xb1y\xcf'D\xfe\x1c\xb2\x01\x01!\x00\x03\x04\x00t\xa6\x02\x18\x06\xe8\xb8\xfd\xe4a\n\x00T\x06\x00\x00\xf0\xff\xff\xff\x12\x00\xf7E\r\x18"b"\x00\x05N\xb1y\xcf'\xec\xfe\x1c\xb3\x01\x01 \n\x03\x04\x00fY\n>u\x1b\x88?\xf1\xaf\xa5\xbf\x9b9%\xbe\xc3\xac\x9d\xbc\x1f\xc4>\xbe\xbe\xd1"b'\x00\x05N\xb1y\xcf(\\\xfe\x1c\xb4\x01\x01\x1e2\x03\x04\x00Z\xa3\xf0<\xca\x12\xd7\xbc\x9ePH@w\xbf\xb4\xbd\xda,e=\x92z\xac=\x8a\xb4'b'\x00\x05N\xb1y\xcf(\xc0\xfe\x18\xb5\x01\x01\xb2b\x9c\x11=\xb0\x84\x06\xbdK\xe2H@f\x06*D\x80\xa6\x02\x18\x0f\xe8\xb8\xfd^m'b'\x00\x05N\xb1y\xcf)\x10\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86'b'\x00\x05N\xb1y\xcf=\x9c\xfe\x1a\xb7\x01\x01\x1b\x94\xcc\xac\x0f\x00\x00\x00\x00\xf0\xff\xf9\xff\r\xfc\x96\xff?\x00a\x00\x08\xff\x0f\x00|\x01\xc2\xdb'b'\x00\x05N\xb1y\xcf>\x08\xfe\x16\xb8\x01\x01tF\x03\x04\x00\xf6\xff\xf5\xff\x15\xfc\x9d\xffD\x00K\x00\x02\xffb\xff\x0c\x02\x13\xf0'b'\x00\x05N\xb1y\xcf>h\xfe\x16\xb9\x01\x01\x81F\x03\x04\x00\xeb\xff\n\x00\x06\xfcx\xffZ\x00T\x00\x86\x00]\x00h\x02q\xce'b'\x00\x05N\xb1y\xcf>\xc0\xfe\x0e\xba\x01\x01\x1dF\x03\x04\x00P\x98iD)\\\x0f\xbeS\x10\x0b^'b'\x00\x05N\xb1y\xcf? \xfe\x0e\xbb\x01\x01\x89F\x03\x04\x00\xe2\xdciD\\\x8f8>w\x15\xf7\xe1'b'\x00\x05N\xb1y\xcf?\xa8\xfe\x1f\xbc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xfc;\xd1\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S]\x02'b'\x00\x05N\xb1y\xcf@$\xfe\x06\xbd\x01\x01}\xc5\x14\x00\x00\x03\x007\t'b'\x00\x05N\xb1y\xd0B\x87\xfe5\xb0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcc\xcc'b'\x00\x05N\xb1y\xd0\x80\xb3\xfe!\xb1\xff\x00LT\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x10\x9a'b'\x00\x05N\xb1y\xd0\xbd \xfe\x04\xbe\x01\x01\x98\x00\x00\x80\x8aI\xe8'b'\x00\x05N\xb1y\xd0\xbd\x98\xfe\x02\xbf\x01\x01*\x00\x00?\xb8'b'\x00\x05N\xb1y\xd0\xbe\x0c\xfe\x1e\xc0\x01\x01\x18\x00\xb8\xab\x0f\x00\x00\x00\x00\x80\xa6\x02\x18\x0f\xe8\xb8\xfdFi\n\x00F\x00\xff\xff\x10\x00}f\x03\x0c\xa7\x12'b'\x00\x05N\xb1y\xd0\xbet\xfe\x1a\xc1\x01\x01>\x90hk\xbeJ\xee\x9f\xbf=\x04\xf8=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb7\x1b'b'\x00\x05N\xb1y\xd0\xbe\xcc\xfe\x08\xc2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff'b'\x00\x05N\xb1y\xd0\xbf(\xfe\x1c\xc3\x01\x01\xa3F!^\xb8k4\x9e\xb97Ao9\x00\x00\x00\x00\x00\x00\x00\x00l\xf6\x9f<9R\x92\x00\x00\x00\x00?\x03\x1d\xdc'b'\x00\x05N\xb1y\xd0\xc0\xc0\xfe\x15\xc8\x01\x01$<\x07\xae\x0f\x0b\x06\x08\x06\r\x06%\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xd7'b'\x00\x05N\xb1y\xd0\xc1\x14\xfe\x16\xc9\x01\x01#\x97\x03\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb6\xe9'b'\x00\x05N\xb1y\xd0\xc1\\\xfe\x03\xca\x01\x01Ms\x00\x00\x005'b'\x00\x05N\xb1y\xd0\xd7\xe3\xfe\t\xb2\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc3\xd7'b'\x00\x05N\xb1y\xd2/l\xfe\x14\xcb\x01\x01J\xcc\xccL>\xcc\xccL>33\xd3?\n\xd7#>\xb3\x004\x00yS'b'\x00\x05N\xb1y\xd2/\xe4\xfe\x1c\xcc\x01\x01!\xca\x03\x04\x00r\xa6\x02\x18\x07\xe8\xb8\xfd\x0cb\n\x00|\x06\x00\x00\xf3\xff\xf8\xff\x0f\x00OFF\xcc'b'\x00\x05N\xb1y\xd20h\xfe\x1c\xcd\x01\x01 \x10\x04\x04\x00\xf5u\xe3=\xec\x10\x89?\x9cw\xaa\xbf\xe1\r\x0c\xbe\x17\x05\xae\xbd\x98\xa8 \xbe\xaa\x80'b"\x00\x05N\xb1y\xd2W\x03\xfe%\xb3\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x10\x02"b'\x00\x05N\xb1y\xd2\x9d\xeb\xfe5\xb4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd7\x01'b'\x00\x05N\xb1y\xd2\xdcW\xfe!\xb5\xff\x00LT\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x12!'b'\x00\x05N\xb1y\xd3\xba\xd4\xfe\x03\xce\x01\x01/\xff\x00\x00\x08['b'\x00\x05N\xb1y\xd3\xcf\\\xfe\x1a\xcf\x01\x01\x1bf~\xb0\x0f\x00\x00\x00\x00\xe3\xff\x00\x00\xf4\xfb\xb5\xff\xf2\xff\x1f\x00\xff\xfe\x0b\x00v\x01S\xf3'b'\x00\x05N\xb1y\xd3\xcf\xc4\xfe\x16\xd0\x01\x01t8\x04\x04\x00\xe6\xff\x01\x00\x0e\xfc\x95\xff\xf1\xff!\x00\xfa\xfe^\xff\x04\x02\xb6R'b'\x00\x05N\xb1y\xd3\xd04\xfe\x16\xd1\x01\x01\x818\x04\x04\x00\xe2\xff\x15\x00\xf9\xfb\xa9\xff\xef\xff#\x00\x8f\x00@\x00t\x02\xa8S'b'\x00\x05N\xb1y\xd3\xd0\x8c\xfe\x0e\xd2\x01\x01\x1d8\x04\x04\x00\x82\x99iD\xe1z\xf8\xbdS\x103('b'\x00\x05N\xb1y\xd3\xd0\xe4\xfe\x0e\xd3\x01\x01\x898\x04\x04\x00\x86\xdciD\xcd\xcc2>w\x15\x94)'b'\x00\x05N\xb1y\xd3\xd1D\xfe\x1f\xd4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00:\x01\xe4;\xa0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SD\x88'b'\x00\x05N\xb1y\xd3\xd1\xa0\xfe\x06\xd5\x01\x01}\xbe\x14\x00\x00\x03\x00\xdc\xfd'b'\x00\x05N\xb1y\xd3\xd1\xf4\xfe\x04\xd6\x01\x01\x98\x00\x00\x80\x8a\xd9\x86'b'\x00\x05N\xb1y\xd3\xd2@\xfe\x02\xd7\x01\x01*\x00\x00V\xc2'b'\x00\x05N\xb1y\xd3\xd2\x9c\xfe\x1e\xd8\x01\x01\x18\x10\xcd\xae\x0f\x00\x00\x00\x00|\xa6\x02\x18\x10\xe8\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00\xdeT\x03\x0c6:'b'\x00\x05N\xb1y\xd3\xd2\xf8\xfe\x1a\xd9\x01\x01>\xaf\xf8\x10\xbf0\x93\x03?G\x81\xe3=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xff\xb4'b'\x00\x05N\xb1y\xd3\xd3\\\xfe\x08\xda\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00@\x88'b'\x00\x05N\xb1y\xd3\xd3\xd8\xfe\x1c\xdb\x01\x01\x1eL\x04\x04\x00\xec\xcd\xf9\xbb\x14;\x91\xbc\xae\xf3H\xc0\x16\xe2\xd8\xbd5T\xed\xbc[*\xce<\x05\xc0'b'\x00\x05N\xb1y\xd3\xd4,\xfe\x18\xdc\x01\x01\xb2\xfe@\xef\xba\x0f\x11\xbf\xbc|RH\xc0\x85\xfb)D|\xa6\x02\x18\x10\xe8\xb8\xfd\xda\x99'b'\x00\x05N\xb1y\xd3\xd4t\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\x00\x05N\xb1y\xd3\xd5\x08\xfe\x1c\xde\x01\x01\xa3\x96\xe26\xb8Z3\xa5\xb9\xbaMq9\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8d\xa8<\x80\x90Y<\xb1\x1e'b'\x00\x05N\xb1y\xd3\xd5P\xfe\x03\xdf\x01\x01\xa5\xbd\x14\x00c\xc0'b'\x00\x05N\xb1y\xd3\xd5\x98\xfe\x0c\xe0\x01\x01\x02\xf8\xb5\x18z\xb1N\x05\x00`\x04\x04\x00\xb9\xb6'b'\x00\x05N\xb1y\xd3\xd5\xe8\xfe\x16\xe1\x01\x01\x88q\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbdo'b'\x00\x05N\xb1y\xd3\xd68\xfe\x16\xe2\x01\x01\xc1t$\xef<\x94\x1bF=\xd9\x1a\x1d<\xe6\x047>\x00\x00\x00\x00?\x03O1'b'\x00\x05N\xb1y\xd4\xc6O\xfe5\xb6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01R\xe3'b'\x00\x05N\xb1y\xd4\xdc\x83\xfe!\xb7\xff\x00L\xd7\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00#m'b'\x00\x05N\xb1y\xd5A\x9c\xfe\x15\xe4\x01\x01$\x06\x04\xb2\x0fg\x063\x06\xe7\x05\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x83'b'\x00\x05N\xb1y\xd5B\x1c\xfe\x16\xe5\x01\x01#\x9c\x04\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa9\x89'b'\x00\x05N\xb1y\xd5Bx\xfe\x03\xe6\x01\x01Ms\x00\x04\xf2\xdf'b'\x00\x05N\xb1y\xd6\xa2\x17\xfe5\xb8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xeb^'b'\x00\x05N\xb1y\xd6\xe0w\xfe!\xb9\xff\x00L\xd7\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb5\xf5'b'\x00\x05N\xb1y\xd6\xe14\xfe\x14\xe7\x01\x01J\xebQ8>\xebQ8>\x8f\xc2\xd5?\x99\x99\x19>\xb3\x007\x00\xca5'b'\x00\x05N\xb1y\xd6\xe1\xc8\xfe\x1c\xe8\x01\x01!\x93\x04\x04\x00o\xa6\x02\x18\x07\xe8\xb8\xfd b\n\x00\x90\x06\x00\x00\xf8\xff\xfb\xff\x11\x00IF\x91.'b'\x00\x05N\xb1y\xd6\xe28\xfe\x1c\xe9\x01\x01 \x15\x05\x04\x00\xd4>\xaf=\xac6\x89?\xbe2\xad\xbf\x8c8\xaa\xbd\x0f\xc4h\xbdY\xc53\xbe?x'b'\x00\x05N\xb1y\xd6\xe2\x98\xfe\x1a\xea\x01\x01\x1b\x11)\xb4\x0f\x00\x00\x00\x00\xe3\xff\x02\x00\xf1\xfbF\x00\x16\x00@\x00\xf9\xfe\x02\x00w\x01f\x89'b'\x00\x05N\xb1y\xd6\xe2\xf4\xfe\x16\xeb\x01\x01t)\x05\x04\x00\xe2\xff\x05\x00\xfb\xfbD\x00\x1a\x00N\x00\xf8\xfeU\xff\x05\x02\xdbN'b'\x00\x05N\xb1y\xd6\xe3P\xfe\x16\xec\x01\x01\x81)\x05\x04\x00\xde\xff\x17\x00\xe9\xfb8\x00\xed\xffB\x00\x86\x00E\x00X\x02\xb8*'b'\x00\x05N\xb1y\xd6\xe3\xa0\xfe\x0e\xed\x01\x01\x1d)\x05\x04\x00\x1c\x98iD\xd7\xa3\x12\xbeS\x10\xdcH'b'\x00\x05N\xb1y\xd6\xe3\xf0\xfe\x0e\xee\x01\x01\x89)\x05\x04\x00\x94\xdciD\x14\xae3>w\x15\xc7\xa6'b'\x00\x05N\xb1y\xd6\xe4T\xfe*\xef\x01\x01\x96s\xe7f\xbc\xfdl\x01\x00S\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00Z2'b'\x00\x05N\xb1y\xd6\xe4\xb0\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x00\xe4;n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xf1Y'b'\x00\x05N\xb1y\xd6\xe5\x04\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&'b'\x00\x05N\xb1y\xd6\xe5T\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N'b'\x00\x05N\xb1y\xd6\xe5\xa0\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce'b'\x00\x05N\xb1y\xd6\xe5\xf4\xfe\x1e\xf4\x01\x01\x188\xde\xb1\x0f\x00\x00\x00\x00y\xa6\x02\x18\x10\xe8\xb8\xfdxi\n\x00F\x00\xff\xff\x12\x00\xdeT\x03\x0c\xc0\xd1'b'\x00\x05N\xb1y\xd6\xe6H\xfe\x1a\xf5\x01\x01>\xd5\xc7O\xbf)R\xb1>)r\xff=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xcf\xe7'b'\x00\x05N\xb1y\xd6\xe6\x90\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\x00\x05N\xb1y\xd87\x80\xfe\x1c\xf7\x01\x01\x1eQ\x05\x04\x00\x8f\x9b\xa2\xbc\x18RR\xb2s9\x00\x00\x00\x00\x00\x00\x00\x00\xad\xa7\xae<9bD<\xb3\xa7'b'\x00\x05N\xb1y\xd8N\x00\xfe\x03\xfb\x01\x01\xa5\xc5\x14\x00\xd0\xdf'b'\x00\x05N\xb1y\xd8NP\xfe\x0c\xfc\x01\x01\x02\xd0\xf7\x1cz\xb1N\x05\x00e\x05\x04\x00\xb5\xd7'b'\x00\x05N\xb1y\xd8N\xa4\xfe\x16\xfd\x01\x01\x88o\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaa>'b'\x00\x05N\xb1y\xd8N\xf8\xfe\x16\xfe\x01\x01\xc1e\xe3\xf5\x00\x00\x00\x00?\x03D\x1b'b'\x00\x05N\xb1y\xd8OH\xfe\x15\xff\x01\x01$^\xff\xb5\x0f&\x06\x06\x06)\x06k\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1='b'\x00\x05N\xb1y\xd8O\x9c\xfe\x16\x00\x01\x01#\xa1\x05\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00!\xc3'b'\x00\x05N\xb1y\xd8\x98\xa7\xfe5\xba\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01n\xbc'b'\x00\x05N\xb1y\xd8\xafc\xfe!\xbb\xff\x00L\xc2\xfc3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00j\xc3'b'\x00\x05N\xb1y\xd9\xea\xa0\xfe\x03\x01\x01\x01Ms\x00\x04\x1f['b'\x00\x05N\xb1y\xda&\xd8\xfe\x14\x02\x01\x01J\x8f\xc2u>\x8f\xc2u>\x99\x99\xd9?\\\x8fB>\xb4\x004\x007\xf2'b'\x00\x05N\xb1y\xda\xc2\xa7\xfe5\xbc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf0\x93'b'\x00\x05N\xb1y\xda\xed\x17\xfe!\xbd\xff\x00L\xc2\xfc3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe9%'b'\x00\x05N\xb1y\xdbw\xfc\xfe\x1a\x03\x01\x01\x1b\x11\xd8\xb7\x0f\x00\x00\x00\x00\xf0\xff\xf6\xff\x08\xfc<\x00\xce\xff\x1f\x00\xf5\xfe\x0b\x00t\x01\x0f\xc2'b'\x00\x05N\xb1y\xdbxt\xfe\x16\x04\x01\x01t\x1a\x06\x04\x00\xf6\xff\xee\xff#\xfc(\x00\xda\xff\x18\x00\xef\xfeY\xff\xfd\x01v\t'b'\x00\x05N\xb1y\xdbx\xd4\xfe\x16\x05\x01\x01\x81\x1a\x06\x04\x00\xec\xff\x05\x00\x0f\xfc\x07\x00\xd8\xff!\x00z\x00K\x00Z\x02\x94o'b'\x00\x05N\xb1y\xdby$\xfe\x0e\x06\x01\x01\x1d\x1a\x06\x04\x00\xdd\x98iD\\\x8f\x06\xbeS\x10\xef\xd4'b'\x00\x05N\xb1y\xdbyp\xfe\x0e\x07\x01\x01\x89\x1a\x06\x04\x00\x10\xdciD\xa4p+>x\x15|\x87'b'\x00\x05N\xb1y\xdby\xcc\xfe\x1f\x08\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xe4;\xad\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xc5\x98'b'\x00\x05N\xb1y\xdbz \xfe\x06\t\x01\x01}\xc5\x14\x00\x00\x03\x00\xb6V'b'\x00\x05N\xb1y\xdbzl\xfe\x04\n\x01\x01\x98\x00\x00\x80\x8a\xd6\x1b'b'\x00\x05N\xb1y\xdbz\xb0\xfe\x02\x0b\x01\x01*\x00\x00\x1e\x87'b'\x00\x05N\xb1y\xdb{\x08\xfe\x1e\x0c\x01\x01\x18\x88\x00\xb8\x0f\x00\x00\x00\x00t\xa6\x02\x18\r\xe8\xb8\xfd\xbei\n\x00F\x00\xff\xff\x0c\x00{O\x03\x0c\x11\x98'b'\x00\x05N\xb1y\xdb{\\\xfe\x1a\r\x01\x01>\x936\x1d\xbf`\x8c\x97\xbe\n\xea\x08>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xdb\x00'b'\x00\x05N\xb1y\xdb{\xa4\xfe\x08\x0e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd7a'b'\x00\x05N\xb1y\xdb{\xf4\xfe\x1c\x0f\x01\x01!%\x06\x04\x00n\xa6\x02\x18\x07\xe8\xb8\xfd>b\n\x00\xae\x06\x00\x00\x00\x00\xfc\xff\x13\x00\x83F\x1a\xf4'b'\x00\x05N\xb1y\xdb|T\xfe\x1c\x10\x01\x01 .\x06\x04\x00+\xe1\x90=Z\xf8\x89?L\x97\xb1\xbf\xf0\xc4\xb4;\x19N*\xbd\xae7K\xbe\xb6\xa6'b'\x00\x05N\xb1y\xdb|\xa0\xfe\t\xeb\n\x00m\x02\x00\x00\x00\x00\xdd\x00\x00\x00\xed\x9b'b'\x00\x05N\xb1y\xdb|\xf0\xfe\x1c\x11\x01\x01\x1eV\x06\x04\x00n\xdf\x01\xbbP-\xac\xb9huH\xc0\xd2\xc4\x8d=I\xc3\xe9\xbdy,\x7f\xbb\x98\x90'b'\x00\x05N\xb1y\xdb}<\xfe\x18\x12\x01\x01\xb2\x8f\x15,;,#\xa8\xbb\xbd\xdbG\xc0G\x01*Dt\xa6\x02\x18\r\xe8\xb8\xfd\xce\xc3'b'\x00\x05N\xb1y\xdb}\x8c\xfe\x1c\x13\x01\x01\xa3\x038\xd4\xb7H\x94\xb3\xb9~av9\x00\x00\x00\x00\x00\x00\x00\x00\xf91\xbf<\xdb<\t\x00\x00\x00\x00?\x03j>'b'\x00\x05N\xb1y\xdc\xa2\x7f\xfe5\xbe\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01uq'b'\x00\x05N\xb1y\xdc\xcc\x93\xfe!\xbf\xff\x00Lw\xff3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc3\\'b'\x00\x05N\xb1y\xdc\xe1\xe4\xfe\x03\x18\x01\x01Ms\x00\x04d\xac'b'\x00\x05N\xb1y\xdc\xe2\xac\xfe\x12\x19\x01\x01\xfc|\x06\x04\x004\x00\x01\x00ARMMASK\x00WrE\xad'b'\x00\x05N\xb1y\xdc\xe30\xfe\t\x1a\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x037a'b'\x00\x05N\xb1y\xdc\xe3\xa4\xfe\x15\x1b\x01\x01$r\xfd\xb9\x0f3\x06\xf2\x05(\x06D\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00|&'b'\x00\x05N\xb1y\xdc\xe4\x04\xfe\x16\x1c\x01\x01#\xa7\x06\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd4\xd3'b'\x00\x05N\xb1y\xdeh \xfe\x03\x1d\x01\x01Ms\x00\x04\x05;'b'\x00\x05N\xb1y\xdei\x00\xfe\x14\x1e\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=R\xb8\xde?\\\x8fB>\xb4\x002\x00]K'b'\x00\x05N\xb1y\xdeid\xfe\x1a\x1f\x01\x01\x1b\xd8\x86\xbb\x0f\x00\x00\x00\x00\xfb\xff\x14\x00"\xfcK\x00}\xff\xf1\xff\xfa\xfe\x11\x00x\x01\x05s'b'\x00\x05N\xb1y\xdei\xbc\xfe\x16 \x01\x01t\x0c\x07\x04\x00\x06\x00\x17\x00E\xfcC\x00\x89\xff\xfc\xff\xf7\xfek\xff\x0b\x02B\x9b'b'\x00\x05N\xb1y\xdej\x14\xfe\x16!\x01\x01\x81\x0c\x07\x04\x00\xf5\xff\x1d\x00)\xfc-\x00\x81\xff\x07\x00\x90\x00F\x00z\x02ag'b'\x00\x05N\xb1y\xdej`\xfe\x0e"\x01\x01\x1d\x0c\x07\x04\x00\x0f\x99iD\xa4p\x03\xbeS\x10\x85.'b'\x00\x05N\xb1y\xdej\xb0\xfe\x0e#\x01\x01\x89\x0c\x07\x04\x00)\xdciD\xc2\xf5,>w\x15\t\xab'b'\x00\x05N\xb1y\xdek\x08\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x01\xe3;\x82\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x94\xd3'b'\x00\x05N\xb1y\xdekX\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V'b'\x00\x05N\xb1y\xdek\xa4\xfe\x04&\x01\x01\x98\x00\x00\x80\x8a\xc0\xac'b"\x00\x05N\xb1y\xdek\xe8\xfe\x02'\x01\x01*\x00\x00\x07U"b'\x00\x05N\xb1y\xdel<\xfe\x1e(\x01\x01\x18\xc8\r\xbb\x0f\x00\x00\x00\x00t\xa6\x02\x18\r\xe8\xb8\xfd\xd2i\n\x00F\x00\xff\xff\t\x00{O\x03\x0c\x03='b'\x00\x05N\xb1y\xdel\x90\xfe\x1a)\x01\x01>\x18\xa9\x86\xbfB\x03\\\xbf\x1f>\n>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00l\x8b'b'\x00\x05N\xb1y\xdel\xd8\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2'b'\x00\x05N\xb1y\xdem,\xfe\x1c+\x01\x01!\xed\x06\x04\x00n\xa6\x02\x18\x06\xe8\xb8\xfdfb\n\x00\xd6\x06\x00\x00\x01\x00\xf6\xff\x12\x00\x80F\xa2\xed'b'\x00\x05N\xb1y\xdem\x88\xfe\x1c,\x01\x01 3\x07\x04\x00\xb5\xe0\x9a=\xaf\xa8\x88?\xe0\xf4\xb5\xbf\x84\x83tM\xa8<\xe8\x01\xc9;:\x8f'b'\x00\x05N\xb1y\xe0:\x08\xfe\x031\x01\x01\xa5\xc5\x14\x00\x10W'b'\x00\x05N\xb1y\xe0:X\xfe\x0c2\x01\x01\x02\xf8\xea$z\xb1N\x05\x00p\x07\x04\x00\xbb\xd0'b'\x00\x05N\xb1y\xe0:\xac\xfe\x163\x01\x01\x88n\xa6\x02\x18\x06\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15\x16'b'\x00\x05N\xb1y\xe0:\xfc\xfe\x164\x01\x01\xc1\xf3*\xc1<\x04a\xf9<9\x19;;C\xe8;>\x00\x00\x00\x00?\x03\x90&'b'\x00\x05N\xb1y\xe0=W\xfe\t\xc2\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc4\xe7'b'\x00\x05N\xb1y\xe0\xb6k\xfe5\xc3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9e\x1e'b'\x00\x05N\xb1y\xe0\xcc\xab\xfe!\xc4\xff\x00L\xfc\xf73\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc5\xea'b'\x00\x05N\xb1y\xe1\x9b@\xfe\x155\x01\x01$7\xf9\xbd\x0f0\x06\xd3\x05+\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00I'b'\x00\x05N\xb1y\xe1\x9b\xc0\xfe\x166\x01\x01#\xac\x07\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x97\xb9'b'\x00\x05N\xb1y\xe1\x9c\x10\xfe\x037\x01\x01Ms\x00\x04&\xab'b'\x00\x05N\xb1y\xe1\xc2\xb0\xfe\x1a8\x01\x01\x1be0\xbf\x0f\x00\x00\x00\x00\x04\x00\x04\x000\xfc\xc2\xff=\x00\xf8\xff\x0c\xff\x11\x00{\x011\xa5'b'\x00\x05N\xb1y\xe1\xc3\x14\xfe\x169\x01\x01t\xfc\x07\x04\x00\x07\x00\t\x00=\xfc\xc6\xffD\x00\x03\x00\x00\xffh\xff\x0f\x02h\xfb'b'\x00\x05N\xb1y\xe1\xc3l\xfe\x16:\x01\x01\x81\xfc\x07\x04\x00\xfa\xff\x18\x00&\xfc\xb7\xff8\x00\x05\x00\x8f\x00X\x00\x83\x024\xaf'b'\x00\x05N\xb1y\xe1\xc3\xc0\xfe\x0e;\x01\x01\x1d\xfc\x07\x04\x00\xf5\x98iD=\n\x05\xbeT\x102\xee'b'\x00\x05N\xb1y\xe1\xc4$\xfe\x0e<\x01\x01\x89\xfc\x07\x04\x00\x83\xdbiD\xd7\xa3">y\x15\x84\t'b'\x00\x05N\xb1y\xe1\xc4|\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\xe3;`\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe0\x02'b'\x00\x05N\xb1y\xe1\xc4\xcc\xfe\x06>\x01\x01}\xc8\x14\x00\x00\x03\x00\xd0K'b'\x00\x05N\xb1y\xe1\xc5\x18\xfe\x04?\x01\x01\x98\x00\x00\x80\x8aca'b'\x00\x05N\xb1y\xe1\xc5\\\xfe\x02@\x01\x01*\x00\x00\x9a6'b'\x00\x05N\xb1y\xe1\xc5\xb0\xfe\x1eA\x01\x01\x18\x08\x1b\xbe\x0f\x00\x00\x00\x00s\xa6\x02\x18\r\xe8\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x0c\x00{O\x03\x0c"\x14'b"\x00\x05N\xb1y\xe1\xc6\x04\xfe\x1aB\x01\x01>\xfc'\x0e\xc0.\x85\xe3\xbe\xd7\x80\x11>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x80\xb3"b'\x00\x05N\xb1y\xe1\xc6L\xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<'b'\x00\x05N\xb1y\xe2\x9cO\xfe5\xc5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x001'b'\x00\x05N\xb1y\xe2\xc6+\xfe!\xc6\xff\x00L\xfc\xf73\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00D\xb7'b"\x00\x05N\xb1y\xe2\xc6\x8f\xfe%\xc5\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xcc\xba"b'\x00\x05N\xb1y\xe3#8\xfe\x14D\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\\\x8f\xe2?{\x14.>\xb4\x004\x00\xef\xf1'b'\x00\x05N\xb1y\xe3#\xb8\xfe\x1cE\x01\x01!\xb5\x07\x04\x00n\xa6\x02\x18\x02\xe8\xb8\xfd\x84b\n\x00\xf4\x06\x00\x00\xfb\xff\xed\xff\x11\x00\x87F\xe2\x99'b'\x00\x05N\xb1y\xe3$$\xfe\x1cF\x01\x01 9\x08\x04\x00\x14\x07\x8b=z$\x84?&\x16\xba\xbf\xeb\x96Z\xbd\x18\xe6I\xbe\xd6|4\xbe\x80\xad'b'\x00\x05N\xb1y\xe3$p\xfe\x03G\x01\x01/\xff\x00\x00\xe9<'b'\x00\x05N\xb1y\xe3%\x08\xfe\x1cH\x01\x01\x1ea\x08\x04\x00\xac\xc3P;\xeb\\\xd6\xbcF{H\xc0+\xf9\xb9\xbd$\x19\xba=\x07\xf4\x19\xbd}u'b'\x00\x05N\xb1y\xe3%\x80\xfe\x18I\x01\x01\xb2\xe8\xff\x0e<\xa7\xd1\x02\xbd\xe4\xe8G\xc0\xae\x07*Ds\xa6\x02\x18\r\xe8\xb8\xfd\x00U'b'\x00\x05N\xb1y\xe3%\xdc\xfe\x03J\x01\x01Ms\x00\x04\x82\x99'b'\x00\x05N\xb1y\xe4\x9f7\xfe5\xc8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01v\x9b'b'\x00\x05N\xb1y\xe4\xb53\xfe!\xc9\xff\x00L\x85\xfb3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x001\xd8'b'\x00\x05N\xb1y\xe4\xca\xbc\xfe\x1cK\x01\x01\xa3V\xb2\xf2\xb6iW\xc2\xb9Z\x92|9\x00\x00\x00\x00\x00\x00\x00\x00F\xaf\x91<\x0c\xb9\xe2;_\x08'b'\x00\x05N\xb1y\xe4\xcb0\xfe\x03L\x01\x01\xa5\xc8\x14\x00;\xee'b'\x00\x05N\xb1y\xe4\xcb\x88\xfe\x0cM\x01\x01\x02\x98\xe2(z\xb1N\x05\x00u\x08\x04\x00\x06\xb0'b'\x00\x05N\xb1y\xe4\xcb\xe8\xfe\x16N\x01\x01\x88m\xa6\x02\x18\x01\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3\xd3'b'\x00\x05N\xb1y\xe4\xcc<\xfe\x12O\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xfb\xc9'b'\x00\x05N\xb1y\xe4\xcc\x94\xfe\x16P\x01\x01\xc1\xc6G\xb0\x00\x00\x00\x00?\x03\xbd\xff'b'\x00\x05N\xb1y\xe4\xcd\x1c\xfe\x15R\x01\x01$\x17\xf5\xc1\x0f\x9b\x05\x9d\x05r\x06\xae\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x90'b'\x00\x05N\xb1y\xe4\xcdx\xfe\x16S\x01\x01#\xb1\x08\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6\xa8'b'\x00\x05N\xb1y\xe6-4\xfe\x03T\x01\x01Ms\x00\x04\xf7\xf2'b'\x00\x05N\xb1y\xe6.\x00\xfe\x1aU\x01\x01\x1b\x01\xe4\xc2\x0f\x00\x00\x00\x00\xe9\xff\x02\x002\xfc\xe4\xff\xb7\xff~\xfe\x06\xff\x07\x00u\x01\xa88'b'\x00\x05N\xb1y\xe6.l\xfe\x16V\x01\x01t\xee\x08\x04\x00\xed\xff\xfc\xffM\xfc\xf0\xff\xd0\xff}\xfe\xf6\xfed\xff\x03\x02\x90\xe0'b'\x00\x05N\xb1y\xe6.\xd0\xfe\x16W\x01\x01\x81\xee\x08\x04\x00\xe9\xff\x19\x00#\xfc\xea\xff\xc2\xffp\xfe~\x00R\x00f\x02g!'b'\x00\x05N\xb1y\xe6/@\xfe\x0eX\x01\x01\x1d\xee\x08\x04\x00 \x96iDff2\xbeQ\x10W5'b'\x00\x05N\xb1y\xe6/\x9c\xfe\x0eY\x01\x01\x89\xee\x08\x04\x00G\xdbiDG\xe1\x1e>x\x15\x9d\xab'b'\x00\x05N\xb1y\xe60\x04\xfe\x1fZ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01\xe3;n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x90\xe5'b'\x00\x05N\xb1y\xe60`\xfe\x06[\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4A'b'\x00\x05N\xb1y\xe60\xb8\xfe\x04\\\x01\x01\x98\x00\x00\x80\x8a>\xa6'b'\x00\x05N\xb1y\xe61\x10\xfe\x02]\x01\x01*\x00\x00\x1c\xad'b'\x00\x05N\xb1y\xe61d\xfe\x1e^\x01\x01\x18\x004\xc1\x0f\x00\x00\x00\x00q\xa6\x02\x18\x0c\xe8\xb8\xfd\xbei\n\x00F\x00\xff\xff\x13\x00{O\x03\x0c\x17"'b'\x00\x05N\xb1y\xe61\xb8\xfe\x1a_\x01\x01>\xfc\xeeA\xc0\x9b\xcb{\xc0\xae=\xef=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00bz'b'\x00\x05N\xb1y\xe62\x00\xfe\x08`\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x87'b'\x00\x05N\xb1y\xe62L\xfe\x14a\x01\x01J\xcc\xccL>\xcc\xccL>\x14\xae\xe7?\xb8\x1e\x05>\xb1\x002\x00\xb4%'b'\x00\x05N\xb1y\xe6mS\xfe5\xca\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x9a\x99\x19\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf3y'b'\x00\x05N\xb1y\xe6\xab\x87\xfe!\xcb\xff\x00L\x85\xfb3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb0\x85'b'\x00\x05N\xb1y\xe7\xd4t\xfe\x1cb\x01\x01!\x80\x08\x04\x00k\xa6\x02\x18\xfc\xe7\xb8\xfd\xacb\n\x00\x1c\x07\x00\x00\xfa\xff\xe8\xff\n\x00FE\x89\xb6'b'\x00\x05N\xb1y\xe7\xd5$\xfe\x1cc\x01\x01 ?\t\x04\x00M!#=\x12\xbe{?&\x01\xbf\xbf\xee\xb9\x8d\xbd\xab\n{\xbe\xacO\xdf\xbdl{'b'\x00\x05N\xb1y\xe7\xd5\x80\xfe\x03d\x01\x01Ms\x00\x04\x7f\x1f'b'\x00\x05N\xb1y\xe7\xeaX\xfe\x1ce\x01\x01\x1eg\t\x04\x00\x1e\xbc\x1a\xbc\xdb(\x1d\xbdL\x98E@\x15\xab3\xbe\xf9\xc2\xe3\xbd\xec\xeb/\xbe\x8e\xa0'b'\x00\x05N\xb1y\xe7\xea\xb4\xfe\x18f\x01\x01\xb2\x9f\x1dZ\xbb\x03I*\xbd\xfb6F@\x00\x10*Dm\xa6\x02\x18\x08\xe8\xb8\xfd*\x97'b'\x00\x05N\xb1y\xe7\xeb\x0c\xfe\x1cg\x01\x01\xa3\x1a\x02\xe953\x15\xca\xb9I\xef\x7f9\x00\x00\x00\x00\x00\x00\x00\x00fa\x8a<\xd9 \x15<,>'b'\x00\x05N\xb1y\xe7\xebT\xfe\x03h\x01\x01\xa5\xc2\x14\x00\xbb\x92'b'\x00\x05N\xb1y\xe7\xeb\xa0\xfe\x0ci\x01\x01\x028\xda,z\xb1N\x05\x00{\t\x04\x00(\x85'b'\x00\x05N\xb1y\xe7\xeb\xf0\xfe\x16j\x01\x01\x88j\xa6\x02\x18\xfb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00v;'b'\x00\x05N\xb1y\xe7\xec@\xfe\x16k\x01\x01\xc1\x1f:\xc9<\xc0P\xc1>\x00\x00\x00\x00?\x03c>'b'\x00\x05N\xb1y\xe8kw\xfe5\xcc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1e`'b'\x00\x05N\xb1y\xe8\x96\xfb\xfe!\xcd\xff\x00L\xff\xe53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbc\xfe'b'\x00\x05N\xb1y\xe9B\xa0\xfe\x15l\x01\x01$j\xf5\xc5\x0fe\x06<\x06\x03\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00".'b'\x00\x05N\xb1y\xe9C8\xfe\x16m\x01\x01#\xb7\t\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb2_'b'\x00\x05N\xb1y\xe9C\xb0\xfe\x1an\x01\x01\x1b\x8c\x91\xc6\x0f\x00\x00\x00\x00\xec\xff\x06\x00\xf6\xfb\xe3\xfe\xc0\x00{\xff\t\xff\xf8\xff}\x01\x83\x08'b'\x00\x05N\xb1y\xe9D\x1c\xfe\x16o\x01\x01t\xdf\t\x04\x00\xf1\xff\x07\x00\x00\xfc\xee\xfe\xb6\x00\x82\xff\x03\xffK\xff\x0e\x02\xef\x91'b'\x00\x05N\xb1y\xe9D\x80\xfe\x16p\x01\x01\x81\xdf\t\x04\x00\xe8\xff\t\x00\xf2\xfb\xe1\xfe\xaa\x00\x88\xff\x9b\x00B\x00\x84\x02\xf8}'b'\x00\x05N\xb1y\xe9D\xdc\xfe\x0eq\x01\x01\x1d\xdf\t\x04\x00\xac\x97iD\x99\x99\x19\xbeS\x10t\x80'b'\x00\x05N\xb1y\xe9E0\xfe\x0er\x01\x01\x89\xdf\t\x04\x00C\xdciD\xd7\xa3.>y\x15J\xa0'b'\x00\x05N\xb1y\xe9E\x94\xfe\x1fs\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x01\xe3;\xf6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SPh'b'\x00\x05N\xb1y\xe9E\xf0\xfe\x06t\x01\x01}\xc5\x14\x00\x00\x03\x00\x12\xbf'b'\x00\x05N\xb1y\xe9F@\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2'b'\x00\x05N\xb1y\xe9F\xf0\xfe\x04v\x01\x01\x98\x00\x00\x80\x8a7\xb5'b"\x00\x05N\xb1y\xe9G<\xfe\x02w\x01\x01*\x00\x00\xc8'"b'\x00\x05N\xb1y\xe9G\x98\xfe\x1ex\x01\x01\x18(E\xc4\x0f\x00\x00\x00\x00m\xa6\x02\x18\x08\xe8\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x1d\x00\x1aW\x03\x0c\xfc\xbb'b"\x00\x05N\xb1y\xe9G\xf0\xfe\x1ay\x01\x01>\nW\xff=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x90\xfb"b'\x00\x05N\xb1y\xe9H<\xfe\x08z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00B\xfb'b'\x00\x05N\xb1y\xeaSk\xfe5\xce\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9b\x82'b'\x00\x05N\xb1y\xeai\xe7\xfe!\xcf\xff\x00L\xff\xe53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00=\xa3'b'\x00\x05N\xb1y\xea\xb9\xd8\xfe\x14{\x01\x01J\n\xd7\xa3>\n\xd7\xa3>\x1e\x85\xeb?)\\\x0f>\xaf\x00/\x00Z\xa1'b'\x00\x05N\xb1y\xea\xbad\xfe\t\xec\n\x00m\x01\x00\x00\x00\x00\xdb\x00\x00\x00\x9b\xa4'b'\x00\x05N\xb1y\xea\xba\xdc\xfe\x1c|\x01\x01!\x12\n\x04\x00h\xa6\x02\x18\xf6\xe7\xb8\xfd\xc0b\n\x000\x07\x00\x00\xf5\xff\xec\xff\x10\x00\xd1DjX'b'\x00\x05N\xb1y\xea\xbbX\xfe\x1c}\x01\x01 D\n\x04\x00Z\x17\x10\xbb\xe0\xa0m?\xf0S\xc2\xbf\xa3\xf8\xe7\xbd\x88\xf7L\xbe#N&\xben\x9b'b'\x00\x05N\xb1y\xea\xbb\xe0\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b'\x00\x05N\xb1y\xea\xd0p\xfe\x12\x7f\x01\x01\xfcj\n\x04\x004\x00\x01\x00ARMMASK\x00Wr\xdeR'b'\x00\x05N\xb1y\xea\xd0\xe8\xfe\t\x80\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x89#'b'\x00\x05N\xb1y\xec\x01\xf3\xfe5\xd0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01}\x13'b'\x00\x05N\xb1y\xec+\xdb\xfe!\xd1\xff\x00L\xff\xe53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x81\xc7'b'\x00\x05N\xb1y\xec^l\xfe\x1c\x81\x01\x01\x1el\n\x04\x00\x03\xcem\xbd\xe5\x99\x9b;i\x95E@\xdd\xf5\xf2\xbc[\x06v>\x1cS\xac>\xb2j'b'\x00\x05N\xb1y\xec_\x10\xfe\x18\x82\x01\x01\xb2\xfd\xddX\xbd\xe8\xcb\x03\xba\x99\xf6E@\xc2\x15*Dm\xa6\x02\x18\x04\xe8\xb8\xfd>;'b'\x00\x05N\xb1y\xec_\x98\xfe\x1c\x83\x01\x01\xa3}\xbc27\x1f\xfe\xd1\xb9\x8d\xb5\x819\x00\x00\x00\x00\x00\x00\x00\x00d}{\xd7\xd6\x00\x00\x00\x00?\x03\xc1)'b'\x00\x05N\xb1y\xecaL\xfe\x15\x88\x01\x01$l\xf1\xc9\x0f\x06\x06\x18\x06\xf9\x05\xe9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbdC'b'\x00\x05N\xb1y\xeca\xa4\xfe\x16\x89\x01\x01#\xbc\n\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00e]'b'\x00\x05N\xb1y\xeca\xec\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P'b'\x00\x05N\xb1y\xed\xd5\xbc\xfe\x1a\x8b\x01\x01\x1b\xcdB\xca\x0f\x00\x00\x00\x00\xef\xff\x04\x00\x89\xfc\xa7\xff.\x00\x97\x00\xf3\xfe\xed\xffo\x01 \x87'b'\x00\x05N\xb1y\xed\xd6@\xfe\x16\x8c\x01\x01t\xd1\n\x04\x00\xf8\xff\x06\x00\x8b\xfc\xa6\xff.\x00\x95\x00\xf3\xfe[\xff\x0c\x02h\xf7'b'\x00\x05N\xb1y\xed\xd6\xb0\xfe\x16\x8d\x01\x01\x81\xd1\n\x04\x00\xe9\xff\n\x00\x8d\xfc\xa3\xff\x1a\x00\x95\x00z\x00O\x00^\x02S\xca'b'\x00\x05N\xb1y\xed\xd7\x00\xfe\x0e\x8e\x01\x01\x1d\xd1\n\x04\x00}\x99iD\xb8\x1e\xf9\xbdU\x10\xa6\xf3'b"\x00\x05N\xb1y\xed\xd7P\xfe\x0e\x8f\x01\x01\x89\xd1\n\x04\x00\xcb\xdbiD\xb8\x1e'>{\x15\xb9~"b'\x00\x05N\xb1y\xed\xd7\xb4\xfe\x1f\x90\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00#\x01\xca;\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x10-'b'\x00\x05N\xb1y\xed\xd8\x10\xfe\x06\x91\x01\x01}\xc5\x14\x00\x00\x03\x00B\t'b'\x00\x05N\xb1y\xed\xd8\\\xfe\x04\x92\x01\x01\x98\x00\x00\x80\x8a__'b'\x00\x05N\xb1y\xed\xd8\xa4\xfe\x02\x93\x01\x01*\x00\x00&j'b'\x00\x05N\xb1y\xed\xd9\x00\xfe\x1e\x94\x01\x01\x18xg\xca\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfe\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff%\x003[\x03\x0c\x1d\x81'b'\x00\x05N\xb1y\xed\xd9l\xfe\x1a\x95\x01\x01>s\x9f8\xc0\x07p|?3\x1b\xc8=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc0`'b'\x00\x05N\xb1y\xed\xd9\xb8\xfe\x08\x96\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xd0'b'\x00\x05N\xb1y\xed\xda \xfe\x14\x97\x01\x01J\xa4p\xbd>\xa4p\xbd>\xcc\xcc\xec?\x00\x00\x00\x00\xb2\x008\x00\xd3\x98'b'\x00\x05N\xb1y\xed\xdb\xdf\xfe5\xd2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf8\xf1'b'\x00\x05N\xb1y\xee\x05\x8f\xfe!\xd3\xff\x00L\x8a\xdb3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xde\xfc'b'\x00\x05N\xb1y\xef^x\xfe\x03\x98\x01\x01Ms\x00\x00\xe6\x00'b'\x00\x05N\xb1y\xef_<\xfe\x1c\x99\x01\x01!\xdb\n\x04\x00f\xa6\x02\x18\xf2\xe7\xb8\xfd\xcab\n\x00:\x07\x00\x00\xfd\xff\xf8\xff\x01\x00\xf3E_\xf3'b'\x00\x05N\xb1y\xef_\xa8\xfe\x1c\x9a\x01\x01 I\x0b\x04\x00^W\t\xbd\nKe?\x9e\xfe\xc2\xbf\xe3O \xbd\x15q\xa8\xbd\xd2\x8b\x92\xbc\xd2\x01'b"\x00\x05N\xb1y\xef`\x00\xfe\x1c\x9b\x01\x01\x1eq\x0b\x04\x00%'\x82\xbd\x08\x8f|\x00\x00\x00\x00?\x03\rr'b'\x00\x05N\xb1y\xef\xa9[\xfe\t\xd4\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03~?'b'\x00\x05N\xb1y\xef\xd2{\xfe5\xd4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01f\xde'b'\x00\x05N\xb1y\xef\xf3\xd3\xfe!\xd6\xff\x00L\x83\xe63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\x12'b'\x00\x05N\xb1y\xf0\xd9\xe4\xfe\x1a\xa2\x01\x01\x1bg\xef\xcd\x0f\x00\x00\x00\x00\xea\xff\r\x00\x06\xfcA\x00\xdc\xff4\x00\xf0\xfe\xf0\xffl\x01I\x88'b"\x00\x05N\xb1y\xf0\xda`\xfe\x16\xa3\x01\x01t\xc2\x0b\x04\x00\xf2\xff\x1a\x00\x0e\xfcT\x00\xdb\xff?\x00\xeb\xfe5\xff\xf3\x01'F"b'\x00\x05N\xb1y\xf0\xda\xbc\xfe\x16\xa4\x01\x01\x81\xc2\x0b\x04\x00\xec\xff\x12\x00\x03\xfcU\x00\xd3\xffF\x00m\x004\x00k\x02Xn'b'\x00\x05N\xb1y\xf0\xdb\x0c\xfe\x0e\xa5\x01\x01\x1d\xc2\x0b\x04\x00\xef\x96iD\xa4p%\xbeT\x10\xf4\xa0'b'\x00\x05N\xb1y\xf0\xdb\\\xfe\x0e\xa6\x01\x01\x89\xc2\x0b\x04\x00\xab\xdaiD\xb8\x1e\x15>|\x15j\xe6'b'\x00\x05N\xb1y\xf0\xdb\xb4\xfe\x1f\xa7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01\xca;/\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa6\xeb'b'\x00\x05N\xb1y\xf0\xdc \xfe\x06\xa8\x01\x01}\xc8\x14\x00\x00\x03\x00\xf9]'b'\x00\x05N\xb1y\xf0\xdc\x80\xfe\x03\xa9\x01\x01Ms\x00\x00\xd1l'b'\x00\x05N\xb1y\xf0\xdd\x08\xfe\x04\xaa\x01\x01\x98\x00\x00\x80\x8a8('b'\x00\x05N\xb1y\xf0\xddp\xfe\x02\xab\x01\x01*\x00\x00\x80b'b'\x00\x05N\xb1y\xf0\xdd\xe0\xfe\x1e\xac\x01\x01\x18\xa0x\xcd\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfa\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x1d\x00p]\x03\x0c\\+'b'\x00\x05N\xb1y\xf0\xdeH\xfe\x1a\xad\x01\x01>A\xce\xee\xbf\xfc\xb7\xdf>)|\xd7=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf0I'b'\x00\x05N\xb1y\xf0\xde\xa4\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12'b'\x00\x05N\xb1y\xf0\xdf\x08\xfe\x15\xaf\x01\x01$\xb9=\xce\x0f\x13\x06\xf9\x05\xf3\x052\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00L\xf4'b'\x00\x05N\xb1y\xf0\xdfp\xfe\x16\xb0\x01\x01#\xd6\x0b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x90\x9c'b'\x00\x05N\xb1y\xf1\xb2k\xfe5\xd7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa9\xc9'b'\x00\x05N\xb1y\xf1\xc8g\xfe!\xd8\xff\x00L\x83\xe63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcd\x8a'b'\x00\x05N\xb1y\xf2z\xa8\xfe\x14\xb1\x01\x01J\x99\x99\x99>\x99\x99\x99>{\x14\xee?\x8f\xc2u=\xb3\x001\x00@H'b'\x00\x05N\xb1y\xf2{\x0c\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90'b'\x00\x05N\xb1y\xf2{\xa4\xfe\x1c\xb3\x01\x01!\xa4\x0b\x04\x00e\xa6\x02\x18\xf1\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x04\x00\x01\x00\x05\x00FFW\x1b'b'\x00\x05N\xb1y\xf2|,\xfe\x1c\xb4\x01\x01 N\x0c\x04\x00D\xa8\x15\xbd\xb8\xe5b?\xfe\xe2\xc3\xbf\xf8\xb94=T\x97q<\xb9\xd0U\xbdW\xa1'b"\x00\x05N\xb1y\xf3\x1c\x8b\xfe%\xd9\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x01g"b'\x00\x05N\xb1y\xf3\x93\x0b\xfe5\xda\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdfc'b"\x00\x05N\xb1y\xf3\xe6'\xfe!\xdb\xff\x00L\x83\xe63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x84}"b'\x00\x05N\xb1y\xf4\x1f\xa0\xfe\x1c\xb5\x01\x01\x1ew\x0c\x04\x00f\xef\x0e\xbd^: <*\x0fI@\xe1A\xad=Q\xb9+\xbd\x06$\x8a=\xa8\xc1'b'\x00\x05N\xb1y\xf4 \x1c\xfe\x18\xb6\x01\x01\xb2a\xc6\xf8\xbc\x1d\x15\x03<%\x8cH\xc0\x14\x0e*Dl\xa6\x02\x18\xf8\xe7\xb8\xfdb\x81'b'\x00\x05N\xb1y\xf4 t\xfe\x1c\xb7\x01\x01\xa3\x8d\xd3\xf07V\x18\xe2\xb9\x17\x80\x859\x00\x00\x00\x00\x00\x00\x00\x00+\xe0\xaf<\xed\xdf\xec;\x11^'b'\x00\x05N\xb1y\xf4 \xbc\xfe\x03\xb8\x01\x01\xa5\xc5\x14\x00\xf10'b'\x00\x05N\xb1y\xf4!\x08\xfe\x0c\xb9\x01\x01\x02\x18\xc18z\xb1N\x05\x00\x8b\x0c\x04\x00\xde\x1a'b'\x00\x05N\xb1y\xf4!\\\xfe\x16\xba\x01\x01\x88f\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xda\xaf'b'\x00\x05N\xb1y\xf4!\xac\xfe\x16\xbb\x01\x01\xc1\x93\x86*=\x96(!=\xaf\x7f\xa6;\xecW\x1b>\x00\x00\x00\x00?\x03\xc2_'b'\x00\x05N\xb1y\xf4"\x1c\xfe\x03\xbd\x01\x01/\xff\x00\x00\xa1Y'b'\x00\x05N\xb1y\xf4"\xbc\xfe\x1a\xbe\x01\x01\x1b\xd9\x9c\xd1\x0f\x00\x00\x00\x00\xf3\xff\t\x00\x16\xfc?\x00\xdf\xff\x0f\x00\xee\xfe\xfc\xffq\x01\x14\xeb'b'\x00\x05N\xb1y\xf4#\x14\xfe\x16\xbf\x01\x01t\xb3\x0c\x04\x00\xf1\xff\x08\x00!\xfcD\x00\xdd\xff\x0c\x00\xf0\xfeX\xff\x02\x02\xfa\xa8'b'\x00\x05N\xb1y\xf4#h\xfe\x16\xc0\x01\x01\x81\xb3\x0c\x04\x00\xe8\xff\x14\x00\x1b\xfcA\x00\xc3\xff\x0b\x00\x7f\x008\x00i\x02L\x96'b'\x00\x05N\xb1y\xf4#\xb4\xfe\x0e\xc1\x01\x01\x1d\xb3\x0c\x04\x00\x80\x97iDff\x1c\xbeT\x10L\x07'b'\x00\x05N\xb1y\xf4$\x00\xfe\x0e\xc2\x01\x01\x89\xb3\x0c\x04\x00\x99\xdbiD\x00\x00$>|\x15\x9f\xc9'b'\x00\x05N\xb1y\xf4$X\xfe\x1f\xc3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x00\xca;h\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x986'b'\x00\x05N\xb1y\xf4$\xa8\xfe\x06\xc4\x01\x01}\xc2\x14\x00\x00\x03\x00\xdey'b'\x00\x05N\xb1y\xf4$\xf4\xfe\x04\xc5\x01\x01\x98\x00\x00\x80\x8aJ\xaf'b'\x00\x05N\xb1y\xf4%8\xfe\x02\xc6\x01\x01*\x00\x00J\xe8'b'\x00\x05N\xb1y\xf4%\x8c\xfe\x1e\xc7\x01\x01\x18\xb0\x8d\xd0\x0f\x00\x00\x00\x00l\xa6\x02\x18\xf8\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x13\x00p]\x03\x0c1\x02'b'\x00\x05N\xb1y\xf4%\xdc\xfe\x1a\xc8\x01\x01>\xefA\xf5\xbf\x92;\xc0\xbd\xcc\xee\xd1=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9am`'b'\x00\x05N\xb1y\xf4&$\xfe\x08\xc9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00g\xdc'b'\x00\x05N\xb1y\xf5\x98\xc0\xfe\x15\xca\x01\x01$\xd5\xeb\xd1\x0f\x97\x05c\x05\x93\x06\xad\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xef'b'\x00\x05N\xb1y\xf5\x99L\xfe\x16\xcb\x01\x01#\xc7\x0c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00p\xdd'b'\x00\x05N\xb1y\xf5\x99\xb4\xfe\x03\xcc\x01\x01Ms\x00\x00\xb1('b'\x00\x05N\xb1y\xf5\xae$\xfe\x14\xcd\x01\x01J\\\x8fB>\\\x8fB>\xcc\xcc\xec?\xcc\xccL=\xb3\x005\x00"\t'b'\x00\x05N\xb1y\xf5\xaf+\xfe5\xdc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01AL'b'\x00\x05N\xb1y\xf5\xc6\x1f\xfe!\xdd\xff\x00Lo\xf83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9a\xef'b'\x00\x05N\xb1y\xf7\x110\xfe\x1c\xce\x01\x01!!\r\x04\x00g\xa6\x02\x18\xf1\xe7\xb8\xfd\xcab\n\x00:\x07\x00\x00\x0b\x00\x04\x00\x05\x00\x01Fb\xd4'b'\x00\x05N\xb1y\xf7\x11\xb0\xfe\x1c\xcf\x01\x01 ?\r\x04\x00\xd1\xd5w\xbc\xc5\xc3c?\xffL\xc3\xbf\xab:\xe3=\x1brB=\x13\x9fc\xbdYf'b'\x00\x05N\xb1y\xf7\x12\x04\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH'b'\x00\x05N\xb1y\xf7\x12\x9c\xfe\x1c\xd1\x01\x01\x1eg\r\x04\x00\x0c(\xc6\xbc\x1a9L;\xf7\x90H@s\xb1\xb7=y\x99\x1a\xbdo\xff7>\xe4\x82'b'\x00\x05N\xb1y\xf7\x12\xf4\xfe\x18\xd2\x01\x01\xb2\xbd3\x9b\xbc\xaeH\x98:\xae\xf0H@)\x0c*Dm\xa6\x02\x18\xf7\xe7\xb8\xfd\x8c-'b'\x00\x05N\xb1y\xf7\x13D\xfe\x1c\xd3\x01\x01\xa3g\xa7\x1c8^\x8f\xe9\xb9\xc0K\x879\x00\x00\x00\x00\x00\x00\x00\x00\x86\xf3\x94<\x9cC\xb0;\x05\x8b'b'\x00\x05N\xb1y\xf7\x13\x88\xfe\x03\xd4\x01\x01\xa5\xc5\x14\x00\x92\xd8'b'\x00\x05N\xb1y\xf7\x13\xd0\xfe\x0c\xd5\x01\x01\x02\x98j\x00\x00\x00\x00?\x03\x0c\xbe'b'\x00\x05N\xb1y\xf7xk\xfe5\xde\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc4\xae'b'\x00\x05N\xb1y\xf7\x8e\x9f\xfe!\xdf\xff\x00L;\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00r\x17'b'\x00\x05N\xb1y\xf8\xaa\x80\xfe\x1a\xd8\x01\x01\x1b\x0fJ\xd5\x0f\x00\x00\x00\x00\xf9\xff\x08\x00\xf7\xfbL\x00\xa4\xff:\x00\xf6\xfe\xfe\xffn\x01\x97)'b'\x00\x05N\xb1y\xf8\xab\x10\xfe\x16\xd9\x01\x01t\xa4\r\x04\x00\xfb\xff\x18\x00\x08\xfcC\x00\xb4\xff9\x00\xf1\xfeM\xff\xfc\x01\x87`'b'\x00\x05N\xb1y\xf8\xabx\xfe\x16\xda\x01\x01\x81\xa4\r\x04\x00\xf1\xff\x19\x00\x02\xfc0\x00\xad\xff8\x00k\x000\x00w\x02\xbcv'b'\x00\x05N\xb1y\xf8\xab\xd0\xfe\x0e\xdb\x01\x01\x1d\xa4\r\x04\x00\xdd\x97iD\\\x8f\x16\xbeV\x10@\xa9'b'\x00\x05N\xb1y\xf8\xac$\xfe\x0e\xdc\x01\x01\x89\xa4\r\x04\x00\xab\xdaiD\xb8\x1e\x15>}\x15\xfc4'b'\x00\x05N\xb1y\xf8\xac\x90\xfe\x1f\xdd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x01\xdc;s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xe4\\'b'\x00\x05N\xb1y\xf8\xac\xec\xfe\x06\xde\x01\x01}\xc5\x14\x00\x00\x03\x00\x0b\xd8'b'\x00\x05N\xb1y\xf8\xad@\xfe\x04\xdf\x01\x01\x98\x00\x00\x80\x8a\xee\xb4'b'\x00\x05N\xb1y\xf8\xad\xa4\xfe\x02\xe0\x01\x01*\x00\x00\x04\xd3'b'\x00\x05N\xb1y\xf8\xae\x00\xfe\x1e\xe1\x01\x01\x18\xe8H\xd3\x0f\x00\x00\x00\x00m\xa6\x02\x18\xf7\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x0c\x00p]\x03\x0ct&'b'\x00\x05N\xb1y\xf8\xae\\\xfe\x1a\xe2\x01\x01>\x0c\x92\xa0\xbf\x87\xeb\x9a\xbf\xd7\xef\xd3=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00z\x84'b'\x00\x05N\xb1y\xf8\xae\xac\xfe\x08\xe3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf5O'b'\x00\x05N\xb1y\xf8\xae\xf8\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3'b'\x00\x05N\xb1y\xf8\xc3\x98\xfe\x15\xe5\x01\x01$\x08\xe6\xd5\x0f\xe4\x05\x0b\x06+\x06\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91='b'\x00\x05N\xb1y\xf8\xc4L\xfe\x16\xe6\x01\x01#\xcc\r\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xda\x00'b'\x00\x05N\xb1y\xf9@\xb3\xfe5\xe0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9cg'b'\x00\x05N\xb1y\xf9V\xeb\xfe!\xe1\xff\x00L;\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8b\x83'b'\x00\x05N\xb1y\xfa\x17\xc0\xfe\t\xed\n\x00m\x1c\x00\x00\x00\x00\xda\x00\x00\x00\xf5\xf6'b'\x00\x05N\xb1y\xfa\x184\xfe\x14\xe7\x01\x01J\n\xd7\xa3=\n\xd7\xa3={\x14\xee?\xebQ\xb8=\xb4\x000\x00D/'b'\x00\x05N\xb1y\xfa\x18\x84\xfe\x03\xe8\x01\x01Ms\x00\x00\x9f\x88'b'\x00\x05N\xb1y\xfa\x19@\xfe\x1c\xe9\x01\x01!\xff\r\x04\x00j\xa6\x02\x18\xf2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x10\x00\x05\x00\x08\x00cFL\xa3'b'\x00\x05N\xb1y\xfa\x19\xa8\xfe\x1c\xea\x01\x01 E\x0e\x04\x00\xa1\xf0\xd9<2\xd2e?\xe2;\xc5\xbf\x1a\xf1$>eOQ=5O\xa5\xbd\x89\xff'b'\x00\x05N\xb1y\xfb\n+\xfe5\xe2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x19\x85'b'\x00\x05N\xb1y\xfb\\\xa7\xfe!\xe3\xff\x00L;\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\n\xde'b'\x00\x05N\xb1y\xfb\x99\xb0\xfe\x12\xeb\x01\x01\xfcW\x0e\x04\x004\x00\x01\x00ARMMASK\x00Wr\x91b'b'\x00\x05N\xb1y\xfb\x9a8\xfe\t\xec\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x83\xd9'b'\x00\x05N\xb1y\xfb\x9a\xac\xfe\x1c\xed\x01\x01\x1em\x0e\x04\x00v\xd5\xb2\xbc\x888\x99\xbcR\xcaH\xc0a\xd2N\xbd2\xaa\xc0\xbd\x19\xa1\xc4<\xca\x07'b"\x00\x05N\xb1y\xfb\x9b\x08\xfe\x18\xee\x01\x01\xb2\x83\xb4\x86\xbc\xb4\x95\xa4\xbc\xccUH\xc0f\x06*Do\xa6\x02\x18\xf6\xe7\xb8\xfd')"b'\x00\x05N\xb1y\xfb\x9bt\xfe\x1c\xef\x01\x01\xa3\x1b6D82\xae\xf1\xb9w7\x899\x00\x00\x00\x00\x00\x00\x00\x00\xec\xff\x81\x00\x00\x00\x00?\x03\xe7\xb8"b'\x00\x05N\xb1y\xfb\x9d$\xfe\x1a\xf4\x01\x01\x1b\x0b\xf9\xd8\x0f\x00\x00\x00\x00\xed\xff\xf8\xffM\xfc\x01\x00\x88\xff\xf9\xff\xfe\xfe\x04\x00v\x01\xbdt'b'\x00\x05N\xb1y\xfb\x9d|\xfe\x16\xf5\x01\x01t\x95\x0e\x04\x00\xeb\xff\xf9\xff\\\xfc\xf8\xff\x90\xff\xff\xff\xf9\xfed\xff\n\x02\xf6\x0c'b'\x00\x05N\xb1y\xfb\x9d\xe0\xfe\x16\xf6\x01\x01\x81\x95\x0e\x04\x00\xe8\xff\x07\x006\xfc\xdf\xff\x89\xff\x04\x00\x7f\x00W\x00b\x02Q\xa9'b'\x00\x05N\xb1y\xfb\x9e(\xfe\x0e\xf7\x01\x01\x1d\x95\x0e\x04\x00S\x98iD33\x0f\xbeV\x10\xb8O'b'\x00\x05N\xb1y\xfb\x9ep\xfe\x0e\xf8\x01\x01\x89\x95\x0e\x04\x00\xab\xdaiD\xb8\x1e\x15>~\x15\xa5Z'b'\x00\x05N\xb1y\xfb\x9e\xc4\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdc;L\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\n\xd9'b'\x00\x05N\xb1y\xfb\x9f\x14\xfe\x06\xfa\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4d'b'\x00\x05N\xb1y\xfb\x9f`\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|'b'\x00\x05N\xb1y\xfb\x9f\xa0\xfe\x02\xfc\x01\x01*\x00\x00W\xd7'b'\x00\x05N\xb1y\xfb\x9f\xf4\xfe\x1e\xfd\x01\x01\x18\x18\xac\xd6\x0f\x00\x00\x00\x00o\xa6\x02\x18\xf6\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x08\x00p]\x03\x0c^g'b'\x00\x05N\xb1y\xfb\xa0D\xfe\x1a\xfe\x01\x01>\xe2\x86\x8c\xbf\x91\xaf\x01\xc0G[\xbb=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x1aS'b'\x00\x05N\xb1y\xfb\xa0\x8c\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.'b'\x00\x05N\xb1y\xfb\xa0\xd0\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd'b'\x00\x05N\xb1y\xfc\xfaO\xfe5\xe4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x87\xaa'b'\x00\x05N\xb1y\xfd$\xa7\xfe!\xe5\xff\x00L%\xfb3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00P"'b'\x00\x05N\xb1y\xfd9`\xfe\x15\x01\x01\x01$\x19\xe5\xd9\x0f\x1e\x06)\x06C\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1X'b'\x00\x05N\xb1y\xfd:\x14\xfe\x16\x02\x01\x01#\xd2\x0e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xda`'b'\x00\x05N\xb1y\xfe\xd2\xcc\xfe\x14\x03\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=)\\\xef?\xcc\xccL=\xb4\x003\x00\xc6\x80'b'\x00\x05N\xb1y\xfe\xd34\xfe\x03\x04\x01\x01Ms\x00\x04~\xcc'b'\x00\x05N\xb1y\xfe\xd3\xd8\xfe\x1c\x05\x01\x01!\xc8\x0e\x04\x00n\xa6\x02\x18\xf3\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x10\x00\x06\x00\x06\x00pFcC'b'\x00\x05N\xb1y\xfe\xd4@\xfe\x1c\x06\x01\x01 J\x0f\x04\x00Q\x9f\x9a=\x9aah?\x93\n\xc5\xbf\x1aD%>R\xbc\x80=\xcd\xad\x87\xbd\xa9\xb0'b'\x00\x05N\xb1y\xfe\xd4\x98\xfe\x1c\x07\x01\x01\x1er\x0f\x04\x00J\x82\x8c\xbcy[+\xbd\x80\xb9H\xc0f\xb5\x96=,R\x98\xbd\xef\xbf\xc5;:{'b'\x00\x05N\xb1y\xfe\xd4\xe8\xfe\x18\x08\x01\x01\xb2\xdb\n\\\xbc\x80c1\xbdnIH\xc0\x99\t*Dr\xa6\x02\x18\xf7\xe7\xb8\xfd_\x9d'b'\x00\x05N\xb1y\xfe\xea\xfb\xfe\t\xe6\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc2\xb1'b'\x00\x05N\xb1y\xff\x02[\xfe5\xe7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01H\xbd'b'\x00\x05N\xb1y\xff,k\xfe!\xe8\xff\x00L\x16\xf43\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00e;'b'\x00\x05N\xb1z\x00+\x0c\xfe\x1a\t\x01\x01\x1bL\xa8\xdc\x0f\x00\x00\x00\x00\xe5\xff\x0e\x00\x17\xfc\x17\x00\xb3\xff\x18\x00\x08\xff\x05\x00~\x01\xce\x9f'b'\x00\x05N\xb1z\x00+\x8c\xfe\x16\n\x01\x01t\x87\x0f\x04\x00\xf3\xff\x06\x00\x1f\xfc \x00\xc1\xff\xfe\xff\x01\xff`\xff\x0f\x02\xf2\xc5'b'\x00\x05N\xb1z\x00+\xf4\xfe\x16\x0b\x01\x01\x81\x87\x0f\x04\x00\xe1\xff#\x00\x11\xfc\x15\x00\x9f\xff\x04\x00\xa5\x00F\x00\x8e\x02f\x95'b'\x00\x05N\xb1z\x00,L\xfe\x0e\x0c\x01\x01\x1d\x87\x0f\x04\x00\x81\x99iD\xd7\xa3\xf8\xbdV\x10d\xa9'b'\x00\x05N\xb1z\x00,\xb4\xfe\x0e\r\x01\x01\x89\x87\x0f\x04\x003\xdbiD\x99\x99\x1d>~\x153\x90'b'\x00\x05N\xb1z\x00-4\xfe*\x0e\x01\x01\x96s\xe7f\xbc\xffl\x01\x00V\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00f\xaf'b'\x00\x05N\xb1z\x00-\xb0\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x04\x01\xdc;\x05\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x8a\xe2'b'\x00\x05N\xb1z\x00.$\xfe\x06\x10\x01\x01}\xc2\x14\x00\x00\x03\x00\xd0\t'b'\x00\x05N\xb1z\x00.\x8c\xfe\x04\x11\x01\x01\x98\x00\x00\x80\x8a\x8fM'b'\x00\x05N\xb1z\x00.\xe8\xfe\x02\x12\x01\x01*\x00\x00\xees'b'\x00\x05N\xb1z\x00/p\xfe\x1e\x13\x01\x01\x18`|\xdc\x0f\x00\x00\x00\x00u\xa6\x02\x18\xf6\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x0b\x00p]\x03\x0c\x04\x87'b'\x00\x05N\xb1z\x00/\xe8\xfe\x1a\x14\x01\x01>\x9d<\\\xbf\xbfl \xc0)\xee\xc3=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb7\x10'b'\x00\x05N\xb1z\x000L\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18'b'\x00\x05N\xb1z\x000\xac\xfe\x1c\x16\x01\x01\xa3\xc6Ao8\xed\x85\xfa\xb9QD\x8b9\x00\x00\x00\x00\x00\x00\x00\x00\x91\xa36<\x1d\xbf\x92;\x19\x93'b'\x00\x05N\xb1z\x000\xf0\xfe\x03\x17\x01\x01\xa5\xb8\x14\x00\x9b-'b'\x00\x05N\xb1z\x0018\xfe\x0c\x18\x01\x01\x02\xf8\xa7Dz\xb1N\x05\x00\x9b\x0f\x04\x00\xed\x1a'b'\x00\x05N\xb1z\x001\x84\xfe\x16\x19\x01\x01\x88p\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd2\x18'b'\x00\x05N\xb1z\x001\xd4\xfe\x16\x1a\x01\x01\xc1\xc7/\r=\x03y$=s\x16\xa3<\xb1\xdf4>\x00\x00\x00\x00?\x03-\x14'b'\x00\x05N\xb1z\x002\x14\xfe\x03\x1b\x01\x01Ms\x00\x04\xb4&'b'\x00\x05N\xb1z\x00R\xdc\xfe\x15\x1c\x01\x01$\xd1\xe0\xdd\x0f3\x06.\x06H\x06D\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00Tl'b'\x00\x05N\xb1z\x00S8\xfe\x16\x1d\x01\x01#\xd7\x0f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x16N'b'\x00\x05N\xb1z\x00\xe2+\xfe5\xe9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf1\x00'b'\x00\x05N\xb1z\x00\xf8k\xfe!\xea\xff\x00L\x16\xf43\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe4f'b'\x00\x05N\xb1z\x01\xe9\x1c\xfe\x03\x1e\x01\x01Ms\x00\x04\xd5\xb1'b'\x00\x05N\xb1z\x01\xe9\xdc\xfe\x14\x1f\x01\x01J\xaeG\xe1=\xaeG\xe1={\x14\xee?\xcc\xcc\xcc=\xb4\x001\x00\x92\x9e'b'\x00\x05N\xb1z\x02\xb5G\xfe5\xeb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01t\xe2'b'\x00\x05N\xb1z\x02\xf3\x7f\xfe!\xec\xff\x00L\x16\xf43\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00g\x80'b"\x00\x05N\xb1z\x03fO\xfe%\xed\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00-s"b'\x00\x05N\xb1z\x03g,\xfe\x1c \x01\x01!E\x10\x04\x00r\xa6\x02\x18\xf4\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x0b\x00\x06\x00\x0b\x00eFNA'b'\x00\x05N\xb1z\x03g\xc0\xfe\x1c!\x01\x01 O\x10\x04\x00\xb1\x1f\xf3=\xc9\xcaj?GM\xc5\xbf\xed;\xef=Q\x17y=\xa0\xc8\xe4\xbd\xc9\xaa'b'\x00\x05N\xb1z\x03hD\xfe\x1a"\x01\x01\x1b\x0cT\xe0\x0f\x00\x00\x00\x00\xe7\xff\xf9\xffI\xfc\xf2\xff6\x00\xfd\xff\x0e\xff\x06\x00\x80\x01\xc6\xbf'b'\x00\x05N\xb1z\x03h\xb4\xfe\x16#\x01\x01tw\x10\x04\x00\xef\xff\xef\xffW\xfc\x00\x00-\x00\x00\x00\x05\xff`\xff\x10\x02\x86^'b'\x00\x05N\xb1z\x03i \xfe\x16$\x01\x01\x81w\x10\x04\x00\xe2\xff\x0b\x00Q\xfc\xfb\xff,\x00\x04\x00\x8c\x00Z\x00s\x02\x17\x19'b'\x00\x05N\xb1z\x03i\x88\xfe\x0e%\x01\x01\x1dw\x10\x04\x00\xd9\x98iD\xcd\xcc\x06\xbeV\x10Bk'b'\x00\x05N\xb1z\x03i\xe8\xfe\x0e&\x01\x01\x89w\x10\x04\x00>\xdbiD\xebQ\x1e>~\x15P\xc7'b"\x00\x05N\xb1z\x03jX\xfe\x1f'\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1a\x01\x96;]\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Rn\xaf"b'\x00\x05N\xb1z\x03j\xc0\xfe\x06(\x01\x01}\xc8\x14\x00\x00\x03\x00\xe2\xcf'b'\x00\x05N\xb1z\x03k \xfe\x04)\x01\x01\x98\x00\x00\x80\x8a\xe8:'b'\x00\x05N\xb1z\x03k\x88\xfe\x02*\x01\x01*\x00\x00H{'b'\x00\x05N\xb1z\x03k\xfc\xfe\x1e+\x01\x01\x18\x88\x8d\xdf\x0f\x00\x00\x00\x00x\xa6\x02\x18\xf5\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x0e\x00p]\x03\x0c\x07\xad'b'\x00\x05N\xb1z\x03lT\xfe\x1a,\x01\x01>s\xd6X\xbf\xf3\xad \xc0\xeb\xdb\xbc=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfb\xf7'b'\x00\x05N\xb1z\x03l\x9c\xfe\x08-\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x80\xda'b"\x00\x05N\xb1z\x03l\xf0\xfe\x1c.\x01\x01\x1e\x8c\x10\x04\x00'\xdc\x08\xbcx\xbb8\xbd=\xdcH\xc0 @n:B\xd6==cY\x03\xbc\x8fo"b'\x00\x05N\xb1z\x03m@\xfe\x18/\x01\x01\xb2#h\x8b\xbb\x18\xb7B\xbd\xd1kH\xc0\xeb\x01*Dx\xa6\x02\x18\xf5\xe7\xb8\xfd\x9a\xa2'b'\x00\x05N\xb1z\x03m\x84\xfe\x030\x01\x01Ms\x00\x04(7'b'\x00\x05N\xb1z\x03n\x1c\xfe\x1c1\x01\x01\xa3o\xf6\x8b8We\x01\xbak\x16\x8d9\x00\x00\x00\x00\x00\x00\x00\x00hmQ<\xe9q\xc7;)\xde'b'\x00\x05N\xb1z\x03nd\xfe\x032\x01\x01\xa5\xc2\x14\x00\xe1\x8a'b'\x00\x05N\xb1z\x03n\xd8\xfe\x0c3\x01\x01\x02\xb0\x9bHz\xb1N\x05\x00\x9f\x10\x04\x00:z'b'\x00\x05N\xb1z\x03o<\xfe\x164\x01\x01\x88s\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00`\x91'b'\x00\x05N\xb1z\x03o\x88\xfe\x125\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x1e\xb8'b'\x00\x05N\xb1z\x03o\xd8\xfe\x166\x01\x01\xc1\x13w\x19=\xc3@\x1b=\xa3\xdet<\xd0\xb9K>\x00\x00\x00\x00?\x03\x05\xa5'b'\x00\x05N\xb1z\x04\xc2\x97\xfe5\xee\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01%\xda'b"\x00\x05N\xb1z\x04\xed'\xfe!\xef\xff\x00L\xd5\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\\>"b'\x00\x05N\xb1z\x04\xed\xbc\xfe\x038\x01\x01/\xff\x00\x00"\x05'b'\x00\x05N\xb1z\x05\x15\xf4\xfe\x159\x01\x01$\x90\xdc\xe1\x0f|\x05\xc7\x05K\x06}\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xad'b'\x00\x05N\xb1z\x05\x16X\xfe\x16:\x01\x01#\xdc\x10\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00t\xfd'b'\x00\x05N\xb1z\x06q\x98\xfe\x03;\x01\x01Ms\x00\x04D\x90'b'\x00\x05N\xb1z\x06rd\xfe\x14<\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=)\\\xef?\n\xd7\xa3=\xb3\x002\x00,\x8a'b'\x00\x05N\xb1z\x06r\xd8\xfe\x1c=\x01\x01!#\x11\x04\x00u\xa6\x02\x18\xf4\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\t\x00\x02\x00\x08\x00\xa2E\xa6C'b'\x00\x05N\xb1z\x06sL\xfe\x1c>\x01\x01 T\x11\x04\x00*\xaf\x1c>m\xb1j?\x10\xf9\xc4\xbf\xc8l\xbd=\xbf\xe9\xb4\x7f\x15\x04\x9e'b'\x00\x05N\xb1z\x06u\xd8\xfe\x1fD\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x00\x96;$\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd7\x16'b'\x00\x05N\xb1z\x06v@\xfe\x06E\x01\x01}\xc5\x14\x00\x00\x03\x00Ly'b'\x00\x05N\xb1z\x06v\xa0\xfe\x04F\x01\x01\x98\x00\x00\x80\x8a\x9a\xbd'b'\x00\x05N\xb1z\x06v\xf4\xfe\x02G\x01\x01*\x00\x00\x82\xf1'b'\x00\x05N\xb1z\x06w\\\xfe\x1eH\x01\x01\x18\xb8\xf0\xe2\x0f\x00\x00\x00\x00z\xa6\x02\x18\xf4\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\x0c\x00p]\x03\x0c\x1cX'b'\x00\x05N\xb1z\x06\xaf\xc7\xfe5\xf0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc3K'b'\x00\x05N\xb1z\x06\xc8\x0f\xfe!\xf1\xff\x00L\xd5\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe0Z'b'\x00\x05N\xb1z\x07\xf1@\xfe\x1aI\x01\x01>\xa6\x1d\xd9=\xa0\xbd\xa1\xc0\n\xa5\xb9=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xb0n'b'\x00\x05N\xb1z\x07\xf1\xe4\xfe\x08J\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x002\x14'b"\x00\x05N\xb1z\x07\xf2\xe4\xfe\x1cK\x01\x01\x1e\x91\x11\x04\x00\x1b\xdc'<\xccY\x9a\xbd\xc3\x19F@\xb8\xb5\x02>q\r\xa3\xbe\x82X2\xbej7"b'\x00\x05N\xb1z\x07\xf3\x9c\xfe\x18L\x01\x01\xb2\xd7ZA<\x16\xf8\x96\xbd\xc0\x9cF@f\x06*Dz\xa6\x02\x18\xf4\xe7\xb8\xfdBW'b'\x00\x05N\xb1z\x07\xf4\x00\xfe\x03M\x01\x01Ms\x00\x04\x8c\x05'b'\x00\x05N\xb1z\x07\xf4\x90\xfe\x1cN\x01\x01\xa3\x1d\x94\xa08\x14\x89\x05\xbaN\xce\x8e9\x00\x00\x00\x00\x00\x00\x00\x00\xcfb:<\xb3\xb7\xb8;k7'b'\x00\x05N\xb1z\x07\xf4\xe4\xfe\x03O\x01\x01\xa5\xc5\x14\x00d\xef'b'\x00\x05N\xb1z\x07\xf5@\xfe\x0cP\x01\x01\x028\x97Lz\xb1N\x05\x00\xa5\x11\x04\x00\xaaF'b'\x00\x05N\xb1z\x07\xf5\x9c\xfe\x16Q\x01\x01\x88v\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\x85'b'\x00\x05N\xb1z\x07\xf5\xfc\xfe\x16R\x01\x01\xc1\x9b\xa4!=H\xc3\x04=\x16\xd0;<\x1a5+>\x00\x00\x00\x00?\x03\xfb\xff'b'\x00\x05N\xb1z\x08|\xd7\xfe5\xf2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01F\xa9'b'\x00\x05N\xb1z\x08\x92_\xfe!\xf3\xff\x00L\x91\xd23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xea\x06'b'\x00\x05N\xb1z\tf\xe8\xfe\x15S\x01\x01$9\xdc\xe5\x0f4\x06 \x06\n\x06J\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00I\xe9'b'\x00\x05N\xb1z\tgX\xfe\x16T\x01\x01#\xe2\x11\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa47'b"\x00\x05N\xb1z\tg\xb0\xfe\t\xee\n\x00m&\x00\x00\x00\x00\xd9\x00\x00\x00\x87'"b'\x00\x05N\xb1z\tg\xf8\xfe\x03U\x01\x01Ms\x00\x00(\x14'b"\x00\x05N\xb1z\t|X\xfe\x14V\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc={\x14\xee?\xcc\xcc\xcc=\xb0\x002\x00'\x0f"b'\x00\x05N\xb1z\t|\xbc\xfe\x12W\x01\x01\xfcC\x12\x04\x004\x00\x01\x00ARMMASK\x00WrdT'b'\x00\x05N\xb1z\t}\x1c\xfe\tX\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x8c\xdf'b'\x00\x05N\xb1z\n\x967\xfe5\xf4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd8\x86'b'\x00\x05N\xb1z\n\xc0\x97\xfe!\xf5\xff\x00L\x91\xd23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00i\xe0'b'\x00\x05N\xb1z\x0b#\x98\xfe\x1aY\x01\x01\x1b\xb0\xb0\xe7\x0f\x00\x00\x00\x00\xdf\xff\xf9\xff\x07\xfc/\x00d\x00x\x00\x17\xff\xfe\xff\x8b\x01\x83\x95'b'\x00\x05N\xb1z\x0b$@\xfe\x16Z\x01\x01tZ\x12\x04\x00\xe1\xff\x00\x00\x14\xfc \x00q\x00k\x00\x15\xffY\xff\x1a\x02\x077'b'\x00\x05N\xb1z\x0b$\xbc\xfe\x16[\x01\x01\x81Z\x12\x04\x00\xd4\xff\x03\x00\x14\xfcG\x00[\x00n\x00\xb2\x00B\x00\x82\x02.\x82'b'\x00\x05N\xb1z\x0b% \xfe\x0e\\\x01\x01\x1dZ\x12\x04\x00\xb8\x96iDG\xe1(\xbeW\x10 \xc0'b'\x00\x05N\xb1z\x0b%\x80\xfe\x0e]\x01\x01\x89Z\x12\x04\x00\x99\xdaiD\x00\x00\x14>\x80\x15\xd3\x01'b'\x00\x05N\xb1z\x0b%\xe4\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x96;\x9a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x86\xf2'b'\x00\x05N\xb1z\x0b&D\xfe\x06_\x01\x01}\xc8\x14\x00\x00\x03\x00\xce1'b'\x00\x05N\xb1z\x0b&\x98\xfe\x04`\x01\x01\x98\x00\x00\x80\x8a\xbc\xee'b'\x00\x05N\xb1z\x0b&\xe0\xfe\x02a\x01\x01*\x00\x00\xcc\xca'b"\x00\x05N\xb1z\x0b'<\xfe\x1eb\x01\x01\x18\xd8\xaf\xe5\x0f\x00\x00\x00\x00|\xa6\x02\x18\xf3\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\t\x00p]\x03\x0c\xea`"b"\x00\x05N\xb1z\x0b'\x94\xfe\x1ac\x01\x01>-\xbc7\xbfE\xd1@\xc03\xc9\xb5=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc7\xc2"b"\x00\x05N\xb1z\x0b'\xe4\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91"b'\x00\x05N\xb1z\x0b(<\xfe\x1ce\x01\x01!\xd7\x11\x04\x00w\xa6\x02\x18\xf2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\xfd\xff\xfb\xff\x0b\x00\tE\xdb\xbb'b'\x00\x05N\xb1z\x0b(\xa0\xfe\x1cf\x01\x01 n\x12\x04\x00\x01\xee,>\xd4\xecd?!\x12\xc5\xbf\xf6\x86\x04\xbd\xd9\xecY\xbd\xf3\xe4\xef\xbd\xdfa'b'\x00\x05N\xb1z\x0b(\xf4\xfe\x1cg\x01\x01\x1e\x96\x12\x04\x00/\x1d\x18\xf6?\xad>\xce\x8c'b'\x00\x05N\xb1z\x0b)H\xfe\x18h\x01\x01\xb21\xd76<\xea;\xb2\xf5'b'\x00\x05N\xb1z\x0c\x85\x90\xfe\x03k\x01\x01\xa5\xc5\x14\x00JO'b'\x00\x05N\xb1z\x0c\x85\xf8\xfe\x0cl\x01\x01\x02\xf8\xdcPz\xb1N\x05\x00\xab\x12\x04\x00\x937'b'\x00\x05N\xb1z\x0c\x86d\xfe\x16m\x01\x01\x88v\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x02\x9d'b'\x00\x05N\xb1z\x0c\x86\xc4\xfe\x16n\x01\x01\xc1L/\xbd\x00\x00\x00\x00?\x03\xcd|'b'\x00\x05N\xb1z\x0c\x87$\xfe\x15o\x01\x01$~\xd6\xe9\x0f\xf9\x05\xe3\x05\xfb\x05\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x9f'b'\x00\x05N\xb1z\x0c\x87\x88\xfe\x16p\x01\x01#\xe7\x12\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06"'b'\x00\x05N\xb1z\x0c\xac\xab\xfe5\xf6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01]d'b'\x00\x05N\xb1z\x0c\xc2\xbb\xfe!\xf7\xff\x00L\xd2\xdd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x99C'b'\x00\x05N\xb1z\x0e\x02\xec\xfe\x03q\x01\x01Ms\x00\x00\x06\xb4'b'\x00\x05N\xb1z\x0e\x03\x90\xfe\x14r\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xd7\xa3\xf0?\x8f\xc2\xf5<\xb3\x002\x00 }'b'\x00\x05N\xb1z\x0e\x03\xf8\xfe\x1as\x01\x01\x1b^b\xeb\x0f\x00\x00\x00\x00\xe0\xff\xfd\xffW\xfcA\xff\x16\x00{\x00\x0c\xff\x04\x00\x7f\x01\x88\x01'b'\x00\x05N\xb1z\x0e\x04X\xfe\x16t\x01\x01tL\x13\x04\x00\xe2\xff\t\x00x\xfcG\xff\x15\x00u\x00\x07\xffp\xff\x19\x02\xc5\x1a'b'\x00\x05N\xb1z\x0e\x04\xb8\xfe\x16u\x01\x01\x81L\x13\x04\x00\xe0\xff\x12\x00_\xfc7\xff*\x00t\x00\xa8\x00N\x00\x81\x02ba'b'\x00\x05N\xb1z\x0e\x05\x0c\xfe\x0ev\x01\x01\x1dL\x13\x04\x00*\x98iD\x8f\xc2\x11\xbeW\x10\x86\x92'b'\x00\x05N\xb1z\x0e\x05`\xfe\x0ew\x01\x01\x89L\x13\x04\x00\x0e\xdaiD\xaeG\x0b>\x80\x15\x16\xe9'b'\x00\x05N\xb1z\x0e\x05\xc0\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x01\x96;\x9a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R26'b'\x00\x05N\xb1z\x0e\x06\x1c\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08'b'\x00\x05N\xb1z\x0e\x06p\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5'b'\x00\x05N\xb1z\x0e\x06\xb8\xfe\x02{\x01\x01*\x00\x00R\x96'b'\x00\x05N\xb1z\x0e\x07\x14\xfe\x1e|\x01\x01\x18\x00\xc1\xe8\x0f\x00\x00\x00\x00{\xa6\x02\x18\xef\xe7\xb8\xfd,j\n\x00F\x00\xff\xff\t\x00p]\x03\x0c\x1b\x1c'b'\x00\x05N\xb1z\x0e\x07p\xfe\x1a}\x01\x01>7?\xdd\xbf\xf0\x97\xfb\xbf\x85\x8d\x9c=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00re'b'\x00\x05N\xb1z\x0e\x07\xc0\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\x00\x05N\xb1z\x0eKk\xfe\t\xf8\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x1b\x86'b'\x00\x05N\xb1z\x0ex\x93\xfe5\xf9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xae,'b'\x00\x05N\xb1z\x0e\xac\xa3\xfe!\xfa\xff\x00L\xd2\xdd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00F,'b'\x00\x05N\xb1z\x0f\xb0\x0c\xfe\x1c\x7f\x01\x01!j\x13\x04\x00v\xa6\x02\x18\xee\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf9\xff\xf7\xff\x00\x00\x1aF@\x08'b'\x00\x05N\xb1z\x0f\xb0\xa4\xfe\x1c\x80\x01\x01 t\x13\x04\x00&\x02 >\xa0\xe5[?]u\xc6\xbf_\xfc\x8f\xbd\x8f\xae\xc6\xbd\xcc\xb9\xbc\xba\xd0U'b"\x00\x05N\xb1z\x0f\xb1\x08\xfe\x1c\x81\x01\x01\x1e\x9d\x13\x04\x00F\xc0\xdd\xbc\x0f'.\xbd\xb6\xb0H@\x0eu\xbe\xbd\xbc8\x8a\xba\xbbO\x9f=\xf8\xee"b'\x00\x05N\xb1z\x0f\xb1h\xfe\x18\x82\x01\x01\xb2"7\xd1\xbcg\xb5/\xbd\xf6\xffH\xc0\xf6\x18*D{\xa6\x02\x18\xef\xe7\xb8\xfd\x8b:'b'\x00\x05N\xb1z\x0f\xb1\xc0\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc'b'\x00\x05N\xb1z\x0f\xc6\x14\xfe\x1c\x84\x01\x01\xa3\xb7)\xcb8\xf8\xd7\r\xba\xf9\xe1\x919\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xd5u<\x81+\xe2;\xcb\xf6'b'\x00\x05N\xb1z\x0f\xc6h\xfe\x03\x85\x01\x01\xa5\xc5\x14\x00\xa4g'b'\x00\x05N\xb1z\x0f\xc6\xb8\xfe\x0c\x86\x01\x01\x02\xb0\xd0Tz\xb1N\x05\x00\xb0\x13\x04\x00Z\x12'b'\x00\x05N\xb1z\x0f\xc7\x1c\xfe\x16\x87\x01\x01\x88u\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xef\xfe'b'\x00\x05N\xb1z\x0f\xc7l\xfe\x16\x88\x01\x01\xc1\xc3x\xfe<\xac\xb1\xa2>\x00\x00\x00\x00?\x03d\xa1'b"\x00\x05N\xb1z\x10p'\xfe5\xfb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01+\xce"b'\x00\x05N\xb1z\x10\x86C\xfe!\xfc\xff\x00L#\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf5\xe1'b'\x00\x05N\xb1z\x11\x12\xf8\xfe\x15\x89\x01\x01$\xa7\xd6\xed\x0f\x1c\x06\xc6\x05\x0c\x06F\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x97'b'\x00\x05N\xb1z\x11\x13d\xfe\x16\x8a\x01\x01#\xed\x13\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5\x98'b'\x00\x05N\xb1z\x11\x13\xb4\xfe\x03\x8b\x01\x01Ms\x00\x00N\xd1'b'\x00\x05N\xb1z\x12>\xe7\xfe5\xfd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb5\xe1'b'\x00\x05N\xb1z\x12n\x97\xfe!\xfe\xff\x00L#\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00t\xbc'b'\x00\x05N\xb1z\x12\xb9L\xfe\x1a\x8c\x01\x01\x1bK\x12\xef\x0f\x00\x00\x00\x00\xee\xff\x04\x00\x1b\xfc\xd7\xff*\x00\x1d\x00\x06\xff\xfe\xff\x80\x01\x82B'b'\x00\x05N\xb1z\x12\xb9\xd0\xfe\x16\x8d\x01\x01t>\x14\x04\x00\xe6\xff\x05\x00\x18\xfc\xe2\xff!\x00 \x00\x02\xff]\xff\x12\x02\x82\x9b'b'\x00\x05N\xb1z\x12\xba0\xfe\x16\x8e\x01\x01\x81>\x14\x04\x00\xe8\xff\n\x00\x06\xfc\xce\xff9\x00\x1a\x00\x85\x00L\x00o\x02H{'b'\x00\x05N\xb1z\x12\xba\x80\xfe\x0e\x8f\x01\x01\x1d>\x14\x04\x00\\\x97iD\xd7\xa3\x1e\xbeW\x10\xee\xe8'b'\x00\x05N\xb1z\x12\xba\xd0\xfe\x0e\x90\x01\x01\x89>\x14\x04\x00\x86\xdciD\xcd\xcc2>\x81\x15\xbcX'b'\x00\x05N\xb1z\x12\xbb,\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xf9;\x8b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R>J'b'\x00\x05N\xb1z\x12\xbb\x84\xfe\x06\x92\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xd9'b'\x00\x05N\xb1z\x12\xbb\xd8\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12'b'\x00\x05N\xb1z\x12\xbc \xfe\x02\x94\x01\x01*\x00\x00>\xad'b'\x00\x05N\xb1z\x12\xbcx\xfe\x1e\x95\x01\x01\x188\xe7\xee\x0f\x00\x00\x00\x00y\xa6\x02\x18\xeb\xe7\xb8\xfd6j\n\x00F\x00\xff\xff\x1a\x00\xa0\\\x03\x0c\xfaA'b'\x00\x05N\xb1z\x12\xbc\xd0\xfe\x1a\x96\x01\x01>\xf1{\t\xc0\x0e\xba\xad\xbf\x1e)\x9d=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00`\xba'b'\x00\x05N\xb1z\x12\xbd\x18\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5'b'\x00\x05N\xb1z\x12\xbd\x88\xfe\x14\x98\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>\xd7\xa3\xf0?\xcc\xccL=\xb4\x002\x00F6'b'\x00\x05N\xb1z\x12\xbd\xf0\xfe\x1c\x99\x01\x01!3\x14\x04\x00s\xa6\x02\x18\xe9\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf6\xff\xf9\xff\x06\x00kFB!'b'\x00\x05N\xb1z\x12\xbe\x90\xfe\x1c\x9a\x01\x01 z\x14\x04\x00N\x1c\x07>%\xecQ?K\xa6\xc6\xbf\x9d\xc7\xd8\xbd1\xce\x9b\xbd\t\x07y\xbd]\xe7'b'\x00\x05N\xb1z\x12\xbf\x08\xfe\x03\x9b\x01\x01Ms\x00\x006\x8a'b"\x00\x05N\xb1z\x13\xa9\x07\xfe%\xff\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x0eD"b'\x00\x05N\xb1z\x148\x84\xfe\x1c\x9c\x01\x01\x1e\xa2\x14\x04\x00\x9a\x11\x11\xbdSZ\x17\xbd\xcd\xb2H\xc0\xd6\x04\x84\xbbhT-=\xd4\x00\xbc<\xe9\xf4'b'\x00\x05N\xb1z\x148\xf0\xfe\x18\x9d\x01\x01\xb2T\xe4\x0f\xbdiJ\x1a\xbd\xba6H\xc0{\x04*Dy\xa6\x02\x18\xeb\xe7\xb8\xfd\x80\x14'b'\x00\x05N\xb1z\x149L\xfe\x1c\x9e\x01\x01\xa3\xf1\xf0\xe08\x9e\x10\x12\xba\xaaS\x939\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xe8\x94\x00\x00\x00\x00?\x03\xf3`"b'\x00\x05N\xb1z\x14;\x00\xfe\x03\xa4\x01\x01/\xff\x00\x00\xda\xae'b'\x00\x05N\xb1z\x14;\x88\xfe\x15\xa5\x01\x01$ \xd4\xf1\x0f\x13\x06]\x04\xae\x05B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6U'b'\x00\x05N\xb1z\x14;\xdc\xfe\x16\xa6\x01\x01#\xf2\x14\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa4\x13'b'\x00\x05N\xb1z\x14`k\xfe5\x00\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb7\xe4'b'\x00\x05N\xb1z\x14\x8bo\xfe!\x01\xff\x00L#\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf9\xb3'b'\x00\x05N\xb1z\x15\xc7\xa4\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\'b'\x00\x05N\xb1z\x15\xdc4\xfe\x1a\xa8\x01\x01\x1b`\xbf\xf2\x0f\x00\x00\x00\x00\xf0\xff\x1a\x009\xfc\xd2\xff\x0c\x00b\xff\x02\xff\xfd\xff~\x01\xe7\x8a'b'\x00\x05N\xb1z\x15\xdc\xb4\xfe\x16\xa9\x01\x01t.\x15\x04\x00\xf7\xff\x1d\x00?\xfc\xd0\xff\x1b\x00v\xff\x00\xff]\xff\x11\x02\xe8\x9b'b'\x00\x05N\xb1z\x15\xdd(\xfe\x16\xaa\x01\x01\x81.\x15\x04\x00\xed\xff-\x00>\xfc\xb3\xff\x0c\x00j\xff}\x00X\x00j\x02\x95\x98'b'\x00\x05N\xb1z\x15\xdd\x8c\xfe\x0e\xab\x01\x01\x1d.\x15\x04\x00\x81\x98iD\xebQ\x0c\xbeW\x10\xf0\xa8'b'\x00\x05N\xb1z\x15\xdd\xe8\xfe\x0e\xac\x01\x01\x89.\x15\x04\x00T\xddiD\x14\xae?>\x82\x15\xe1\xe7'b'\x00\x05N\xb1z\x15\xdeT\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\xf9;\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RW\x1a'b'\x00\x05N\xb1z\x15\xde\xb4\xfe\x06\xae\x01\x01}\xc2\x14\x00\x00\x03\x00\xd9A'b'\x00\x05N\xb1z\x15\xdf\x0c\xfe\x04\xaf\x01\x01\x98\x00\x00\x80\x8a Z'b'\x00\x05N\xb1z\x15\xdf`\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1'b'\x00\x05N\xb1z\x15\xdf\xc4\xfe\x1e\xb1\x01\x01\x18`\xf8\xf1\x0f\x00\x00\x00\x00v\xa6\x02\x18\xe6\xe7\xb8\xfd6j\n\x00F\x00\xff\xff\x1a\x00\xa0\\\x03\x0c\xb1\x96'b'\x00\x05N\xb1z\x15\xe0$\xfe\x1a\xb2\x01\x01>\xee\x84k\xc0\x1e\x02\xae\xbf\x1eA\xa7=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xa6\x1c'b'\x00\x05N\xb1z\x15\xe0|\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv'b'\x00\x05N\xb1z\x15\xe0\xd8\xfe\x14\xb4\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>)\\\xef?\xcc\xccL=\xb3\x004\x00\xa75'b'\x00\x05N\xb1z\x16e?\xfe5\x02\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x012\x06'b'\x00\x05N\xb1z\x16{\xdb\xfe!\x03\xff\x00L\xc5\xf03\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x92\xcf'b'\x00\x05N\xb1z\x17<\x00\xfe\x1c\xb5\x01\x01!\xfc\x14\x04\x00p\xa6\x02\x18\xe5\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf4\xff\xfc\xff\x05\x00\x0cFi\n'b'\x00\x05N\xb1z\x17<\xac\xfe\x1c\xb6\x01\x01 \x7f\x15\x04\x00\x86\xae\xbf=j\xaaH?\xbf\xa6\xc5\xbf\xf3\x15\x04\xbeyr-\xbd\x1a\xf6W\xbd9\xf5'b'\x00\x05N\xb1z\x17=\x0c\xfe\x03\xb7\x01\x01Ms\x00\x04\xc4`'b'\x00\x05N\xb1z\x17Q\x80\xfe\x1c\xb8\x01\x01\x1e\xa7\x15\x04\x00H\x1b\x00\xbd\x13%,\xbd\x8ayH@I\xc6N>\xe1\\\xad\xbd\t\xdd\x9e=l\x97'b'\x00\x05N\xb1z\x17Q\xe4\xfe\x18\xb9\x01\x01\xb2Mf\x0c\xbd\xaa\x8c(\xbd\x93\xebH@f\x06*Dv\xa6\x02\x18\xe6\xe7\xb8\xfdw\x8a'b'\x00\x05N\xb1z\x17R@\xfe\x1c\xba\x01\x01\xa3\xc5T\xf78"[\x16\xbaP\xae\x949\x00\x00\x00\x00\x00\x00\x00\x00e\xf0\x89<2+\xc7;\xec\xc9'b'\x00\x05N\xb1z\x17R\x90\xfe\x03\xbb\x01\x01\xa5\xc2\x14\x00\x00\xed'b'\x00\x05N\xb1z\x17R\xe0\xfe\x0c\xbc\x01\x01\x02\xd0q\\z\xb1N\x05\x00\xbb\x15\x04\x00\x17\xcd'b'\x00\x05N\xb1z\x17S8\xfe\x16\xbd\x01\x01\x88o\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb0M'b'\x00\x05N\xb1z\x17S\xa4\xfe\x16\xbe\x01\x01\xc1\xc1r\x10=y\x10\x8e<\xf5\xc4A<*7;>\x00\x00\x00\x00?\x03:D'b'\x00\x05N\xb1z\x18O\xa3\xfe5\x04\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xac)'b'\x00\x05N\xb1z\x18e\xe7\xfe!\x05\xff\x00L\xa4\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd5\xad'b'\x00\x05N\xb1z\x18\xe2T\xfe\t\xef\n\x00m\t\x00\x00\x00\x00\xda\x00\x00\x00\xc8E'b'\x00\x05N\xb1z\x18\xe2\xcc\xfe\x15\xbf\x01\x01$/\xd0\xf5\x0f\x16\x06\x14\x06*\x06*\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xddb'b'\x00\x05N\xb1z\x18\xe3(\xfe\x16\xc0\x01\x01#\xf7\x15\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00i\xcb'b'\x00\x05N\xb1z\x18\xe3x\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\x00\x05N\xb1z\x18\xf7\xe0\xfe\x1a\xc2\x01\x01\x1b\x97n\xf6\x0f\x00\x00\x00\x00\xe7\xff\x0b\x00\x14\xfc\xfa\xff\xc2\x00\x19\x00\t\xff\xf8\xff{\x01\x14\xcd'b'\x00\x05N\xb1z\x18\xf8<\xfe\x16\xc3\x01\x01t \x16\x04\x00\xe7\xff\x01\x00\x0f\xfc\xef\xff\xd0\x00\x16\x00\x02\xffM\xff\x11\x02\xde\xda'b'\x00\x05N\xb1z\x18\xf8\x90\xfe\x16\xc4\x01\x01\x81 \x16\x04\x00\xe1\xff\x1a\x00\x01\xfc\x03\x00\xc0\x00\x18\x00\x8a\x008\x00u\x02a\xc6'b'\x00\x05N\xb1z\x18\xf8\xe0\xfe\x0e\xc5\x01\x01\x1d \x16\x04\x00\xaf\x97iD\xa4p\x19\xbeX\x10\x1e\x8a'b'\x00\x05N\xb1z\x18\xf9,\xfe\x0e\xc6\x01\x01\x89 \x16\x04\x00~\xd9iD\xebQ\x02>\x82\x15\\\x87'b'\x00\x05N\xb1z\x18\xf9\x84\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x00\xf9;\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R4\x9e'b'\x00\x05N\xb1z\x18\xf9\xd4\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\'b'\x00\x05N\xb1z\x18\xfa \xfe\x04\xc9\x01\x01\x98\x00\x00\x80\x8ae\xef'b'\x00\x05N\xb1z\x18\xfad\xfe\x02\xca\x01\x01*\x00\x00\xd0Y'b'\x00\x05N\xb1z\x18\xfa\xb8\xfe\x1e\xcb\x01\x01\x18\x88\t\xf5\x0f\x00\x00\x00\x00t\xa6\x02\x18\xe3\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x16\x00\xa0\\\x03\x0c\x98:'b'\x00\x05N\xb1z\x1a%\xb7\xfe5\x06\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01)\xcb'b'\x00\x05N\xb1z\x1a;\xd7\xfe!\x07\xff\x00L\xa4\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00T\xf0'b'\x00\x05N\xb1z\x1aPp\xfe\x1a\xcc\x01\x01>\xb3?V\xc0\xab\xfb\x95=\\{\xa6=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x06}'b'\x00\x05N\xb1z\x1aP\xe0\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca'b'\x00\x05N\xb1z\x1aQ<\xfe\x12\xce\x01\x01\xfc1\x16\x04\x004\x00\x01\x00ARMMASK\x00Wr\x1d\x16'b'\x00\x05N\xb1z\x1aQ\xa0\xfe\t\xcf\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x02\xff'b'\x00\x05N\xb1z\x1aR\x04\xfe\x14\xd0\x01\x01J\x1e\x85k>\x1e\x85k>)\\\xef?\xebQ\xb8=\xb3\x00/\x00\xbfg'b'\x00\x05N\xb1z\x1aRh\xfe\x1c\xd1\x01\x01!\xc5\x15\x04\x00l\xa6\x02\x18\xe1\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf2\xff\xfc\xff\x07\x00JF\x0f\xd0'b'\x00\x05N\xb1z\x1aR\xd4\xfe\x1c\xd2\x01\x01 \x84\x16\x04\x00>*O=i/@?{q\xc6\xbf\xf9\xed\x14\xbe\xb3\xbb:\xbdM\x88\x94\xbdSc'b'\x00\x05N\xb1z\x1b\xe6\x90\xfe\x03\xd3\x01\x01Ms\x00\x00{\xc2'b'\x00\x05N\xb1z\x1b\xe7L\xfe\x1c\xd4\x01\x01\x1e\xac\x16\x04\x00\xc8\xda1\xbd@\xc5@\xba\xb6\xfeH@v?\xdc\xbd\xbf\xec\t>\xde\x9d[<\xe4\x15'b"\x00\x05N\xb1z\x1b\xe7\xac\xfe\x18\xd5\x01\x01\xb2{'5\xbd\xda\xaeU\xba\x05\x96H\xc0)\x0c*Dp\xa6\x02\x18\xe1\xe7\xb8\xfd\x19\x10"b'\x00\x05N\xb1z\x1b\xe8\x04\xfe\x1c\xd6\x01\x01\xa3\x01J\x079\xee\xb0\x1a\xba\x16\xed\x959\x00\x00\x00\x00\x00\x00\x00\x00\xad\xd2\xa6<\xc5\xd5\x13<\x0b\xe4'b'\x00\x05N\xb1z\x1b\xe8L\xfe\x03\xd7\x01\x01\xa5\xc2\x14\x00c\x05'b'\x00\x05N\xb1z\x1b\xe8\x98\xfe\x0c\xd8\x01\x01\x02\x90\xb7`z\xb1N\x05\x00\xc0\x16\x04\x00\xb3$'b'\x00\x05N\xb1z\x1b\xe8\xe8\xfe\x16\xd9\x01\x01\x88k\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7fL'b'\x00\x05N\xb1z\x1b\xe98\xfe\x16\xda\x01\x01\xc1\n|\x12=,\x88=<\xba\xb5\xef;\xfe\x9a9>\x00\x00\x00\x00?\x03\x8b\x8c'b'\x00\x05N\xb1z\x1c#C\xfe5\x08\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x90v'b'\x00\x05N\xb1z\x1cLc\xfe!\t\xff\x00L!\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcbg'b'\x00\x05N\xb1z\x1dn\xa8\xfe\x15\xdb\x01\x01$\x7f\xce\xf9\x0f-\x06#\x06\x1a\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c+'b'\x00\x05N\xb1z\x1do\xcc\xfe\x16\xdc\x01\x01#\xfd\x16\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x96\x82'b'\x00\x05N\xb1z\x1dp\x88\xfe\x1a\xdd\x01\x01\x1b\xa6\x1d\xfa\x0f\x00\x00\x00\x00\xe0\xff\x01\x00\x14\xfc\xaf\xff\x1d\x00-\x00\xf7\xfe\xfb\xffr\x01\xa1l'b'\x00\x05N\xb1z\x1dq\x08\xfe\x16\xde\x01\x01t\x11\x17\x04\x00\xe8\xff\xf5\xff/\xfc\xb5\xff5\x00\x05\x00\xf0\xfeR\xff\x02\x02\xd2\x0b'b'\x00\x05N\xb1z\x1dq|\xfe\x16\xdf\x01\x01\x81\x11\x17\x04\x00\xe0\xff\x15\x00\x1e\xfc\x88\xff9\x00\x19\x00\x82\x00@\x00l\x02\xcc\xd8'b'\x00\x05N\xb1z\x1dq\xe0\xfe\x0e\xe0\x01\x01\x1d\x11\x17\x04\x00\x9d\x96iD\\\x8f*\xbeW\x109F'b'\x00\x05N\xb1z\x1drD\xfe\x0e\xe1\x01\x01\x89\x11\x17\x04\x003\xdbiD\x99\x99\x1d>\x83\x15\xe6\xe0'b'\x00\x05N\xb1z\x1dr\xb4\xfe\x1f\xe2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xe8;|\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xfe\xa7'b'\x00\x05N\xb1z\x1ds\x1c\xfe\x06\xe3\x01\x01}\xc5\x14\x00\x00\x03\x00\xaa\xfc'b'\x00\x05N\xb1z\x1dsx\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3'b'\x00\x05N\xb1z\x1dt\x10\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX'b'\x00\x05N\xb1z\x1dt\xa0\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b'b'\x00\x05N\xb1z\x1du,\xfe\x1e\xe7\x01\x01\x18\xb0\x1a\xf8\x0f\x00\x00\x00\x00p\xa6\x02\x18\xe1\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x1d\x00\xebV\x03\x0c\x8e:'b'\x00\x05N\xb1z\x1du\xb4\xfe\x1a\xe8\x01\x01>\xef\xc0S\xc0A9\xaf>\x14"\x9a=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x12\xde'b'\x00\x05N\xb1z\x1dv\x14\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\x00\x05N\xb1z\x1d\xc8{\xfe\t\n\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x16\xcd'b'\x00\x05N\xb1z\x1e\x12\x03\xfe5\x0b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01_a'b'\x00\x05N\xb1z\x1e=\x07\xfe!\x0c\xff\x00L!\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x01v'b'\x00\x05N\xb1z\x1e\xe3\x9c\xfe\x14\xea\x01\x01J=\nW>=\nW>\xd7\xa3\xf0?\xcc\xccL=\xb3\x000\x00\x16B'b'\x00\x05N\xb1z\x1e\xe4\x18\xfe\x1c\xeb\x01\x01!W\x17\x04\x00i\xa6\x02\x18\xde\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfa\xff\x01\x00\x03\x00?F\xad\xf5'b'\x00\x05N\xb1z\x1e\xe4\x80\xfe\x1c\xec\x01\x01 \x89\x17\x04\x00\x08r:<\xd6\x91:?\xe7m\xc7\xbf;\x06\x8d\xbd\xe1\xc4L<&\xfa!\xbd\x89p'b'\x00\x05N\xb1z\x1e\xe4\xd0\xfe\x03\xed\x01\x01Ms\x00\x00\xfe\x1f'b'\x00\x05N\xb1z\x1e\xe5T\xfe\x1c\xee\x01\x01\x1e\xb2\x17\x04\x00O\x0c]\xbd\xfd\x80\xa4;2\xd7H@L~\x03;bcF\xbd\xd5\xcf\x0e\xbc\xcd\xf9'b'\x00\x05N\xb1z\x1e\xe5\xb4\xfe\x18\xef\x01\x01\xb2\x9d\xeeg\xbd\x1fR\xe4;\xec\xb8H\xc0\x1e\x15*Dn\xa6\x02\x18\xdf\xe7\xb8\xfd\x07%'b'\x00\x05N\xb1z *G\xfe5\r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc1N'b'\x00\x05N\xb1z @\xc7\xfe!\x0e\xff\x00L\x04\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xba\xeb'b'\x00\x05N\xb1z {<\xfe\x1c\xf0\x01\x01\xa3U&\x139\xe8\x1b\x1f\xbau2\x979\x00\x00\x00\x00\x00\x00\x00\x00{P\xc0<\x1a\x08A<\x01\xbe'b'\x00\x05N\xb1z {\xa4\xfe\x03\xf1\x01\x01\xa5\xc2\x14\x00"\xae'b'\x00\x05N\xb1z {\xf8\xfe\x0c\xf2\x01\x01\x02\xe0hdz\xb1N\x05\x00\xc7\x17\x04\x00\x08\x0f'b'\x00\x05N\xb1z |T\xfe\x16\xf3\x01\x01\x88h\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xff\xac'b'\x00\x05N\xb1z |\xb0\xfe\x16\xf4\x01\x01\xc1\x92\xd8\xd4<\xac\xec+<\x02\x9b\xb3;D"\x17>\x00\x00\x00\x00?\x03T\x08'b'\x00\x05N\xb1z }\x08\xfe\x1a\xf5\x01\x01\x1b\x9f\xc9\xfd\x0f\x00\x00\x00\x00\xf6\xff\x04\x00"\xfc\x13\x00\xc3\xff\x00\x00\xf4\xfe\xf8\xffn\x01An'b'\x00\x05N\xb1z }\\\xfe\x16\xf6\x01\x01t\x02\x18\x04\x00\xf9\xff\xfd\xff8\xfc\x08\x00\xce\xff\xfb\xff\xf2\xfeZ\xff\x08\x02+,'b'\x00\x05N\xb1z }\xb0\xfe\x16\xf7\x01\x01\x81\x02\x18\x04\x00\xf1\xff\n\x003\xfc\x15\x00\xd1\xff\xf5\xffr\x00L\x00u\x02\xd1\x10'b'\x00\x05N\xb1z }\xf8\xfe\x0e\xf8\x01\x01\x1d\x02\x18\x04\x00\\\x97iD\xd7\xa3\x1e\xbeX\x10\xe7\xb4'b'\x00\x05N\xb1z ~D\xfe\x0e\xf9\x01\x01\x89\x02\x18\x04\x00\xb3\xdbiD\x99\x99%>\x84\x15rS'b'\x00\x05N\xb1z ~\xb0\xfe\x1f\xfa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe8;\xe2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd3o'b'\x00\x05N\xb1z \x7f\x00\xfe\x06\xfb\x01\x01}\xc2\x14\x00\x00\x03\x00]\xf6'b'\x00\x05N\xb1z \x7fH\xfe\x04\xfc\x01\x01\x98\x00\x00\x80\x8a\xd0\x95'b'\x00\x05N\xb1z \x7f\x8c\xfe\x02\xfd\x01\x01*\x00\x00\x82H'b'\x00\x05N\xb1z \x7f\xe0\xfe\x1e\xfe\x01\x01\x18\xd8+\xfb\x0f\x00\x00\x00\x00l\xa6\x02\x18\xde\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x15\x00\xebV\x03\x0c\x85{'b'\x00\x05N\xb1z \x800\xfe\x1a\xff\x01\x01>0<+\xc0{Q\x9d\xbe\x00$\x8e=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00JX'b'\x00\x05N\xb1z \x80t\xfe\x08\x00\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00QQ'b'\x00\x05N\xb1z \x80\xc4\xfe\x15\x01\x01\x01$v\x18\xfe\x0f$\x06 \x06#\x06\x12\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00K\x95'b'\x00\x05N\xb1z \x81\x14\xfe\x16\x02\x01\x01#\x16\x18\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xae\xc5'b'\x00\x05N\xb1z!\xe9(\xfe\x03\x03\x01\x01Ms\x00\x00\x107'b'\x00\x05N\xb1z!\xfd\x9c\xfe\x14\x04\x01\x01J\xebQ8>\xebQ8>\xd7\xa3\xf0?\n\xd7\xa3<\xb3\x004\x00\xfco'b'\x00\x05N\xb1z"\x14\xfb\xfe5\x0f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01D\xac'b'\x00\x05N\xb1z"A\x8f\xfe!\x10\xff\x00L\x04\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x06\x8f'b'\x00\x05N\xb1z#\x88\xe0\xfe\x1c\x05\x01\x01! \x18\x04\x00h\xa6\x02\x18\xde\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xff\xff\x07\x00\x02\x001F@\xf2'b'\x00\x05N\xb1z#\x89|\xfe\x1c\x06\x01\x01 \x8f\x18\x04\x00++\xa5\xba]\xfd9?G0\xc7\xbf?r\x83\xbc\xa8Y\x9c=\x8c\xe6\xe5\xbc\xb9*'b'\x00\x05N\xb1z#\x89\xd4\xfe\x03\x07\x01\x01Ms\x00\x00\xce!'b'\x00\x05N\xb1z#\xb1\x1c\xfe\x1c\x08\x01\x01\x1e\xb7\x18\x04\x00\xf8\x0e9\xbd\x9f~\x04\xbc.\xaeH@\x12\xc9\xd7<\xd8\xbd\x04;\x02r\x16\xbc6\xc9'b'\x00\x05N\xb1z#\xb1\x80\xfe\x18\t\x01\x01\xb2\xc8\xd7E\xbd\xe2,\xd8\xbb\xe8\xdfH\xc0\x99\x19*Dl\xa6\x02\x18\xde\xe7\xb8\xfd\x99\x98'b'\x00\x05N\xb1z#\xb1\xd4\xfe\x1c\n\x01\x01\xa3\x9f5\x1f9\xdb\x8b#\xba\xe0\x84\x989\x00\x00\x00\x00\x00\x00\x00\x00\xc9X\xd2<\x15m\x19<\x1f\xaa'b'\x00\x05N\xb1z#\xb2\x18\xfe\x03\x0b\x01\x01\xa5\xc6\x14\x00\x86\xb9'b'\x00\x05N\xb1z#\xb2d\xfe\x0c\x0c\x01\x01\x02\xd0\xa6hz\xb1N\x05\x00\xcb\x18\x04\x00:\xae'b'\x00\x05N\xb1z#\xb2\xb4\xfe\x16\r\x01\x01\x88h\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x8b'b'\x00\x05N\xb1z#\xb3\x04\xfe\x12\x0e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00a('b'\x00\x05N\xb1z#\xb3T\xfe\x16\x0f\x01\x01\xc1U\x81\x02=\x1d\xdaA<\xe9\xed\x0f;f21>\x00\x00\x00\x00?\x03}\x14'b"\x00\x05N\xb1z#\xee\xaf\xfe%\x11\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xeep"b'\x00\x05N\xb1z$-\x13\xfe5\x12\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01m*'b'\x00\x05N\xb1z$D\x0f\xfe!\x13\xff\x00L\xa6\xf33C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x15('b'\x00\x05N\xb1z%\x00\xe0\xfe\x1a\x11\x01\x01\x1b-z\x01\x10\x00\x00\x00\x00\xed\xff\x00\x00#\xfc\x1e\x00\n\x00\xfe\xff\xf6\xfe\xf9\xffw\x01\xcae'b'\x00\x05N\xb1z%\x01P\xfe\x16\x12\x01\x01t\xf4\x18\x04\x00\xef\xff\xfa\xff2\xfc&\x00\x08\x00\xf8\xff\xf6\xfeT\xff\x07\x02u\xfa'b'\x00\x05N\xb1z%\x01\xac\xfe\x16\x13\x01\x01\x81\xf4\x18\x04\x00\xed\xff\x18\x00\x16\xfcM\x00\xf6\xff\xeb\xffs\x00I\x00j\x02^\x7f'b'\x00\x05N\xb1z%\x01\xfc\xfe\x0e\x14\x01\x01\x1d\xf4\x18\x04\x00}\x96iD\\\x8f,\xbeX\x10\xc8E'b'\x00\x05N\xb1z%\x02P\xfe\x0e\x15\x01\x01\x89\xf4\x18\x04\x00t\xdaiD\x14\xae\x11>\x84\x15~\xe6'b'\x00\x05N\xb1z%\x02\xac\xfe\x1f\x16\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00<\x00\xe8;e\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd7R'b'\x00\x05N\xb1z%\x03\x00\xfe\x06\x17\x01\x01}\xc5\x14\x00\x00\x03\x00.n'b'\x00\x05N\xb1z%\x03L\xfe\x04\x18\x01\x01\x98\x00\x00\x80\x8a\xb8\x7f'b'\x00\x05N\xb1z%\x03\x90\xfe\x02\x19\x01\x01*\x00\x00l\x05'b'\x00\x05N\xb1z%\x03\xe8\xfe\x1e\x1a\x01\x01\x18(N\x01\x10\x00\x00\x00\x00j\xa6\x02\x18\xde\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x0b\x00\xebV\x03\x0c\xc0\xbe'b'\x00\x05N\xb1z%\x048\xfe\x1a\x1b\x01\x01>\x16)\x04\xc0\xbd\xde \xbf\x14\xc6\x85=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe5C'b'\x00\x05N\xb1z%\x04\x80\xfe\x08\x1c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00]0'b'\x00\x05N\xb1z%\x04\xc8\xfe\x03\x1d\x01\x01/\xff\x00\x00\xb3$'b'\x00\x05N\xb1z%\x05`\xfe\x15\x1e\x01\x01$p\x16\x02\x10#\x06\x95\x05\xe5\x05\x15\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00{f'b'\x00\x05N\xb1z%\x05\xb4\xfe\x16\x1f\x01\x01#\x1c\x19\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb2\x84'b'\x00\x05N\xb1z%\x05\xf8\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\x00\x05N\xb1z%\xff\xcf\xfe5\x14\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf3\x05'b'\x00\x05N\xb1z&Q\x7f\xfe!\x15\xff\x00L\xa6\xf33C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x96\xce'b'\x00\x05N\xb1z&\x95\xa8\xfe\x14!\x01\x01J\xaeG\xe1=\xaeG\xe1=\x85\xeb\xf1?\x00\x00\x00\x00\xb3\x004\x005\xc8'b'\x00\x05N\xb1z&\x960\xfe\x1c"\x01\x01!\xe9\x18\x04\x00h\xa6\x02\x18\xdf\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\x0b\x00\x00\x00\xfbE\x08\x0e'b"\x00\x05N\xb1z&\x96\x98\xfe\x1c#\x01\x01 \x94\x19\x04\x00\x94\xf6%\xbc\xd2'=?\xdaA\xc8\xbf\x1d\xfc?<@g\xf1=$\xa1\x87;\xcev"b'\x00\x05N\xb1z&\x96\xe4\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b"\x00\x05N\xb1z'\xfa\xb0\xfe\x1c%\x01\x01\x1e\xbd\x19\x04\x00\xdf\xd2*\xbd\xd5\x86\xa1;\xe29H@\xaaE\xdf;\xe3$\x84=G\x83\n=\x948"b"\x00\x05N\xb1z'\xfb<\xfe\x18&\x01\x01\xb2\xd8^8\xbd\xc3\x97\xc9;\x11\xbdH@\x8f\x12*Dj\xa6\x02\x18\xdf\xe7\xb8\xfd~\x05"b"\x00\x05N\xb1z'\xfb\xa4\xfe\t\xf0\n\x00m\x11\x00\x00\x00\x00\xda\x00\x00\x00\x80\xb7"b"\x00\x05N\xb1z'\xfb\xf8\xfe\x1c'\x01\x01\xa3\xd2u+9\xf7\r(\xba4\xdb\x999\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x04\xb9<\x9b\xa40<\x89\x9e"b"\x00\x05N\xb1z'\xfc<\xfe\x03(\x01\x01\xa5\xc2\x14\x00J\xf7"b"\x00\x05N\xb1z'\xfc\x88\xfe\x0c)\x01\x01\x02X\xa2lz\xb1N\x05\x00\xd1\x19\x04\x00q\xbb"b"\x00\x05N\xb1z'\xfc\xd8\xfe\x16*\x01\x01\x88h\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00nh"b"\x00\x05N\xb1z'\xfd(\xfe\x16+\x01\x01\xc1\xd3\x90\x01=IU.<\\\xebi;\xa7e$>\x00\x00\x00\x00?\x03\xde\xa2"b"\x00\x05N\xb1z'\xfd|\xfe\x1a,\x01\x01\x1b\x8e*\x05\x10\x00\x00\x00\x00\xf2\xff\x01\x00\xed\xfbU\x00\x01\x00F\x00\xf5\xfe\xf8\xfft\x01\xbe\x0f"b"\x00\x05N\xb1z'\xfd\xcc\xfe\x16-\x01\x01t\xe6\x19\x04\x00\xeb\xff\x12\x00\x17\xfcN\x00\x1c\x00.\x00\xf4\xfeH\xff\x01\x02\xa9\xf6"b"\x00\x05N\xb1z'\xfe \xfe\x16.\x01\x01\x81\xe6\x19\x04\x00\xe9\xff\x17\x00\r\xfc<\x00,\x008\x00\x84\x000\x00k\x02\xa24"b"\x00\x05N\xb1z'\xfeh\xfe\x0e/\x01\x01\x1d\xe6\x19\x04\x00\t\x97iD\n\xd7#\xbeX\x100\x87"b"\x00\x05N\xb1z'\xfe\xb4\xfe\x0e0\x01\x01\x89\xe6\x19\x04\x00\xb4\xdbiD\x14\xae%>\x85\x15]L"b"\x00\x05N\xb1z'\xff\x0c\xfe*1\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00X\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00DS"b"\x00\x05N\xb1z'\xff`\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01\xe8;e\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Rs\x86"b"\x00\x05N\xb1z'\xff\xc8\xfe\x063\x01\x01}\xc2\x14\x00\x00\x03\x00\xe9\x15"b'\x00\x05N\xb1z(\x00\x10\xfe\x044\x01\x01\x98\x00\x00\x80\x8a\xae\xc8'b'\x00\x05N\xb1z(\x00T\xfe\x025\x01\x01*\x00\x00u\xd7'b'\x00\x05N\xb1z(\x00\xa8\xfe\x1e6\x01\x01\x18P_\x04\x10\x00\x00\x00\x00j\xa6\x02\x18\xdf\xe7\xb8\xfdTj\n\x00F\x00\xff\xff\x04\x00\xebV\x03\x0c^4'b'\x00\x05N\xb1z(\x00\xfc\xfe\x1a7\x01\x01>\x94[\x9f\xbfr\xec\xb9\xbeR6\x90=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xa6\x01'b'\x00\x05N\xb1z(\x01@\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93'b'\x00\x05N\xb1z(#\x0b\xfe5\x16\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01v\xe7'b'\x00\x05N\xb1z(P\xc3\xfe!\x17\xff\x00L\xa6\xf33C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x17\x93'b'\x00\x05N\xb1z){\x80\xfe\x129\x01\x01\xfc \x1a\x04\x004\x00\x01\x00ARMMASK\x00Wr=\x8c'b'\x00\x05N\xb1z){\xf4\xfe\t:\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x88\xc4'b'\x00\x05N\xb1z)|X\xfe\x15;\x01\x01$\x9b\x19\x06\x100\x066\x06"\x06\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xc3'b'\x00\x05N\xb1z)|\xb0\xfe\x16<\x01\x01##\x1a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00O?'b'\x00\x05N\xb1z)|\xf8\xfe\x03=\x01\x01Ms\x00\x00\x95\xea'b'\x00\x05N\xb1z)\x91X\xfe\x14>\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\xf1?\xcc\xccL=\xb3\x003\x00\x99\xf8'b'\x00\x05N\xb1z*\x163\xfe5\x18\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcfZ'b'\x00\x05N\xb1z*,{\xfe!\x19\xff\x00L\xe0\xf43C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00r\xf8'b'\x00\x05N\xb1z+\x15\xbc\xfe\x1c?\x01\x01!|\x1a\x04\x00h\xa6\x02\x18\xe2\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x07\x00\x0e\x00\x04\x00!F\xba*'b'\x00\x05N\xb1z+\x16h\xfe\x1c@\x01\x01 \x9b\x1a\x04\x00\xecG\x83:(4C?\x9e7\xc8\xbf\xaa{\x96=\xf7o\x18>\x83&B\xbd\xb7\x11'b'\x00\x05N\xb1z+\x16\xd4\xfe\x03A\x01\x01Ms\x00\x00\x8eY'b'\x00\x05N\xb1z++`\xfe\x1cB\x01\x01\x1e\xc3\x1a\x04\x00\xa6\xaf\xd1\xbc1\xbbK\xbcG\x8eH@\xd6(\x1b<\x907\xfa\xbd+\xf8\xe4\xbc\xe6\x17'b'\x00\x05N\xb1z++\xcc\xfe\x18C\x01\x01\xb2]\xd7\xf4\xbcn\xcd\x11\xbc\x0e\x02I\xc03\x13*Dk\xa6\x02\x18\xe2\xe7\xb8\xfd\xae\xfd'b'\x00\x05N\xb1z+,8\xfe\x1aD\x01\x01\x1b\x02\xd8\x08\x10\x00\x00\x00\x00\xf7\xff\xfd\xff\x17\xfc\x15\x00~\xff\x1b\x00\xf5\xfe\xfe\xffs\x01\x08\xb8'b'\x00\x05N\xb1z+,\xa4\xfe\x16E\x01\x01t\xd7\x1a\x04\x00\x01\x00\xf4\xff\x12\xfc\x07\x00\x92\xff\x03\x00\xf5\xfeZ\xff\t\x02\x8e\x02'b'\x00\x05N\xb1z+-\x0c\xfe\x16F\x01\x01\x81\xd7\x1a\x04\x00\xf2\xff\r\x00\x10\xfc\xcd\xff\xb7\xff\x0f\x00z\x00Q\x00c\x02\x1c\xd7'b'\x00\x05N\xb1z+-p\xfe\x0eG\x01\x01\x1d\xd7\x1a\x04\x00\xf2\x96iD\xaeG%\xbeX\x10\xbfM'b'\x00\x05N\xb1z+-\xcc\xfe\x0eH\x01\x01\x89\xd7\x1a\x04\x00C\xdciD\xd7\xa3.>\x86\x15\xb6r'b'\x00\x05N\xb1z+.<\xfe\x1fI\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01t;\xa2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x17\xc8'b'\x00\x05N\xb1z+.\xa0\xfe\x06J\x01\x01}\xc5\x14\x00\x00\x03\x00\x00e'b'\x00\x05N\xb1z+.\xf8\xfe\x04K\x01\x01\x98\x00\x00\x80\x8aH\xb0'b'\x00\x05N\xb1z,\n\xc7\xfe5\x1a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01J\xb8'b'\x00\x05N\xb1z,VK\xfe!\x1b\xff\x00L\xf6\xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc8\xe6'b'\x00\x05N\xb1z,\xba\xe0\xfe\x02L\x01\x01*\x00\x00\x00\x87'b'\x00\x05N\xb1z,\xbbp\xfe\x1eM\x01\x01\x18`t\x07\x10\x00\x00\x00\x00k\xa6\x02\x18\xe2\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x01\x00\xebV\x03\x0c(\xa5'b'\x00\x05N\xb1z,\xbb\xe0\xfe\x1aN\x01\x01>\x9b\x84\x11\xbf;5\xa1\xbf\x8f\x9e\x8a=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfd\x1a'b'\x00\x05N\xb1z,\xbc8\xfe\x08O\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00+\x07'b'\x00\x05N\xb1z,\xbc\x98\xfe\x1cP\x01\x01\xa3\x0b\xe2899\xe3,\xbaBP\x9b9\x00\x00\x00\x00\x00\x00\x00\x00\x90\xe7\x9c\x00\x00\x00\x00?\x03,a'b'\x00\x05N\xb1z,\xbe\x84\xfe\x15U\x01\x01$\x90\x13\n\x10A\x06\x13\x06\x15\x06\x1f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00r\xbe'b"\x00\x05N\xb1z,\xbe\xdc\xfe\x16V\x01\x01#'\x1b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18\xad"b'\x00\x05N\xb1z,\xbf(\xfe\x03W\x01\x01Ms\x00\x00G\x1f'b'\x00\x05N\xb1z-\x11O\xfe\t\x1c\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xac\x15'b'\x00\x05N\xb1z-\xf4#\xfe5\x1d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9eb'b'\x00\x05N\xb1z.\x1e3\xfe!\x1e\xff\x00L\xf6\xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x02\xf7'b'\x00\x05N\xb1z.A\xfc\xfe\x14X\x01\x01J\xebQ\xb8=\xebQ\xb8=\x85\xeb\xf1?\x8f\xc2u=\xb3\x003\x00\x80-'b'\x00\x05N\xb1z.Bt\xfe\x1cY\x01\x01!E\x1b\x04\x00j\xa6\x02\x18\xe6\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x08\x00\x0e\x00\x06\x00(F\xd1M'b'\x00\x05N\xb1z.B\xdc\xfe\x1cZ\x01\x01 \xa0\x1b\x04\x00\xd7D\xc8<{\x84K?\xf5\xa4\xc8\xbf\x9c\x03\xa8=\xc9\\\x18>\xeb\x80\x8d\xbdC\xb0'b'\x00\x05N\xb1z.C(\xfe\x03[\x01\x01Ms\x00\x00%$'b'\x00\x05N\xb1z/\xd68\xfe\x1a\\\x01\x01\x1b\xb4\x89\x0c\x10\x00\x00\x00\x00\xed\xff\x0f\x00\x0f\xfc \x00\xcb\xff\xfe\xff\x01\xff\x01\x00z\x01\xb1\xa5'b'\x00\x05N\xb1z/\xd6\xa8\xfe\x16]\x01\x01t\xc9\x1b\x04\x00\xe5\xff\x1c\x00\x14\xfc\x07\x00\xdb\xff\xf5\xff\xfd\xfe[\xff\r\x02\xed_'b'\x00\x05N\xb1z/\xd7\x08\xfe\x16^\x01\x01\x81\xc9\x1b\x04\x00\xe4\xff\x1c\x00\x14\xfc\xe5\xff\xe2\xff\xf2\xff\x7f\x00\\\x00b\x02\x19}'b'\x00\x05N\xb1z/\xd7X\xfe\x0e_\x01\x01\x1d\xc9\x1b\x04\x00\x00\x98iDff\x14\xbeZ\x10\xb2,'b'\x00\x05N\xb1z/\xd7\xb4\xfe\x0e`\x01\x01\x89\xc9\x1b\x04\x00t\xdaiD\x14\xae\x11>\x86\x15E\xbc'b'\x00\x05N\xb1z/\xd8\x18\xfe\x1fa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00dt;\xec\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xe2\x83'b'\x00\x05N\xb1z/\xd8t\xfe\x06b\x01\x01}\xc5\x14\x00\x00\x03\x00 ;'b'\x00\x05N\xb1z/\xd8\xcc\xfe\x04c\x01\x01\x98\x00\x00\x80\x8a\xbb8'b'\x00\x05N\xb1z/\xd9\x18\xfe\x02d\x01\x01*\x00\x00o:'b'\x00\x05N\xb1z/\xd9t\xfe\x1ee\x01\x01\x18\x88\x85\n\x10\x00\x00\x00\x00k\xa6\x02\x18\xe5\xe7\xb8\xfd^j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x17\x82'b'\x00\x05N\xb1z/\xd9\xd4\xfe\x1af\x01\x01>MO&\xbe\xec\xf9\xce\xbf\xcd\x0c\x87=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb5\xce'b'\x00\x05N\xb1z/\xda \xfe\x08g\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x9f'b'\x00\x05N\xb1z/\xda\x90\xfe\x1ch\x01\x01\x1e\xdc\x1b\x04\x00\xa6\xfck\xbc\xed\xbd\xe8\xbc\x95\x92H@4\xd9\x04\xbc\xaa\xe3\xd0\xbc\xc7\xf4n\xbcR\xbf'b"\x00\x05N\xb1z/\xdb\x1c\xfe\x18i\x01\x01\xb2F}\x9d\xbc'Z\xd5\xbc\n\xf8H\xc0\x99\t*Dk\xa6\x02\x18\xe5\xe7\xb8\xfd\xe5\xa8"b'\x00\x05N\xb1z/\xdb\xa0\xfe\x1cj\x01\x01\xa3G9E9oY1\xba\xc9\x98\x9c9\x00\x00\x00\x00\x00\x00\x00\x00\xa7`\x8f<\x95\xbf\xfd;Ny'b'\x00\x05N\xb1z/\xdb\xe8\xfe\x03k\x01\x01\xa5\xc2\x14\x00k\x18'b'\x00\x05N\xb1z/\xdc0\xfe\x0cl\x01\x01\x02\xd0\xdbtz\xb1N\x05\x00\xf1\x1b\x04\x00\xb5Q'b'\x00\x05N\xb1z/\xdc\x80\xfe\x16m\x01\x01\x88j\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9c\x17'b'\x00\x05N\xb1z/\xdc\xd0\xfe\x16n\x01\x01\xc14\xc1\xac<\x07\x82\x87<\xb7\xe4*\x00\x00\x00\x00?\x03]\xec'b'\x00\x05N\xb1z0\x19\x8f\xfe5\x1f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1b\x80'b'\x00\x05N\xb1z0/\xdb\xfe! \xff\x00L\xcd\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00|\x91'b'\x00\x05N\xb1z1\\0\xfe\x15o\x01\x01$\x1a\x15\x0e\x10#\x06G\x06\xfc\x05\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\xfb'b'\x00\x05N\xb1z1\\\xc8\xfe\x16p\x01\x01#.\x1c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v\xf0'b'\x00\x05N\xb1z1],\xfe\x03q\x01\x01Ms\x00\x00\x06\xb4'b'\x00\x05N\xb1z1\xe8\xdb\xfe5!\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01CI'b'\x00\x05N\xb1z2$_\xfe!"\xff\x00L\xcd\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfd\xcc'b'\x00\x05N\xb1z2\xfc\xb4\xfe\x14r\x01\x01J)\\\x0f>)\\\x0f>33\xf3?)\\\x8f=\xb3\x001\x00\xd8B'b'\x00\x05N\xb1z2\xfd\\\xfe\x1cs\x01\x01!\xfb\x1b\x04\x00l\xa6\x02\x18\xea\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x07\x00\r\x00\x07\x00\x1aF\x82\x97'b'\x00\x05N\xb1z2\xfd\xfc\xfe\x1ct\x01\x01 \xa6\x1c\x04\x00~\xbaN=\xfd\xc5S?U\xa0\xc9\xbf\xd5\xfe\x96=W\xa5\x08>\xe9;\x99\xbda}'b'\x00\x05N\xb1z2\xfe\x90\xfe\x1au\x01\x01\x1b\xed7\x10\x10\x00\x00\x00\x00\xe4\xff\x06\x00&\xfc\x01\x00\x02\x00\xee\xff\x05\xff\x03\x00z\x01g|'b'\x00\x05N\xb1z2\xff\x18\xfe\x16v\x01\x01t\xba\x1c\x04\x00\xdf\xff\x06\x00.\xfc\x10\x00\x04\x00\xf7\xff\xff\xfe`\xff\x0e\x02_\xf4'b'\x00\x05N\xb1z2\xff\xa0\xfe\x16w\x01\x01\x81\xba\x1c\x04\x00\xe3\xff\x0c\x00"\xfc"\x00\xe0\xff\n\x00\x8a\x00W\x00q\x02\xdfo'b'\x00\x05N\xb1z3\x00\x18\xfe\x0ex\x01\x01\x1d\xba\x1c\x04\x00\x94\x96iD\xb8\x1e+\xbeY\x10\t\x13'b'\x00\x05N\xb1z3\x00\x8c\xfe\x0ey\x01\x01\x89\xba\x1c\x04\x00\xc5\xdaiDR\xb8\x16>\x86\x15g\x94'b'\x00\x05N\xb1z3\x01\x10\xfe\x1fz\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xba\x00t;\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xab\xd0'b'\x00\x05N\xb1z3\x01\x88\xfe\x06{\x01\x01}\xc6\x14\x00\x00\x03\x000\x0b'b'\x00\x05N\xb1z3\x01\xfc\xfe\x04|\x01\x01\x98\x00\x00\x80\x8a\x07Q'b'\x00\x05N\xb1z3\x02P\xfe\x03}\x01\x01Ms\x00\x00d\x8f'b'\x00\x05N\xb1z3\x17(\xfe\x02~\x01\x01*\x00\x00\xf1f'b'\x00\x05N\xb1z3\x17\xa4\xfe\x1e\x7f\x01\x01\x18\xa0]\x10\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x92\x02'b'\x00\x05N\xb1z3\x18\x14\xfe\x1a\x80\x01\x01>[\xcd\x96\x00\x00\x00\x00?\x03P\xa6'b'\x00\x05N\xb1z4h\xfc\xfe\x15\x8a\x01\x01$f\x0c\x12\x10\xf6\x05\xf4\x05\xc0\x05\xf9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xaf'b'\x00\x05N\xb1z4iX\xfe\x16\x8b\x01\x01#2\x1d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x00\xe8'b'\x00\x05N\xb1z4i\xa8\xfe\x03\x8c\x01\x01/\xff\x00\x00\x965'b'\x00\x05N\xb1z4\x8e\x98\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc'b'\x00\x05N\xb1z5kS\xfe\x06&\xff\x00B\x04\x00\x01\x00\x00\x01~n'b"\x00\x05N\xb1z5\xe0\xcf\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xddf"b'\x00\x05N\xb1z5\xe3\x90\xfe\x14\x8e\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc==\n\xf7?\n\xd7\xa3\xbc\xb3\x002\x00\x8fu'b'\x00\x05N\xb1z6\n\xe7\xfe!(\xff\x00L\xab\xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\r~'b'\x00\x05N\xb1z7x\xbc\xfe\x1a\x8f\x01\x01\x1b&\xe6\x13\x10\x00\x00\x00\x00\xef\xff\x02\x007\xfc)\x00E\xff\x13\x00\x02\xff\x02\x00|\x01\xb3J'b'\x00\x05N\xb1z7y,\xfe\x16\x90\x01\x01t\xab\x1d\x04\x00\xf3\xff\x07\x00C\xfc&\x00V\xff\x05\x00\xfe\xfec\xff\x0f\x02\xfc\x17'b'\x00\x05N\xb1z7y\x88\xfe\x16\x91\x01\x01\x81\xab\x1d\x04\x00\xe5\xff\n\x007\xfc6\x00)\xff\x0c\x00\x90\x00J\x00v\x02\x85\xad'b'\x00\x05N\xb1z7y\xdc\xfe\x0e\x92\x01\x01\x1d\xab\x1d\x04\x00f\x96iD\x00\x00.\xbeZ\x10\x94\xb0'b'\x00\x05N\xb1z7z(\xfe\x0e\x93\x01\x01\x89\xab\x1d\x04\x00=\xd9iD\xe1z\xfc=\x86\x15\x1d\xdd'b'\x00\x05N\xb1z7z\x80\xfe\x1f\x94\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x002\x01\xde;\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RR|'b'\x00\x05N\xb1z7z\xd4\xfe\x06\x95\x01\x01}\xc5\x14\x00\x00\x03\x00\x17W'b'\x00\x05N\xb1z7{ \xfe\x03\x96\x01\x01Ms\x00\x00\xeb0'b'\x00\x05N\xb1z7{\xb0\xfe\t\xf1\n\x00m\x04\x00\x00\x00\x00\xdb\x00\x00\x00\xc7\x8c'b'\x00\x05N\xb1z7|\x00\xfe\x04\x97\x01\x01\x98\x00\x00\x80\x8aG-'b'\x00\x05N\xb1z7|L\xfe\x02\x98\x01\x01*\x00\x00\xa4\x1c'b'\x00\x05N\xb1z7|\xac\xfe\x1e\x99\x01\x01\x18\x00\xb9\x13\x10\x00\x00\x00\x00s\xa6\x02\x18\xef\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\xfca'b'\x00\x05N\xb1z7}\x08\xfe\x1a\x9a\x01\x01>d\xd4\x92?\x9d\xc0\xda\xc0p-\xc5<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x85a'b'\x00\x05N\xb1z7}T\xfe\x08\x9b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xee'b'\x00\x05N\xb1z7}\xb0\xfe\x1c\x9c\x01\x01!\xa0\x1d\x04\x00n\xa6\x02\x18\xee\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x08\x00\x0c\x00\xfb\xff$F9H'b"\x00\x05N\xb1z7~ \xfe\x1c\x9d\x01\x01 \xbf\x1d\x04\x008\xcf\x9e=\th\\?\x12$\xcd\xbf\x1a'\xaa=\x93i\x01>~5\\=\xbd1"b'\x00\x05N\xb1z7~\xbc\xfe\x1c\x9e\x01\x01\x1e\xe7\x1d\x04\x00z#\x03\xbc\xe8\x1aQ\xbd\xf1\xa7H@\x1e\x1d\x86=\xb9\xe9\x98\xbe\x9d\t\xf5<3\xae'b'\x00\x05N\xb1z7\x7f \xfe\x18\x9f\x01\x01\xb2\x92\xf0n\xbcK\xc4:\xbdp\xe6H\xc0R\x18*Ds\xa6\x02\x18\xef\xe7\xb8\xfd\x9a\xcb'b'\x00\x05N\xb1z7\x7fp\xfe\x1c\xa0\x01\x01\xa3\xd8\x88]9#\x13:\xba\x93\x13\x9f9\x00\x00\x00\x00\x00\x00\x00\x00D\xf0\x81\x00\x00\x00\x00?\x03\x8e*'b'\x00\x05N\xb1z7\x80\xe0\xfe\x12\xa5\x01\x01\xfc\r\x1e\x04\x004\x00\x01\x00ARMMASK\x00Wrw\xae'b'\x00\x05N\xb1z7\xcb+\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01d\xdb'b'\x00\x05N\xb1z7\xf5\xa3\xfe!*\xff\x00L`\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0\xae'b'\x00\x05N\xb1z9\x13\xc8\xfe\t\xa6\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03[\x88'b'\x00\x05N\xb1z9\x14P\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\'b"\x00\x05N\xb1z9\x14\xf8\xfe\x15\xa8\x01\x01$\x92\n\x16\x10P\x06\x07\x06\xf0\x05[\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae'"b'\x00\x05N\xb1z9\x15P\xfe\x16\xa9\x01\x01#7\x1e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x03\x18'b'\x00\x05N\xb1z9\xa2;\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe19'b'\x00\x05N\xb1z9\xccc\xfe!,\xff\x00L`\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00sH'b'\x00\x05N\xb1z:\xa5\x84\xfe\x14\xaa\x01\x01J\xebQ\xb8=\xebQ\xb8==\n\xf7?\n\xd7#<\xb3\x00/\x00\x94\x04'b'\x00\x05N\xb1z:\xa6\x18\xfe\x1a\xab\x01\x01\x1b\x03\x91\x17\x10\x00\x00\x00\x00\xe5\xff\x13\x00\x18\xfch\x00\x9a\x00?\x00\x16\xff\x03\x00\x83\x01\xfc\xed'b'\x00\x05N\xb1z:\xa6\x8c\xfe\x16\xac\x01\x01t\x9b\x1e\x04\x00\xe7\xff\x14\x00\x1f\xfcy\x00\x95\x00$\x00\x0b\xff\\\xff\x15\x02\x13\x1b'b'\x00\x05N\xb1z:\xa6\xf4\xfe\x16\xad\x01\x01\x81\x9b\x1e\x04\x00\xdc\xff\x1a\x00*\xfc~\x00y\x00&\x00\xa0\x00O\x00l\x02\xeb\x15'b'\x00\x05N\xb1z:\xa7T\xfe\x0e\xae\x01\x01\x1d\x9b\x1e\x04\x00\xb8\x96iDG\xe1(\xbeZ\x10\xbee'b'\x00\x05N\xb1z:\xa7\xb0\xfe\x0e\xaf\x01\x01\x89\x9b\x1e\x04\x00+\xd9iDp=\xfa=\x87\x15x\x85'b'\x00\x05N\xb1z:\xa8H\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01\xde;\xe7\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RH\xaf'b'\x00\x05N\xb1z:\xa8\xac\xfe\x06\xb1\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xeb'b'\x00\x05N\xb1z:\xa9\x04\xfe\x04\xb2\x01\x01\x98\x00\x00\x80\x8af\xa8'b'\x00\x05N\xb1z:\xa9P\xfe\x03\xb3\x01\x01Ms\x00\x00z\x11'b'\x00\x05N\xb1z:\xa9\xec\xfe\x02\xb4\x01\x01*\x00\x00\xbd\xce'b'\x00\x05N\xb1z:\xaaL\xfe\x1e\xb5\x01\x01\x18\x08|\x16\x10\x00\x00\x00\x00w\xa6\x02\x18\xf2\xe7\xb8\xfd\x86j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x96\x1d'b'\x00\x05N\xb1z:\xaa\xa4\xfe\x1a\xb6\x01\x01>\xdfa\x81?\xfbsT\xc0)t\x92<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x008\x1e'b'\x00\x05N\xb1z:\xaa\xf0\xfe\x08\xb7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc0`'b'\x00\x05N\xb1z:\xabH\xfe\x1c\xb8\x01\x01!U\x1e\x04\x00q\xa6\x02\x18\xf1\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x01\x00\x0b\x00\x00\x00SF\xfcr'b'\x00\x05N\xb1z:\xab\xac\xfe\x1c\xb9\x01\x01 \xc3\x1e\x04\x00\x9e.\xcf=\xc5\x0bd?\x96\xee\xcd\xbf\x98\xb52<\x15\xac\xeb=\xf9#\x9b:f\xcc'b'\x00\x05N\xb1z;\xa5\xd3\xfe5-\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x7f\x16'b'\x00\x05N\xb1z;\xe3\x8b\xfe!.\xff\x00L`\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf2\x15'b'\x00\x05N\xb1z< \x8c\xfe\x1c\xba\x01\x01\x1e\xeb\x1e\x04\x00\x06\xe3\x8f<\xe6{L\xbd\xa0\xffH\xc05\xb9\xc7=\xe3P\x1a>c\t\x92;\xd3M'b'\x00\x05N\xb1z\xba\xf57\xa09\x00\x00\x00\x00\x00\x00\x00\x00g\xf3~<\xe4\x19\x05\x00\x00\x00\x00?\x036j'b'\x00\x05N\xb1z<"\xf0\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\x00\x05N\xb1zn\x82\x1f?\xb4\\+\xc0\xe1JA<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8d\xab'b'\x00\x05N\xb1z?9,\xfe\x08\xcf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x89\xc1'b'\x00\x05N\xb1z?9\xa0\xfe\x14\xd0\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xebQ\xf8?\x00\x00\x00\x00\xb4\x005\x00\x89\xb3'b'\x00\x05N\xb1z?:\x08\xfe\x03\xd1\x01\x01Ms\x00\x04t\xae'b'\x00\x05N\xb1z?N\x8c\xfe\x1c\xd2\x01\x01!\x1d\x1f\x04\x00r\xa6\x02\x18\xf3\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\x00\x00\x03\x00\x00\x00fF.a'b'\x00\x05N\xb1z?N\xfc\xfe\x1c\xd3\x01\x01 \xc8\x1f\x04\x00#\x04\xee=\xb4Nh?_\x18\xcf\xbf\x8fC.;\xb9l\x06=\xdd_\x89:C\xa8'b'\x00\x05N\xb1z?OT\xfe\x1c\xd4\x01\x01\x1e\xf0\x1f\x04\x00\xcf\x952<\xb838\xbd-\xd1H\xc0\xbc\xac\x08\xbd\xe7q\xce\xbdp\x92\xe6<_s'b'\x00\x05N\xb1z?O\xa8\xfe\x18\xd5\x01\x01\xb2\xe2K\xa4;yJ+\xbd\xb2@H\xc0\x99)*Dy\xa6\x02\x18\xf6\xe7\xb8\xfdI\xbf'b'\x00\x05N\xb1z?\x81G\xfe52\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd3r'b'\x00\x05N\xb1z?\xabO\xfe!3\xff\x00L\x92\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcb]'b'\x00\x05N\xb1z@\xa2 \xfe\x1c\xd6\x01\x01\xa3m\xf0t9\xf9\x89B\xba\xc9E\xa19\x00\x00\x00\x00\x00\x00\x00\x00\xc7^W<\xfc\xb2\xe6;\xd7L'b'\x00\x05N\xb1z@\xa2\x90\xfe\x03\xd7\x01\x01\xa5\xbe\x14\x00\x12\xc8'b'\x00\x05N\xb1z@\xa2\xf4\xfe\x0c\xd8\x01\x01\x02P\xba\x84z\xb1N\x05\x00\x04 \x04\x00A\x89'b'\x00\x05N\xb1z@\xa3x\xfe\x16\xd9\x01\x01\x88r\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\xb6'b'\x00\x05N\xb1z@\xa3\xd4\xfe\x16\xda\x01\x01\xc1M\x8b\xb8<\xddV\x10=\xec\xcf#<]\xf08>\x00\x00\x00\x00?\x03\x8bK'b'\x00\x05N\xb1z@\xa40\xfe\x03\xdb\x01\x01Ms\x00\x04\xa7\x88'b'\x00\x05N\xb1z@\xa4\xd0\xfe\x15\xdc\x01\x01$\xc8\xfc\x1d\x10\x1d\x06\xf9\x05\x01\x06\x1d\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xd0'b'\x00\x05N\xb1z@\xa5@\xfe\x16\xdd\x01\x01#@ \x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe0\x14'b"\x00\x05N\xb1zA\xa3'\xfe54\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01M]"b'\x00\x05N\xb1zA\xb9k\xfe!5\xff\x00L\x92\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00H\xbb'b'\x00\x05N\xb1zBF\xd0\xfe\x1a\xde\x01\x01\x1bA\xe6\x1e\x10\x00\x00\x00\x00\xde\xff\xfb\xffA\xfc\xdf\xff\t\x00\xe8\xff\x11\xff\x0c\x00\x7f\x01\x89\xa0'b'\x00\x05N\xb1zBGl\xfe\x16\xdf\x01\x01t| \x04\x00\xdf\xff\x07\x00U\xfc\xc0\xff\x0f\x00\xfb\xff\x06\xffs\xff\x18\x02\xd5('b'\x00\x05N\xb1zBG\xc8\xfe\x16\xe0\x01\x01\x81| \x04\x00\xdd\xff\x0e\x00P\xfc\xa7\xff\x1a\x00\xfd\xff\x9a\x00g\x00s\x02\x82\xbb'b'\x00\x05N\xb1zBH\x18\xfe\x0e\xe1\x01\x01\x1d| \x04\x00\xd9\x95iD\xcd\xcc6\xbeZ\x10\x8eH'b'\x00\x05N\xb1zBHh\xfe\x0e\xe2\x01\x01\x89| \x04\x00\x1b\xd8iD\xf5(\xd8=\x88\x15\x0e!'b'\x00\x05N\xb1zBH\xc0\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x001\x01\xde;\x9a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RY\xc1'b'\x00\x05N\xb1zBI\x18\xfe\x06\xe4\x01\x01}\xc5\x14\x00\x00\x03\x00L\\'b'\x00\x05N\xb1zBId\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX'b'\x00\x05N\xb1zBI\xa8\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b'b'\x00\x05N\xb1zBI\xfc\xfe\x1e\xe7\x01\x01\x18p\x9a\x1c\x10\x00\x00\x00\x00y\xa6\x02\x18\xf6\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x02\x00\xebV\x03\x0c\xee\x91'b'\x00\x05N\xb1zBJP\xfe\x1a\xe8\x01\x01>\xa2\x01`\xbd\xb4\xec#\xc0Rx\x0f\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8d\n'b'\x00\x05N\xb1zBJ\x98\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\x00\x05N\xb1zBJ\xe4\xfe\x14\xea\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\xf9?\x8f\xc2\xf5\xbc\xb4\x004\x00\xf7\xce'b'\x00\x05N\xb1zBK,\xfe\x03\xeb\x01\x01Ms\x00\x04/e'b'\x00\x05N\xb1zCo\xeb\xfe56\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc8\xbf'b'\x00\x05N\xb1zC\x98\x03\xfe!7\xff\x00L\x92\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc9\xe6'b'\x00\x05N\xb1zC\xc3d\xfe\x1c\xec\x01\x01!\xae \x04\x00s\xa6\x02\x18\xf3\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfe\xff\x00\x00\xfc\xffVF{\xf2'b'\x00\x05N\xb1zC\xc3\xe8\xfe\x1c\xed\x01\x01 \xcd \x04\x00V\xf2\x00>\xa6\xefg?sW\xd0\xbf\x84\xf3\xb1\xbc\xbe\x9a\x06\xbc\x1f\xcaC=3\xe9'b'\x00\x05N\xb1zC\xc4D\xfe\x1c\xee\x01\x01\x1e\xf5 \x04\x00\xf2_\\\xbb:\xfc;\xbd\xdd\x02I\xc0\xf9\x00\xd9\xbcf~\x08=\x15\x0c\x96;\xa75'b'\x00\x05N\xb1zC\xc4\xc0\xfe\x18\xef\x01\x01\xb2\x1c;*\xbcc)1\xbd\x87mH\xc0\xb8\x1e*Dy\xa6\x02\x18\xf7\xe7\xb8\xfdq\xde'b'\x00\x05N\xb1zC\xc50\xfe\x1c\xf0\x01\x01\xa3\x1b.\x809\x1b\xafF\xba5M\xa29\x00\x00\x00\x00\x00\x00\x00\x00\x08rE<}\x13,<{\xeb'b'\x00\x05N\xb1zC\xc5\x8c\xfe\x03\xf1\x01\x01\xa5\xc5\x14\x00\x03\xf9'b'\x00\x05N\xb1zC\xc5\xec\xfe\x0c\xf2\x01\x01\x02\xd8\xb5\x88z\xb1N\x05\x00\t!\x04\x00k\xd9'b'\x00\x05N\xb1zC\xc6\\\xfe\x16\xf3\x01\x01\x88s\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf0\x00'b'\x00\x05N\xb1zC\xc6\xc0\xfe\x12\xf4\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00"\x89'b'\x00\x05N\xb1zC\xc7,\xfe\x16\xf5\x01\x01\xc1\xed"d<\xf7\x05\xfa\x00\x00\x00\x00?\x03\xe9\xf8'b'\x00\x05N\xb1zC\xc7\xbc\xfe\x03\xf7\x01\x01Ms\x00\x045\x05'b"\x00\x05N\xb1zDv_\xfe%8\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa3\x1b"b'\x00\x05N\xb1zEM\x04\xfe\x15\xf8\x01\x01$P\xfa!\x10\x1c\x06,\x06,\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfdi'b'\x00\x05N\xb1zEM\x8c\xfe\x16\xf9\x01\x01#F!\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa3\xc9'b'\x00\x05N\xb1zEM\xe8\xfe\x03\xfa\x01\x01/\xff\x00\x00^\xa0'b'\x00\x05N\xb1zEd\xdb\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\xf7'b'\x00\x05N\xb1zE\xb7X\xfe\x1a\xfb\x01\x01\x1b\x9d\x95"\x10\x00\x00\x00\x00\xe2\xff\n\x00\x03\xfc\xdf\xff\x10\x00\x11\x00\x0b\xff\x08\x00\x80\x01$Z'b'\x00\x05N\xb1zE\xb7\xcc\xfe\x16\xfc\x01\x01tm!\x04\x00\xda\xff\x06\x00\xff\xfb\xea\xff\x0b\x00\x11\x00\x03\xffY\xff\r\x02\x87H'b'\x00\x05N\xb1zE\xb8(\xfe\x16\xfd\x01\x01\x81n!\x04\x00\xda\xff\x14\x00\t\xfc\xe4\xff\x1c\x00\x12\x00\x9b\x00V\x00\x81\x02^p'b'\x00\x05N\xb1zE\xb8|\xfe\x0e\xfe\x01\x01\x1dn!\x04\x009\x95iD\xcd\xcc@\xbe[\x10>\xeb'b'\x00\x05N\xb1zE\xb8\xcc\xfe\x0e\xff\x01\x01\x89n!\x04\x00\xc6\xd7iD\x99\x99\xcd=\x89\x15yJ'b'\x00\x05N\xb1zE\xb9(\xfe\x1f\x00\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdd;\x1f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x05\x1d'b'\x00\x05N\xb1zE\xb9|\xfe\x06\x01\x01\x01}\xc5\x14\x00\x00\x03\x00\x1c\xea'b'\x00\x05N\xb1zE\xb9\xdc\xfe\x04\x02\x01\x01\x98\x00\x00\x80\x8a\x1cd'b'\x00\x05N\xb1zE\xba\\\xfe\x02\x03\x01\x01*\x00\x00\xf2Y'b'\x00\x05N\xb1zE\xba\xf0\xfe\x1e\x04\x01\x01\x18\xc0\xbc"\x10\x00\x00\x00\x00z\xa6\x02\x18\xf8\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x06\x00\xebV\x03\x0c\x9b\xf1'b'\x00\x05N\xb1zE\xbb\x90\xfe\x1a\x05\x01\x01>\\\x8f\xc2\xbe\x99\x99)\xc0p}\x1e\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9aQ+'b'\x00\x05N\xb1zE\xbc\x14\xfe\x08\x06\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbfL'b'\x00\x05N\xb1zE\xbd\xc3\xfe!:\xff\x00L\xcd\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00OI'b'\x00\x05N\xb1zF\xdc\x98\xfe\t\xf2\n\x00m\x00\x00\x00\x00\x00\xdb\x00\x00\x00e\xbf'b'\x00\x05N\xb1zF\xdd<\xfe\x14\x07\x01\x01J\x8f\xc2u=\x8f\xc2u=G\xe1\xfa?\x00\x00\x00\x00\xb3\x002\x00\x9c\x1e'b'\x00\x05N\xb1zF\xdd\x90\xfe\x03\x08\x01\x01Ms\x00\x04\x1c\xf7'b'\x00\x05N\xb1zF\xf1\xfc\xfe\x1c\t\x01\x01!x!\x04\x00s\xa6\x02\x18\xf3\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfd\xff\xfe\xff\x01\x00\x19FHl'b'\x00\x05N\xb1zF\xf2h\xfe\x1c\n\x01\x01 \xd2!\x04\x00\r*\x02>\x0c\xb7f?\x11d\xd1\xbf{$\x10\xbd\n=\xd4\xbc\xf2\x8ak\xbc\x84I'b'\x00\x05N\xb1zGxW\xfe5;\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbe\x15'b'\x00\x05N\xb1zG\xa2\x97\xfe!<\xff\x00L\xcd\xf33\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcc\xaf'b'\x00\x05N\xb1zHdd\xfe\x12\x0b\x01\x01\xfc\xf8!\x04\x004\x00\x01\x00ARMMASK\x00Wr;\xd0'b'\x00\x05N\xb1zHd\xe4\xfe\t\x0c\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x8d\xb9'b'\x00\x05N\xb1zHeL\xfe\x1c\r\x01\x01\x1e\xfb!\x04\x00\xeb\xdb\x18\xbc\x02\x1e@\xbd\x17\x9bG@\x15\x82|\x00\x00\x00\x00?\x03\xb5\xf3'b'\x00\x05N\xb1zHg\x84\xfe\x03\x14\x01\x01Ms\x00\x04\x06\x97'b'\x00\x05N\xb1zH{\xdc\xfe\x15\x15\x01\x01$i\xf6%\x10\x18\x06"\x06F\x06N\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9{'b'\x00\x05N\xb1zH|4\xfe\x16\x16\x01\x01#K"\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\x93'b'\x00\x05N\xb1zI\x83?\xfe5=\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01 :'b'\x00\x05N\xb1zI\x99_\xfe!>\xff\x00L\xca\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xed\xe7'b'\x00\x05N\xb1zI\xe9t\xfe\x1a\x17\x01\x01\x1b\xafD&\x10\x00\x00\x00\x00\xdf\xff\x03\x00+\xfc\xe8\xff\x0b\x00x\xff\t\xff\xfc\xff\x84\x01\xf1\xa1'b'\x00\x05N\xb1zI\xe9\xec\xfe\x16\x18\x01\x01t_"\x04\x00\xd9\xff\x07\x00;\xfc\xf8\xff\x13\x00\x8a\xff\x08\xff\\\xff\x17\x02k\xca'b'\x00\x05N\xb1zI\xeah\xfe\x16\x19\x01\x01\x81_"\x04\x00\xdf\xff\r\x00\x1e\xfc\xd1\xff0\x00\x81\xff\xa3\x00S\x00\x83\x02\xfe\x17'b'\x00\x05N\xb1zI\xea\xbc\xfe\x0e\x1a\x01\x01\x1d_"\x04\x00N\x95iD\x1e\x85?\xbe[\x10p\x90'b'\x00\x05N\xb1zI\xeb\x08\xfe\x0e\x1b\x01\x01\x89_"\x04\x00\xf9\xdaiD\x00\x00\x1a>\x8b\x15\t\xfe'b'\x00\x05N\xb1zI\xebd\xfe\x1f\x1c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00;\x01\xdd;O\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x80\xc8'b'\x00\x05N\xb1zI\xeb\xb4\xfe\x06\x1d\x01\x01}\xc5\x14\x00\x00\x03\x00\xa6y'b'\x00\x05N\xb1zI\xec\x00\xfe\x04\x1e\x01\x01\x98\x00\x00\x80\x8a\xa7\xdb'b'\x00\x05N\xb1zI\xecD\xfe\x02\x1f\x01\x01*\x00\x00\xa1]'b'\x00\x05N\xb1zI\xec\x9c\xfe\x1e \x01\x01\x18\xe8\xcd%\x10\x00\x00\x00\x00y\xa6\x02\x18\xf8\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x08\x00\xebV\x03\x0c\xc3\x82'b'\x00\x05N\xb1zI\xec\xec\xfe\x1a!\x01\x01>\xe9\xa8/\xbf\xfb\xb5\x16\xc0)\xbc\x01\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xacF'b'\x00\x05N\xb1zI\xed4\xfe\x08"\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xab\xef'b'\x00\x05N\xb1zI\xed\x84\xfe\x14#\x01\x01J\n\xd7\xa3=\n\xd7\xa3=G\xe1\xfa?\n\xd7#\xbc\xb1\x004\x00E\xf6'b'\x00\x05N\xb1zI\xed\xc8\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b'\x00\x05N\xb1zKY\x13\xfe5?\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa5\xd8'b'\x00\x05N\xb1zK\x83\xdf\xfe!@\xff\x00L\xca\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8f\x9b'b'\x00\x05N\xb1zK\x84\x9c\xfe\x1c%\x01\x01!A"\x04\x00r\xa6\x02\x18\xf2\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfa\xff\xfc\xff\x00\x00\x12E\x1e\xb9'b'\x00\x05N\xb1zK\x850\xfe\x1c&\x01\x01 \xd8"\x04\x00\xcaG\xf9=\xe6\x08e?\xa6\x1d\xd1\xbf\xd2M\x84\xbd\x88\xb9E\xbdC[\xd6;\xf2e'b'\x00\x05N\xb1zK\x85\xa4\xfe\x1c\'\x01\x01\x1e\xff"\x04\x00 \xe4\x0b:EO>\xbd\xa2\xadE@\xdd\xf3\xc5=.Ni=\xcd\x12\xed=\x8e\x08'b'\x00\x05N\xb1zK\x86 \xfe\x18(\x01\x01\xb2\r\x06\xf1\xbb,\xb06\xbd\xae\x1dF@R\x18*Dy\xa6\x02\x18\xf8\xe7\xb8\xfd7\xdc'b'\x00\x05N\xb1zK\x86\x98\xfe\x1c)\x01\x01\xa3"\x06\x8b9A\xdaN\xbak\\\xa49\x00\x00\x00\x00\x00\x00\x00\x00[\x0c\x18\x00\x00\x00\x00?\x03\x95\x9e'b'\x00\x05N\xb1zK\xcc\xc3\xfe\tA\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03$\xe2'b'\x00\x05N\xb1zL\xefT\xfe\x03.\x01\x01Ms\x00\x00=;'b'\x00\x05N\xb1zM\x04\x08\xfe\x1a/\x01\x01\x1b=\xf2)\x10\x00\x00\x00\x00\xde\xff\xf4\xff\x06\xfcK\x00L\x00]\x01\t\xff\xfb\xff\x85\x01\xb2h'b'\x00\x05N\xb1zM\x04l\xfe\x160\x01\x01tP#\x04\x00\xde\xff\xff\xff\x14\xfcI\x00^\x00G\x01\t\xffT\xff\x14\x02\x19\x17'b'\x00\x05N\xb1zM\x04\xc8\xfe\x161\x01\x01\x81P#\x04\x00\xdd\xff\n\x00\x10\xfc6\x00a\x00M\x01\xad\x00>\x00\x82\x02P\xe7'b'\x00\x05N\xb1zM\x05\x18\xfe\x0e2\x01\x01\x1dP#\x04\x00\x1e\x95iD\xe1zB\xbe[\x10y\xab'b'\x00\x05N\xb1zM\x05|\xfe\x0e3\x01\x01\x89P#\x04\x00\xf5\xd8iD\x1e\x85\xf3=\x8b\x15{\xa4'b'\x00\x05N\xb1zM\x05\xd4\xfe\x1f4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa9\x00\xdd;\x13\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xc1\x98'b"\x00\x05N\xb1zM\x06<\xfe\x065\x01\x01}\xc5\x14\x00\x00\x03\x00\x86'"b'\x00\x05N\xb1zM\x06\x88\xfe\x046\x01\x01\x98\x00\x00\x80\x8aTS'b'\x00\x05N\xb1zM\x06\xcc\xfe\x027\x01\x01*\x00\x00\xce\xe0'b'\x00\x05N\xb1zM\x07D\xfe\x1e8\x01\x01\x18\x10\xdf(\x10\x00\x00\x00\x00w\xa6\x02\x18\xf9\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\xcf"'b'\x00\x05N\xb1zM\x07\x98\xfe\x1a9\x01\x01>\xa8G\x8e\xbf t\xdc\xbf=z(\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x12a'b'\x00\x05N\xb1zM\x07\xe4\xfe\x08:\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x13\x98'b'\x00\x05N\xb1zM\x080\xfe\x15;\x01\x01$\xba?*\x10\x1d\x06\xbc\x05*\x06I\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\t'b'\x00\x05N\xb1zM\x08\x84\xfe\x16<\x01\x01#d#\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00/~'b'\x00\x05N\xb1zMD\xa3\xfe5B\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01N\xb7'b'\x00\x05N\xb1zM\xaa\x0f\xfe!C\xff\x00Lz\xe33C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd7\x8c'b'\x00\x05N\xb1zNi\xb4\xfe\x14=\x01\x01J\xebQ\xb8=\xebQ\xb8=\xf5(\xfc?\x00\x00\x00\x00\xb3\x00/\x00\xf2 'b'\x00\x05N\xb1zNj\x1c\xfe\x03>\x01\x01Ms\x00\x00E`'b'\x00\x05N\xb1zNj\xb0\xfe\x1c?\x01\x01!\xd2#\x04\x00q\xa6\x02\x18\xf0\xe7\xb8\xfdBc\n\x00\xb2\x07\x00\x00\xf9\xff\xf5\xff\xfe\xff\x1cF\xdd_'b'\x00\x05N\xb1zNk \xfe\x1c@\x01\x01 \xdc#\x04\x00\x0bM\xd9=\x10\x00a?\xb4\xc2\xd2\xbf+\n\x9d\xbd\x12M\xef\xbd\x99\xbe\xb9\x00\x00\x00\x00?\x03Bs'b'\x00\x05N\xb1zP\x07d\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5'b'\x00\x05N\xb1zP\x1b\xc8\xfe\x1aI\x01\x01\x1b\xf4\x9e-\x10\x00\x00\x00\x00\xe2\xff\x01\x00+\xfc\x8d\xff*\x00%\x00\x07\xff\t\x00}\x01Q='b'\x00\x05N\xb1zP\x1c \xfe\x16J\x01\x01tA$\x04\x00\xeb\xff\x02\x00,\xfc~\xff#\x00*\x00\x02\xfft\xff\x17\x02<\xd2'b'\x00\x05N\xb1zP\x1cx\xfe\x16K\x01\x01\x81A$\x04\x00\xe0\xff\x14\x00:\xfc\x87\xff%\x000\x00\x85\x00e\x00i\x022]'b'\x00\x05N\xb1zP\x1c\xc4\xfe\x0eL\x01\x01\x1dA$\x04\x00\x1e\x95iD\xe1zB\xbe[\x10\x97\x84'b'\x00\x05N\xb1zP\x1d\x10\xfe\x0eM\x01\x01\x89A$\x04\x00\xbe\xd8iD\xd7\xa3\xec=\x8b\x15\x8dG'b'\x00\x05N\xb1zP\x1dx\xfe*N\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00[\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd7\xee'b'\x00\x05N\xb1zP\x1d\xd8\xfe\x1fO\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x01\xdd;\x83\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x8a*'b'\x00\x05N\xb1zP\x1e(\xfe\x06P\x01\x01}\xc2\x14\x00\x00\x03\x00\xd5\xc4'b'\x00\x05N\xb1zP\x1et\xfe\x04Q\x01\x01\x98\x00\x00\x80\x8a\xec\xab'b'\x00\x05N\xb1zP\x1e\xb4\xfe\x02R\x01\x01*\x00\x00\xe8\xb4'b'\x00\x05N\xb1zQ/\x13\xfe5F\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Uz'b'\x00\x05N\xb1zQE3\xfe!G\xff\x00L\xc3\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9d-'b'\x00\x05N\xb1zQq\xf0\xfe\x1eS\x01\x01\x18P\xec+\x10\x00\x00\x00\x00v\xa6\x02\x18\xf7\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x10\x00\xebV\x03\x0c\xef\x9c'b'\x00\x05N\xb1zQrt\xfe\x1aT\x01\x01>\x8e\xe9\t\xc0\x1e\xda\xa9\xbf\x99\xc1\x8b\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x17\xd0'b'\x00\x05N\xb1zQr\xc4\xfe\x08U\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc9{'b'\x00\x05N\xb1zQs\x18\xfe\x15V\x01\x01$\xf9<.\x10D\x06\t\x06\x1d\x06V\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xc8'b'\x00\x05N\xb1zQsp\xfe\x16W\x01\x01#i$\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08\xb6'b'\x00\x05N\xb1zQs\xc0\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae'b'\x00\x05N\xb1zR\xee(\xfe\x14Y\x01\x01J\\\x8fB>\\\x8fB>\xf5(\xfc?\n\xd7#\xbd\xb3\x002\x00#]'b'\x00\x05N\xb1zR\xee\xa8\xfe\x1cZ\x01\x01!\x9b$\x04\x00o\xa6\x02\x18\xec\xe7\xb8\xfdBc\n\x00\xb2\x07\x00\x00\xf8\xff\xf2\xff\xfd\xffHF\xc9\x0c'b'\x00\x05N\xb1zR\xef<\xfe\x1c[\x01\x01 \xe2$\x04\x00\xec\xa6\xaa=SfW?\x99D\xd2\xbf\xe8\xa4\xaf\xbdW\x9d\x15\xbe\xde:\x18=\xbc\x1c'b'\x00\x05N\xb1zR\xef\x9c\xfe\x1c\\\x01\x01\x1e\n%\x04\x00H\xbf\xcd\xbc\xf7\xca\xbd\xbc\xa3\x01I@p\x9c\x92\xbd\xd9\\\x85=\x98>\xaa\xbc4\xe7'b'\x00\x05N\xb1zR\xef\xf4\xfe\x18]\x01\x01\xb2v\xb3\x01\xbd=Z\x9f\xbcS\x96H\xc0\x85\x1b*Dt\xa6\x02\x18\xf5\xe7\xb8\xfd\xef\x93'b'\x00\x05N\xb1zS\x15c\xfe5H\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xec\xc7'b"\x00\x05N\xb1zS@'\xfe!I\xff\x00L\xc3\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0b\xb5"b'\x00\x05N\xb1zT\x9e`\xfe\x1c^\x01\x01\xa3\xa3&\x959Y\xf6V\xba\x130\xa69\x00\x00\x00\x00\x00\x00\x00\x00\xe25]<%\x9a)\x00\x00\x00\x00?\x03\xc8\x8f'b'\x00\x05N\xb1zT\xa0L\xfe\x03d\x01\x01Ms\x00\x00\x1fx'b'\x00\x05N\xb1zT\xa1\x0c\xfe\x1ae\x01\x01\x1bfO1\x10\x00\x00\x00\x00\xe7\xff\xfe\xff\x0f\xfc\x92\xff1\x00\x15\x00\xfc\xfe\x00\x00~\x01\x80^'b'\x00\x05N\xb1zT\xa1l\xfe\x16f\x01\x01t3%\x04\x00\xeb\xff\xf8\xff(\xfc\x92\xff:\x00\t\x00\xfc\xfe\\\xff\x0b\x02\x0bl'b'\x00\x05N\xb1zT\xa1\xfc\xfe\x16g\x01\x01\x813%\x04\x00\xe2\xff\x0f\x00\x16\xfc\x89\xff2\x00\x14\x00\x80\x00Q\x00\x80\x02B&'b'\x00\x05N\xb1zT\xa2T\xfe\x0eh\x01\x01\x1d3%\x04\x00\x9d\x96iD\\\x8f*\xbe[\x10\xdc\xf2'b'\x00\x05N\xb1zT\xa2\xa8\xfe\x0ei\x01\x01\x893%\x04\x00\x8f\xdaiD)\\\x13>\x8c\x15pV'b'\x00\x05N\xb1zT\xa3\x04\xfe\x1fj\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9b;z\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x16"'b'\x00\x05N\xb1zT\xa3\\\xfe\x06k\x01\x01}\xc5\x14\x00\x00\x03\x00\x1b\xd2'b'\x00\x05N\xb1zT\xa3\xb0\xfe\x04l\x01\x01\x98\x00\x00\x80\x8a\x93\xae'b'\x00\x05N\xb1zT\xa3\xf8\xfe\x02m\x01\x01*\x00\x00V{'b'\x00\x05N\xb1zT\xa4T\xfe\x1en\x01\x01\x18x\xfd.\x10\x00\x00\x00\x00t\xa6\x02\x18\xf5\xe7\xb8\xfd\x90j\n\x00F\x00\xff\xff\x13\x00\xebV\x03\x0c\x19\xf9'b'\x00\x05N\xb1zT\xa4\xac\xfe\x1ao\x01\x01>p\xf50\xc0\x85\x18\x86\xbf\x99Y\x15\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb3\xac'b'\x00\x05N\xb1zT\xa5\x10\xfe\x08p\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00p\xdd'b'\x00\x05N\xb1zT\xa5`\xfe\x15q\x01\x01$\xcb82\x105\x062\x06A\x065\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96P'b'\x00\x05N\xb1zT\xa5\xb0\xfe\x16r\x01\x01#n%\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xca\xb0'b"\x00\x05N\xb1zT\xf2W\xfe%J\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xed9"b'\x00\x05N\xb1zU\to\xfe5J\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01i%'b'\x00\x05N\xb1zUF\x7f\xfe!L\xff\x00LE\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Fv'b'\x00\x05N\xb1zVK\xfc\xfe\t\xf3\n\x00m\x01\x00\x00\x00\x00\xda\x00\x00\x00\xec\xe6'b'\x00\x05N\xb1zVL\xa4\xfe\x03s\x01\x01/\xff\x00\x00\xbf\xc7'b'\x00\x05N\xb1zVcD\xfe\x03t\x01\x01Ms\x00\x00g#'b'\x00\x05N\xb1zVd4\xfe\x14u\x01\x01J\x1e\x85k>\x1e\x85k>G\xe1\xfa?\n\xd7#<\xb3\x005\x00\xca\xaf'b'\x00\x05N\xb1zVd\xa0\xfe\x12v\x01\x01\xfc\xe5%\x04\x004\x00\x01\x00ARMMASK\x00Wrw\xf7'b'\x00\x05N\xb1zVe\x0c\xfe\tw\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xd7\xe5'b'\x00\x05N\xb1zW\t\x7f\xfe5M\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbd\xff'b'\x00\x05N\xb1zW\x1f\xcb\xfe!N\xff\x00LE\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc7+'b'\x00\x05N\xb1zW\x99<\xfe\x1cx\x01\x01!d%\x04\x00m\xa6\x02\x18\xe8\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfa\xff\xf6\xff\x01\x00:F\xde;'b'\x00\x05N\xb1zW\x99\xf0\xfe\x1cy\x01\x01 \xe7%\x04\x00E\xfe\x80=0\xe3N?\xa1\xbc\xd0\xbf\x94\xaew\xbd`m\xd7\xbd\xba\xd8e\xbc]g'b'\x00\x05N\xb1zW\x9a|\xfe\x1cz\x01\x01\x1e\x0f&\x04\x004\x8a \xbd\xe0\x83\x83\xbc\xc9\xadH@\xe5\xf2\x8c\xbc\xb9\xe06=\xbbi\xdc\xbc\xc8\xdc'b'\x00\x05N\xb1zW\x9a\xfc\xfe\x18{\x01\x01\xb2\xb5\xbc@\xbd3\xc6@\xbc\xac\xe1H\xc03\x13*Ds\xa6\x02\x18\xf2\xe7\xb8\xfd\xe1\xa3'b'\x00\x05N\xb1zW\x9bt\xfe\x1a|\x01\x01\x1b\x05\xfc4\x10\x00\x00\x00\x00\xf6\xff\xf6\xff\x0c\xfc\xe9\xffP\x00\xea\xff\xfd\xfe\xfa\xffx\x01\xf0\x04'b'\x00\x05N\xb1zW\x9b\xec\xfe\x16}\x01\x01t#&\x04\x00\xf8\xff\xfb\xff\x1e\xfc\xe3\xffG\x00\xf2\xff\xf8\xfeX\xff\n\x02\xe7\x94'b'\x00\x05N\xb1zW\x9c`\xfe\x16~\x01\x01\x81#&\x04\x00\xeb\xff\x0b\x00\x01\xfc\xe8\xffb\x00\xe0\xff\x97\x00D\x00|\x02\x92\xaf'b'\x00\x05N\xb1zW\x9c\xcc\xfe\x0e\x7f\x01\x01\x1d#&\x04\x00\xf3\x96iD33%\xbe\\\x10\x9f\x81'b'\x00\x05N\xb1zW\x9d8\xfe\x0e\x80\x01\x01\x89#&\x04\x00\x0c\xdciD33+>\x8d\x15B\x10'b'\x00\x05N\xb1zW\x9d\xac\xfe\x1f\x81\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x01\x01\x9b;i\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xa2\xfc'b'\x00\x05N\xb1zW\x9e\x04\xfe\x06\x82\x01\x01}\xc5\x14\x00\x00\x03\x00\xb4\x86'b'\x00\x05N\xb1zW\x9eT\xfe\x04\x83\x01\x01\x98\x00\x00\x80\x8a6\xed'b'\x00\x05N\xb1zW\x9e\xa8\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`'b'\x00\x05N\xb1zW\xb3\x98\xfe\x02\x85\x01\x01*\x00\x00"\x87'b'\x00\x05N\xb1zW\xb3\xfc\xfe\x1e\x86\x01\x01\x18\xc8\x1f5\x10\x00\x00\x00\x00p\xa6\x02\x18\xee\xe7\xb8\xfd\x90j\n\x00F\x00\xff\xff\x18\x00o]\x03\x0c\xc3\xba'b'\x00\x05N\xb1zW\xb4X\xfe\x1a\x87\x01\x01>\xdeve\xc0Xz-\xbe\xcd\x18\x0e=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf5\x1a'b'\x00\x05N\xb1zW\xb4\xa4\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba'b"\x00\x05N\xb1zW\xb4\xfc\xfe\x1c\x89\x01\x01\xa3\x18a\x9a96[[\xba\xbc*\xa79\x00\x00\x00\x00\x00\x00\x00\x00d;]<\x87L+<\xb4'"b'\x00\x05N\xb1zW\xb5D\xfe\x03\x8a\x01\x01\xa5\xc5\x14\x00\x16\xd6'b'\x00\x05N\xb1zW\xb5\xc4\xfe\x0c\x8b\x01\x01\x02P$\x9dz\xb1N\x05\x007&\x04\x00\xf5>'b'\x00\x05N\xb1zW\xb64\xfe\x16\x8c\x01\x01\x88m\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xce\xac'b'\x00\x05N\xb1zW\xb6\xa4\xfe\x16\x8d\x01\x01\xc1\xa8\xf2\xc2\x00\x00\x00\x00?\x03\xc1\x0c'b'\x00\x05N\xb1zX\xe9\xd7\xfe5O\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x018\x1d'b'\x00\x05N\xb1zX\xff\xe3\xfe!P\xff\x00Lq\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x006D'b'\x00\x05N\xb1zYC8\xfe\x15\x8e\x01\x01$\x8c46\x10V\x06\n\x06\xfd\x058\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00p^'b'\x00\x05N\xb1zYC\xb4\xfe\x16\x8f\x01\x01#s&\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x7f\x9e'b'\x00\x05N\xb1zYD\x08\xfe\x03\x90\x01\x01Ms\x00\x00Z-'b'\x00\x05N\xb1zZ\xcb\xa7\xfe5Q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xde\x8c'b'\x00\x05N\xb1zZ\xcc\xac\xfe\x14\x91\x01\x01J\x8f\xc2u>\x8f\xc2u>\x99\x99\xf9?)\\\x8f=\xb3\x005\x00f\x9c'b'\x00\x05N\xb1zZ\xcd@\xfe\x1c\x92\x01\x01!-&\x04\x00l\xa6\x02\x18\xe5\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfd\xff\xfd\xff\x08\x00 F\xb9\\'b'\x00\x05N\xb1zZ\xcd\xd4\xfe\x1c\x93\x01\x01 \xeb&\x04\x00\xc5\x7fC=\xfc)I?F\x13\xd0\xbfv\xa9\r\xbds\x83\x1f\xbd\x18\x12\xb3\xbdP\xc9'b'\x00\x05N\xb1z[\n\xef\xfe!R\xff\x00Lq\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb7\x19'b'\x00\x05N\xb1z[4\x07\xfe\tR\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xcd\xb7'b'\x00\x05N\xb1z\\=L\xfe\x1a\x94\x01\x01\x1b\xcc\xa88\x10\x00\x00\x00\x00\xf1\xff\x10\x00\x06\xfc\xc4\xff\xe2\xff\xf3\xff\xf6\xfe\xf3\xffv\x01p\xbd'b"\x00\x05N\xb1z\\=\xcc\xfe\x16\x95\x01\x01t\x14'\x04\x00\xf1\xff\x13\x00\t\xfc\xbb\xff\xe2\xff\xee\xff\xf6\xfeJ\xff\x07\x02\x95%"b"\x00\x05N\xb1z\\>,\xfe\x16\x96\x01\x01\x81\x14'\x04\x00\xe8\xff\x15\x00\xfd\xfb\xa8\xff\xdd\xff\xf1\xffz\x00N\x00f\x02\xcfL"b"\x00\x05N\xb1z\\>|\xfe\x0e\x97\x01\x01\x1d\x14'\x04\x00/\x96iD\xa4p1\xbe\\\x10K\r"b"\x00\x05N\xb1z\\>\xcc\xfe\x0e\x98\x01\x01\x89\x14'\x04\x00\xe1\xdaiD\xe1z\x18>\x8d\x15\xa9x"b'\x00\x05N\xb1z\\?0\xfe\x1f\x99\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9b;`\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R?\xed'b'\x00\x05N\xb1z\\?\xa0\xfe\x06\x9a\x01\x01}\xc5\x14\x00\x00\x03\x00[K'b'\x00\x05N\xb1z\\@\x00\xfe\x04\x9b\x01\x01\x98\x00\x00\x80\x8ahm'b'\x00\x05N\xb1z\\@X\xfe\x02\x9c\x01\x01*\x00\x00\xd2s'b'\x00\x05N\xb1z\\@\xc4\xfe\x1e\x9d\x01\x01\x18\x08-8\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfd\x9aj\n\x00F\x00\xff\xff\x15\x00o]\x03\x0c\xca\x0f'b'\x00\x05N\xb1z\\AT\xfe\x1a\x9e\x01\x01>\x04\xe4E\xc0O\xe6\xb8\xbe\xc2%\x0b=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfb\xda'b'\x00\x05N\xb1z\\A\xb8\xfe\x08\x9f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8'b"\x00\x05N\xb1z\\B$\xfe\x1c\xa0\x01\x01\x1e('\x04\x00\xaa9y\xbd\xf6y3\xbc\xc3tH@<)\xff\xbd\xe7\xa8?\xbc\x86\xce\x9e\xbcn\x0c"b'\x00\x05N\xb1z\\B\x8c\xfe\x18\xa1\x01\x01\xb2\x8e"\x8c\xbdN\xc9\xc1\xbb\xf8\x0bI@=\x1a*Do\xa6\x02\x18\xec\xe7\xb8\xfd\xae\x13'b'\x00\x05N\xb1z\\B\xe4\xfe\x03\xa2\x01\x01Ms\x00\x00\xbd\xcb'b'\x00\x05N\xb1z\\C\xa4\xfe\x1c\xa3\x01\x01\xa3z0\x9f9\x7fp_\xba\x19\x05\xa89\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x8bI<\xc7\xdb9<\xc1*'b'\x00\x05N\xb1z\\C\xf8\xfe\x03\xa4\x01\x01\xa5\xc5\x14\x00\xebP'b"\x00\x05N\xb1z\\DL\xfe\x0c\xa5\x01\x01\x02\xb8\xd1\xa0z\xb1N\x05\x00<'\x04\x00K\xca"b'\x00\x05N\xb1z\\D\x9c\xfe\x16\xa6\x01\x01\x88l\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdc4'b'\x00\x05N\xb1z\\D\xec\xfe\x16\xa7\x01\x01\xc1\xa8V\xe1\x00\x00\x00\x00?\x03\xb8\xc6'b'\x00\x05N\xb1z\\\xfc\x8f\xfe5T\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8f\xb4'b'\x00\x05N\xb1z]&\xf7\xfe!U\xff\x00Lo\xe93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbf.'b'\x00\x05N\xb1z]\xbe0\xfe\x15\xa8\x01\x01$\xba1:\x10>\x06\x07\x06\x02\x06\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9W'b"\x00\x05N\xb1z]\xbe\xb4\xfe\x16\xa9\x01\x01#y'\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa6\xbe"b'\x00\x05N\xb1z]\xbf\x1c\xfe\x03\xaa\x01\x01Ms\x00\x00\x01\xe6'b'\x00\x05N\xb1z]\xbf\xcc\xfe\x14\xab\x01\x01J\x99\x99\x19>\x99\x99\x19>G\xe1\xfa?\n\xd7#=\xb3\x004\x00\xee6'b'\x00\x05N\xb1z^\xe5\xf7\xfe5V\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\nV'b'\x00\x05N\xb1z_\x0f\xcf\xfe!W\xff\x00Lo\xe93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00>s'b"\x00\x05N\xb1z_^P\xfe\x1c\xac\x01\x01!\xbf'\x04\x00k\xa6\x02\x18\xe5\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xff\xff\x07\x00\x04\x00&F\xca*"b"\x00\x05N\xb1z__8\xfe\x1c\xad\x01\x01 \xf2'\x04\x00G^#=\x9b'I?`h\xd1\xbf8\x16C\xbc\x14\x9c\x9d=\xab\xbc+\xbd^\xbb"b'\x00\x05N\xb1z__\xc0\xfe\x1a\xae\x01\x01\x1b/X<\x10\x00\x00\x00\x00\xf2\xff\xff\xff!\xfc*\x00\xe8\xff\x15\x00\xf7\xfe\xf0\xffy\x01\tB'b'\x00\x05N\xb1z_`D\xfe\x16\xaf\x01\x01t\x06(\x04\x00\xfc\xff\xfc\xff#\xfc#\x00\xf5\xff\x18\x00\xf7\xfeP\xff\x08\x02\xf0L'b'\x00\x05N\xb1z_`\xc0\xfe\x16\xb0\x01\x01\x81\x06(\x04\x00\xed\xff\x0f\x00\x0f\xfcC\x00\xcd\xff\x0c\x00\x88\x00I\x00n\x02\x80\x10'b'\x00\x05N\xb1z_a4\xfe\x0e\xb1\x01\x01\x1d\x06(\x04\x00\x07\x96iD\x85\xeb3\xbe\\\x10A\xf5'b'\x00\x05N\xb1z_a\x9c\xfe\x0e\xb2\x01\x01\x89\x06(\x04\x00\xb0\xdaiD\xa4p\x15>\x8e\x15\n\xdd'b'\x00\x05N\xb1z_b\x18\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01_;\xf7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x94\x11'b'\x00\x05N\xb1z_b\x94\xfe\x06\xb4\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xe0'b'\x00\x05N\xb1z_c\x08\xfe\x04\xb5\x01\x01\x98\x00\x00\x80\x8a\x84A'b'\x00\x05N\xb1z_ch\xfe\x02\xb6\x01\x01*\x00\x00\x06\xf9'b'\x00\x05N\xb1z_c\xe4\xfe\x1e\xb7\x01\x01\x18\x18B;\x10\x00\x00\x00\x00n\xa6\x02\x18\xeb\xe7\xb8\xfd\xb8j\n\x00F\x00\xff\xff\x0e\x00o]\x03\x0cp;'b'\x00\x05N\xb1z_dH\xfe\x1a\xb8\x01\x01>\xcf\xbe\xfc\xbf\xb5\xa7\x11\xbf\x14\xd6\xd7<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00py'b'\x00\x05N\xb1z_d\x98\xfe\x08\xb9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00FP'b'\x00\x05N\xb1z_d\xfc\xfe\x1c\xba\x01\x01\x1e.(\x04\x00\xdcSr\xbd\x1e\xd7n\xbc\x18\xabH@\x9e\xbc\x00=\xf4\x81\xbf\xbc\xda\xfe\xd8<\xe5\x8c'b'\x00\x05N\xb1z_eT\xfe\x18\xbb\x01\x01\xb22\x04\x8d\xbdt-\x14\xbc4\xe3H\xc0)\x1c*Dn\xa6\x02\x18\xeb\xe7\xb8\xfd\xcf`'b'\x00\x05N\xb1z_e\xa4\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0'b'\x00\x05N\xb1z`\xe9\xf7\xfe5X\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x18\xb5'b'\x00\x05N\xb1za\x13\xeb\xfe!Y\xff\x00L\x08|0\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00X\xb2'b'\x00\x05N\xb1za_\xa8\xfe\x1c\xbd\x01\x01\xa3\xec\xff\xa39\xb3\x84c\xba\x12\xde\xa89\x00\x00\x00\x00\x00\x00\x00\x00p\x1dK\x00\x00\x00\x00?\x03\x87\\'b'\x00\x05N\xb1zab\xa4\xfe\x15\xc2\x01\x01$\xf9->\x10\x11\x06\x1d\x06*\x06\n\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xe2'b'\x00\x05N\xb1zac\x00\xfe\x16\xc3\x01\x01#~(\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfb3'b'\x00\x05N\xb1zbI\xc4\xfe\x03\xc4\x01\x01Ms\x00\x04mb'b'\x00\x05N\xb1zbJ\x98\xfe\x14\xc5\x01\x01J\x8f\xc2u=\x8f\xc2u=G\xe1\xfa?\x8f\xc2\xf5<\xb3\x003\x00\x90\x11'b'\x00\x05N\xb1zbK\x14\xfe\x1a\xc6\x01\x01\x1b,\x06@\x10\x00\x00\x00\x00\xfc\xff\x00\x00-\xfc\xaf\x00\x1a\x00\x03\x00\xfb\xfe\xf4\xffx\x01r\xf7'b'\x00\x05N\xb1zbK\x90\xfe\x16\xc7\x01\x01t\xf7(\x04\x00\xf8\xff\x00\x001\xfc\xaa\x00\x19\x00\x10\x00\xfa\xfeQ\xff\r\x02\xeb#'b'\x00\x05N\xb1zbK\xf0\xfe\x16\xc8\x01\x01\x81\xf7(\x04\x00\xf4\xff\x13\x00)\xfc\xd6\x00\xf4\xff\n\x00\x80\x00D\x00r\x02?R'b'\x00\x05N\xb1zbL@\xfe\x0e\xc9\x01\x01\x1d\xf7(\x04\x00\x9d\x96iD\\\x8f*\xbe\\\x10\xb7\x03'b'\x00\x05N\xb1zbL\x90\xfe\x0e\xca\x01\x01\x89\xf7(\x04\x00l\xdbiD33!>\x8e\x15\xda\xfb'b'\x00\x05N\xb1zbL\xf4\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x00_;\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xc7\xff'b'\x00\x05N\xb1zbML\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02'b'\x00\x05N\xb1zb\xfa\xe7\xfe5Z\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9dW'b'\x00\x05N\xb1zc7\x13\xfe![\xff\x00L\x08|0\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd9\xef'b'\x00\x05N\xb1zc\xde$\xfe\x04\xcd\x01\x01\x98\x00\x00\x80\x8a\x80\xd0'b'\x00\x05N\xb1zc\xde\xac\xfe\x02\xce\x01\x01*\x00\x00\xa66'b'\x00\x05N\xb1zc\xdf \xfe\x1e\xcf\x01\x01\x18@S>\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfd\xccj\n\x00F\x00\xff\xff\x06\x00o]\x03\x0c\xe8M'b'\x00\x05N\xb1zc\xdf\x88\xfe\x1a\xd0\x01\x01>\x04\xf0&\xbf\xf5 D\xbf\\\x0f\xb0<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc1 'b'\x00\x05N\xb1zc\xdf\xd4\xfe\x08\xd1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xab'b'\x00\x05N\xb1zc\xe0,\xfe\x1c\xd2\x01\x01!\x88(\x04\x00k\xa6\x02\x18\xe9\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\x00\x00\x10\x00\x02\x00;F\xe6\xa1'b'\x00\x05N\xb1zc\xe0\xbc\xfe\x1c\xd3\x01\x01 \x0b)\x04\x00w\xcc"=\xcf\xafQ?=\xc9\xd1\xbf\\3\xb69\xfan$>TG\xe1\xbc#Q'b'\x00\x05N\xb1zc\xe1$\xfe\x1c\xd4\x01\x01\x1e3)\x04\x00\xf2\x8d\xfa\xbc\x80\xc9\x88\xbc\x11\xdbH@\x10>\n>e[\xdd\xbc\x11\\\xf2<\xeb\x9f'b"\x00\x05N\xb1zc\xe1\x80\xfe\x18\xd5\x01\x01\xb2\x10\xda'\xbdO\n<\xbc>\xb1H\xc0p\r*Do\xa6\x02\x18\xec\xe7\xb8\xfd~\x13"b'\x00\x05N\xb1zc\xe1\xcc\xfe\x03\xd6\x01\x01Ms\x00\x04z2'b'\x00\x05N\xb1zc\xe2x\xfe\x1c\xd7\x01\x01\xa3b\xc6\xa89h\x8eg\xba\xa1\xac\xa99\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xf7><\xab\xbb\x01<\xc13'b'\x00\x05N\xb1zc\xe2\xc8\xfe\x03\xd8\x01\x01\xa5\xc8\x14\x00\x7fh'b'\x00\x05N\xb1zc\xe3\x1c\xfe\x0c\xd9\x01\x01\x02\x18\x0f\xa9z\xb1N\x05\x00H)\x04\x00i\xdd'b'\x00\x05N\xb1zc\xe3t\xfe\x16\xda\x01\x01\x88k\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00(.'b'\x00\x05N\xb1zc\xe3\xc8\xfe\x12\xdb\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00C\xf2'b'\x00\x05N\xb1zc\xe4 \xfe\x16\xdc\x01\x01\xc1\x89\xfb\xd9\x8e\x15 \xbe"b'\x00\x05N\xb1zg\x02L\xfe\x1f\xea\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00<\x01_;\xe9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x92\xc5'b'\x00\x05N\xb1zg\x02\x9c\xfe\x06\xeb\x01\x01}\xb0\x14\x00\x00\x03\x00\xef\xa1'b'\x00\x05N\xb1zg\x02\xec\xfe\x04\xec\x01\x01\x98\x00\x00\x80\x8aDj'b'\x00\x05N\xb1zg\x030\xfe\x02\xed\x01\x01*\x00\x00K\xfd'b'\x00\x05N\xb1zg\x03\x84\xfe\x1e\xee\x01\x01\x18hdA\x10\x00\x00\x00\x00o\xa6\x02\x18\xee\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\x02\x00o]\x03\x0c\xf5k'b'\x00\x05N\xb1zg\x03\xd8\xfe\x1a\xef\x01\x01>R\xb8\xbe?\xcc\xcc\xcc\xbf\x99\x99\t\xb9\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9aN\xef'b'\x00\x05N\xb1zg\x04 \xfe\x08\xf0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x1b'b'\x00\x05N\xb1zg\x04\x8c\xfe\x1c\xf1\x01\x01!Q)\x04\x00l\xa6\x02\x18\xee\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\x00\x00\x10\x00\x00\x001F\x83,'b'\x00\x05N\xb1zg\x04\xe8\xfe\x1c\xf2\x01\x01 \x10*\x04\x00\xf2\xe1<=7\xbe\\?40\xd1\xbf\xc0\xab\xd1:M\x11(>\x1d.\x0e\xa1D\x80\xbdM\x08\xc1\xbeZ\xcd'b'\x00\x05N\xb1zhx\xfc\xfe\x18\xf4\x01\x01\xb2\x03\xe3(\xbcb.\xb5\xbcb\xa8H@\x8f\x12*Dq\xa6\x02\x18\xf2\xe7\xb8\xfd\xa3#'b'\x00\x05N\xb1zhyX\xfe\x1c\xf5\x01\x01\xa3a\x85\xad9m\x83k\xba\xa9e\xaa9\x00\x00\x00\x00\x00\x00\x00\x00?\xe5@<\xb5\xa9\xcc;\x82z'b'\x00\x05N\xb1zhy\xac\xfe\x03\xf6\x01\x01\xa5\xc0\x14\x00Z\x0b'b'\x00\x05N\xb1zhz\x04\xfe\x0c\xf7\x01\x01\x02\xb8\x06\xadz\xb1N\x05\x00M*\x04\x00\x86\x8d'b'\x00\x05N\xb1zhzT\xfe\x16\xf8\x01\x01\x88l\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x11\xf8'b'\x00\x05N\xb1zhz\xa8\xfe\x16\xf9\x01\x01\xc1)\xd9\xdb<\xc8o\x0b=g\x95\xe8;\x1e;?>\x00\x00\x00\x00?\x03\xf5\xf1'b'\x00\x05N\xb1zhz\xec\xfe\x03\xfa\x01\x01Ms\x00\x04\xe8\xbf'b"\x00\x05N\xb1zh\x8fL\xfe\x15\xfb\x01\x01$\x92'F\x10f\x06\xfe\x05\x0f\x06\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00dH"b'\x00\x05N\xb1zh\x8f\xa4\xfe\x16\xfc\x01\x01#\x89*\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00$8'b'\x00\x05N\xb1zi!\x17\xfe5a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x94\xa6'b'\x00\x05N\xb1zi6\xbf\xfe!b\xff\x00L\xbcl0\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcc\xa4'b'\x00\x05N\xb1zj\x0bp\xfe\x03\xfd\x01\x01Ms\x00\x04\xe6#'b'\x00\x05N\xb1zj\x1f\xfc\xfe\x1a\xfe\x01\x01\x1b\xc6bG\x10\x00\x00\x00\x00\xfb\xff\x00\x00\xfb\xfb\xa0\x00\x96\xff\x92\xff\x06\xff\x01\x00x\x01sJ'b'\x00\x05N\xb1zj \\\xfe\x16\xff\x01\x01t\xd9*\x04\x00\xfd\xff\x08\x00\x0f\xfc\x8a\x00\xaa\xffz\xff\x01\xff[\xff\x11\x024\xb0'b'\x00\x05N\xb1zj \xb8\xfe\x16\x00\x01\x01\x81\xd9*\x04\x00\xfc\xff\x1c\x00\x12\xfcq\x00\xb9\xffv\xffv\x00`\x00h\x02\xda8'b'\x00\x05N\xb1zj!\x04\xfe\x0e\x01\x01\x01\x1d\xd9*\x04\x00\x94\x96iD\xb8\x1e+\xbe\\\x10\xcf\x0c'b'\x00\x05N\xb1zj!T\xfe\x0e\x02\x01\x01\x89\xd9*\x04\x00\x0f\xdbiD)\\\x1b>\x8e\x15\xe9\xb7'b'\x00\x05N\xb1zj!\xac\xfe\x1f\x03\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x00~;\xb8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xca\x13'b'\x00\x05N\xb1zj"\x00\xfe\x06\x04\x01\x01}\xc5\x14\x00\x00\x03\x00\xd8\xe1'b'\x00\x05N\xb1zj"`\xfe\x04\x05\x01\x01\x98\x00\x00\x80\x8a\xfe\x8d'b'\x00\x05N\xb1zj"\xa8\xfe\x02\x06\x01\x01*\x00\x00Q\xa9'b'\x00\x05N\xb1zj"\xfc\xfe\x1e\x07\x01\x01\x18\xb8\x86G\x10\x00\x00\x00\x00r\xa6\x02\x18\xf6\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x0c\x00o]\x03\x0cQ\x08'b'\x00\x05N\xb1zj#P\xfe\x1a\x08\x01\x01>#\x01\xfb?M\xad\x11\xc0\x85k\xd2:\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x19\x03'b'\x00\x05N\xb1zj#\x98\xfe\x08\t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x94y'b'\x00\x05N\xb1zj#\xe4\xfe\x14\n\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\x99\x99\xf9?\n\xd7#<\xb0\x001\x00\x1b\xff'b'\x00\x05N\xb1zj`\x97\xfe\tc\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03O\xba'b'\x00\x05N\xb1zk&\xf7\xfe5d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc5\x9e'b'\x00\x05N\xb1zk=\x0b\xfe!e\xff\x00L\xbcl0\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x87\xe8'b'\x00\x05N\xb1zk\xd3\xa4\xfe\x1c\x0b\x01\x01!\xe3*\x04\x00l\xa6\x02\x18\xf2\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xf9\xff\x06\x00\x01\x00\xe3D\xc2\x1b'b'\x00\x05N\xb1zk\xd4@\xfe\x1c\x0c\x01\x01 \x16+\x04\x00v\x14T=\x80\xa0e?\x9e\x91\xd0\xbf\xdc\xe6\x91\xbd\xcc\xd9}=\xfbe}\xbc\xefE'b'\x00\x05N\xb1zk\xd4\xa8\xfe\x1c\r\x01\x01\x1e>+\x04\x00\xc2:(=\x0fiK\xbd\x18\xc2D@D\xfcC=\xf7{\r>g\x96\xaa\xbdL\xce'b'\x00\x05N\xb1zk\xd5,\xfe\x18\x0e\x01\x01\xb2\xb2\xea\x02=\xd0NC\xbd\nSE@\x1e\x15*Dr\xa6\x02\x18\xf6\xe7\xb8\xfd\x9d\xd2'b'\x00\x05N\xb1zk\xd5\xa4\xfe\x1c\x0f\x01\x01\xa3\x17$\xb29w\\o\xba\xe5\x0f\xab9\x00\x00\x00\x00\x00\x00\x00\x00ER+<\xdf\xcc\x9f;l&'b'\x00\x05N\xb1zk\xd6\x08\xfe\x03\x10\x01\x01\xa5\xb5\x14\x00\x1a:'b'\x00\x05N\xb1zk\xd6t\xfe\x0c\x11\x01\x01\x028\xb0\xb0z\xb1N\x05\x00R+\x04\x00\x01\xcd'b'\x00\x05N\xb1zk\xd6\xe8\xfe\x16\x12\x01\x01\x88l\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb6\t'b'\x00\x05N\xb1zk\xd7\\\xfe\x16\x13\x01\x01\xc1p\xdf\xdb<\xe4y\x12=yp\x0f;\xccr\x16>\x00\x00\x00\x00?\x03g\xae'b'\x00\x05N\xb1zk\xd7\xc0\xfe\x03\x14\x01\x01Ms\x00\x04\x06\x97'b'\x00\x05N\xb1zm\x19\xff\xfe5f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01@|'b'\x00\x05N\xb1zm/h\xfe\x15\x15\x01\x01$\n$J\x10D\x06\x08\x06\x0e\x06\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x9c'b'\x00\x05N\xb1zm0\x04\xfe\x16\x16\x01\x01#\x8e+\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x91^'b'\x00\x05N\xb1zmk\xff\xfe!g\xff\x00L\x8f\x970\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8c\x02'b"\x00\x05N\xb1zn\xbaT\xfe\x1a\x17\x01\x01\x1b\x92\x10K\x10\x00\x00\x00\x00\xe9\xff\t\x00'\xfc\xda\xffc\x00\xe5\xff\x07\xff\x03\x00\x81\x01\x7f5"b'\x00\x05N\xb1zn\xba\xd4\xfe\x16\x18\x01\x01t\xca+\x04\x00\xec\xff\x0b\x001\xfc\xd1\xffc\x00\xe5\xff\x05\xffb\xff\x14\x02S\xc8'b"\x00\x05N\xb1zn\xbb0\xfe\x16\x19\x01\x01\x81\xca+\x04\x00\xe1\xff\x1d\x00'\xfc\xb4\xff\x87\x00\xe3\xff\x9a\x00@\x00\x85\x02%\xdb"b'\x00\x05N\xb1zn\xbb\x80\xfe\x0e\x1a\x01\x01\x1d\xca+\x04\x00\x99\x99iD\x99\x99\xf5\xbd]\x10ym'b'\x00\x05N\xb1zn\xbb\xd0\xfe\x0e\x1b\x01\x01\x89\xca+\x04\x00C\xdciD\xd7\xa3.>\x8f\x15\xd9I'b'\x00\x05N\xb1zn\xbc(\xfe\x1f\x1c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01~;\xbb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RqV'b'\x00\x05N\xb1zn\xbc\x88\xfe\x06\x1d\x01\x01}\xc5\x14\x00\x00\x03\x00\xa6y'b'\x00\x05N\xb1zn\xbc\xdc\xfe\x04\x1e\x01\x01\x98\x00\x00\x80\x8a\xa7\xdb'b'\x00\x05N\xb1zn\xbd(\xfe\x02\x1f\x01\x01*\x00\x00\xa1]'b'\x00\x05N\xb1zn\xbd\x88\xfe\x1e \x01\x01\x18\xe0\x97J\x10\x00\x00\x00\x00q\xa6\x02\x18\xf9\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x07\x00o]\x03\x0ce\x15'b'\x00\x05N\xb1zn\xbd\xe4\xfe\x1a!\x01\x01>\x93\x05$?p\xc36\xbf\x14\x0e\x10\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xba"'b'\x00\x05N\xb1zn\xbe4\xfe\x08"\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xab\xef'b'\x00\x05N\xb1zn\xbe\x80\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6'b'\x00\x05N\xb1zn\xbf\x04\xfe\x14$\x01\x01J)\\\x8f=)\\\x8f=\x99\x99\xf9?\n\xd7\xa3\xbc\xaf\x003\x00\xdch'b'\x00\x05N\xb1zn\xbf|\xfe\x1c%\x01\x01!\xac+\x04\x00k\xa6\x02\x18\xf3\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xf5\xff\xf9\xff\xfd\xff\xa7Dn\xeb'b'\x00\x05N\xb1zn\xbf\xe8\xfe\x1c&\x01\x01 \x1a,\x04\x00\xf9\xd3\x1a=\xd7\xa6f?\x83\xee\xcf\xbf\xa8\xdb\xed\xbd\xee7\x9f\xbd\xd4\xf4\x18=\x8a\x19'b'\x00\x05N\xb1zo+\xab\xfe5h\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf9\xc1'b'\x00\x05N\xb1zoC\x9b\xfe!i\xff\x00L\x8f\x970\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1a\x9a'b"\x00\x05N\xb1zpG\xd8\xfe\x1c'\x01\x01\x1eC,\x04\x00>P\xbc\x00\x00\x00\x00?\x03h\xa4'b'\x00\x05N\xb1zpJ,\xfe\x03.\x01\x01Ms\x00\x04]\\'b'\x00\x05N\xb1zp\xff\x1b\xfe5j\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01|#'b'\x00\x05N\xb1zq5\xfb\xfe!k\xff\x00L\xab\xbf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0fj'b'\x00\x05N\xb1zq\xb5\x18\xfe\x15/\x01\x01$n!N\x10J\x06\x18\x06\r\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xde'b'\x00\x05N\xb1zq\xb5\x94\xfe\x160\x01\x01#\x93,\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe1\xe8'b'\x00\x05N\xb1zq\xb64\xfe\x1a1\x01\x01\x1b\xd3\xbcN\x10\x00\x00\x00\x00\xec\xff\r\x00\x06\xfc\xa3\xff)\x00\xf3\xff\x01\xff\xfd\xffy\x01\xca\xbd'b'\x00\x05N\xb1zq\xb6\xa4\xfe\x162\x01\x01t\xbb,\x04\x00\xef\xff\x0f\x00 \xfc\xb6\xff4\x00\xf3\xff\xff\xfeU\xff\x0e\x02`\xca'b'\x00\x05N\xb1zq\xb7\x10\xfe\x163\x01\x01\x81\xbb,\x04\x00\xe7\xff\x17\x00\x0e\xfc\xd0\xff\x18\x00\xff\xff\x80\x00H\x00h\x02\x90\xd8'b'\x00\x05N\xb1zq\xb7p\xfe\x0e4\x01\x01\x1d\xbb,\x04\x00\xf7\x98iD\xc2\xf5\x04\xbe^\x10\xf6\xb6'b'\x00\x05N\xb1zq\xb7\xcc\xfe\x0e5\x01\x01\x89\xbb,\x04\x00\x10\xdciD\xa4p+>\x90\x15\to'b'\x00\x05N\xb1zq\xb88\xfe\x1f6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01~;@\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x86\xd7'b'\x00\x05N\xb1zq\xb8\xa0\xfe\x067\x01\x01}\xc8\x14\x00\x00\x03\x00\xeb\xa2'b'\x00\x05N\xb1zq\xb8\xfc\xfe\x048\x01\x01\x98\x00\x00\x80\x8a\x81\x88'b'\x00\x05N\xb1zq\xb9P\xfe\x029\x01\x01*\x00\x00\xeff'b'\x00\x05N\xb1zq\xb9\xc0\xfe\x1e:\x01\x01\x18\x08\xa9M\x10\x00\x00\x00\x00o\xa6\x02\x18\xf9\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\t\x00o]\x03\x0c@\x9a'b'\x00\x05N\xb1zq\xba\x18\xfe\x1a;\x01\x01>e\x03&\xbf\x99\xf5\x96\xbe\xa4\x90\x03\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x004\xb1'b'\x00\x05N\xb1zq\xba`\xfe\x08<\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x85'b'\x00\x05N\xb1zq\xba\xa8\xfe\x03=\x01\x01Ms\x00\x04\xf5\x8d'b'\x00\x05N\xb1zs#\x1f\xfe5l\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe2\x0c'b'\x00\x05N\xb1zsM\xb0\xfe\x14>\x01\x01J\xebQ\xb8=\xebQ\xb8=\xebQ\xf8?\x00\x00\x00\x00\xaf\x003\x00\x8b\x1d'b'\x00\x05N\xb1zsND\xfe\x1c?\x01\x01!u,\x04\x00i\xa6\x02\x18\xf0\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\xf6\xff\xf2\xff\x00\x00\x92D\xbf\xf9'b'\x00\x05N\xb1zsN\xac\xfe\x1c@\x01\x01 -\x04\x00\xe0\x81~<)\x8a`?\x98\xf9\xce\xbf3\x9d\xd7\xbd5m\x18\xbeR\xd5\xb7;\xe7\xc2'b'\x00\x05N\xb1zsO\x00\xfe\x1cA\x01\x01\x1eG-\x04\x00\x02`V\xbb\xd0\x1b;\xbc5\x05D@\xf4g\xa2\xbdxF\xe0<\xd49\xd2\xbc\t\x9d'b'\x00\x05N\xb1zsOT\xfe\x18B\x01\x01\xb2*WE\xbc\xec_\xf3\xbb\xb8\x97D@R\x08*Dm\xa6\x02\x18\xf7\xe7\xb8\xfd\x86.'b'\x00\x05N\xb1zsO\xa0\xfe\t\xf5\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\xa6\xc4'b'\x00\x05N\xb1zs\x89\xf3\xfe!m\xff\x00L\xab\xbf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8c\x8c'b'\x00\x05N\xb1zt\xda\x84\xfe\x1cC\x01\x01\xa3\x1e\xaf\xba92\xd5v\xbaO@\xac9\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x9fR<\xe6\xaa\x1b<\x95\xdd'b'\x00\x05N\xb1zt\xdb\x10\xfe\x03D\x01\x01\xa5\xc5\x14\x00\x08H'b'\x00\x05N\xb1zt\xdbt\xfe\x0cE\x01\x01\x02\x98\xed\xb8z\xb1N\x05\x00\\-\x04\x00\xa5\x8b'b'\x00\x05N\xb1zt\xdb\xd8\xfe\x16F\x01\x01\x88h\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x03\xdb'b'\x00\x05N\xb1zt\xdc<\xfe\x16G\x01\x01\xc1\xaa\x08a<\xe9\xe4\x90<\x0c\xeeJ;\xed\xf2$>\x00\x00\x00\x00?\x03>\x1d'b'\x00\x05N\xb1zt\xdc\xd4\xfe\x03I\x01\x01Ms\x00\x04R\x13'b'\x00\x05N\xb1zt\xdd\xa4\xfe\x15J\x01\x01$\xf4\x1fR\x10-\x061\x06!\x06\t\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xa8'b'\x00\x05N\xb1zt\xded\xfe\x16K\x01\x01#\x99-\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa2f'b'\x00\x05N\xb1zt\xdf$\xfe\x1aL\x01\x01\x1b=lR\x10\x00\x00\x00\x00\xf8\xff\x06\x00\x14\xfc\xbd\xff\x10\x00\x18\x00\xff\xfe\xf4\xfft\x01\xd8\xdb'b'\x00\x05N\xb1zt\xdf\xdc\xfe\x16M\x01\x01t\xad-\x04\x00\xfa\xff\x04\x00%\xfc\xb9\xff\x1a\x00\xfa\xff\xfb\xfeR\xff\n\x02\x91\x15\x88\xb8'b'\x00\x05N\xb1zt\xe1\xf8\xfe\x1fQ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01~;\xeb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Qs\xd1'b'\x00\x05N\xb1zt\xe2l\xfe\x06R\x01\x01}\xc8\x14\x00\x00\x03\x00\xa0\x86'b'\x00\x05N\xb1zu3\x07\xfe5n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01g\xee'b"\x00\x05N\xb1zuHO\xfe%o\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x07\xf5"b'\x00\x05N\xb1zu\\\xd3\xfe!o\xff\x00L+\xbe.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00W5'b'\x00\x05N\xb1zvg\xe0\xfe\x04S\x01\x01\x98\x00\x00\x80\x8a\x160'b'\x00\x05N\xb1zvhT\xfe\x02T\x01\x01*\x00\x00%\xec'b'\x00\x05N\xb1zvh\xc0\xfe\x1eU\x01\x01\x18\x10lP\x10\x00\x00\x00\x00m\xa6\x02\x18\xf7\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x12\x00o]\x03\x0c_*'b'\x00\x05N\xb1zvi0\xfe\x1aV\x01\x01>T\xbb\xd8\xbf\xae\xe63\xbe\x14\xfeE\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\\\x0e'b'\x00\x05N\xb1zvi\x84\xfe\x08W\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x93p'b'\x00\x05N\xb1zvi\xe4\xfe\x12X\x01\x01\xfc\xbf-\x04\x004\x00\x01\x00ARMMASK\x00Wr#\xea'b'\x00\x05N\xb1zvj@\xfe\tY\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03f\xa1'b'\x00\x05N\xb1zvj\x94\xfe\x03Z\x01\x01Ms\x00\x04\xfa\xc2'b'\x00\x05N\xb1zv\x7f<\xfe\x03[\x01\x01/\xff\x00\x00\xf3\\'b'\x00\x05N\xb1zv\x7f\xf4\xfe\x14\\\x01\x01J\x8f\xc2u>\x8f\xc2u>\xebQ\xf8?\x00\x00\x00\x00\xaf\x003\x00V\x08'b'\x00\x05N\xb1zwE[\xfe5q\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcb\x8a'b'\x00\x05N\xb1zw\x83\xbb\xfe!r\xff\x00L+\xbe.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa2\xa6'b'\x00\x05N\xb1zw\xd1X\xfe\x1c]\x01\x01!\xf3-\x04\x00h\xa6\x02\x18\xeb\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\xf8\xff\xef\xff\xff\xff\x8dD?\xaf'b'\x00\x05N\xb1zw\xd1\xf4\xfe\x1c^\x01\x01 &.\x04\x00&\xd1\x00\xbc&\xc8U?~\x96\xcd\xbf\xce\xdc\xb2\xbd\x82\xac1\xbe\xaeZ?<\xe3\xa4'b'\x00\x05N\xb1zw\xd2d\xfe\x1c_\x01\x01\x1eN.\x04\x00\x12Z\x8b\xbcD\x19\x13\xbc\xf6\x01D@\xffC\x19=\xda?\x1f<\n$}\xbc\xd7?'b'\x00\x05N\xb1zw\xd2\xcc\xfe\x18`\x01\x01\xb2\xcb\xef\xe2\xbc\xe4\xed\x88\xbb\xe6\x94D@\x8f\x02*Dl\xa6\x02\x18\xf4\xe7\xb8\xfd-\r'b'\x00\x05N\xb1zw\xd3,\xfe\x1ca\x01\x01\xa3t\xc1\xbe9\x1d\x85z\xba\x05\xdb\xac9\x00\x00\x00\x00\x00\x00\x00\x00[\xeaZ<\xd7\xeb;<]\xd5'b'\x00\x05N\xb1zw\xd3|\xfe\x03b\x01\x01\xa5\xc5\x14\x00I\xe3'b'\x00\x05N\xb1zw\xd3\xdc\xfe\x0cc\x01\x01\x028\xe5\xbcz\xb1N\x05\x00b.\x04\x00ZM'b'\x00\x05N\xb1zw\xd48\xfe\x16d\x01\x01\x88g\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x006c'b'\x00\x05N\xb1zw\xd4\x90\xfe\x16e\x01\x01\xc1\xa4\x80\x95<\x1f\x98\x90<\xfc>\x94<\x8dj$>\x00\x00\x00\x00?\x03I('b'\x00\x05N\xb1zw\xd4\xe0\xfe\x03f\x01\x01Ms\x00\x04\x10\x14'b'\x00\x05N\xb1zyG\xbf\xfe5s\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Nh'b'\x00\x05N\xb1zy^#\xfe!t\xff\x00L\xb8\xbf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x99c'b'\x00\x05N\xb1zysL\xfe\x1ag\x01\x01\x1b^\x1dV\x10\x00\x00\x00\x00\xe9\xff\xf7\xff\x00\xfcX\xff;\xff\xf0\xff\xfb\xfe\xec\xffu\x01\xe9A'b'\x00\x05N\xb1zys\xcc\xfe\x16h\x01\x01t\x9f.\x04\x00\xf7\xff\x00\x00\x14\xfcP\xffW\xff\xf2\xff\xf8\xfeB\xff\x06\x02\xc7\xcb'b'\x00\x05N\xb1zyt4\xfe\x16i\x01\x01\x81\x9f.\x04\x00\xea\xff\t\x00\n\xfc3\xffU\xff\xe9\xffv\x00P\x00a\x02>\n'b'\x00\x05N\xb1zyt\x8c\xfe\x0ej\x01\x01\x1d\x9f.\x04\x00\xf4\x98iD\xb8\x1e\x05\xbe_\x10\xf1\x9b'b'\x00\x05N\xb1zyt\xe4\xfe\x0ek\x01\x01\x89\x9f.\x04\x00\x0f\xdbiD)\\\x1b>\x91\x15?\x81'b'\x00\x05N\xb1zyuH\xfe*l\x01\x01\x96s\xe7f\xbc\xfel\x01\x00_\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x006\xfc'b'\x00\x05N\xb1zyu\xac\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00ds;\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xb3\xb7'b'\x00\x05N\xb1zyv\x04\xfe\x06n\x01\x01}\xc3\x14\x00\x00\x03\x00\x12\x81'b'\x00\x05N\xb1zyvh\xfe\x04o\x01\x01\x98\x00\x00\x80\x8a\x94x'b'\x00\x05N\xb1zyv\xb4\xfe\x02p\x01\x01*\x00\x00\xd0\xe0'b'\x00\x05N\xb1zyw\x10\xfe\x1eq\x01\x01\x188}S\x10\x00\x00\x00\x00l\xa6\x02\x18\xf4\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x18\x00A_\x03\x0c\xfc\x16'b'\x00\x05N\xb1zywl\xfe\x1ar\x01\x01>GY]\xc0\xd9\xb1\xa1\xbf{\xc4\x15<\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00aF'b'\x00\x05N\xb1zyw\xbc\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3'b'\x00\x05N\xb1zyx\x10\xfe\x15t\x01\x01$\xc2kV\x10\x95\x06\x1e\x06\x1f\x06>\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\nl'b'\x00\x05N\xb1zyxh\xfe\x16u\x01\x01#\xb3.\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00F"'b'\x00\x05N\xb1zy\xc8\xc7\xfe\tu\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf5b'b'\x00\x05N\xb1zz\xf6,\xfe\x03v\x01\x01Ms\x00\x04hO'b'\x00\x05N\xb1zz\xf6\xd8\xfe\x14w\x01\x01J\x00\x00\x80>\x00\x00\x80>\xe1z\xf4?\n\xd7\xa3<\xaf\x004\x00\x89E'b'\x00\x05N\xb1zz\xf78\xfe\x1cx\x01\x01!\xd1.\x04\x00f\xa6\x02\x18\xe5\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\xf8\xff\xf1\xff\x04\x00\x85D5\xbe'b'\x00\x05N\xb1zz\xf7\xa0\xfe\x1cy\x01\x01 +/\x04\x00|\x16\xd1\xbc\xaf\xb8I?M\xeb\xca\xbf\x91\x9c\xa6\xbd\xa0X\x1e\xbe\x86\xab(\xbd\xdb\xb5'b'\x00\x05N\xb1z{*\x17\xfe5v\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1fP'b'\x00\x05N\xb1z{b\xa3\xfe!w\xff\x00L\xb8\xbf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd0\x94'b'\x00\x05N\xb1z|\x80\x18\xfe\x1cz\x01\x01\x1eT/\x04\x00\x99\xa3N\xbdm/\x9b\xbc\x90\xeeC@\x86Fk\xbd\x16\xd1\xa6=\x8ex$<\xdf\xa1'b'\x00\x05N\xb1z|\x80\xb8\xfe\x18{\x01\x01\xb2\xa2\xf3w\xbd?\xe2r\xbc_\x82D@{$*Dl\xa6\x02\x18\xf0\xe7\xb8\xfd\xd1\xf8'b'\x00\x05N\xb1z|\x81(\xfe\x1c|\x01\x01\xa3\x81\xc2\xc29\xa3,~\xba\x1fs\xad9\x00\x00\x00\x00\x00\x00\x00\x00\x19\xb6O\x00\x00\x00\x00?\x03\xcf\xe0'b'\x00\x05N\xb1z|\x83\x8c\xfe\x03\x81\x01\x01Ms\x00\x04\xfd\x90'b'\x00\x05N\xb1z|\xa8\xd8\xfe\x1a\x82\x01\x01\x1b\x05\xcaY\x10\x00\x00\x00\x00\xf2\xff\x02\x00<\xfc\x15\x00k\x00\x00\x00\x00\xff\xe2\xffv\x01^\x01'b'\x00\x05N\xb1z|\xa9T\xfe\x16\x83\x01\x01t\x8f/\x04\x00\xea\xff\x10\x00H\xfc\r\x00_\x00\x0b\x00\x01\xffB\xff\x0f\x02R\xb6'b'\x00\x05N\xb1z|\xa9\xd0\xfe\x16\x84\x01\x01\x81\x8f/\x04\x00\xe8\xff\x15\x004\xfc\x03\x00Z\x00\x0e\x00\x92\x00G\x00h\x02\xaeE'b'\x00\x05N\xb1z|\xaaL\xfe\x0e\x85\x01\x01\x1d\x8f/\x04\x00\x1e\x95iD\xe1zB\xbe\\\x10\x9c\x00'b'\x00\x05N\xb1z|\xaa\xc4\xfe\x0e\x86\x01\x01\x89\x8f/\x04\x00\xeb\xd9iD\xb8\x1e\t>\x91\x15\xefn'b'\x00\x05N\xb1z|\xabH\xfe\x1f\x87\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01s;y\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xaeZ'b'\x00\x05N\xb1z|\xab\xc0\xfe\x06\x88\x01\x01}\xc8\x14\x00\x00\x03\x00s\xbf'b'\x00\x05N\xb1z|\xac0\xfe\x04\x89\x01\x01\x98\x00\x00\x80\x8a\x06\t'b'\x00\x05N\xb1z|\xac\x90\xfe\x02\x8a\x01\x01*\x00\x00\xd6\x9e'b"\x00\x05N\xb1z|\xad\x0c\xfe\x1e\x8b\x01\x01\x18\x88\x9fY\x10\x00\x00\x00\x00k\xa6\x02\x18\xed\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x19\x00\xdaa\x03\x0c\x9d'"b"\x00\x05N\xb1z|\xad\x84\xfe\x1a\x8c\x01\x01>raO\xc0\x84\x06\x8c>p\xdd\xa5\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00'\xcc"b'\x00\x05N\xb1z|\xad\xec\xfe\x08\x8d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x82\xa9'b'\x00\x05N\xb1z}\x1d\xff\xfe5x\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa6\xed'b'\x00\x05N\xb1z}\\[\xfe!y\xff\x00L\xc2\xcf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1J'b'\x00\x05N\xb1z~\x16\x08\xfe\x15\x8e\x01\x01$\xa5gZ\x10K\x06\xf6\x05\xf1\x05\x17\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00?$'b'\x00\x05N\xb1z~\x16\xe0\xfe\x16\x8f\x01\x01#\xb8/\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00,\x11'b'\x00\x05N\xb1z~\x17p\xfe\x03\x90\x01\x01Ms\x00\x04:J'b'\x00\x05N\xb1z~,4\xfe\x14\x91\x01\x01J\x00\x00\x80>\x00\x00\x80>\x8f\xc2\xf5?\n\xd7#\xbc\xaf\x002\x00D\x94'b'\x00\x05N\xb1z\x7f/{\xfe5z\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01#\x0f'b'\x00\x05N\xb1z\x7fm\x8f\xfe!{\xff\x00L\xc2\xcf.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00`\x17'b'\x00\x05N\xb1z\x7f\xa8p\xfe\x1c\x92\x01\x01!\x85/\x04\x00e\xa6\x02\x18\xe2\xe7\xb8\xfd\x10c\n\x00\x80\x07\x00\x00\xfb\xff\xf8\xff\xfd\xff\x81D\xa1\xe5'b'\x00\x05N\xb1z\x7f\xa9\x14\xfe\x1c\x93\x01\x01 00\x04\x00\x08\x08\x1a\xbd\xa4LB?S\xb9\xcb\xbf\xffWM\xbd\x9e@\xa4\xbd_\xb8\x1d=4\xc5'b'\x00\x05N\xb1z\x7f\xa9t\xfe\x1c\x94\x01\x01\x1eX0\x04\x00\x91\xf1=\xbdD\x93\x89\xbb\x9b\xdbC@\xad\xd3\x8f<\xb5l\xa2\xbb\xb85\xaa\xbb{9'b'\x00\x05N\xb1z\x7f\xa9\xcc\xfe\x18\x95\x01\x01\xb2\x99\xcdk\xbd\x16\x96\x8e:CvD@\xae\x17*Dk\xa6\x02\x18\xe8\xe7\xb8\xfd\x00$'b'\x00\x05N\xb1z\x7f\xaa \xfe\x1c\x96\x01\x01\xa3\xb2\xb2\xc69\xdd\xe2\x80\xba\x82\xfe\xad9\x00\x00\x00\x00\x00\x00\x00\x00*\xa5\x86<\xbbX\r<\x8c 'b'\x00\x05N\xb1z\x7f\xaah\xfe\x03\x97\x01\x01\xa5\xc8\x14\x00<\xbc'b'\x00\x05N\xb1z\x7f\xaa\xb0\xfe\x0c\x98\x01\x01\x02\x90\xd0\xc4z\xb1N\x05\x00l0\x04\x00\x86\x8e'b'\x00\x05N\xb1z\x7f\xab\x04\xfe\x16\x99\x01\x01\x88e\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xeb\xae'b'\x00\x05N\xb1z\x7f\xabT\xfe\x16\x9a\x01\x01\xc1\x9f\xf5\x04=\r\xef\xea\x00\x00\x00\x00?\x03\xab\xef'b'\x00\x05N\xb1z\x81\x1c\xf0\xfe\x03\x9b\x01\x01Ms\x00\x04V\xed'b"\x00\x05N\xb1z\x812\xfc\xfe\x1a\x9c\x01\x01\x1b4x]\x10\x00\x00\x00\x00\xf7\xff\x05\x00\x15\xfc'\x00\xc6\xff\x08\x00\xfa\xfe\xe1\xffp\x01\xe6\x16"b'\x00\x05N\xb1z\x813p\xfe\x16\x9d\x01\x01t\x810\x04\x00\xf5\xff\x1a\x001\xfc\x1a\x00\xe1\xff\xf1\xff\xf7\xfe8\xff\x05\x02hb'b'\x00\x05N\xb1z\x813\xd8\xfe\x16\x9e\x01\x01\x81\x810\x04\x00\xef\xff\x0f\x00$\xfc8\x00\xf4\xff\xda\xff\x84\x00;\x00h\x02\xf6l'b'\x00\x05N\xb1z\x814@\xfe\x0e\x9f\x01\x01\x1d\x810\x04\x00\xf4\x97iD\xb8\x1e\x15\xbe^\x10\t\xee'b'\x00\x05N\xb1z\x814\x90\xfe\x0e\xa0\x01\x01\x89\x810\x04\x00\x10\xdciD\xa4p+>\x92\x15\x9at'b'\x00\x05N\xb1z\x814\xf8\xfe\x1f\xa1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00*\x01s;\xfd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q3>'b'\x00\x05N\xb1z\x815P\xfe\x06\xa2\x01\x01}\xc5\x14\x00\x00\x03\x00>d'b'\x00\x05N\xb1z\x815\xa0\xfe\x04\xa3\x01\x01\x98\x00\x00\x80\x8a\x0f\x1a'b'\x00\x05N\xb1z\x815\xe4\xfe\x02\xa4\x01\x01*\x00\x00t{'b'\x00\x05N\xb1z\x816<\xfe\x1e\xa5\x01\x01\x18\xb0\xb0\\\x10\x00\x00\x00\x00k\xa6\x02\x18\xe8\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x1a\x00\xecc\x03\x0c*%'b'\x00\x05N\xb1z\x816\xb8\xfe\x1a\xa6\x01\x01>\xed\xf2-\xc0Sm\xb1=3\x83%\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xa5\xb7'b'\x00\x05N\xb1z\x817\x00\xfe\x08\xa7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x10:'b'\x00\x05N\xb1z\x817T\xfe\x15\xa8\x01\x01$\x13b^\x10{\x06#\x06\x06\x064\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\xde'b'\x00\x05N\xb1z\x817\xa4\xfe\x16\xa9\x01\x01#\xbc0\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00F;'b'\x00\x05N\xb1z\x81N\xdb\xfe5|\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbd 'b'\x00\x05N\xb1z\x81d\xcb\xfe!}\xff\x00L@\xcc.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc56'b'\x00\x05N\xb1z\x82\x9c\xa4\xfe\x03\xaa\x01\x01Ms\x00\x04a\x81'b'\x00\x05N\xb1z\x82\xb1h\xfe\x14\xab\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>33\xf3?\x00\x00\x00\x00\xaf\x004\x00[\xe7'b'\x00\x05N\xb1z\x82\xb2\x08\xfe\x1c\xac\x01\x01!\x171\x04\x00e\xa6\x02\x18\xe0\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x00\x00\xfd\xff\x00\x00vD1\xcf'b'\x00\x05N\xb1z\x82\xb2\xa4\xfe\x1c\xad\x01\x01 51\x04\x00\xdb\xaa\n\xbd\xa0s=?\x8a>\xca\xbfi\xe1\xc5\xbb@H\x01\xbd\x05\xc7\x179"\x8e'b'\x00\x05N\xb1z\x82\xb3\x14\xfe\t\xf6\n\x00m\x02\x00\x00\x00\x00\xd9\x00\x00\x00\x1a\x02'b'\x00\x05N\xb1z\x838O\xfe5~\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x018\xc2'b'\x00\x05N\xb1z\x83N\xbb\xfe!\x7f\xff\x00L@\xcc.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Dk'b'\x00\x05N\xb1z\x84 \xb0\xfe\x1c\xae\x01\x01\x1e]1\x04\x00\xce\x91\x1c\xbd\x1c3_\xbcA\xc6C@\xb9bS=\xb7Uf\xbc\xbb\x8eQ\xbbF\xbb'b'\x00\x05N\xb1z\x84!X\xfe\x18\xaf\x01\x01\xb2\xaa>H\xbd\xfa\xd0\x0e\xbcb^D@\x00 *Dk\xa6\x02\x18\xe7\xe7\xb8\xfd7?'b"\x00\x05N\xb1z\x84!\xd4\xfe\x1a\xb0\x01\x01\x1b\xf8$a\x10\x00\x00\x00\x00\xef\xff\x01\x00'\xfc*\x00\xf7\xff\x07\x00\xf9\xfe\xe3\xfft\x01\x0bG"b'\x00\x05N\xb1z\x84"H\xfe\x16\xb1\x01\x01tq1\x04\x00\xec\xff\x08\x00A\xfc \x00\x02\x00\xfb\xff\xfb\xfeB\xff\n\x02\xd9 'b'\x00\x05N\xb1z\x84"\xb4\xfe\x16\xb2\x01\x01\x81q1\x04\x00\xeb\xff\x11\x00*\xfc5\x00\xde\xff\x0f\x00v\x00$\x00\x84\x02\x8a\xd3'b'\x00\x05N\xb1z\x84#\x14\xfe\x0e\xb3\x01\x01\x1dq1\x04\x00\x93\x95iD33;\xbe]\x10K\xbd'b'\x00\x05N\xb1z\x84#t\xfe\x0e\xb4\x01\x01\x89q1\x04\x00\x99\xd9iD\x00\x00\x04>\x93\x15F\x98'b'\x00\x05N\xb1z\x84$\x00\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01B;\x8f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00QI\x92'b'\x00\x05N\xb1z\x84$\x80\xfe\x06\xb6\x01\x01}\xc6\x14\x00\x00\x03\x00@\xe3'b'\x00\x05N\xb1z\x84$\xd4\xfe\x04\xb7\x01\x01\x98\x00\x00\x80\x8a~\xda'b"\x00\x05N\xb1z\x84% \xfe\x02\xb8\x01\x01*\x00\x00'\x7f"b'\x00\x05N\xb1z\x84%\x84\xfe\x1e\xb9\x01\x01\x18\xd8\xc1_\x10\x00\x00\x00\x00k\xa6\x02\x18\xe7\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\r\x00\xecc\x03\x0c\xdd\x06'b'\x00\x05N\xb1z\x84%\xe0\xfe\x1a\xba\x01\x01>\x01\xc0\x11\xc0\xc9\xbc\x95\xbe\xc2\xd5s\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xd8m'b'\x00\x05N\xb1z\x84&,\xfe\x03\xbb\x01\x01Ms\x00\x04\xa6['b'\x00\x05N\xb1z\x84&\xdc\xfe\x08\xbc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00_C'b"\x00\x05N\xb1z\x84'8\xfe\x1c\xbd\x01\x01\xa3u\xf8\xca9H\xc7\x82\xba%z\xae9\x00\x00\x00\x00\x00\x00\x00\x00\x04\x92\xa5<\xb25\xc3;\x89X"b"\x00\x05N\xb1z\x84'\x80\xfe\x03\xbe\x01\x01\xa5\xc3\x14\x00\xdaf"b"\x00\x05N\xb1z\x84'\xcc\xfe\x0c\xbf\x01\x01\x02Xh\xc9z\xb1N\x05\x00\x861\x04\x00-1"b'\x00\x05N\xb1z\x84(L\xfe\x16\xc0\x01\x01\x88f\xa6\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x98\x9e'b'\x00\x05N\xb1z\x84(\xd4\xfe\x12\xc1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xd4['b'\x00\x05N\xb1z\x84)h\xfe\x16\xc2\x01\x01\xc1\xe9\x90\x80<&\x84\x07=\xd9uM;8\xdc\x08>\x00\x00\x00\x00?\x03A)'b'\x00\x05N\xb1z\x85\x1a+\xfe5\x80\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf5\xd0'b'\x00\x05N\xb1z\x851\x9b\xfe!\x81\xff\x00L\xa2\xca.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc7\xfd'b"\x00\x05N\xb1z\x85\x82\x97\xfe%\x82\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x02."b'\x00\x05N\xb1z\x85\xb4T\xfe\x12\xc4\x01\x01\xfc\xab1\x04\x004\x00\x01\x00ARMMASK\x00Wr\xf7l'b'\x00\x05N\xb1z\x85\xb4\xe4\xfe\t\xc5\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb5\xed'b"\x00\x05N\xb1z\x85\xb5\\\xfe\x15\xc6\x01\x01$s_b\x10S\x06\x1d\x06\xf7\x05\x0b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x17"b'\x00\x05N\xb1z\x85\xb5\xbc\xfe\x16\xc7\x01\x01#\xc21\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc5\x99'b'\x00\x05N\xb1z\x85\xb6\x0c\xfe\x03\xc8\x01\x01Ms\x00\x04\x0fY'b'\x00\x05N\xb1z\x87\x08o\xfe5\x83\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01:\xc7'b'\x00\x05N\xb1z\x87\x1e\xc7\xfe!\x84\xff\x00L\xa2\xca.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\r\xec'b'\x00\x05N\xb1z\x87H\xb4\xfe\x03\xc9\x01\x01/\xff\x00\x00\x06\xc7'b'\x00\x05N\xb1z\x87]\x94\xfe\x14\xca\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\xe1z\xf4?\x8f\xc2\xf5\xbc\xaf\x004\x00\xdb\xb3'b'\x00\x05N\xb1z\x87^\x18\xfe\x1c\xcb\x01\x01!\xe01\x04\x00f\xa6\x02\x18\xe0\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x01\x00\x01\x00\xfd\xffxD\x95K'b'\x00\x05N\xb1z\x87^\x90\xfe\x1c\xcc\x01\x01 :2\x04\x00\x0f\xb0\xb3\xbc\xceT=?\xb5:\xca\xbf\xc2\xc8\x83<\x92Dx<\xf7\xe7\x10=\xd3\xcb'b'\x00\x05N\xb1z\x87^\xf4\xfe\x1a\xcd\x01\x01\x1b\x02\xd2d\x10\x00\x00\x00\x00\xeb\xff\x13\x00\x04\xfc\x16\x00\xd5\xff%\x00\x00\xff\xe2\xffu\x01\xba\xc4'b'\x00\x05N\xb1z\x87_P\xfe\x16\xce\x01\x01tb2\x04\x00\xed\xff\x15\x00\x1d\xfc\x0e\x00\xed\xff\r\x00\xfd\xfeD\xff\r\x02\x94\x12'b'\x00\x05N\xb1z\x87_\xb0\xfe\x16\xcf\x01\x01\x81b2\x04\x00\xee\xff\x0e\x00\xff\xfb\x0f\x00\xae\xff\x1d\x00\x8d\x00L\x00b\x02\x0c\xcf'b'\x00\x05N\xb1z\x87`\x08\xfe\x0e\xd0\x01\x01\x1db2\x04\x00e\x95iD{\x14>\xbe^\x10\xcf\x89'b'\x00\x05N\xb1z\x87`X\xfe\x0e\xd1\x01\x01\x89b2\x04\x00&\xdaiD\xcd\xcc\x0c>\x93\x15\x88\xc5'b'\x00\x05N\xb1z\x87`\xd4\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01B;\x8f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xaeO'b'\x00\x05N\xb1z\x87a4\xfe\x06\xd3\x01\x01}\xc5\x14\x00\x00\x03\x00eo'b'\x00\x05N\xb1z\x87a\x88\xfe\x04\xd4\x01\x01\x98\x00\x00\x80\x8a#\x1d'b'\x00\x05N\xb1z\x88\xdc\x8f\xfe5\x85\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#=\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa4\xe8'b'\x00\x05N\xb1z\x88\xf2\xe7\xfe!\x86\xff\x00L\xa2\xca.\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8c\xb1'b'\x00\x05N\xb1z\x88\xf3\xcc\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5'b'\x00\x05N\xb1z\x88\xf4L\xfe\x1e\xd6\x01\x01\x18\x00\xd3b\x10\x00\x00\x00\x00m\xa6\x02\x18\xe6\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x0c\x00\xecc\x03\x0c\xf1\xed'b'\x00\x05N\xb1z\x88\xf4\xac\xfe\x1a\xd7\x01\x01>:h\x12\xc0,\xb0g\xc0\xe1z\x95\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\x89\xa6'b'\x00\x05N\xb1z\x88\xf4\xfc\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83'b'\x00\x05N\xb1z\x88\xf5T\xfe\x1c\xd9\x01\x01\x1ew2\x04\x00~\xba&\xbd0r\x82\xbc\xc3\xd6C@\xderN<\xb3I\xa9\xbd\x12\xb4\xa4\xbcn\xc1'b'\x00\x05N\xb1z\x88\xf5\xb8\xfe\x18\xda\x01\x01\xb2\x1dDP\xbd6E-\xbc\x8bzD@\xae\x07*Dm\xa6\x02\x18\xe6\xe7\xb8\xfde\x9d'b'\x00\x05N\xb1z\x88\xf6\x0c\xfe\x03\xdb\x01\x01Ms\x00\x04\xa7\x88'b'\x00\x05N\xb1z\x88\xf6\xa4\xfe\x1c\xdc\x01\x01\xa3\xb4\xdb\xce9b\x80\x84\xba\x92\xe4\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xda\x96\xa4\x00\x00\x00\x00?\x03K9'b'\x00\x05N\xb1z\x88\xf8X\xfe\x15\xe1\x01\x01$\x19Zf\x10\x8c\x06%\x06!\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x8b'b'\x00\x05N\xb1z\x88\xf8\xa8\xfe\x16\xe2\x01\x01#\xc72\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00/\xde'b'\x00\x05N\xb1z\x89\x0e\xcb\xfe\t\x87\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf8)'b'\x00\x05N\xb1z\x8ad\x1c\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H'b'\x00\x05N\xb1z\x8ay\x14\xfe\x14\xe4\x01\x01J\xaeG\xe1=\xaeG\xe1=\x85\xeb\xf1?\x8f\xc2\xf5<\xaf\x004\x00\xf4C'b'\x00\x05N\xb1z\x8a\xac?\xfe5\x88\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2\xf5<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe0\xad'b'\x00\x05N\xb1z\x8a\xed\xa3\xfe!\x89\xff\x00L\xa81+\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00;\x07'b'\x00\x05N\xb1z\x8b\xc6\xec\xfe\x1c\xe5\x01\x01!\xa92\x04\x00h\xa6\x02\x18\xe1\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\x07\x00\x05\x00\x83D,w'b'\x00\x05N\xb1z\x8b\xc7\x88\xfe\x1c\xe6\x01\x01 @3\x04\x00\xf8\xb1\x16;c\x0b@?\x9d\x15\xc8\xbf\x9d\x07m<\xf8~\x96=N0\\\xbd\xce\x8a'b'\x00\x05N\xb1z\x8b\xc8 \xfe\x1a\xe7\x01\x01\x1b&\x80h\x10\x00\x00\x00\x00\xe6\xff\x02\x00\xfc\xfbN\x005\x00#\x00\x03\xff\xe1\xff}\x01\xcb\xea'b'\x00\x05N\xb1z\x8b\xc8\xa0\xfe\x16\xe8\x01\x01tT3\x04\x00\xe7\xff\xfd\xff\x06\xfcO\x00J\x00\x06\x00\x02\xff5\xff\x0b\x02&\x8a'b'\x00\x05N\xb1z\x8b\xc9d\xfe\x16\xe9\x01\x01\x81T3\x04\x00\xe9\xff\x18\x00\xf9\xfbz\x00,\x00\xec\xff\x8a\x007\x00s\x020\xb3'b'\x00\x05N\xb1z\x8b\xca,\xfe\x0e\xea\x01\x01\x1dT3\x04\x007\x98iD\xc2\xf5\x10\xbe`\x10[R'b'\x00\x05N\xb1z\x8b\xca\xf8\xfe\x0e\xeb\x01\x01\x89T3\x04\x00\x18\xdbiD\x85\xeb\x1b>\x94\x15\xd1\x82'b'\x00\x05N\xb1z\x8b\xcb\x8c\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00;\x01B;s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xbex'b'\x00\x05N\xb1z\x8b\xcc\x04\xfe\x06\xed\x01\x01}\xc6\x14\x00\x00\x03\x00\x19\x1d'b'\x00\x05N\xb1z\x8b\xcc`\xfe\x04\xee\x01\x01\x98\x00\x00\x80\x8a\xbe\xf1'b'\x00\x05N\xb1z\x8b\xcc\xb8\xfe\x02\xef\x01\x01*\x00\x00\xf0\xca'b'\x00\x05N\xb1z\x8b\xcd\x1c\xfe\x1e\xf0\x01\x01\x18(\xe4e\x10\x00\x00\x00\x00q\xa6\x02\x18\xe6\xe7\xb8\xfd\xc2j\n\x00F\x00\xff\xff\x0b\x00\xecc\x03\x0c\x85\xe6'b'\x00\x05N\xb1z\x8b\xcd|\xfe\x1a\xf1\x01\x01>\xa6A\xc7\xbf\xea\xcf\xcb\xbf\xaew\\\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00~\x9a'b'\x00\x05N\xb1z\x8b\xcd\xcc\xfe\x08\xf2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x88\x10'b'\x00\x05N\xb1z\x8b\xce\x1c\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13'b'\x00\x05N\xb1z\x8b\xe2\xe4\xfe\x1c\xf4\x01\x01\x1e|3\x04\x006\xb4\x1a\xbd\x8c\xb0\xea\xbc\xdf\xf1C@\xf4!%=N4\xbb=\xe8\xaa[\xbc\xf0+'b'\x00\x05N\xb1z\x8b\xe3\x90\xfe\x18\xf5\x01\x01\xb2J\xfdE\xbdg\x8c\xcf\xbc\n\x95D@\xae\x07*Dq\xa6\x02\x18\xe6\xe7\xb8\xfd\xf9\xee'b"\x00\x05N\xb1z\x8b\xe44\xfe\x1c\xf6\x01\x01\xa3\xad\xb6\xd29c'\x86\xba=8\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\x06h\x85<\xde|\x83;\xa1\x8d"b'\x00\x05N\xb1z\x8b\xe4\xc4\xfe\x03\xf7\x01\x01\xa5\xc8\x14\x00=o'b'\x00\x05N\xb1z\x8b\xe5x\xfe\x0c\xf8\x01\x01\x02\xb0S\xd1z\xb1N\x05\x00\x903\x04\x00\x94\x97'b'\x00\x05N\xb1z\x8b\xe6\x04\xfe\x16\xf9\x01\x01\x88h\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1c\xe9'b'\x00\x05N\xb1z\x8b\xe6\x8c\xfe\x16\xfa\x01\x01\xc1\xa88\xb8<\x1f\x96I=W\xbf\xc4;7Q\x1b>\x00\x00\x00\x00?\x03\xacH'b'\x00\x05N\xb1z\x8c\xac\x13\xfe5\x8a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2\xf5<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01eO'b'\x00\x05N\xb1z\x8c\xc2+\xfe!\x8b\xff\x00Lse)\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00B)'b'\x00\x05N\xb1z\x8dz\xc8\xfe\x15\xfb\x01\x01$\x97Yj\x10\x11\x06A\x06\x1d\x06\xef\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x02'b'\x00\x05N\xb1z\x8d{l\xfe\x16\xfc\x01\x01#\xcd3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xebi'b'\x00\x05N\xb1z\x8d{\xc8\xfe\x03\xfd\x01\x01Ms\x00\x04\xe6#'b'\x00\x05N\xb1z\x8e\xb3\x83\xfe5\x8c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x81\xdd'b'\x00\x05N\xb1z\x8e\xdf\xb4\xfe\x14\xfe\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\xf1?\n\xd7\xa3<\xaf\x003\x00\x86\x8c'b'\x00\x05N\xb1z\x8e\xe0x\xfe\x1a\xff\x01\x01\x1b+.l\x10\x00\x00\x00\x00\xef\xff\x0b\x00%\xfc=\x00\r\x00\xec\xff\xff\xfe\xe8\xffz\x01\xa7\x82'b'\x00\x05N\xb1z\x8e\xe1,\xfe\x16\x00\x01\x01tE4\x04\x00\xf7\xff\x16\x000\xfc,\x00\x1d\x00\xfd\xff\x00\xffF\xff\x10\x02n%'b'\x00\x05N\xb1z\x8e\xe1\xd0\xfe\x16\x01\x01\x01\x81E4\x04\x00\xe9\xff\r\x00\x08\xfc\xed\xff8\x00\xfc\xff\x92\x005\x00q\x02\xec\x96'b'\x00\x05N\xb1z\x8e\xe2d\xfe\x0e\x02\x01\x01\x1dE4\x04\x00\xaf\x97iD\xa4p\x19\xbe`\x10c\xc4'b'\x00\x05N\xb1z\x8e\xe3\x0c\xfe\x0e\x03\x01\x01\x89E4\x04\x00=\xdaiDp=\x0e>\x95\x15\xa2m'b'\x00\x05N\xb1z\x8e\xe3\x9c\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01f;\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xa9`'b'\x00\x05N\xb1z\x8e\xe4\x00\xfe\x06\x05\x01\x01}\xc5\x14\x00\x00\x03\x00I\xb4'b'\x00\x05N\xb1z\x8e\xe4p\xfe\x04\x06\x01\x01\x98\x00\x00\x80\x8a\xf9['b'\x00\x05N\xb1z\x8e\xe4\xc4\xfe\x02\x07\x01\x01*\x00\x00\x846'b'\x00\x05N\xb1z\x8e\xe5\\\xfe\x1e\x08\x01\x01\x18x\x06l\x10\x00\x00\x00\x00t\xa6\x02\x18\xe8\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0cE\xd4'b'\x00\x05N\xb1z\x8e\xe5\xc4\xfe\x1a\t\x01\x01>\xf7.g\xbfU\xd2\xc1\xbf\\\xf7\x97\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0f-'b'\x00\x05N\xb1z\x8e\xe6\x14\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw'b'\x00\x05N\xb1z\x8e\xe6t\xfe\x1c\x0b\x01\x01!;4\x04\x00j\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x02\x00\x08\x00\x02\x00\x81D\x8ci'b'\x00\x05N\xb1z\x8e\xe6\xdc\xfe\x1c\x0c\x01\x01 Y4\x04\x00\xcf\xf6\xec<\x940G?\xd5\xeb\xc7\xbfWR\xb7<\xa7\x12\xb8=\xc4\xf5\xb0\xbc5X'b"\x00\x05N\xb1z\x8e\xe7\xf3\xfe!\x8d\xff\x00L\xa6\x98'\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x96\x9c"b'\x00\x05N\xb1z\x90n\x80\xfe\x03\r\x01\x01Ms\x00\x04}`'b'\x00\x05N\xb1z\x90\x83D\xfe\x1c\x0e\x01\x01\x1e\x814\x04\x00\x1c\xe0\xad\xbc\xd71\x94\xbc\x12\xddC@Y\x01\x84\xbc\x8c=\xa9\xbbVG\x06\xbdl\xa2'b'\x00\x05N\xb1z\x90\x83\xb8\xfe\x18\x0f\x01\x01\xb2\x98\xe9\x01\xbdB\xded\xbcA\x80D@)\x0c*Dt\xa6\x02\x18\xe8\xe7\xb8\xfd\xb6z'b'\x00\x05N\xb1z\x90\x84\x10\xfe\x1c\x10\x01\x01\xa3\xbct\xd69\xc3\xbb\x87\xba\x9by\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xfeSr<\x97\x0e\x90;\xa9\xa6'b'\x00\x05N\xb1z\x90\x84T\xfe\x03\x11\x01\x01\xa5\xc2\x14\x00\xc1\xb6'b'\x00\x05N\xb1z\x90\x84\xa0\xfe\x0c\x12\x01\x01\x02PK\xd5z\xb1N\x05\x00\x954\x04\x00\xfbb'b'\x00\x05N\xb1z\x90\x84\xf0\xfe\x16\x13\x01\x01\x88k\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00>\xf1'b'\x00\x05N\xb1z\x90\x85\\\xfe\x16\x14\x01\x01\xc1\xeb\x15\xf1<\xf2Ra=\xdb\x07\x85;\xf2i\x1c>\x00\x00\x00\x00?\x03\xd8j'b'\x00\x05N\xb1z\x90\x9d\x1f\xfe5\x8e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xacY'b"\x00\x05N\xb1z\x90\xb3+\xfe!\x8f\xff\x00L\r\x91'\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd01"b'\x00\x05N\xb1z\x91\xe8\\\xfe\x15\x15\x01\x01$\xb4Un\x10T\x06\x06\x06\n\x06\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00s\xc2'b'\x00\x05N\xb1z\x91\xe8\xe8\xfe\x16\x16\x01\x01#\xd24\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb7R'b'\x00\x05N\xb1z\x91\xe9P\xfe\x03\x17\x01\x01Ms\x00\x04\xd6\x1d'b'\x00\x05N\xb1z\x91\xe9\xdc\xfe\x14\x18\x01\x01J\x8f\xc2u=\x8f\xc2u=\xd7\xa3\xf0?\n\xd7\xa3<\xaf\x003\x00\x99\x16'b'\x00\x05N\xb1z\x91\xea4\xfe\t\xf7\n\x00m\x04\x00\x00\x00\x00\xdb\x00\x00\x00\xaa\x82'b'\x00\x05N\xb1z\x92R\xd7\xfe5\x90\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01J\xc8'b'\x00\x05N\xb1z\x92|\xbf\xfe!\x91\xff\x00L@\xc4%\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x94\x1b'b'\x00\x05N\xb1z\x93l8\xfe\x1a\x19\x01\x01\x1b\x1c\xdfo\x10\x00\x00\x00\x00\xf0\xff\x0b\x00!\xfc\xf9\xff\xcc\xff\x02\x00\x04\xff\xec\xffy\x01\x02\xc6'b'\x00\x05N\xb1z\x93l\xbc\xfe\x16\x1a\x01\x01t75\x04\x00\xf5\xff\x0e\x00%\xfc\xfa\xff\xc5\xff\x03\x00\x02\xffJ\xff\x11\x02\x14\xdb'b'\x00\x05N\xb1z\x93m<\xfe\x16\x1b\x01\x01\x8175\x04\x00\xef\xff\x1c\x00%\xfc\xf6\xff\xbf\xff\x0b\x00\x89\x00D\x00x\x02\x18\x06'b'\x00\x05N\xb1z\x93m\xb4\xfe\x0e\x1c\x01\x01\x1d75\x04\x00[\x97iDR\xb8\x1e\xbe`\x10=\xa0'b'\x00\x05N\xb1z\x93n(\xfe\x0e\x1d\x01\x01\x8975\x04\x00\x82\xd9iD\\\x8f\x02>\x95\x15\xefD'b'\x00\x05N\xb1z\x93n\xb4\xfe\x1f\x1e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00/\x01f;\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfdK'b'\x00\x05N\xb1z\x93o0\xfe\x06\x1f\x01\x01}\xc2\x14\x00\x00\x03\x00\x9c\x15'b'\x00\x05N\xb1z\x93o\xa4\xfe\x04 \x01\x01\x98\x00\x00\x80\x8a\xdf\x08'b'\x00\x05N\xb1z\x93p\x0c\xfe\x02!\x01\x01*\x00\x00\xca\r'b'\x00\x05N\xb1z\x93p\x90\xfe\x1e"\x01\x01\x18\xa0\x17o\x10\x00\x00\x00\x00v\xa6\x02\x18\xeb\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0c/\xe2'b'\x00\x05N\xb1z\x93q\x0c\xfe\x1a#\x01\x01>\xd7\x1fB\xbfB\x8e\xeb\xbf\xf5\x18\x7f\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00|]'b'\x00\x05N\xb1z\x93qT\xfe\x08$\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00E\xf2'b'\x00\x05N\xb1z\x93q\xa8\xfe\x1c%\x01\x01!\x045\x04\x00m\xa6\x02\x18\xe7\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x02\x00\x07\x00\x03\x00\x89D\x13\xba'b'\x00\x05N\xb1z\x93r\x08\xfe\x1c&\x01\x01 _5\x04\x00?*u=\x01}M?\rR\xc7\xbf\xb7N\xd3<\x0f\x90\xa0=_\x80\xf7\xbc\x06\xa3'b"\x00\x05N\xb1z\x93rP\xfe\x03'\x01\x01Ms\x00\x04^\xf0"b'\x00\x05N\xb1z\x93\x87\xac\xfe\x1c(\x01\x01\x1e\x875\x04\x00\xde9\xad\xbc\xad\xaa\n\xbd\xf5\x02D@\x9e\xc8\xcd=6\x1f\xba\xbd5g\xcc<\xf2\x80'b'\x00\x05N\xb1z\x93\x88(\xfe\x18)\x01\x01\xb2\xdf\xc1\x06\xbd\x85\x9e\xf0\xbc\xa2\xa4D@\\\x0f*Dv\xa6\x02\x18\xeb\xe7\xb8\xfd4\xa8'b'\x00\x05N\xb1z\x94B+\xfe5\x92\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcf*'b'\x00\x05N\xb1z\x94\x94/\xfe!\x93\xff\x00L\xf5\xc6%\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdd"'b'\x00\x05N\xb1z\x95&\xac\xfe\x12*\x01\x01\xfc\x985\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd4\xe4'b"\x00\x05N\xb1z\x95'X\xfe\t+\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb5l"b"\x00\x05N\xb1z\x95'\xe0\xfe\x1c,\x01\x01\xa3;\x16\xda9\xcc>\x89\xba\x16\xb7\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xa4d<#\xa3\xac;L\xe1"b'\x00\x05N\xb1z\x95(@\xfe\x03-\x01\x01\xa5\xc5\x14\x00\n7'b'\x00\x05N\xb1z\x95(\xa0\xfe\x0c.\x01\x01\x02\xf0B\xd9z\xb1N\x05\x00\x9b5\x04\x00\xdb\xd8'b'\x00\x05N\xb1z\x95)\x04\xfe\x16/\x01\x01\x88m\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\x7f'b'\x00\x05N\xb1z\x95)d\xfe\x160\x01\x01\xc1\xfaY\x7f<\x15\x8ai=Z\xed8:\xff\x11\x1e>\x00\x00\x00\x00?\x03\t\xf0'b'\x00\x05N\xb1z\x95*\x00\xfe\x152\x01\x01$\xeaQr\x10c\x06\x14\x06\xfe\x05\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xe9'b'\x00\x05N\xb1z\x95*`\xfe\x163\x01\x01#\xd75\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf6O'b'\x00\x05N\xb1z\x95*\xb4\xfe\x034\x01\x01Ms\x00\x04\xf6!'b"\x00\x05N\xb1z\x95\xf9\x87\xfe%\x94\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xb3\x83"b'\x00\x05N\xb1z\x96G/\xfe5\x95\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1b\xf0'b'\x00\x05N\xb1z\x96]\x87\xfe!\x96\xff\x00L\xf5\xc6%\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x173'b'\x00\x05N\xb1z\x96\x8ah\xfe\x1a5\x01\x01\x1br\x8as\x10\x00\x00\x00\x00\xea\xff\x03\x00+\xfc;\x00\x15\x00\xfb\xff\x05\xff\xec\xff\x80\x01\x98\xd4'b"\x00\x05N\xb1z\x96\x8b\x08\xfe\x166\x01\x01t'6\x04\x00\xee\xff\x03\x00-\xfc.\x00\x1d\x00\n\x00\x05\xffJ\xff\x10\x02jo"b"\x00\x05N\xb1z\x96\x8b\x8c\xfe\x167\x01\x01\x81'6\x04\x00\xe6\xff\x0f\x00 \xfc5\x00+\x00\x00\x00\x8c\x00-\x00\x84\x02\x02{"b"\x00\x05N\xb1z\x96\x8c\x08\xfe\x0e8\x01\x01\x1d'6\x04\x00O\x97iD\xa4p\x1f\xbe`\x10\x10\xe9"b"\x00\x05N\xb1z\x96\x8c\x90\xfe\x0e9\x01\x01\x89'6\x04\x00\x9b\xdaiD{\x14\x14>\x96\x15&\x82"b'\x00\x05N\xb1z\x96\x8d\x0c\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x01f;\xfc\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xac\xe4'b'\x00\x05N\xb1z\x96\x8d|\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n'b'\x00\x05N\xb1z\x96\x8d\xe8\xfe\x04<\x01\x01\x98\x00\x00\x80\x8ad\xb7'b'\x00\x05N\xb1z\x96\x8eL\xfe\x02=\x01\x01*\x00\x00\x99\t'b'\x00\x05N\xb1z\x96\x8e\xfc\xfe\x1e>\x01\x01\x18\xc8(r\x10\x00\x00\x00\x00y\xa6\x02\x18\xee\xe7\xb8\xfd\xe0j\n\x00F\x00\xff\xff\x07\x00\xecc\x03\x0c\xc7\xc2'b'\x00\x05N\xb1z\x96\x8fx\xfe\x1a?\x01\x01>\xc4C\x14\xbf\x90\x96\xf1\xbf\xebaC\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xdb\x1d'b'\x00\x05N\xb1z\x96\x90\x10\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002'b'\x00\x05N\xb1z\x96\x90|\xfe\x14A\x01\x01J)\\\x8f=)\\\x8f=\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x003\x00_='b'\x00\x05N\xb1z\x96\x90\xdc\xfe\x03B\x01\x01/\xff\x00\x00\x88\xab'b'\x00\x05N\xb1z\x96\xa5\xe4\xfe\x03C\x01\x01Ms\x00\x04\x815'b'\x00\x05N\xb1z\x98\x0c \xfe\x1cD\x01\x01!\xcd5\x04\x00o\xa6\x02\x18\xea\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x00\x00\x06\x00\x03\x00\x93D\x9dT'b'\x00\x05N\xb1z\x98\x0c\xac\xfe\x1cE\x01\x01 d6\x04\x00\xf0\xb7\xb1=#\nT?\x9c"\xc7\xbf1\xf4\x90\xba.\\\x8b=\n(\xfc\xbc\xcd4'b"\x00\x05N\xb1z\x98\r$\xfe\x1cF\x01\x01\x1e\x8c6\x04\x00\x0e\xfb*\xbc\xad\xc2\x11\xbd\xc9\x16D@\x0f0\x84=\xbe\x13#\xbd\xd8V'\xbcp\xe5"b'\x00\x05N\xb1z\x98\r\x84\xfe\x18G\x01\x01\xb2\x82\xe7\xb5\xbc=\xb5\x00\xbd\xf1\xbfD@3\x13*Dy\xa6\x02\x18\xee\xe7\xb8\xfd\xcd\x8e'b'\x00\x05N\xb1z\x98\r\xe4\xfe\x1cH\x01\x01\xa3B\x90\xdd9\x96\xb3\x8a\xba%\xf2\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xc9e]<\x7f\xe8\x92;\x8c\xc6'b'\x00\x05N\xb1z\x98\x0e0\xfe\x03I\x01\x01\xa5\xc8\x14\x00Zy'b'\x00\x05N\xb1z\x98\x0e\x8c\xfe\x0cJ\x01\x01\x02\xa86\xddz\xb1N\x05\x00\xa06\x04\x00\x93:'b'\x00\x05N\xb1z\x98\x0e\xe0\xfe\x16K\x01\x01\x88p\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\n\xa5'b'\x00\x05N\xb1z\x98\x0f0\xfe\x16L\x01\x01\xc1&\xb4\xea;+\xfaz=\x17|\x1b;G%+>\x00\x00\x00\x00?\x03C2'b'\x00\x05N\xb1z\x98&\x83\xfe5\x97\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9e\x12'b'\x00\x05N\xb1z\x98<\x07\xfe\t\x98\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xcb`'b'\x00\x05N\xb1z\x98P\x8f\xfe!\x98\xff\x00Lt\xc4%\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa3\xde'b'\x00\x05N\xb1z\x99\xa5L\xfe\x15M\x01\x01$\x1bOv\x10U\x06\x16\x06\x01\x06<\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95-'b'\x00\x05N\xb1z\x99\xa6(\xfe\x16N\x01\x01#\xdc6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v\xf7'b'\x00\x05N\xb1z\x99\xa6\x8c\xfe\x03O\x01\x01Ms\x00\x04\xe3\x0e'b"\x00\x05N\xb1z\x99\xa7X\xfe\x1aP\x01\x01\x1b':w\x10\x00\x00\x00\x00\xe9\xff\x07\x00\x05\xfc[\x00\x00\x00\x10\x00\x06\xff\xef\xff|\x01\x9f>"b'\x00\x05N\xb1z\x99\xa7\xb8\xfe\x16Q\x01\x01t\x197\x04\x00\xeb\xff\x08\x00\x0f\xfc5\x00\x1c\x00\r\x00\x05\xffM\xff\x10\x02\xdb#'b'\x00\x05N\xb1z\x99\xa8\x14\xfe\x16R\x01\x01\x81\x197\x04\x00\xe9\xff\x10\x00\r\xfcS\x00\x11\x00\x08\x00\x8f\x007\x00\x83\x025\xf7'b'\x00\x05N\xb1z\x99\xa8`\xfe\x0eS\x01\x01\x1d\x197\x04\x00O\x97iD\xa4p\x1f\xbea\x10e\xcc'b'\x00\x05N\xb1z\x99\xa8\xb0\xfe\x0eT\x01\x01\x89\x197\x04\x00\xe0\xd9iDff\x08>\x96\x15\x11s'b'\x00\x05N\xb1z\x99\xa9\x0c\xfe\x1fU\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd0\x00f;\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q-\xbc'b'\x00\x05N\xb1z\x99\xa9d\xfe\x06V\x01\x01}\xc5\x14\x00\x00\x03\x00\xba\xf6'b'\x00\x05N\xb1z\x99\xa9\xe0\xfe\x04W\x01\x01\x98\x00\x00\x80\x8a\xf3\x0f'b'\x00\x05N\xb1z\x99\xaa(\xfe\x02X\x01\x01*\x00\x00\xbf]'b'\x00\x05N\xb1z\x99\xaa|\xfe\x1eY\x01\x01\x18\xf09u\x10\x00\x00\x00\x00{\xa6\x02\x18\xf0\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cgR'b'\x00\x05N\xb1z\x99\xaa\xd0\xfe\x1aZ\x01\x01>p;\x86>\xf3Q\x14\xc0\x00\xc0G\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x91,'b'\x00\x05N\xb1z\x99\xab\x18\xfe\x08[\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00OK'b'\x00\x05N\xb1z\x99\xf1\x9b\xfe5\x9a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe8\xb8'b'\x00\x05N\xb1z\x9a\x07\xaf\xfe!\x9b\xff\x00Lt\xc4%\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xea)'b'\x00\x05N\xb1z\x9b\x15H\xfe\x14\\\x01\x01J\xcc\xccL=\xcc\xccL=\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x003\x00 \x96'b'\x00\x05N\xb1z\x9b\x15\xb4\xfe\x03]\x01\x01Ms\x00\x04\xf4^'b'\x00\x05N\xb1z\x9b\x16L\xfe\x1c^\x01\x01!_7\x04\x00q\xa6\x02\x18\xed\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfe\xff\x03\x00\x05\x00\x9cD\xc4x'b'\x00\x05N\xb1z\x9b\x16\xd0\xfe\x1c_\x01\x01 i7\x04\x00\xee1\xd8=`\xb9Y?\x16\xfe\xc6\xbf\xe8\xb9\xba\xbc8\xc5\x19=[bM\xbd\x99\xb3'b'\x00\x05N\xb1z\x9b\xbc\xdf\xfe5\x9c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01v\x97'b'\x00\x05N\xb1z\x9b\xd3\x1b\xfe!\x9d\xff\x00L\xa7\xf7#\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc2\xeb'b'\x00\x05N\xb1z\x9c\xa8|\xfe\x1c`\x01\x01\x1e\x917\x04\x00\x7f\xbc\x8b\xbb\xc7\xe7\x0c\xbd\xaf>D@\x9b>Z=b\xed_=)M\x83<\xab\xcb'b'\x00\x05N\xb1z\x9c\xa9\x10\xfe\x18a\x01\x01\xb2\xb4\xcb\x82\xbc\x1d\xf2\x00\xbd\x98\xe6D@f\x16*D|\xa6\x02\x18\xf2\xe7\xb8\xfd\r7'b'\x00\x05N\xb1z\x9c\xa9|\xfe\x1cb\x01\x01\xa3\xd6\xd8\xe09~\x1c\x8c\xba\xf1#\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xed6c<\xf2"\xa5;\xc7\''b'\x00\x05N\xb1z\x9c\xa9\xd0\xfe\x03c\x01\x01\xa5\xc6\x14\x00;G'b'\x00\x05N\xb1z\x9c\xaa(\xfe\x0cd\x01\x01\x0202\xe1z\xb1N\x05\x00\xa57\x04\x00\xb84'b'\x00\x05N\xb1z\x9c\xaa\x8c\xfe\x16e\x01\x01\x88q\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00/!'b'\x00\x05N\xb1z\x9c\xaa\xe8\xfe\x16f\x01\x01\xc1o\xb0U<_}l=N\x17\xde8\xf2\x1d:>\x00\x00\x00\x00?\x03\xd3\xdb'b'\x00\x05N\xb1z\x9c\xab8\xfe\x03g\x01\x01Ms\x00\x04\xaf\x95'b'\x00\x05N\xb1z\x9c\xbf\xcc\xfe\x15h\x01\x01$AIz\x101\x06#\x06\x0b\x06\n\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\xf9'b'\x00\x05N\xb1z\x9c\xc0,\xfe\x16i\x01\x01#\xe17\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x92L'b'\x00\x05N\xb1z\x9d\xa8\xdb\xfe5\x9e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf3u'b"\x00\x05N\xb1z\x9d\xd3k\xfe!\x9f\xff\x00Lh\xf4#\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x03'"b'\x00\x05N\xb1z\x9e_\xe4\xfe\x1aj\x01\x01\x1b\xbc\xe7z\x10\x00\x00\x00\x00\xed\xff\x05\x003\xfc\t\x00$\x00\xeb\xff\x02\xff\xf3\xff\x7f\x01A\x01'b'\x00\x05N\xb1z\x9e`\xa8\xfe\x16k\x01\x01t\n8\x04\x00\xf0\xff\x00\x00!\xfc\xff\xff$\x00\x04\x00\x03\xffU\xff\x13\x02\x0e\xad'b'\x00\x05N\xb1z\x9ea\x18\xfe\x16l\x01\x01\x81\n8\x04\x00\xe3\xff\x11\x00=\xfc%\x00\r\x00\xf8\xff\x86\x00M\x00\x8a\x02B\xda'b'\x00\x05N\xb1z\x9eax\xfe\x0em\x01\x01\x1d\n8\x04\x00 \x96iDff2\xbe`\x10\xbe\x11'b'\x00\x05N\xb1z\x9ea\xd8\xfe\x0en\x01\x01\x89\n8\x04\x00j\xd9iD=\n\x01>\x96\x15\x04\xe0'b'\x00\x05N\xb1z\x9eb@\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01G;\xfa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xd6u'b'\x00\x05N\xb1z\x9eb\xac\xfe\x06p\x01\x01}\xc8\x14\x00\x00\x03\x00\x08\xcf'b'\x00\x05N\xb1z\x9ec\x04\xfe\x04q\x01\x01\x98\x00\x00\x80\x8a\xd5\\'b'\x00\x05N\xb1z\x9ect\xfe\x02r\x01\x01*\x00\x00k\xd7'b'\x00\x05N\xb1z\x9ec\xd0\xfe\x1es\x01\x01\x18 \x0e{\x10\x00\x00\x00\x00}\xa6\x02\x18\xf4\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cM\xe9'b'\x00\x05N\xb1z\x9ed<\xfe\x1at\x01\x01>\xaa\xbb7\xbd\xf6\xfd\r\xc0\xae\xef\xa0\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xdf\xdf'b'\x00\x05N\xb1z\x9ed\x94\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce'b'\x00\x05N\xb1z\x9ed\xe0\xfe\x14v\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\xf1?\x00\x00\x00\x00\xaf\x001\x00!\xc8'b'\x00\x05N\xb1z\x9ee(\xfe\x03w\x01\x01Ms\x00\x04\xd7\xce'b'\x00\x05N\xb1z\x9f\xba\x98\xfe\x1cx\x01\x01!\x148\x04\x00r\xa6\x02\x18\xee\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xff\xff\x00\x00\x00\x00\xa6DD\xc0'b'\x00\x05N\xb1z\x9f\xbb\\\xfe\x1cy\x01\x01 n8\x04\x00\xeb\x10\xf7=\x99\x85\\?{\x9b\xc8\xbfO\x83C\xbc\x9f\xed3;\x8a\x1e\x08\x00\x00\x00\x00?\x03/P'b'\x00\x05N\xb1z\x9f\xe1\xa7\xfe5\xa0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xab\xbc'b'\x00\x05N\xb1z\x9f\xf8\x17\xfe!\xa1\xff\x00L\xcfZ \xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00U\xb5'b'\x00\x05N\xb1z\xa1H\xb8\xfe\x03\x81\x01\x01Ms\x00\x04\xfd\x90'b'\x00\x05N\xb1z\xa1I\xb0\xfe\x15\x82\x01\x01$\xd1E~\x10;\x06\x13\x06\x14\x06-\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\xca'b'\x00\x05N\xb1z\xa1JX\xfe\x16\x83\x01\x01#\xe68\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00g\xa7'b'\x00\x05N\xb1z\xa1J\xec\xfe\x1a\x84\x01\x01\x1b7\x93~\x10\x00\x00\x00\x00\xe6\xff\x0b\x00E\xfc\xfe\xff\xed\xff\t\x00\x00\xff\xf1\xff{\x01\x83\xca'b'\x00\x05N\xb1z\xa1Kx\xfe\x16\x85\x01\x01t\xfa8\x04\x00\xe4\xff\x1d\x00\\\xfc\x02\x00\xef\xff\xfd\xff\x01\xffT\xff\x11\x02#\x8b'b'\x00\x05N\xb1z\xa1L\x04\xfe\x16\x86\x01\x01\x81\xfa8\x04\x00\xe2\xff\x17\x00T\xfc\xf1\xff\xfd\xff\xfa\xff\x83\x00>\x00~\x02\r\x9e'b'\x00\x05N\xb1z\xa1L\x80\xfe\x0e\x87\x01\x01\x1d\xfa8\x04\x00O\x97iD\xa4p\x1f\xbea\x10\xa0C'b'\x00\x05N\xb1z\xa1L\xf8\xfe\x0e\x88\x01\x01\x89\xfa8\x04\x00\xf8\xd9iD\x85\xeb\t>\x97\x15$`'b'\x00\x05N\xb1z\xa1M\x90\xfe*\x89\x01\x01\x96s\xe7f\xbc\xfcl\x01\x00a\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd4y'b"\x00\x05N\xb1z\xa1N$\xfe\x1f\x8a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00'\x01G;\xfa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfc\x82"b'\x00\x05N\xb1z\xa1N\x98\xfe\x06\x8b\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0A'b'\x00\x05N\xb1z\xa1O\x08\xfe\x04\x8c\x01\x01\x98\x00\x00\x80\x8a\x1e{'b'\x00\x05N\xb1z\xa1O\x80\xfe\x02\x8d\x01\x01*\x00\x00\xceY'b'\x00\x05N\xb1z\xa1P\x00\xfe\x1e\x8e\x01\x01\x18\x80i~\x10\x00\x00\x00\x00~\xa6\x02\x18\xf5\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cuh'b"\x00\x05N\xb1z\xa1Pl\xfe\x1a\x8f\x01\x01>\xd5\xe9\xb1\xbe\x97'\x15\xc0\\\x7f\xaf\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x01\xe2"b'\x00\x05N\xb1z\xa1P\xc8\xfe\x08\x90\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00#\xcd'b'\x00\x05N\xb1z\xa1Q(\xfe\t\xf8\n\x00m\x03\x00\x00\x00\x00\xda\x00\x00\x00\xff\xd2'b'\x00\x05N\xb1z\xa1\xbd3\xfe5\xa2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01.^'b'\x00\x05N\xb1z\xa1\xe8\x9f\xfe!\xa3\xff\x00L\x19W \xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00g\x19'b"\x00\x05N\xb1z\xa2\xdc\xfc\xfe\x14\x91\x01\x01J\xcc\xccL=\xcc\xccL=\x85\xeb\xf1?\n\xd7#\xbd\xaf\x006\x00'O"b'\x00\x05N\xb1z\xa2\xddd\xfe\x03\x92\x01\x01Ms\x00\x04UA'b'\x00\x05N\xb1z\xa2\xde\x04\xfe\x1c\x93\x01\x01!\xf08\x04\x00t\xa6\x02\x18\xee\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x00\x00\xfe\xff\xff\xff\xa5D^j'b'\x00\x05N\xb1z\xa2\xdep\xfe\x1c\x94\x01\x01 s9\x04\x00\xc1\x80\n>\xab\x85]?!\xe7\xc7\xbf\x9b\x05\x0e<\x8d\x16\xc0\xbc0\xe8|\x00\x00\x00\x00?\x03L\x1d'b'\x00\x05N\xb1z\xa4Y\xfc\xfe\x03\xa0\x01\x01Ms\x00\x04\xb2\xa7'b"\x00\x05N\xb1z\xa5\x9e'\xfe5\xa6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x015\x93"b"\x00\x05N\xb1z\xa5\xca'\xfe!\xa7\xff\x00L\xc9\xf2\x1a\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00tD"b'\x00\x05N\xb1z\xa5\xcb\x14\xfe\x1a\xa1\x01\x01\x1b.E\x82\x10\x00\x00\x00\x00\xdc\xff\x18\x00(\xfc\x10\x00\x04\x00\xf3\xff\x06\xff\xf2\xff}\x01KI'b'\x00\x05N\xb1z\xa5\xcb\xa8\xfe\x16\xa2\x01\x01t\xec9\x04\x00\xe0\xff\x18\x00\x19\xfc\x0f\x00\x00\x00\xf4\xff\x04\xffU\xff\x11\x02{\xfc'b'\x00\x05N\xb1z\xa5\xcc\x08\xfe\x16\xa3\x01\x01\x81\xec9\x04\x00\xdc\xff\x19\x00:\xfc\t\x00\x0f\x00\xea\xff\x89\x00C\x00\x80\x02[\xd3'b"\x00\x05N\xb1z\xa5\xccX\xfe\x0e\xa4\x01\x01\x1d\xec9\x04\x00'\x94iD\x85\xebQ\xbea\x10,\xb3"b'\x00\x05N\xb1z\xa5\xcc\xa8\xfe\x0e\xa5\x01\x01\x89\xec9\x04\x00"\xd9iD\xb8\x1e\xf9=\x99\x15\x147'b'\x00\x05N\xb1z\xa5\xcd\x04\xfe\x1f\xa6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00cG;J\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x0c7'b'\x00\x05N\xb1z\xa5\xcdX\xfe\x06\xa7\x01\x01}\xc5\x14\x00\x00\x03\x00\xfao'b'\x00\x05N\xb1z\xa5\xcd\xa4\xfe\x04\xa8\x01\x01\x98\x00\x00\x80\x8a\xc2\xb3'b'\x00\x05N\xb1z\xa5\xcd\xec\xfe\x02\xa9\x01\x01*\x00\x00;U'b'\x00\x05N\xb1z\xa5\xce@\xfe\x1e\xaa\x01\x01\x18\x90~\x81\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xf5\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0c\x7fi'b'\x00\x05N\xb1z\xa5\xce\x94\xfe\x1a\xab\x01\x01>=\xc4\x16\xbfe.)\xc0\x14\x8e\xce\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\tf'b'\x00\x05N\xb1z\xa5\xce\xdc\xfe\x08\xac\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x19'b'\x00\x05N\xb1z\xa5\xcf,\xfe\x15\xad\x01\x01$\xc7\x93\x82\x10*\x06\x1a\x06\x04\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\xa7'b'\x00\x05N\xb1z\xa5\xcf\x90\xfe\x16\xae\x01\x01#\x00:\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00,Q'b"\x00\x05N\xb1z\xa6:C\xfe%\xa8\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xaa\xaa"b'\x00\x05N\xb1z\xa7c\xa4\xfe\x14\xaf\x01\x01J\x8f\xc2u=\x8f\xc2u=\xe1z\xf4?\n\xd7#\xbd\xaf\x00.\x00\xfe\xdc'b'\x00\x05N\xb1z\xa7d\x10\xfe\x03\xb0\x01\x01Ms\x00\x04\xca\xfc'b'\x00\x05N\xb1z\xa7z_\xfe5\xa9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc6\xdb'b'\x00\x05N\xb1z\xa7{\x94\xfe\x03\xb1\x01\x01/\xff\x00\x00\xc3b'b'\x00\x05N\xb1z\xa7\xbd\xc3\xfe!\xaa\xff\x00Lb\x8c\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x04\x0e'b'\x00\x05N\xb1z\xa7\xbf\x08\xfe\x1c\xb2\x01\x01!\xba9\x04\x00u\xa6\x02\x18\xee\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x01\x00\xfb\xff\xf8\xff\xa2D\xe8\xc1'b'\x00\x05N\xb1z\xa7\xbf\xa0\xfe\x1c\xb3\x01\x01 y:\x04\x00)y\x1c>\x00\x83\\?\xf0\x12\xca\xbf\xcb\xa3?<\x1e\x1eh\xbd<\xea\xab=\xa0p'b'\x00\x05N\xb1z\xa7\xc0\x14\xfe\x1c\xb4\x01\x01\x1e\xa1:\x04\x00\x96\xad\xf4\xbbY\x18\x00\xbdgJD@\xf9H|\xb9;\x14\x80;\x1f\x02\r<*\x02'b'\x00\x05N\xb1z\xa7\xc0\x98\xfe\x18\xb5\x01\x01\xb2\x17W\x9e\xbc\x9ca\xe3\xbco\xfdD@\xa4\x10*D\x80\xa6\x02\x18\xf5\xe7\xb8\xfd\x1fa'b'\x00\x05N\xb1z\xa7\xc6\x07\xfe\t\xab\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9d\x90'b'\x00\x05N\xb1z\xa9\x04@\xfe\x1c\xb6\x01\x01\xa3\xa5\xdd\xe99\xa4>\x90\xbaO\xb0\xb09\x00\x00\x00\x00\x00\x00\x00\x00\x96~\x81\x00\x00\x00\x00?\x03\x12\x99'b'\x00\x05N\xb1z\xa9\x06(\xfe\x03\xbb\x01\x01Ms\x00\x04\xa6['b'\x00\x05N\xb1z\xa9\x1a\xf8\xfe\x1a\xbc\x01\x01\x1bW\xf0\x85\x10\x00\x00\x00\x00\xcf\xff\r\x00!\xfc\xd5\xff\xae\xff\x10\x00\x03\xff\xf1\xff}\x01\x99\xd3'b'\x00\x05N\xb1z\xa9\x1b`\xfe\x16\xbd\x01\x01t\xdd:\x04\x00\xd9\xff\x10\x00A\xfc\xdc\xff\xb6\xff\x04\x00\x04\xffW\xff\x14\x02Y\x0b'b'\x00\x05N\xb1z\xa9\x1b\xc0\xfe\x16\xbe\x01\x01\x81\xdd:\x04\x00\xda\xff\x0f\x00\x16\xfc\xcf\xff\xd0\xff\xeb\xff\x98\x00C\x00q\x02\xce#'b'\x00\x05N\xb1z\xa9\x1c\x18\xfe\x0e\xbf\x01\x01\x1d\xdd:\x04\x00\xaa\x94iD\x8f\xc2I\xbea\x10\x9bn'b'\x00\x05N\xb1z\xa9\x1ct\xfe\x0e\xc0\x01\x01\x89\xdd:\x04\x00+\xd9iDp=\xfa=\x99\x15H?'b'\x00\x05N\xb1z\xa9\x1c\xf4\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\x9a;\xaa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q2,'b'\x00\x05N\xb1z\xa9\x1dh\xfe\x06\xc2\x01\x01}\xc6\x14\x00\x00\x03\x00\xdf\xe3'b'\x00\x05N\xb1z\xa9\x1d\xd8\xfe\x04\xc3\x01\x01\x98\x00\x00\x80\x8aU\x0b'b'\x00\x05N\xb1z\xa9\x1e<\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf'b'\x00\x05N\xb1z\xa9\x1e\xb4\xfe\x1e\xc5\x01\x01\x18\xb8\x8f\x84\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xf5\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\t\x00\xecc\x03\x0c\\i'b'\x00\x05N\xb1z\xa9\x1f,\xfe\x1a\xc6\x01\x01>d,\x84\xbf\xed\xf9\x8a\xc0G\xc5\x9a\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x14\xca'b'\x00\x05N\xb1z\xa9\x1f\x94\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec'b'\x00\x05N\xb1z\xa9 \x04\xfe\x15\xc8\x01\x01$"\x8d\x86\x10D\x065\x06.\x06.\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x82'b'\x00\x05N\xb1z\xa9 \x80\xfe\x16\xc9\x01\x01#\x05;\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa9\xdb'b'\x00\x05N\xb1z\xa9t\x1b\xfe5\xac\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x97\xe3'b'\x00\x05N\xb1z\xa9\x8a\xa7\xfe!\xad\xff\x00Lv\x8c\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaf8'b'\x00\x05N\xb1z\xaa\x8b\xbc\xfe\x03\xca\x01\x01Ms\x00\x04`R'b'\x00\x05N\xb1z\xaa\xa0h\xfe\x14\xcb\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=33\xf3?\xebQ\xb8\xbd\xaf\x003\x00tn'b'\x00\x05N\xb1z\xabUW\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x12\x01'b'\x00\x05N\xb1z\xab\x7f[\xfe!\xaf\xff\x00Lv\x8c\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00.e'b'\x00\x05N\xb1z\xac\x11x\xfe\x1c\xcc\x01\x01!K;\x04\x00w\xa6\x02\x18\xec\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x00\x00\xf9\xff\xf7\xff\xb0D\xc0g'b'\x00\x05N\xb1z\xac\x12\x04\xfe\x1c\xcd\x01\x01 ~;\x04\x00\xcc\xe8->N\xf6X?\xdao\xc9\xbfHo\x97\xba\x8a\xcc\x98\xbdF}\xb8=0K'b'\x00\x05N\xb1z\xac\x12`\xfe\x1c\xce\x01\x01\x1e\xa6;\x04\x00\\\x9e\x94\xbcg\xd8@\xbdppD@Q\xbb\xdd\xbb\xa6\xba\xa3=\xf1\x1c\xcf<\xab\xf9'b"\x00\x05N\xb1z\xac\x12\xb4\xfe\x18\xcf\x01\x01\xb2\x12`\xf4\xbc\x99\x0c5\xbds'E@\xe1\x1a*D\x81\xa6\x02\x18\xf3\xe7\xb8\xfd\x85\x94"b'\x00\x05N\xb1z\xac\x13\x08\xfe\x1c\xd0\x01\x01\xa3\xf7\x9f\xec9\xa0\x9f\x91\xba\xdc\xd1\xb09\x00\x00\x00\x00\x00\x00\x00\x00H\xb5n<\xd4*\xbc;\x1a\xa4'b'\x00\x05N\xb1z\xac\x13P\xfe\x03\xd1\x01\x01\xa5\xc5\x14\x00\xf3O'b'\x00\x05N\xb1z\xac\x13\x98\xfe\x0c\xd2\x01\x01\x02\xb0\x10\xf1z\xb1N\x05\x00\xba;\x04\x00\xd5\xdd'b'\x00\x05N\xb1z\xac\x13\xe8\xfe\x16\xd3\x01\x01\x88w\xa6\x02\x18\xec\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x95\x08'b'\x00\x05N\xb1z\xac\x148\xfe\x16\xd4\x01\x01\xc1\x13\x1a\xad<\x00\x00\x00\x00?\x03\xdb\xfe'b'\x00\x05N\xb1z\xac\x14\x80\xfe\x03\xd5\x01\x01Ms\x00\x04\xaa\xb8'b'\x00\x05N\xb1z\xac\x15\x14\xfe\x1a\xd6\x01\x01\x1bR\x9f\x89\x10\x00\x00\x00\x00\xe1\xff\x15\x00\x1c\xfc\xb5\xff?\x00\x11\x00\x0b\xff\xef\xff\x81\x01\x84\x04'b'\x00\x05N\xb1z\xac\x15h\xfe\x16\xd7\x01\x01t\xce;\x04\x00\xf0\xff\x12\x00\x1e\xfc\xbe\xffO\x00\x08\x00\t\xffM\xff\x15\x02S\x9d'b'\x00\x05N\xb1z\xac\x15\xb8\xfe\x16\xd8\x01\x01\x81\xce;\x04\x00\xe1\xff\x18\x00\r\xfc\x94\xff^\x00\x03\x00\x93\x00G\x00\x82\x02\xa5Z'b'\x00\x05N\xb1z\xac\x16\x04\xfe\x0e\xd9\x01\x01\x1d\xce;\x04\x00 \x96iDff2\xbeb\x10 \x8a'b'\x00\x05N\xb1z\xac\x16L\xfe\x0e\xda\x01\x01\x89\xce;\x04\x00\xc7\xd9iDG\xe1\x06>\x99\x15\xeb$'b'\x00\x05N\xb1z\xac\x16\xa4\xfe\x1f\xdb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x9a;\xc3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q \x1b'b'\x00\x05N\xb1z\xac\x16\xf4\xfe\x06\xdc\x01\x01}\xc8\x14\x00\x00\x03\x00f]'b'\x00\x05N\xb1z\xac\x17<\xfe\x04\xdd\x01\x01\x98\x00\x00\x80\x8a\x14/'b'\x00\x05N\xb1z\xac\x17\x80\xfe\x02\xde\x01\x01*\x00\x00o\x83'b'\x00\x05N\xb1z\xac\x17\xd0\xfe\x1e\xdf\x01\x01\x18\xf8\x9c\x87\x10\x00\x00\x00\x00\x81\xa6\x02\x18\xf3\xe7\xb8\xfd\xccj\n\x00F\x00\xff\xff\x0c\x00\xecc\x03\x0c\xd8\x85'b'\x00\x05N\xb1z\xac\x18$\xfe\x1a\xe0\x01\x01>\\\n\xba\xbf\xbdL\x14\xc0\xf6\xa2\x8f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x96\x05'b'\x00\x05N\xb1z\xac\x18l\xfe\x08\xe1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xafD'b'\x00\x05N\xb1z\xad\\k\xfe5\xb0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf4\x90'b'\x00\x05N\xb1z\xad\x7f\xdf\xfe!\xb1\xff\x00Lu\x93\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x83\x0f'b'\x00\x05N\xb1z\xad\x818\xfe\x15\xe2\x01\x01$7\x8b\x8a\x10_\x06\x12\x06#\x06k\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00=\xa8'b'\x00\x05N\xb1z\xad\x81\xe4\xfe\x16\xe3\x01\x01#\x0b<\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd8\xe0'b'\x00\x05N\xb1z\xaf#\xd4\xfe\x03\xe4\x01\x01Ms\x00\x04\x9d\xd4'b'\x00\x05N\xb1z\xaf8\\\xfe\x14\xe5\x01\x01J\xaeG\xe1=\xaeG\xe1=\xd7\xa3\xf0?\n\xd7#\xbd\xaf\x007\x00mE'b'\x00\x05N\xb1z\xaf8\xc0\xfe\x1c\xe6\x01\x01!\x01<\x04\x00w\xa6\x02\x18\xea\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfc\xff\xfa\xff\xff\xff\xc0DW\x96'b'\x00\x05N\xb1z\xaf9$\xfe\x1c\xe7\x01\x01 \x83<\x04\x00\xfb\xba3>I\xcfT?8\n\xc7\xbf\xac\x12*\xbd\xb91\x8c\xbd#\xf35\x9a\x15#\x95'b'\x00\x05N\xb1z\xb0\x9e\xd8\xfe\x1f\xef\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9a;,\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q0\xd5'b'\x00\x05N\xb1z\xb0\x9f,\xfe\x06\xf0\x01\x01}\xc8\x14\x00\x00\x03\x00\x13]'b'\x00\x05N\xb1z\xb0\x9f|\xfe\x03\xf1\x01\x01Ms\x00\x04\x84\x18'b'\x00\x05N\xb1z\xb0\xa0\x10\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N'b'\x00\x05N\xb1z\xb0\xa0X\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce'b'\x00\x05N\xb1z\xb0\xa0\xb0\xfe\x1e\xf4\x01\x01\x18\x10u\x8d\x10\x00\x00\x00\x00\x81\xa6\x02\x18\xf0\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x11\x00\xecc\x03\x0c\xfb\x18'b'\x00\x05N\xb1z\xb0\xa1\x04\xfe\x1a\xf5\x01\x01>[\xb6\xbf\xbf`\x13\xde\xbf\xccp\\\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xf5 'b'\x00\x05N\xb1z\xb0\xa1L\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\x00\x05N\xb1z\xb0\xa1\x9c\xfe\x1c\xf7\x01\x01\xa3\x1a{\xef9\xcb\x1e\x93\xba\xde\xe9\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xcc\x98<\x05!\xa9;\xb1\xb3'b'\x00\x05N\xb1z\xb0\xa1\xe0\xfe\x03\xf8\x01\x01\xa5\xc8\x14\x00\x8f\xde'b'\x00\x05N\xb1z\xb0\xa2(\xfe\x0c\xf9\x01\x01\x02\x88R\xf5z\xb1N\x05\x00\xd4<\x04\x00\xc2"'b'\x00\x05N\xb1z\xb0\xa2t\xfe\x16\xfa\x01\x01\x88w\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90\xb2'b'\x00\x05N\xb1z\xb0\xa2\xc4\xfe\x16\xfb\x01\x01\xc1\xae\x8b\xc3<\xd0w4=x\x19X9@\xf4&>\x00\x00\x00\x00?\x03\xe7\x9d'b'\x00\x05N\xb1z\xb0\xa3\x18\xfe\t\xf9\n\x00m\x02\x00\x00\x00\x00\xd9\x00\x00\x00\xfe\x9d'b'\x00\x05N\xb1z\xb1AG\xfe5\xb4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xef]'b'\x00\x05N\xb1z\xb1W\xa3\xfe!\xb5\xff\x00L\x0b\x90\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaa\x8e'b'\x00\x05N\xb1z\xb2\x1dX\xfe\x15\xfc\x01\x01$\x93\x89\x8e\x10K\x06\xf9\x05\t\x06@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00t('b'\x00\x05N\xb1z\xb2\x1d\xd4\xfe\x16\xfd\x01\x01#\x10=\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xcd\x02'b'\x00\x05N\xb1z\xb2\x1e$\xfe\x03\xfe\x01\x01Ms\x00\x046\xa9'b'\x00\x05N\xb1z\xb2D\xd0\xfe\x14\xff\x01\x01J{\x14.>{\x14.>\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x005\x00\xdd\xcd'b'\x00\x05N\xb1z\xb3F\x07\xfe5\xb6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01j\xbf'b'\x00\x05N\xb1z\xb3\\\x0b\xfe!\xb7\xff\x00L\x0b\x90\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00+\xd3'b'\x00\x05N\xb1z\xb3\x99p\xfe\x12\x00\x01\x01\xfcr=\x04\x004\x00\x01\x00ARMMASK\x00Wr\xe6\xb2'b'\x00\x05N\xb1z\xb3\x99\xf4\xfe\t\x01\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xbd\xdb'b'\x00\x05N\xb1z\xb3\x9ad\xfe\x1c\x02\x01\x01!\xca<\x04\x00w\xa6\x02\x18\xe9\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfb\xff\xfa\xff\x04\x00\xbfD\xaf4'b'\x00\x05N\xb1z\xb3\x9a\xe0\xfe\x1c\x03\x01\x01 \x89=\x04\x00\x99\xce->\xf9!Q?\xf1n\xc6\xbfXNu\xbd\x1dA\x8a\xbd\rL1\xbd\x92s'b'\x00\x05N\xb1z\xb3\x9bh\xfe\x1a\x04\x01\x01\x1bW\xfc\x90\x10\x00\x00\x00\x00\xef\xff\x0b\x00\r\xfc\xf6\xff@\x00\x12\x00\n\xff\xee\xff|\x01!\xb2'b'\x00\x05N\xb1z\xb3\x9b\xe8\xfe\x16\x05\x01\x01t\xb1=\x04\x00\xfc\xff\x11\x00\x1f\xfc\x0c\x00:\x00\x00\x00\x04\xffH\xff\x10\x02Z\xa9'b'\x00\x05N\xb1z\xb3\x9cd\xfe\x16\x06\x01\x01\x81\xb1=\x04\x00\xe5\xff\x1c\x00\x11\xfc5\x00!\x00\xeb\xff\x96\x00I\x00{\x02G 'b"\x00\x05N\xb1z\xb3\x9c\xd0\xfe\x0e\x07\x01\x01\x1d\xb1=\x04\x00\xd4\x96iD\xb8\x1e'\xbeb\x10\x83r"b'\x00\x05N\xb1z\xb3\x9d,\xfe\x0e\x08\x01\x01\x89\xb1=\x04\x00U\xdbiD\x8f\xc2\x1f>\x9b\x15<\xfb'b'\x00\x05N\xb1z\xb3\x9d\x98\xfe\x1f\t\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x14\x01\x9a;\xfd\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xebl'b'\x00\x05N\xb1z\xb3\x9e\x00\xfe\x06\n\x01\x01}\xc5\x14\x00\x00\x03\x00\x05\xa8'b'\x00\x05N\xb1z\xb3\x9e\\\xfe\x04\x0b\x01\x01\x98\x00\x00\x80\x8a+V'b'\x00\x05N\xb1z\xb3\x9e\xac\xfe\x02\x0c\x01\x01*\x00\x00\x06@'b'\x00\x05N\xb1z\xb3\x9f\x1c\xfe\x1e\r\x01\x01\x188\x86\x90\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xf0\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x10\x00\xecc\x03\x0cN\xa0'b'\x00\x05N\xb1z\xb3\x9f|\xfe\x1a\x0e\x01\x01>"\xb8\xd9\xbfx\x14\xab\xbf\xe1\xbeI\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x009\x9a'b'\x00\x05N\xb1z\xb3\x9f\xd0\xfe\x08\x0f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00zd'b'\x00\x05N\xb1z\xb3\xa0,\xfe\x1c\x10\x01\x01\x1e\xc5=\x04\x00\x12\xee\x9c\xbc\xb3\xfa\xeb\xbc\x85\x96D@\x83\xfa\x91\xbc5Z\x13=l\xc9M;/\x03'b'\x00\x05N\xb1z\xb3\xa0\x8c\xfe\x18\x11\x01\x01\xb2\xa3F\xf5\xbc\xa5L\xd0\xbcQ[E@{\x14*D\x80\xa6\x02\x18\xf0\xe7\xb8\xfd\xb4t'b'\x00\x05N\xb1z\xb3\xa0\xe8\xfe\x03\x12\x01\x01Ms\x00\x04\xb7\x8a'b'\x00\x05N\xb1z\xb5\x1c\xaf\xfe5\xb8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd3\x02'b'\x00\x05N\xb1z\xb54\x94\xfe\x1c\x13\x01\x01\xa3}\x0f\xf29%\x88\x94\xbaD\xe9\xb09\x00\x00\x00\x00\x00\x00\x00\x00N[\x8c<\xcb\x84Z;!\xb9'b'\x00\x05N\xb1z\xb55\x1c\xfe\x03\x14\x01\x01\xa5\xc2\x14\x00\xa0!'b'\x00\x05N\xb1z\xb55\x8c\xfe\x0c\x15\x01\x01\x020\x9c\xf9z\xb1N\x05\x00\xd9=\x04\x00\xc3\xe5'b'\x00\x05N\xb1z\xb55\xfc\xfe\x16\x16\x01\x01\x88v\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdf\x9a'b'\x00\x05N\xb1z\xb56h\xfe\x16\x17\x01\x01\xc1\xa3y\xce<\xec\x9e(=\x8f\x02\x04<;\xab\x1f>\x00\x00\x00\x00?\x03\xb3\x1c'b"\x00\x05N\xb1z\xb57H\xfe\x15\x19\x01\x01$\x0f\x83\x92\x10*\x06#\x06'\x06!\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xe1"b'\x00\x05N\xb1z\xb57\xb8\xfe\x16\x1a\x01\x01#\x15>\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\xb4'b'\x00\x05N\xb1z\xb5[\xf3\xfe!\xb9\xff\x00L\xa8\x89\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc4\x03'b"\x00\x05N\xb1z\xb6vw\xfe%\xba\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x89\x9d"b'\x00\x05N\xb1z\xb6\xb9 \xfe\x03\x1b\x01\x01Ms\x00\x04\xb4&'b'\x00\x05N\xb1z\xb6\xb9\xdc\xfe\x14\x1c\x01\x01J\n\xd7#>\n\xd7#>\xd7\xa3\xf0?\xcc\xccL=\xaf\x002\x00c^'b'\x00\x05N\xb1z\xb6\xba@\xfe\x1c\x1d\x01\x01!\\>\x04\x00v\xa6\x02\x18\xe7\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfc\xff\xf9\xff\x05\x00\xabD\xce~'b'\x00\x05N\xb1z\xb6\xba\xa4\xfe\x1c\x1e\x01\x01 \x8e>\x04\x00\xd5(">\xab%M?^\x05\xc7\xbf\x8bNC\xbdW\xb4\xa3\xbd#9N\xbd\xbf.'b'\x00\x05N\xb1z\xb6\xba\xf0\xfe\x03\x1f\x01\x01/\xff\x00\x00\xdc/'b'\x00\x05N\xb1z\xb7\r_\xfe5\xbb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1c\x15'b'\x00\x05N\xb1z\xb77{\xfe!\xbc\xff\x00L\xa8\x89\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0e\x12'b"\x00\x05N\xb1z\xb7\\7\xfe\t\xbd\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03'H"b'\x00\x05N\xb1z\xb8?\xf0\xfe\x1a \x01\x01\x1b\x03\xac\x94\x10\x00\x00\x00\x00\xe1\xff\x1c\x00;\xfc\xfb\xff \x00\xf4\xff\x01\xff\xed\xffx\x01\xa7\xb8'b'\x00\x05N\xb1z\xb8@l\xfe\x16!\x01\x01t\xa2>\x04\x00\xe1\xff\x1f\x00>\xfc\xe7\xff.\x00\xec\xff\xfe\xfeK\xff\r\x02f\x88'b'\x00\x05N\xb1z\xb8@\xc8\xfe\x16"\x01\x01\x81\xa2>\x04\x00\xdd\xff%\x002\xfc\xac\xffF\x00\xde\xff\x8c\x00U\x00o\x02Q\x90'b'\x00\x05N\xb1z\xb8A\x1c\xfe\x0e#\x01\x01\x1d\xa2>\x04\x00e\x95iD{\x14>\xbec\x10\x9cq'b'\x00\x05N\xb1z\xb8Ah\xfe\x0e$\x01\x01\x89\xa2>\x04\x00\x10\xd9iDG\xe1\xf6=\x9b\x15\xaa\xca'b'\x00\x05N\xb1z\xb8A\xc4\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x006\x00(;0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x13\x93'b'\x00\x05N\xb1z\xb8B\x18\xfe\x06&\x01\x01}\xc8\x14\x00\x00\x03\x00?\x86'b"\x00\x05N\xb1z\xb8Bp\xfe\x04'\x01\x01\x98\x00\x00\x80\x8a=\xe1"b'\x00\x05N\xb1z\xb8B\xbc\xfe\x02(\x01\x01*\x00\x00\xf3L'b'\x00\x05N\xb1z\xb8C\x18\xfe\x1e)\x01\x01\x18`\x97\x93\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xee\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x10\x00\xecc\x03\x0cNI'b'\x00\x05N\xb1z\xb8Cp\xfe\x1a*\x01\x01>\x8f\xc2%\xc0333\xbf\x99\xed[\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\x9a]'b'\x00\x05N\xb1z\xb8C\xc0\xfe\x08+\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00n\xc7'b'\x00\x05N\xb1z\xb8D\x08\xfe\x03,\x01\x01Ms\x00\x042W'b'\x00\x05N\xb1z\xb8X\x98\xfe\x1c-\x01\x01\x1e\xcb>\x04\x00\xaee\xd2\xbcrN\x8f\xbc\xfaQD@t\xd7r\xbd\xd9\x06M<\\\xd9x\xbc\x99k'b'\x00\x05N\xb1z\xb8X\xfc\xfe\x18.\x01\x01\xb2\xeb\xe0\x14\xbdc\x95\\\xbcp\x18E@\xeb!*D\x7f\xa6\x02\x18\xee\xe7\xb8\xfd\xffe'b'\x00\x05N\xb1z\xb8YP\xfe\x1c/\x01\x01\xa3\x9c\x90\xf49[\xf9\x95\xba\xf8\xe3\xb09\x00\x00\x00\x00\x00\x00\x00\x00\x04\x13\x82\x04\x00\x1aZ'b'\x00\x05N\xb1z\xb8Z8\xfe\x162\x01\x01\x88v\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcd\x0b'b'\x00\x05N\xb1z\xb8Z\xac\xfe\x163\x01\x01\xc1F\xee\x90\x00\x00\x00\x00?\x03\xb5\x11'b'\x00\x05N\xb1z\xb8\xe9\xc3\xfe5\xbe\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01M-'b'\x00\x05N\xb1z\xb9\x13\xb7\xfe!\xbf\xff\x00L\xc4\x8b\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x000\t'b'\x00\x05N\xb1z\xba\x01\xd4\xfe\x154\x01\x01$\xed\x7f\x96\x103\x06-\x06\xe2\x05\x17\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16p'b'\x00\x05N\xb1z\xba\x02X\xfe\x165\x01\x01#\x1a?\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00w\xfa'b'\x00\x05N\xb1z\xba\x02\xa8\xfe\x036\x01\x01Ms\x00\x04\x99*'b'\x00\x05N\xb1z\xba\xc7\x1f\xfe5\xc0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01iU'b'\x00\x05N\xb1z\xba\xdd\x1b\xfe!\xc1\xff\x00L\xc4\x8b\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Ru'b'\x00\x05N\xb1z\xbbV\xb8\xfe\x147\x01\x01J\xebQ8>\xebQ8>\x85\xeb\xf1?\n\xd7\xa3\xbc\xaf\x001\x00\x08n'b'\x00\x05N\xb1z\xbbW\\\xfe\x1a8\x01\x01\x1b\x1cW\x98\x10\x00\x00\x00\x00\xe7\xff\x08\x00?\xfc\xc0\xff\x17\x00\x0e\x00\xfa\xfe\xe9\xffx\x01-\x13'b'\x00\x05N\xb1z\xbbW\xc8\xfe\x169\x01\x01t\x93?\x04\x00\xdf\xff\x0c\x00O\xfc\xca\xff\x16\x00\xfe\xff\xfd\xfeL\xff\x0c\x02\x0f\x01'b'\x00\x05N\xb1z\xbbXL\xfe\x16:\x01\x01\x81\x93?\x04\x00\xe1\xff\x14\x00I\xfc\xf7\xff\xf2\xff\xf2\xfff\x00@\x00x\x02\x81G'b'\x00\x05N\xb1z\xbbX\xa8\xfe\x0e;\x01\x01\x1d\x93?\x04\x00p\x95iD)\\=\xbeb\x10\x085'b'\x00\x05N\xb1z\xbbY\x04\xfe\x0e<\x01\x01\x89\x93?\x04\x00&\xdaiD\xcd\xcc\x0c>\x9c\x15\xb0b'b'\x00\x05N\xb1z\xbbYp\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01(;0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00QF\xdf'b'\x00\x05N\xb1z\xbbY\xd8\xfe\x06>\x01\x01}\xc5\x14\x00\x00\x03\x00\x9fe'b'\x00\x05N\xb1z\xbbZ0\xfe\x04?\x01\x01\x98\x00\x00\x80\x8aca'b'\x00\x05N\xb1z\xbbZx\xfe\x02@\x01\x01*\x00\x00\x9a6'b'\x00\x05N\xb1z\xbbZ\xd0\xfe\x1eA\x01\x01\x18\xa0\xa4\x96\x10\x00\x00\x00\x00~\xa6\x02\x18\xeb\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\x12\x00\xecc\x03\x0c\x9f\xd5'b'\x00\x05N\xb1z\xbb[H\xfe\x1aB\x01\x01>\xa3\\\x1e\xc0/\xc8x\xbf\x99\xb9~\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe5y'b'\x00\x05N\xb1z\xbb[\x94\xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<'b'\x00\x05N\xb1z\xbb[\xe4\xfe\x1cD\x01\x01!$?\x04\x00v\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\xfa\xff\xfc\xff\x93D\xfc 'b'\x00\x05N\xb1z\xbb\\D\xfe\x1cE\x01\x01 \xa7?\x04\x00c\x96!>\x80\xd0G?\x85\xdb\xc8\xbf\t U<\n\x8f}\xbd\xd8\x949=E\xb5'b'\x00\x05N\xb1z\xbb\\\x8c\xfe\x03F\x01\x01Ms\x00\x04\xe0\xa2'b'\x00\x05N\xb1z\xbc\xb63\xfe5\xc2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xec\xb7'b'\x00\x05N\xb1z\xbc\xe8\xbb\xfe!\xc3\xff\x00L\xc4\x8b\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd3('b'\x00\x05N\xb1z\xbc\xe9\xa0\xfe\x1cG\x01\x01\x1e\xcf?\x04\x00\xdep(\xbd\x073\x1b\xbcS\x1cD@9\x8e1\xbd\x12\x80\x12\xbd\x19\xcb`\xbaP\xd8'b'\x00\x05N\xb1z\xbc\xea\x1c\xfe\x18H\x01\x01\xb2\xdbgU\xbd\xea\xce\x95\xbb\xb5\xe9D@\xc2\x15*D~\xa6\x02\x18\xeb\xe7\xb8\xfd\xe5m'b'\x00\x05N\xb1z\xbc\xeax\xfe\x1cI\x01\x01\xa3\n\x0f\xf79^o\x97\xba\x90\xe8\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x98\x8a<\xe6X\x1a<)\xb6'b'\x00\x05N\xb1z\xbc\xea\xcc\xfe\x03J\x01\x01\xa5\xc8\x14\x00\x8a\xf3'b'\x00\x05N\xb1z\xbc\xeb \xfe\x0cK\x01\x01\x02h9\x01{\xb1N\x05\x00\xe3?\x04\x00\x15\xc2'b'\x00\x05N\xb1z\xbc\xebt\xfe\x16L\x01\x01\x88v\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa6d'b'\x00\x05N\xb1z\xbc\xeb\xc8\xfe\x16M\x01\x01\xc1\xf0\x9e\xc3<\xed\x95\x12=r\x1e\x8a:\x8f\xd5\x10>\x00\x00\x00\x00?\x03\x0eZ'b'\x00\x05N\xb1z\xbc\xec\x18\xfe\x15N\x01\x01$/{\x9a\x10f\x06A\x06\x16\x06E\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x0e'b'\x00\x05N\xb1z\xbc\xecl\xfe\x16O\x01\x01#\x1f@\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x008*'b'\x00\x05N\xb1z\xbee\x80\xfe\x03P\x01\x01Ms\x00\x04)\xe4'b'\x00\x05N\xb1z\xbez\x0c\xfe\x14Q\x01\x01J\xcc\xccL>\xcc\xccL>\xd7\xa3\xf0?\n\xd7#\xbd\xaf\x004\x00,y'b'\x00\x05N\xb1z\xbezl\xfe\x1aR\x01\x01\x1b6\x04\x9c\x10\x00\x00\x00\x00\xeb\xff\x0e\x00\xf2\xfb\xd3\xff\xc7\xff\n\x00\xfd\xfe\xe4\xffs\x01]\xb7'b'\x00\x05N\xb1z\xbez\xc4\xfe\x16S\x01\x01t\x84@\x04\x00\xeb\xff\x18\x00\xe6\xfb\xd8\xff\xd5\xff\xf3\xff\xf9\xfe7\xff\x03\x02P:'b'\x00\x05N\xb1z\xbe{\x1c\xfe\x16T\x01\x01\x81\x84@\x04\x00\xe2\xff\x1f\x00\xea\xfb\xc2\xff\xf2\xff\xe7\xffz\x00(\x00{\x02\x06\xab'b"\x00\x05N\xb1z\xbe{h\xfe\x0eU\x01\x01\x1d\x84@\x04\x005\x95iD=\nA\xbeb\x10@'"b'\x00\x05N\xb1z\xbe{\xb8\xfe\x0eV\x01\x01\x89\x84@\x04\x00X\xdaiD\x85\xeb\x0f>\x9c\x15X\x81'b'\x00\x05N\xb1z\xbe|\x10\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x01(;\xa8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xb1\x16'b'\x00\x05N\xb1z\xbe|`\xfe\x06X\x01\x01}\x95\x14\x00\x00\x03\x00\xa8\xcd'b'\x00\x05N\xb1z\xbe|\xac\xfe\x04Y\x01\x01\x98\x00\x00\x80\x8a&\xd4'b'\x00\x05N\xb1z\xbe|\xf4\xfe\x02Z\x01\x01*\x00\x00\x04j'b'\x00\x05N\xb1z\xbe\xb2\x97\xfe5\xc4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01r\x98'b'\x00\x05N\xb1z\xbe\xc9w\xfe!\xc5\xff\x00LK\x93\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xef|'b'\x00\x05N\xb1z\xbf\xfb,\xfe\x1e[\x01\x01\x18\xc8\xb5\x99\x10\x00\x00\x00\x00}\xa6\x02\x18\xe8\xe7\xb8\xfd^j\n\x00F\x00\xff\xff\x13\x00\xecc\x03\x0cu\x13'b'\x00\x05N\xb1z\xbf\xfb\xac\xfe\x1a\\\x01\x01>\x1d\xbf\x0b\xc0\xf3\xa3\xce\xbf\x00\xe0R\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x94\xe5'b'\x00\x05N\xb1z\xbf\xfb\xfc\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V'b'\x00\x05N\xb1z\xbf\xfcX\xfe\x1c^\x01\x01!\xed?\x04\x00w\xa6\x02\x18\xe3\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x06\x00\x00\x00\xfe\xff\x90Dg^'b'\x00\x05N\xb1z\xbf\xfc\xbc\xfe\x1c_\x01\x01 \xac@\x04\x00\xea\xe0->\xfd\xe3C?m\xce\xc7\xbf\xe8z|=f\n\xc0\xbb\xb3+\xd8<\x98\xe7'b'\x00\x05N\xb1z\xbf\xfd\x08\xfe\x03`\x01\x01Ms\x00\x04\xa1\t'b'\x00\x05N\xb1z\xc0\x11l\xfe\x1ca\x01\x01\x1e\xd4@\x04\x00|\xc3P\xbd=\xf8\xa8\xbc~ D@f\xea\x03=\xf2\x15w\xbc\xd1\xaaW=\x08&'b'\x00\x05N\xb1z\xc0\x11\xc4\xfe\x18b\x01\x01\xb2C&\x81\xbd\x1f\t\x83\xbc\x05\xf1D@p\x1d*D}\xa6\x02\x18\xe6\xe7\xb8\xfd\x9bb'b'\x00\x05N\xb1z\xc0\x12\x14\xfe\t\xfa\n\x00m\x02\x00\x00\x00\x00\xda\x00\x00\x00\x0c\x03'b'\x00\x05N\xb1z\xc0\x12d\xfe\x1cc\x01\x01\xa3H\x9f\xf998\xec\x98\xba\xab\xee\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x80\x84\x00\x00\x00\x00?\x03P\xf3'b'\x00\x05N\xb1z\xc0\x8f\x07\xfe5\xc6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf7z'b'\x00\x05N\xb1z\xc0\xa5\x1b\xfe!\xc7\xff\x00L\x82\x9a\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\r\xcf'b'\x00\x05N\xb1z\xc1|\xf0\xfe\x15h\x01\x01$\xc6w\x9e\x10\xdf\x05=\x06\x07\x06\xd0\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03G'b'\x00\x05N\xb1z\xc1}\x8c\xfe\x16i\x01\x01#$A\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x11\xef'b'\x00\x05N\xb1z\xc1}\xf4\xfe\x03j\x01\x01Ms\x00\x04r/'b'\x00\x05N\xb1z\xc2]3\xfe5\xc8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01N\xc7'b'\x00\x05N\xb1z\xc2sc\xfe!\xc9\xff\x00L\x82\x9a\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9bW'b'\x00\x05N\xb1z\xc3\x00H\xfe\x12k\x01\x01\xfc^A\x04\x004\x00\x01\x00ARMMASK\x00Wr\xa5\\'b'\x00\x05N\xb1z\xc3\x00\xe4\xfe\tl\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03]_'b'\x00\x05N\xb1z\xc3\x01L\xfe\x1am\x01\x01\x1b\xa5\xb2\x9f\x10\x00\x00\x00\x00\xe4\xff\x00\x00K\xfc4\x00\xe1\xff\x0f\x00\xfc\xfe\xe2\xffx\x01\x94b'b'\x00\x05N\xb1z\xc3\x01\xa8\xfe\x16n\x01\x01tuA\x04\x00\xe5\xff\x06\x00S\xfc#\x00\xf8\xff\x0e\x00\xff\xfeF\xff\r\x02\xc5['b'\x00\x05N\xb1z\xc3\x01\xfc\xfe\x16o\x01\x01\x81uA\x04\x00\xdd\xff\x0f\x00I\xfcB\x00\xfc\xff\x08\x00\x93\x003\x00w\x02\x15v'b'\x00\x05N\xb1z\xc3\x02l\xfe\x0ep\x01\x01\x1duA\x04\x00C\x94iD\xf5(P\xbec\x10\xa4\x1c'b'\x00\x05N\xb1z\xc3\x02\xb8\xfe\x0eq\x01\x01\x89uA\x04\x00\x0b\xd8iDp=\xd6=\x9d\x15\x88\x15'b'\x00\x05N\xb1z\xc3\x03\x14\xfe\x1fr\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01j;\xa1\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xf4\x02'b'\x00\x05N\xb1z\xc3\x03d\xfe\x06s\x01\x01}\xc5\x14\x00\x00\x03\x00\xf4\x1f'b'\x00\x05N\xb1z\xc3\x03\xb0\xfe\x04t\x01\x01\x98\x00\x00\x80\x8a\xcd.'b'\x00\x05N\xb1z\xc3\x03\xf8\xfe\x02u\x01\x01*\x00\x00s\x10'b'\x00\x05N\xb1z\xc3\x04L\xfe\x1ev\x01\x01\x18\x18\xd8\x9f\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xe4\xe7\xb8\xfd,j\n\x00F\x00\xff\xff\x08\x00\xecc\x03\x0c\xdb\xb6'b'\x00\x05N\xb1z\xc3\x04\xb8\xfe\x1aw\x01\x01>G\xbf\xb0\xbf\x00\x82\x07\xc0\x8f^\x7f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00E\xbb'b'\x00\x05N\xb1z\xc3\x05\x00\xfe\x08x\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf0'b'\x00\x05N\xb1z\xc3\x05L\xfe\x14y\x01\x01J\n\xd7\xa3=\n\xd7\xa3=33\xf3?\n\xd7\xa3\xbd\xaf\x001\x00\x14\x7f'b'\x00\x05N\xb1z\xc3\x05\x94\xfe\x03z\x01\x01Ms\x00\x04\nt'b'\x00\x05N\xb1z\xc3\x19\xf8\xfe\x1c{\x01\x01!\x7fA\x04\x00y\xa6\x02\x18\xe3\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\t\x00\x05\x00\xf6\xff\x9fD\x97\xda'b'\x00\x05N\xb1z\xc3\x1ad\xfe\x1c|\x01\x01 \xb1A\x04\x00\xda\xbaC>;\xf4D?z\x9d\xc9\xbf\xc4\xc2\xc3=\xfd\xead=T\xbe\xd2=\xb5\xaf'b'\x00\x05N\xb1z\xc4I#\xfe5\xca\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcb%'b'\x00\x05N\xb1z\xc4_\x8b\xfe!\xcb\xff\x00L\x82\x9a\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1a\n'b'\x00\x05N\xb1z\xc4\x95\xdc\xfe\x1c}\x01\x01\x1e\xd9A\x04\x00\x9b\xe4\x19\xbd\x9f\xf7\xdb\xbc\n=D@\x8ap\x9c=\xed\x81s\xbdv\x07\x93<\x92('b'\x00\x05N\xb1z\xc4\x96l\xfe\x18~\x01\x01\xb2\x82+L\xbda&\xb1\xbc\x01\x15E@\xf6(*D\x7f\xa6\x02\x18\xe4\xe7\xb8\xfdfI'b'\x00\x05N\xb1z\xc4\x96\xcc\xfe\x1c\x7f\x01\x01\xa3b3\xfc9\xbcn\x9a\xba\x08\xf1\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xed\xf1\x8a<\x83\xbe\xb7;b\xc2'b'\x00\x05N\xb1z\xc4\x97<\xfe\x03\x80\x01\x01\xa5\xc5\x14\x00\xc5\xf0'b'\x00\x05N\xb1z\xc4\x97\xac\xfe\x0c\x81\x01\x01\x02\xa8(\t{\xb1N\x05\x00\xedA\x04\x00\x94\x1a'b'\x00\x05N\xb1z\xc4\x98 \xfe\x16\x82\x01\x01\x88y\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15}'b'\x00\x05N\xb1z\xc4\x98\xa4\xfe\x12\x83\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x04('b'\x00\x05N\xb1z\xc4\x99\x1c\xfe\x16\x84\x01\x01\xc1\x1e\xf9\xd8<\xa6\x11\r=\x94ZX<\xe6W\n>\x00\x00\x00\x00?\x03\xf3\x9d'b'\x00\x05N\xb1z\xc6\x12,\xfe\x03\x86\x01\x01Ms\x00\x04\xf3\x0c'b'\x00\x05N\xb1z\xc6\x13,\xfe\x15\x87\x01\x01$Is\xa2\x10\x13\x06S\x065\x06\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x004\xe4'b'\x00\x05N\xb1z\xc6\x13\xb8\xfe\x16\x88\x01\x01#)B\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00:\xd2'b'\x00\x05N\xb1z\xc6\x14D\xfe\x1a\x89\x01\x01\x1bn]\xa3\x10\x00\x00\x00\x00\xd6\xff\x15\x00\x03\xfc\x1b\x00\xb1\xff!\x00\x06\xff\xe6\xffx\x01\xc6\xfd'b'\x00\x05N\xb1z\xc6\x14\xe8\xfe\x16\x8a\x01\x01teB\x04\x00\xe4\xff\x17\x00\x0f\xfc/\x00\xc2\xff\x0b\x00\xff\xfe:\xff\x08\x02\x8b$'b'\x00\x05N\xb1z\xc6\x15@\xfe\x16\x8b\x01\x01\x81eB\x04\x00\xd6\xff"\x00\x0c\xfc\x0f\x00\x9e\xff\x1f\x00\x88\x005\x00n\x02QG'b'\x00\x05N\xb1z\xc6\x15\x8c\xfe\x0e\x8c\x01\x01\x1deB\x04\x00\xd4\x93iD\xb8\x1eW\xbec\x10\xd3\xdf'b'\x00\x05N\xb1z\xc6\x15\xd8\xfe\x0e\x8d\x01\x01\x89eB\x04\x00l\xd8iDff\xe2=\x9d\x15\xe5\xa1'b'\x00\x05N\xb1z\xc6\x164\xfe\x1f\x8e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1d\x01j;\\\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x10\xbb'b'\x00\x05N\xb1z\xc6\x16\x84\xfe\x06\x8f\x01\x01}\xc8\x14\x00\x00\x03\x00\x95\x1f'b'\x00\x05N\xb1z\xc6\x16\xd0\xfe\x04\x90\x01\x01\x98\x00\x00\x80\x8a\xa5\xc4'b'\x00\x05N\xb1z\xc6\x17\x14\xfe\x02\x91\x01\x01*\x00\x00\x9d]'b'\x00\x05N\xb1z\xc6\x17h\xfe\x1e\x92\x01\x01\x18X\xe5\xa2\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xe5\xe7\xb8\xfd\x18j\n\x00F\x00\xff\xff\x01\x00\xecc\x03\x0cJ^'b'\x00\x05N\xb1z\xc6\x17\xbc\xfe\x1a\x93\x01\x01>\xb9\x85Q\xbf+0)\xc0\xb8\xf0\x81\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xc2\xf9'b'\x00\x05N\xb1z\xc6\x18\x0c\xfe\x08\x94\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x97\xdb'b'\x00\x05N\xb1z\xc69;\xfe5\xcc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01U\n'b'\x00\x05N\xb1z\xc6d{\xfe!\xcd\xff\x00L\xd3\x93\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x8c\r'b"\x00\x05N\xb1z\xc6\xa0\xc3\xfe%\xce\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x1ch"b'\x00\x05N\xb1z\xc6\xef\x0f\xfe\t\xcf\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf4\x85'b'\x00\x05N\xb1z\xc7\xcd\xdc\xfe\x14\x95\x01\x01J\n\xd7#<\n\xd7#<33\xf3?\xebQ\xb8\xbd\xaf\x002\x00<\xda'b'\x00\x05N\xb1z\xc7\xceD\xfe\x03\x96\x01\x01Ms\x00\x04\x8bW'b'\x00\x05N\xb1z\xc7\xce\xe0\xfe\x1c\x97\x01\x01!GB\x04\x00{\xa6\x02\x18\xe5\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\n\x00\t\x00\xf7\xff\xacD\xd8\x0f'b'\x00\x05N\xb1z\xc7\xcfX\xfe\x1c\x98\x01\x01 \xb6B\x04\x00\x19Nc>\xd7\xb7H?\x02\xc8\xc9\xbf\x8c\xad\xde=\x87\xf3\xcb=9c\xbd=\xef3'b'\x00\x05N\xb1z\xc7\xcf\xac\xfe\x03\x99\x01\x01/\xff\x00\x00\x8f\xf9'b'\x00\x05N\xb1z\xc7\xd0 \xfe\x1c\x9a\x01\x01\x1e\xdeB\x04\x00\xa4\x80\xc6\xbcw\x91\x13\xbd\xa5dD@$\xc0\x8d=\x1e\xa3Y;\x05*\xac\xbc-;'b'\x00\x05N\xb1z\xc7\xd0\x80\xfe\x18\x9b\x01\x01\xb2EL\x15\xbd\xc6D\x01\xbd)DE@\\\x1f*D\x80\xa6\x02\x18\xe5\xe7\xb8\xfd\xa8\xc9'b'\x00\x05N\xb1z\xc8\x0f\xef\xfe5\xd0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x016y'b'\x00\x05N\xb1z\xc8a\xd7\xfe!\xd1\xff\x00LD\x90\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaa\xd8'b'\x00\x05N\xb1z\xc9\x1f\xc8\xfe\x1c\x9c\x01\x01\xa3;\xcb\xfe9q\xf4\x9b\xba\xed\xeb\xb09\x00\x00\x00\x00\x00\x00\x00\x00-\xcf\x83<1\xad\x8a;\x90-'b'\x00\x05N\xb1z\xc9 @\xfe\x03\x9d\x01\x01\xa5\xc5\x14\x00`\x11'b'\x00\x05N\xb1z\xc9 \x90\xfe\x0c\x9e\x01\x01\x028v\r{\xb1N\x05\x00\xf3B\x04\x00\xab\x9f'b'\x00\x05N\xb1z\xc9 \xe8\xfe\x16\x9f\x01\x01\x88|\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x91-'b'\x00\x05N\xb1z\xc9!<\xfe\x16\xa0\x01\x01\xc1i\x96\xbf<\x15\xdf\x06=O=\xa5<\x17"\x1c>\x00\x00\x00\x00?\x03\xc8\xfb'b'\x00\x05N\xb1z\xc9!\x80\xfe\x03\xa1\x01\x01Ms\x00\x04\r&'b'\x00\x05N\xb1z\xc95\xe4\xfe\x15\xa2\x01\x01$Nq\xa6\x10\xfc\x05B\x06\x12\x06N\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00%\t'b'\x00\x05N\xb1z\xc96@\xfe\x16\xa3\x01\x01#/C\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf2:'b'\x00\x05N\xb1z\xcaOG\xfe5\xd2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb3\x9b'b'\x00\x05N\xb1z\xcatS\xfe!\xd3\xff\x00LD\x90\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00+\x85'b'\x00\x05N\xb1z\xcb\x1c\xa8\xfe\x1a\xa4\x01\x01\x1b\x8a\x10\xa7\x10\x00\x00\x00\x00\xd7\xff\x14\x00\x13\xfc\x0b\x00\xe4\xfe\x13\x00\x0b\xff\xea\xff|\x01\x0bb'b'\x00\x05N\xb1z\xcb\x1d(\xfe\x16\xa5\x01\x01tXC\x04\x00\xd3\xff$\x00 \xfc\x14\x00\xf8\xfe\xf8\xff\x03\xffC\xff\n\x02\xf3\x05'b'\x00\x05N\xb1z\xcb\x1d\x84\xfe\x16\xa6\x01\x01\x81XC\x04\x00\xd5\xff\x1f\x00\x0c\xfc\x11\x00\xcf\xfe\xff\xff\xa1\x00)\x00\x8c\x022{'b'\x00\x05N\xb1z\xcb\x1d\xd8\xfe\x0e\xa7\x01\x01\x1dXC\x04\x00T\x95iD\xb8\x1e?\xbed\x10n\x8d'b'\x00\x05N\xb1z\xcb\x1e$\xfe\x0e\xa8\x01\x01\x89XC\x04\x00\xb0\xd9iD\xa4p\x05>\x9e\x15t*'b'\x00\x05N\xb1z\xcb\x1e\x84\xfe*\xa9\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00d\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xae\xfe'b'\x00\x05N\xb1z\xcb\x1e\xec\xfe\x1f\xaa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01j;m\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ql\xf2'b'\x00\x05N\xb1z\xcb\x1fL\xfe\x06\xab\x01\x01}\xc5\x14\x00\x00\x03\x00\x05\x8d'b"\x00\x05N\xb1z\xcb\x1f\xd4\xfe\x04\xac\x01\x01\x98\x00\x00\x80\x8a'\x8c"b'\x00\x05N\xb1z\xcb $\xfe\x02\xad\x01\x01*\x00\x00M:'b'\x00\x05N\xb1z\xcb \x94\xfe\x1e\xae\x01\x01\x18h\xfa\xa5\x10\x00\x00\x00\x00\x82\xa6\x02\x18\xe4\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0c\x9fe'b'\x00\x05N\xb1z\xcb \xf0\xfe\x1a\xaf\x01\x01>\xcf\xe5G\xbd\x02\xaf\x9f\xc0\xae=\xa0\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe5I'b'\x00\x05N\xb1z\xcb!@\xfe\x08\xb0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x83x'b'\x00\x05N\xb1z\xcb!\x94\xfe\x14\xb1\x01\x01J\xcc\xccL=\xcc\xccL=33\xf3?\xebQ\xb8\xbd\xaf\x006\x00\xb8\xb2'b'\x00\x05N\xb1z\xcb!\xdc\xfe\x03\xb2\x01\x01Ms\x00\x04\xa5\xf7'b'\x00\x05N\xb1z\xcc\x0f\x84\xfe\x1c\xb3\x01\x01!\x11C\x04\x00~\xa6\x02\x18\xe7\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x07\x00\t\x00\xf8\xff\xbaDz\x91'b'\x00\x05N\xb1z\xcc\x10h\xfe\x1c\xb4\x01\x01 \xbcC\x04\x00\xe6\n\x82>>VM?LX\xc9\xbf\x1c\x84\x9f=\x19\xb0\xc0=]\x83\xa9=\x83\xa4'b'\x00\x05N\xb1z\xcc\x10\xd4\xfe\x1c\xb5\x01\x01\x1e\xe4C\x04\x00\xb4\xcf<\xbc\xa5\x81\x95\xbd\xe6\x8aD@\xdd\xff\xc7=D\xbf\x84\xbc9\x82\xb6\xbb2\xdb'b'\x00\x05N\xb1z\xcc\x110\xfe\x18\xb6\x01\x01\xb2\x13b\xc6\xbc]\xbb\x8c\xbd\xcdoE@G!*D\x85\xa6\x02\x18\xe5\xe7\xb8\xfd\xb8\xf4'b'\x00\x05N\xb1z\xcc\x11\x88\xfe\x1c\xb7\x01\x01\xa3\xdf\xb9\x00:\x83|\x9d\xba\x89\xce\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xc3.|\x00\x00\x00\x00?\x03\xecb'b"\x00\x05N\xb1z\xcc/'\xfe5\xd4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01-\xb4"b'\x00\x05N\xb1z\xccE\x1b\xfe!\xd5\xff\x00L\xe6\xa2\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00{\xe5'b'\x00\x05N\xb1z\xcd\xb6@\xfe\x03\xbc\x01\x01Ms\x00\x04\xa8\xc7'b"\x00\x05N\xb1z\xcd\xb6\xf8\xfe\x15\xbd\x01\x01$\x11p\xaa\x10-\x06'\x06\x06\x067\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00'("b'\x00\x05N\xb1z\xcd\xb7T\xfe\x16\xbe\x01\x01#5D\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0bH'b'\x00\x05N\xb1z\xcd\xb7\xcc\xfe\x1a\xbf\x01\x01\x1b\xf6\xbd\xaa\x10\x00\x00\x00\x00\xdd\xff\r\x00\x10\xfc(\x00m\x00\xc5\xff\x15\xff\xee\xff\x84\x01\xdbD'b'\x00\x05N\xb1z\xcd\xb8D\xfe\x16\xc0\x01\x01tID\x04\x00\xe2\xff\x0e\x00\r\xfc+\x00b\x00\xe9\xff\x11\xffI\xff\x15\x026d'b"\x00\x05N\xb1z\xcd\xb8\xbc\xfe\x16\xc1\x01\x01\x81ID\x04\x00\xda\xff%\x00\x03\xfc\x1c\x00\x88\x00\xd0\xff\xb8\x00'\x00\x85\x02 \x80"b'\x00\x05N\xb1z\xcd\xb9(\xfe\x0e\xc2\x01\x01\x1dID\x04\x00\x06\x95iD\x00\x00D\xbec\x10\x9e\xe5'b'\x00\x05N\xb1z\xcd\xb9\x90\xfe\x0e\xc3\x01\x01\x89ID\x04\x00\xdb\xd8iD\xf5(\xf0=\x9e\x15q\xe6'b'\x00\x05N\xb1z\xcd\xba\x0c\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa0\x00j;\xcb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfeW'b'\x00\x05N\xb1z\xcd\xba|\xfe\x06\xc5\x01\x01}\xc5\x14\x00\x00\x03\x00W\xeb'b'\x00\x05N\xb1z\xcd\xba\xe4\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy'b'\x00\x05N\xb1z\xcd\xbb@\xfe\x02\xc7\x01\x01*\x00\x00\x9fw'b'\x00\x05N\xb1z\xcd\xbb\xc4\xfe\x1e\xc8\x01\x01\x18\x90\x0b\xa9\x10\x00\x00\x00\x00\x85\xa6\x02\x18\xe5\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\t\x00\xecc\x03\x0cH\x8b'b'\x00\x05N\xb1z\xcd\xbc$\xfe\x1a\xc9\x01\x01>>-\x9c\xbd\xe5\x06S\xc0\xe1$\x9c\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe2\xf3'b'\x00\x05N\xb1z\xcd\xbct\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2'b'\x00\x05N\xb1z\xcd\xfc\x7f\xfe5\xd6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa8V'b'\x00\x05N\xb1z\xce\x12\xd3\xfe!\xd7\xff\x00L\xe6\xa2\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfa\xb8'b'\x00\x05N\xb1z\xcf>\xac\xfe\x14\xcb\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=33\xf3?\n\xd7\xa3\xbc\xaf\x001\x00\xdf\x85'b'\x00\x05N\xb1z\xcf?(\xfe\x03\xcc\x01\x01Ms\x00\x04\xd1O'b'\x00\x05N\xb1z\xcf?\xc4\xfe\x1c\xcd\x01\x01!\xa4D\x04\x00\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x00\x00\x06\x00\xfc\xff\xa6D\xd9\xf8'b'\x00\x05N\xb1z\xcf@,\xfe\x1c\xce\x01\x01 \xc2D\x04\x00Y\x1f\x8b>\xf2pP?\x16\x8a\xca\xbf<\xf6?;\xb6\xcf\x81=\xbcJ)=(6'b'\x00\x05N\xb1z\xcf@|\xfe\t\xfb\n\x00mF\x00\x00\x00\x00\xdb\x00\x00\x00E\x97'b'\x00\x05N\xb1z\xcf\xd8\xcf\xfe5\xd8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x11\xeb'b'\x00\x05N\xb1z\xcf\xee\xdb\xfe!\xd9\xff\x00L\xe6\xa2\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00l 'b'\x00\x05N\xb1z\xd0\xdeh\xfe\x1c\xcf\x01\x01\x1e\xeaD\x04\x00\xd0\x00*;\x00\xeb`\xbd\xf6MD@\r!\xce=!?\x15=*\xb6\xcd\xbcgC'b'\x00\x05N\xb1z\xd0\xde\xec\xfe\x18\xd0\x01\x01\xb2\xd0\xf0%\xbc\xd5\xa6O\xbd_4E@3\x13*D\x87\xa6\x02\x18\xe6\xe7\xb8\xfd\x8d\xe3'b'\x00\x05N\xb1z\xd0\xdfD\xfe\x1c\xd1\x01\x01\xa3\xba\x13\x02:\xc5\xff\x9e\xba\x00\x87\xb09\x00\x00\x00\x00\x00\x00\x00\x008\xecU<\xf54\xcf;\x96\xcc'b'\x00\x05N\xb1z\xd0\xdf\x8c\xfe\x03\xd2\x01\x01\xa5\xc2\x14\x00\x02\x92'b'\x00\x05N\xb1z\xd0\xdf\xd8\xfe\x0c\xd3\x01\x01\x02p\x13\x15{\xb1N\x05\x00\xfeD\x04\x00\xaf$'b'\x00\x05N\xb1z\xd0\xe0,\xfe\x16\xd4\x01\x01\x88\x80\xa6\x02\x18\xe9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb3\x00'b'\x00\x05N\xb1z\xd0\xe0\x90\xfe\x16\xd5\x01\x01\xc1\xa8\x9d\x80<\xc7\xc4\x12=eBg;Q\xde*>\x00\x00\x00\x00?\x03^7'b'\x00\x05N\xb1z\xd0\xe0\xe4\xfe\x03\xd6\x01\x01Ms\x00\x04z2'b'\x00\x05N\xb1z\xd0\xe1\x84\xfe\x1a\xd7\x01\x01\x1b\xafl\xae\x10\x00\x00\x00\x00\xe2\xff\r\x00\x1e\xfc\xdb\xff\x1e\x00\xfe\xff\x12\xff\xf4\xff\x81\x01\x11\x08'b'\x00\x05N\xb1z\xd0\xe2\x04\xfe\x16\xd8\x01\x01t:E\x04\x00\xe3\xff\x15\x00\x1e\xfc\xfa\xff\x13\x00\xf4\xff\r\xffX\xff\x1b\x02\xc4c'b'\x00\x05N\xb1z\xd0\xe2l\xfe\x16\xd9\x01\x01\x81:E\x04\x00\xda\xff"\x00\x12\xfc\xcc\xff-\x00\xf2\xff\xa4\x00C\x00\x82\x02\xf5\x08'b'\x00\x05N\xb1z\xd0\xe2\xc8\xfe\x0e\xda\x01\x01\x1d:E\x04\x00\xf0\x96iD)\\%\xbed\x10\x92\xc9'b'\x00\x05N\xb1z\xd0\xe3 \xfe\x0e\xdb\x01\x01\x89:E\x04\x00R\xd9iD=\n\xff=\x9f\x15\x89\x87'b'\x00\x05N\xb1z\xd0\xe3\x8c\xfe\x1f\xdc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x018;\xb7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x16F'b'\x00\x05N\xb1z\xd0\xe3\xec\xfe\x06\xdd\x01\x01}\xc2\x14\x00\x00\x03\x00\xa0\xe1'b'\x00\x05N\xb1z\xd0\xe4D\xfe\x04\xde\x01\x01\x98\x00\x00\x80\x8a\x13\xf9'b'\x00\x05N\xb1z\xd0\xe4\x94\xfe\x02\xdf\x01\x01*\x00\x00\xba\x1c'b'\x00\x05N\xb1z\xd0\xe4\xe8\xfe\x1e\xe0\x01\x01\x18\xa0 \xac\x10\x00\x00\x00\x00\x87\xa6\x02\x18\xe6\xe7\xb8\xfd\xaai\n\x00F\x00\xff\xff\x07\x00\xecc\x03\x0c\x0c*'b'\x00\x05N\xb1z\xd0\xe5<\xfe\x1a\xe1\x01\x01>\x0cu\xd0\xbe\xa0\x19,\xc0\x1f\xdb\x91\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00K\x18'b'\x00\x05N\xb1z\xd0\xe5\x84\xfe\x08\xe2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00XJ'b'\x00\x05N\xb1z\xd1\xb3\xef\xfe5\xda\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x94\t'b'\x00\x05N\xb1z\xd1\xc9\xeb\xfe!\xdb\xff\x00L\x8e\x97\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[}'b'\x00\x05N\xb1z\xd2J\x1c\xfe\x12\xe3\x01\x01\xfcLE\x04\x004\x00\x01\x00ARMMASK\x00Wr*K'b'\x00\x05N\xb1z\xd2J\xc4\xfe\t\xe4\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe06'b'\x00\x05N\xb1z\xd2KL\xfe\x15\xe5\x01\x01$\xc9\xc0\xae\x10n\x06)\x06#\x06T\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12t'b'\x00\x05N\xb1z\xd2K\xb8\xfe\x16\xe6\x01\x01#PE\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08:'b'\x00\x05N\xb1z\xd2L\x18\xfe\x03\xe7\x01\x01Ms\x00\x04M^'b'\x00\x05N\xb1z\xd2q\xfc\xfe\x14\xe8\x01\x01J\n\xd7#=\n\xd7#=33\xf3?\x00\x00\x00\x00\xaf\x003\x00\xc3T'b'\x00\x05N\xb1z\xd3\x8f;\xfe5\xdc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\n&'b'\x00\x05N\xb1z\xd3\xa5;\xfe!\xdd\xff\x00L\x8e\x97\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd8\x9b'b'\x00\x05N\xb1z\xd3\xd2\x94\xfe\x1c\xe9\x01\x01!mE\x04\x00\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\xfc\xff\x00\x00\x01\x00\xa7D\xc98'b'\x00\x05N\xb1z\xd3\xd34\xfe\x1c\xea\x01\x01 \xc8E\x04\x00e\x86\x8d>\xbb\x92P?r\xcf\xc9\xbf,.*\xbd`\xf0\x01<\xbbNc\xbc\xf3\xa7'b"\x00\x05N\xb1z\xd3\xd3\x9c\xfe\x1c\xeb\x01\x01\x1e\xf0E\x04\x00d\x17'\xbbnX;\xbd\x19TD@\xca\xc3\xb4\xbd\xea\x08T=$1\x8e<\xf8D"b'\x00\x05N\xb1z\xd3\xd3\xfc\xfe\x18\xec\x01\x01\xb2C\x98b\xbc\xaf\x8e*\xbd\xd6;E@\x99)*D\x87\xa6\x02\x18\xe6\xe7\xb8\xfd)W'b"\x00\x05N\xb1z\xd3\xd4p\xfe\x1c\xed\x01\x01\xa3um\x03:\x92\x80\xa0\xba\x00.\xb09\x00\x00\x00\x00\x00\x00\x00\x00.L^<'U\x99;\x895"b'\x00\x05N\xb1z\xd3\xd4\xcc\xfe\x03\xee\x01\x01\xa5\xc8\x14\x00F\x98'b'\x00\x05N\xb1z\xd3\xd50\xfe\x0c\xef\x01\x01\x02\x10\x0b\x19{\xb1N\x05\x00\x04F\x04\x00\x8a<'b'\x00\x05N\xb1z\xd3\xd5\xa4\xfe\x16\xf0\x01\x01\x88\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\xcb'b'\x00\x05N\xb1z\xd3\xd6\x10\xfe\x16\xf1\x01\x01\xc1\xf0\xcb\x85\x00\x00\x00\x00?\x03!\xb0'b'\x00\x05N\xb1z\xd3\xd6\xac\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13'b'\x00\x05N\xb1z\xd5fC\xfe5\xde\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8f\xc4'b'\x00\x05N\xb1z\xd5|W\xfe!\xdf\xff\x00L\x08\x92\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00A\xc7'b'\x00\x05N\xb1z\xd5\x91t\xfe\x1a\xf4\x01\x01\x1b\xc7\x1e\xb2\x10\x00\x00\x00\x00\xdf\xff\r\x00P\xfc\xdf\xff\x14\x00\x11\x00\n\xff\xf4\xff\x81\x01Z/'b'\x00\x05N\xb1z\xd5\x92\x04\xfe\x16\xf5\x01\x01t,F\x04\x00\xda\xff\x16\x00W\xfc\xd6\xff%\x00\r\x00\t\xff_\xff\x1a\x02\x0e\xf0'b'\x00\x05N\xb1z\xd5\x92t\xfe\x16\xf6\x01\x01\x81,F\x04\x00\xdb\xff\x1e\x00K\xfc\xc6\xff+\x00\x05\x00\x89\x00b\x00c\x02l\xda'b'\x00\x05N\xb1z\xd5\x92\xd0\xfe\x0e\xf7\x01\x01\x1d,F\x04\x00\xc2\x96iDp=(\xbed\x10\x01('b'\x00\x05N\xb1z\xd5\x930\xfe\x0e\xf8\x01\x01\x89,F\x04\x00G\xd9iD\x8f\xc2\xfd=\x9f\x15\xa8v'b'\x00\x05N\xb1z\xd5\x93\x98\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x96\x008;\xa4\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x13\x8a'b'\x00\x05N\xb1z\xd5\x93\xf8\xfe\x06\xfa\x01\x01}\xc8\x14\x00\x00\x03\x00\x9bJ'b'\x00\x05N\xb1z\xd5\x94T\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|'b'\x00\x05N\xb1z\xd5\x94\xa4\xfe\x02\xfc\x01\x01*\x00\x00W\xd7'b'\x00\x05N\xb1z\xd5\x95\x08\xfe\x1e\xfd\x01\x01\x18\xc81\xaf\x10\x00\x00\x00\x00\x86\xa6\x02\x18\xe6\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cW\xf1'b'\x00\x05N\xb1z\xd5\x95l\xfe\x1a\xfe\x01\x01>\xba\x0c\x8b\xbf\x03\xf3\x0b\xc0G\x05\x9e\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00,\xc0'b'\x00\x05N\xb1z\xd5\x95\xc4\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.'b'\x00\x05N\xb1z\xd5\x96$\xfe\x15\x00\x01\x01$\xb2\xb9\xb2\x10,\x06\xfe\x05\xff\x05@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x88'b'\x00\x05N\xb1z\xd5\x96t\xfe\x16\x01\x01\x01#TF\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00G\x05'b'\x00\x05N\xb1z\xd67\xff\xfe\t\xe0\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xaf\xbf'b"\x00\x05N\xb1z\xd6\xe4\x9f\xfe%\xe1\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x8a\xd4"b'\x00\x05N\xb1z\xd7-\xe0\xfe\x03\x02\x01\x01Ms\x00\x04\xcf\xd1'b'\x00\x05N\xb1z\xd7A\xf3\xfe5\xe2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01R\xef'b'\x00\x05N\xb1z\xd7D,\xfe\x14\x03\x01\x01J\n\xd7#=\n\xd7#=33\xf3?\n\xd7#\xbd\xaf\x005\x00I\xa8'b'\x00\x05N\xb1z\xd7E\x00\xfe\x1c\x04\x01\x01!JF\x04\x00\x80\xa6\x02\x18\xe7\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\xfb\xff\xfb\xff\xfd\xff\xc4D\xce\xf3'b"\x00\x05N\xb1z\xd7E\xe0\xfe\x1c\x05\x01\x01 \xccF\x04\x00\xb9'\x89>\x8eCM?\x8b6\xca\xbf\x80,d\xbd\x85IN\xbdt@\t=\xf0\xbc"b'\x00\x05N\xb1z\xd7\x98\xab\xfe!\xe3\xff\x00L\x08\x92\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x009\x0e'b'\x00\x05N\xb1z\xd8\xd3\xd8\xfe\x03\x06\x01\x01/\xff\x00\x00\xa7\xd8'b'\x00\x05N\xb1z\xd8\xd4\xf8\xfe\x1c\x07\x01\x01\x1e\xf5F\x04\x00\xa2\xd0\xb0\xbc\xf3\x8a$\xbd\x8b\xccD@}6^\xbd\xe0\x165\xbd\xba@a=\x9b`'b'\x00\x05N\xb1z\xd8\xd5\x9c\xfe\x18\x08\x01\x01\xb28\xa4\x08\xbd!\xda\x0c\xbd{\xafE@\x8f\x12*D\x86\xa6\x02\x18\xe6\xe7\xb8\xfd\xba\xba'b'\x00\x05N\xb1z\xd8\xd6(\xfe\x1c\t\x01\x01\xa3M\xc2\x04:\xb6\x01\xa2\xbaj\xd5\xaf9\x00\x00\x00\x00\x00\x00\x00\x00L\x1a\xa5<\x0c\xb6\xe9;\xec\xea'b'\x00\x05N\xb1z\xd8\xd6\x9c\xfe\x03\n\x01\x01\xa5\xc5\x14\x00\xf4\x1d'b'\x00\x05N\xb1z\xd8\xd7$\xfe\x0c\x0b\x01\x01\x02\xd0P\x1d{\xb1N\x05\x00\tG\x04\x00+]'b'\x00\x05N\xb1z\xd8\xd7\xa4\xfe\x16\x0c\x01\x01\x88\x7f\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb4\x9e'b"\x00\x05N\xb1z\xd8\xd8(\xfe\x16\r\x01\x01\xc1\xde\x98\xcf<\x8d\x89\x9c<\xbb\x9b\x8b;|M'>\x00\x00\x00\x00?\x03\x8e="b'\x00\x05N\xb1z\xd8\xd8\x90\xfe\x03\x0e\x01\x01Ms\x00\x04\xad\xea'b'\x00\x05N\xb1z\xd8\xd9D\xfe\x1a\x0f\x01\x01\x1b\x8c\xcb\xb5\x10\x00\x00\x00\x00\xe4\xff \x002\xfc\xe3\xff\xce\xff\x1a\x00\n\xff\xf0\xff|\x01w\x0f'b'\x00\x05N\xb1z\xd8\xd9\x9c\xfe\x16\x10\x01\x01t\x1dG\x04\x00\xe5\xff#\x007\xfc\xde\xff\xcc\xff:\x00\x03\xffC\xff\x0c\x02yc'b"\x00\x05N\xb1z\xd8\xd9\xf0\xfe\x16\x11\x01\x01\x81\x1dG\x04\x00\xe3\xff\x1b\x00\x1d\xfc\x18\x00\xbd\xff'\x00\xa0\x00)\x00\x91\x02\\\xc5"b'\x00\x05N\xb1z\xd8\xda<\xfe\x0e\x12\x01\x01\x1d\x1dG\x04\x00\x0b\x97iD\x14\xae#\xbed\x10\x9d\x9a'b'\x00\x05N\xb1z\xd8\xda\x84\xfe\x0e\x13\x01\x01\x89\x1dG\x04\x00S\xd9iD33\xff=\x9f\x15\x12L'b'\x00\x05N\xb1z\xd8\xda\xdc\xfe\x1f\x14\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e8;+\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q0\xc9'b'\x00\x05N\xb1z\xd8\xdb0\xfe\x06\x15\x01\x01}\xcb\x14\x00\x00\x03\x00-C'b'\x00\x05N\xb1z\xd8\xdb|\xfe\x04\x16\x01\x01\x98\x00\x00\x80\x8am\xa4'b'\x00\x05N\xb1z\xd8\xdb\xbc\xfe\x02\x17\x01\x01*\x00\x00M\x83'b'\x00\x05N\xb1z\xd8\xdc,\xfe\x1e\x18\x01\x01\x18\x18T\xb5\x10\x00\x00\x00\x00\x84\xa6\x02\x18\xe5\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x0e\x00\xecc\x03\x0c\xcd\xba'b'\x00\x05N\xb1z\xd8\xdc\x84\xfe\x1a\x19\x01\x01> \x90\x04\xc0\x98y\xdd\xbfp\xd5\x89\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xc3['b'\x00\x05N\xb1z\xd8\xdc\xcc\xfe\x08\x1a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb3-'b'\x00\x05N\xb1z\xd9\x84\xfb\xfe5\xe4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcc\xc0'b'\x00\x05N\xb1z\xd9\x9b\x1f\xfe!\xe5\xff\x00LB\x8c\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xcb\xbf'b'\x00\x05N\xb1z\xda\x17\x80\xfe\x15\x1b\x01\x01$O\xb7\xb6\x10,\x06\xc9\x05,\x06{\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x07'b'\x00\x05N\xb1z\xda\x18\x00\xfe\x16\x1c\x01\x01#YG\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x17\xe1'b'\x00\x05N\xb1z\xda\x18P\xfe\x03\x1d\x01\x01Ms\x00\x04\x05;'b'\x00\x05N\xb1z\xdbV\xab\xfe5\xe6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01I"'b'\x00\x05N\xb1z\xdb\x94w\xfe!\xe7\xff\x00LB\x8c\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00J\xe2'b'\x00\x05N\xb1z\xdb\xa9\xcc\xfe\x14\x1e\x01\x01J\x99\x99\x19>\x99\x99\x19>\x85\xeb\xf1?\n\xd7\xa3\xbc\xb0\x008\x00\x17\x1d'b'\x00\x05N\xb1z\xdb\xaa\xc4\xfe\x1c\x1f\x01\x01!\xc7G\x04\x00~\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf7\xff\xf8\xff\x00\x00\x15EN\x19'b'\x00\x05N\xb1z\xdb\xab\xa0\xfe\x1c \x01\x01 \xd2G\x04\x00M\tz>\xca\xe2F?\x97\xd0\xc7\xbf\xe0\n\xc9\xbdR\xb5\xab\xbd4\x8c\x11\xbb\xd9\xc7'b'\x00\x05N\xb1z\xdb\xac\x04\xfe\x1c!\x01\x01\x1e\xf9G\x04\x00\xc2hZ\xbc\xbc\x9c"\xbdY\x90E@\xc0ga=g\x80B=z\x18\xac\xbc\xbcC'b'\x00\x05N\xb1z\xdb\xac\\\xfe\x18"\x01\x01\xb2u\x83\xcf\xbc\xf4\xac\x0f\xbd}\x84F@\x8f\x12*D\x82\xa6\x02\x18\xe3\xe7\xb8\xfd9\x9c'b'\x00\x05N\xb1z\xdd\x17h\xfe\x1a#\x01\x01\x1b\xdex\xb9\x10\x00\x00\x00\x00\xdd\xff\x1e\x00\xfa\xfb\x12\x00#\x00\xf8\xff\x02\xff\xf1\xff\x83\x010\x8f'b"\x00\x05N\xb1z\xdd\x17\xf0\xfe\x16$\x01\x01t\x0eH\x04\x00\xdf\xff\x1f\x00\x08\xfc\x17\x00#\x00\n\x00\x02\xffJ\xff\r\x02'\x05"b'\x00\x05N\xb1z\xdd\x18X\xfe\x16%\x01\x01\x81\x0eH\x04\x00\xe2\xff$\x00\x08\xfc\x18\x00\x12\x00\x01\x00\x8e\x002\x00z\x02Qj'b'\x00\x05N\xb1z\xdd\x18\xb0\xfe\x0e&\x01\x01\x1d\x0eH\x04\x00\x81\x96iD\xebQ,\xbee\x10\xe5L'b"\x00\x05N\xb1z\xdd\x19\x08\xfe\x0e'\x01\x01\x89\x0eH\x04\x00O\xdbiD)\\\x1f>\xa1\x15\xbd\xc5"b'\x00\x05N\xb1z\xdd\x19h\xfe\x1f(\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\x12;H\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q/\x8a'b'\x00\x05N\xb1z\xdd\x19\xc4\xfe\x06)\x01\x01}\xc8\x14\x00\x00\x03\x00s\x9a'b'\x00\x05N\xb1z\xdd\x1a\x18\xfe\x03*\x01\x01Ms\x00\x04\x83J'b'\x00\x05N\xb1z\xdd.\xc8\xfe\x04+\x01\x01\x98\x00\x00\x80\x8a\x12\xa1'b'\x00\x05N\xb1z\xdd/$\xfe\x02,\x01\x01*\x00\x00\x85#'b'\x00\x05N\xb1z\xdd/\x94\xfe\x1e-\x01\x01\x18Xa\xb8\x10\x00\x00\x00\x00\x82\xa6\x02\x18\xe3\xe7\xb8\xfd\x82i\n\x00F\x00\xff\xff\x0e\x00\xecc\x03\x0c.\xf1'b'\x00\x05N\xb1z\xdd/\xf8\xfe\x1a.\x01\x01>v\xc3(\xc0!\xc8v\xbf\n\xffQ\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00?\x1f'b'\x00\x05N\xb1z\xdd0L\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1'b'\x00\x05N\xb1z\xdd0\xa8\xfe\x1c0\x01\x01\xa3\xd85\x06:\x97\xaa\xa3\xba*o\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xc8^\x8a<\xb2\xd5\x12<\xd6\xd2'b'\x00\x05N\xb1z\xdd0\xf4\xfe\x031\x01\x01\xa5\xc2\x14\x001\x00'b'\x00\x05N\xb1z\xdd1H\xfe\x0c2\x01\x01\x02\x90\x96!{\xb1N\x05\x00"H\x04\x00\xf7\xad'b'\x00\x05N\xb1z\xdd1\xac\xfe\x163\x01\x01\x88|\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00E\xe2'b'\x00\x05N\xb1z\xdd2\x04\xfe\x164\x01\x01\xc1\x1dp\x98<\xb1\x02\x87\x00\x00\x00\x00?\x03\x1b\x8f'b'\x00\x05N\xb1z\xdd2X\xfe\x155\x01\x01$:\xb0\xba\x10"\x06\x8c\x05\r\x06t\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15b'b'\x00\x05N\xb1z\xdd2\xb4\xfe\x166\x01\x01#^H\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1e_'b'\x00\x05N\xb1z\xdd\x87\xd7\xfe5\xe8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf0\x9f'b'\x00\x05N\xb1z\xdd\xb1\xbf\xfe!\xe9\xff\x00L\xdf\x81\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd61'b'\x00\x05N\xb1z\xde\x93,\xfe\x037\x01\x01Ms\x00\x04&\xab'b'\x00\x05N\xb1z\xde\xa8\x10\xfe\t\xfc\n\x00m\t\x00\x00\x00\x00\xdb\x00\x00\x00e\x1b'b'\x00\x05N\xb1z\xde\xa8|\xfe\x148\x01\x01J{\x14.>{\x14.>\x85\xeb\xf1?\x00\x00\x00\x00\xb0\x004\x00<3'b'\x00\x05N\xb1z\xdff\x17\xfe5\xea\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01u}'b'\x00\x05N\xb1z\xdf{\xef\xfe!\xeb\xff\x00L\xdf\x81\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Wl'b'\x00\x05N\xb1z\xe04\xa4\xfe\x1c9\x01\x01!\x90H\x04\x00z\xa6\x02\x18\xe0\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf2\xff\xf2\xff\xfe\xff\x0fE\xf6\xdf'b'\x00\x05N\xb1z\xe05L\xfe\x1c:\x01\x01 \xd7H\x04\x00\xc1\x0fR>\xa0\xe9\x01\x01\x1d\xfeH\x04\x00\x9d\x96iD\\\x8f*\xbee\x10\x16\x82'b'\x00\x05N\xb1z\xe07,\xfe\x0e?\x01\x01\x89\xfeH\x04\x00\xb2\xdaiD\x1f\x85\x15>\xa1\x15E\xbd'b'\x00\x05N\xb1z\xe07\x8c\xfe\x1f@\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1c\x01\x12;\xd8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q&\x9f'b"\x00\x05N\xb1z\xe07\xe8\xfe\x06A\x01\x01}\xc5\x14\x00\x00\x03\x00\x19'"b'\x00\x05N\xb1z\xe088\xfe\x04B\x01\x01\x98\x00\x00\x80\x8a\x7f\x82'b'\x00\x05N\xb1z\xe08\x80\xfe\x02C\x01\x01*\x00\x00\xf4\x9e'b'\x00\x05N\xb1z\xe08\xd8\xfe\x1eD\x01\x01\x18\x80r\xbb\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xe0\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x11\x00\xecc\x03\x0c{\xe1'b"\x00\x05N\xb1z\xe090\xfe\x1aE\x01\x01>\xdb'g\xc0V\xb4\x83\xbe\x14&E\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00*\x05"b'\x00\x05N\xb1z\xe09|\xfe\x08F\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xee/'b'\x00\x05N\xb1z\xe09\xd0\xfe\x1cG\x01\x01\x1e\x13I\x04\x00`d\n\xbd\xdd\n\xfe\xbc\x82LE@3O\xf0\xbd\xf69w="\xfdR\xbd\x8d"'b'\x00\x05N\xb1z\xe0:$\xfe\x18H\x01\x01\xb2\xf4&4\xbd\x037\xca\xbc\xa1MF@f\x16*D\x80\xa6\x02\x18\xe0\xe7\xb8\xfd\xf8\xcc'b'\x00\x05N\xb1z\xe0:l\xfe\x03I\x01\x01Ms\x00\x04R\x13'b'\x00\x05N\xb1z\xe0N\xd4\xfe\x1cJ\x01\x01\xa3\xe6\x8b\x07:\x9e<\xa5\xba\x04\xfe\xae9\x00\x00\x00\x00\x00\x00\x00\x00\x00Kp<\xe9\x9b\x06<\x8d\xb3'b'\x00\x05N\xb1z\xe0O4\xfe\x03K\x01\x01\xa5\xc2\x14\x00\x9b\xae'b"\x00\x05N\xb1z\xe0O\x90\xfe\x0cL\x01\x01\x02\x18\x92%{\xb1N\x05\x00'I\x04\x00\x0c\xfd"b'\x00\x05N\xb1z\xe0P,\xfe\x16M\x01\x01\x88y\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00:\xed'b"\x00\x05N\xb1z\xe0P\xd8\xfe\x16N\x01\x01\xc1'\x9b\x86\x00\x00\x00\x00?\x03\xbe\xfa"b'\x00\x05N\xb1z\xe0Q\x88\xfe\x12O\x01\x01\xfc8I\x04\x004\x00\x01\x00ARMMASK\x00WroW'b'\x00\x05N\xb1z\xe0R@\xfe\tP\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xef0'b'\x00\x05N\xb1z\xe1w{\xfe5\xec\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xebR'b'\x00\x05N\xb1z\xe1\x8e3\xfe!\xed\xff\x00L\xc6\x86\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00~\xb9'b'\x00\x05N\xb1z\xe1\xbep\xfe\x15Q\x01\x01$\x93\xac\xbe\x108\x06\xe7\x05\xfb\x05J\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xbe'b'\x00\x05N\xb1z\xe1\xbe\xf0\xfe\x16R\x01\x01#cI\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v!'b'\x00\x05N\xb1z\xe1\xbfP\xfe\x03S\x01\x01Ms\x00\x04\xf9n'b'\x00\x05N\xb1z\xe37\x84\xfe\x14T\x01\x01J\xaeGa>\xaeGa>\x85\xeb\xf1?\n\xd7\xa3\xbc\xb0\x003\x00A\xe4'b'\x00\x05N\xb1z\xe38\x14\xfe\x1cU\x01\x01!YI\x04\x00v\xa6\x02\x18\xda\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf4\xff\xf3\xff\xfe\xff\xd4D\xcf\xbf'b"\x00\x05N\xb1z\xe38\x88\xfe\x1cV\x01\x01 \xdbI\x04\x00\xac\xfe'>y{0?\xbe{\xc7\xbfgM\x02\xbefV\x0f\xbe\xd8\xf8\xd9\xa1\x15\xb1T'b'\x00\x05N\xb1z\xe3:\xb8\xfe\x1f\\\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x00\x12;\xae\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xeb\xb5'b'\x00\x05N\xb1z\xe3;\x10\xfe\x06]\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\xb4'b'\x00\x05N\xb1z\xe3;`\xfe\x04^\x01\x01\x98\x00\x00\x80\x8a\xc4='b'\x00\x05N\xb1z\xe3;\xa8\xfe\x02_\x01\x01*\x00\x00\xa7\x9a'b'\x00\x05N\xb1z\xe3<\x0c\xfe\x1e`\x01\x01\x18\xa8\x83\xbe\x10\x00\x00\x00\x00}\xa6\x02\x18\xdc\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x16\x00\xecc\x03\x0c\xad$'b'\x00\x05N\xb1z\xe3\x97\x9f\x84\xc0\xc2\x85\x04\xbd\x99]+\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00<\n'b'\x00\x05N\xb1z\xe3<\xc8\xfe\x08b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x8c'b'\x00\x05N\xb1z\xe3u_\xfe5\xee\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01n\xb0'b'\x00\x05N\xb1z\xe3\xb3o\xfe!\xef\xff\x00L\xc6\x86\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xff\xe4'b'\x00\x05N\xb1z\xe4\xfbl\xfe\x1cc\x01\x01\x1e\x18J\x04\x00|\xc9r\xbd\x1ap*\xbc\xf4\xb4D@\xe4\xaa\x8e\xbd\x8e\xe7\xd1<)\xe5\xbf\xbcd\xc2'b'\x00\x05N\xb1z\xe4\xfc\x10\xfe\x18d\x01\x01\xb2>\xaa\x8f\xbd\x08CN\xbb\xdd\xb6E@\xf6\x18*D}\xa6\x02\x18\xdc\xe7\xb8\xfd\x8f\x9c'b'\x00\x05N\xb1z\xe4\xfcl\xfe\x03e\x01\x01Ms\x00\x04\xc0\x9e'b'\x00\x05N\xb1z\xe4\xfd8\xfe\x1cf\x01\x01\xa3\x81\xe2\x08:\x81\xd1\xa6\xba"\x88\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xb7C\xa4)\\\x8f>)\\\xef?\x8f\xc2\xf5\xbc\xaf\x007\x00\x81M'b"\x00\x05N\xb1z\xe7*k\xfe%\xf3\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xa9\xe3"b'\x00\x05N\xb1z\xe7@\xef\xfe5\xf4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\n\xd7#\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x93\xec'b'\x00\x05N\xb1z\xe7\x7f;\xfe!\xf5\xff\x00L(\x96\x15\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x07v'b'\x00\x05N\xb1z\xe7\xde\xb0\xfe\x1aq\x01\x01\x1b\xda\x80\xc4\x10\x00\x00\x00\x00\xe4\xff\x0e\x00\x1d\xfc\n\x00@\x00\x04\x00\xf7\xfe\xdf\xffs\x01\xb0\x88'b'\x00\x05N\xb1z\xe7\xdfH\xfe\x16r\x01\x01t\xe1J\x04\x00\xe5\xff\x15\x00"\xfc"\x00B\x00\xed\xff\xf8\xfe<\xff\x06\x02\xe4O'b'\x00\x05N\xb1z\xe7\xdf\xa8\xfe\x16s\x01\x01\x81\xe1J\x04\x00\xe1\xff\x1f\x00\x1c\xfc\xf3\xffh\x00\xf6\xff\x8d\x00.\x00a\x02^t'b'\x00\x05N\xb1z\xe7\xe0\x0c\xfe\x0et\x01\x01\x1d\xe1J\x04\x00f\x96iD\x00\x00.\xbee\x10\x8fH'b'\x00\x05N\xb1z\xe7\xe0X\xfe\x0eu\x01\x01\x89\xe1J\x04\x00E\xdciDR\xb8.>\xa3\x15\\\x96'b'\x00\x05N\xb1z\xe7\xe0\xb4\xfe\x1fv\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\x12;\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x92\x08'b'\x00\x05N\xb1z\xe7\xe1\x08\xfe\x06w\x01\x01}\xc8\x14\x00\x00\x03\x00\xeeo'b'\x00\x05N\xb1z\xe7\xe1h\xfe\x04x\x01\x01\x98\x00\x00\x80\x8a\xe2n'b'\x00\x05N\xb1z\xe7\xe1\xb4\xfe\x02y\x01\x01*\x00\x00\xe9\xa1'b'\x00\x05N\xb1z\xe7\xe2\x14\xfe\x1ez\x01\x01\x18\xf8\xa5\xc4\x10\x00\x00\x00\x00w\xa6\x02\x18\xd5\xe7\xb8\xfddi\n\x00F\x00\xff\xff\x16\x00\xebZ\x03\x0c\xbe\x0f'b'\x00\x05N\xb1z\xe7\xe2p\xfe\x1a{\x01\x01>\xb0yz\xc0\xc5\xae\xc1\xbc\xcc\xcc\xf0\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00_\x9d'b'\x00\x05N\xb1z\xe7\xe2\xc0\xfe\x08|\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xac\xe6'b'\x00\x05N\xb1z\xe7\xe3 \xfe\x1c}\x01\x01!\xebJ\x04\x00s\xa6\x02\x18\xd5\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf9\xff\xf9\xff\xfe\xff\xb7D\x03\x01'b'\x00\x05N\xb1z\xe7\xe3\x88\xfe\x1c~\x01\x01 \xf5J\x04\x00\xd9B\x00>h\xe6&?i\xeb\xc5\xbf\xe1\xd0\x98\xbd\x80\x81\x97\xbd\xf7;\xbd<\xabl'b'\x00\x05N\xb1z\xe7\xe3\xd8\xfe\x03\x7f\x01\x01/\xff\x00\x00\xdd\xfc'b'\x00\x05N\xb1z\xe7\xe4d\xfe\x1c\x80\x01\x01\x1e\x1dK\x04\x00\x1d\x0b[\xbd\x08\x1da:\x97mD@\xda\x14S=g\x02\xa3=\x86\x14W\xbd\nn'b'\x00\x05N\xb1z\xe7\xe4\xcc\xfe\x18\x81\x01\x01\xb2\x84J\x86\xbd\xa7\x82\xf5;\xdcrE@R\x18*Dw\xa6\x02\x18\xd5\xe7\xb8\xfd\x1bs'b'\x00\x05N\xb1z\xe7\xe5 \xfe\x03\x82\x01\x01Ms\x00\x04-\x1a'b'\x00\x05N\xb1z\xe9i\xe4\xfe\x1c\x83\x01\x01\xa3\xd23\n:An\xa8\xbat\x13\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xcf[\xbf\xcc\xccL>{\x14\xee?\x00\x00\x00\x00\xaf\x006\x00\x1aH'b'\x00\x05N\xb1z\xeb\x03\x88\xfe\x1a\x8c\x01\x01\x1b\xc0-\xc8\x10\x00\x00\x00\x00\xe4\xff\x04\x00\x0e\xfc\xf6\xff\x0b\x00\x06\x00\xf2\xfe\xe2\xffo\x01\xd7\x99'b'\x00\x05N\xb1z\xeb\x03\xf0\xfe\x16\x8d\x01\x01t\xd2K\x04\x00\xeb\xff\xfa\xff(\xfc\xd7\xff.\x00\x06\x00\xf3\xfe>\xff\x03\x02\xe7V'b'\x00\x05N\xb1z\xeb\x04X\xfe\x16\x8e\x01\x01\x81\xd2K\x04\x00\xe2\xff\x15\x00\x07\xfc\xd7\xff\x05\x00 \x00r\x00.\x00j\x02L\xd3'b'\x00\x05N\xb1z\xeb\x04\xb0\xfe\x0e\x8f\x01\x01\x1d\xd2K\x04\x00O\x97iD\xa4p\x1f\xbef\x10;\xda'b'\x00\x05N\xb1z\xeb\x05\x0c\xfe\x0e\x90\x01\x01\x89\xd2K\x04\x00\x85\xdbiDR\xb8">\xa3\x15=\x05'b'\x00\x05N\xb1z\xeb\x05\x80\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0f\x01\x05;{\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x96i'b'\x00\x05N\xb1z\xeb\x05\xf4\xfe\x06\x92\x01\x01}\xc5\x14\x00\x00\x03\x00\xf1\xf7'b'\x00\x05N\xb1z\xeb\x06X\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12'b'\x00\x05N\xb1z\xeb\x06\xb4\xfe\x02\x94\x01\x01*\x00\x00>\xad'b'\x00\x05N\xb1z\xeb\x07$\xfe\x1e\x95\x01\x01\x18\x00i\xc7\x10\x00\x00\x00\x00t\xa6\x02\x18\xd3\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0c\x7f\x1b'b'\x00\x05N\xb1z\xeb\x07\x84\xfe\x1a\x96\x01\x01>_\x91\x8a\xc0Ri\x15?\xc2\t\x18\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x8bO'b'\x00\x05N\xb1z\xeb\x07\xdc\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5'b'\x00\x05N\xb1z\xeb\x8ew\xfe5\xf8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb9u'b'\x00\x05N\xb1z\xeb\xa5c\xfe!\xf9\xff\x00L\n\x95\x0c\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x13!'b'\x00\x05N\xb1z\xecQ\xdc\xfe\x1c\x98\x01\x01!\xa0K\x04\x00q\xa6\x02\x18\xd2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x02\x00\xfb\xff\x00\x00\xabDBz'b'\x00\x05N\xb1z\xecRt\xfe\x1c\x99\x01\x01 \xfbK\x04\x00_\xd2\xe2=\x19\xf2\x1f?\x0f\x8b\xc4\xbfP%\xe4<)mn\xbd?\xed\x08\xbc8o'b'\x00\x05N\xb1z\xecS\x08\xfe\x1c\x9a\x01\x01\x1e"L\x04\x008\xf3x\xbdT\x03\x7f\x00\x00\x00\x00?\x03\xa5a'b'\x00\x05N\xb1z\xecU\xb8\xfe\x03\xa1\x01\x01Ms\x00\x04\r&'b'\x00\x05N\xb1z\xed\x7f;\xfe5\xfa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01<\x97'b'\x00\x05N\xb1z\xed\x95\xa3\xfe!\xfb\xff\x00L\xfa\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x93\xe6'b'\x00\x05N\xb1z\xed\xd3\x00\xfe\x15\xa2\x01\x01$#\xa1\xca\x10F\x06\x1a\x06\xf0\x05Q\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9p'b'\x00\x05N\xb1z\xed\xd3\x84\xfe\x16\xa3\x01\x01#rL\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00gz'b'\x00\x05N\xb1z\xed\xd3\xdc\xfe\t\xfd\n\x00m%\x00\x00\x00\x00\xdc\x00\x00\x00S 'b'\x00\x05N\xb1z\xed\xd4@\xfe\x03\xa4\x01\x01Ms\x00\x04l\xb1'b'\x00\x05N\xb1z\xef[\x9b\xfe5\xfc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa2\xb8'b'\x00\x05N\xb1z\xefp\xec\xfe\x1a\xa5\x01\x01\x1b;\xdd\xcb\x10\x00\x00\x00\x00\xe7\xff\x1d\x00\x16\xfc\xd8\xff\xa0\xff\x00\x00\xf2\xfe\xdc\xffi\x01\x96\x0b'b'\x00\x05N\xb1z\xefq|\xfe\x16\xa6\x01\x01t\xc3L\x04\x00\xf8\xff%\x00\x15\xfc\xd7\xff\xb1\xff\x04\x00\xf0\xfe6\xff\xfe\x01\x8b\xfe'b'\x00\x05N\xb1z\xefq\xe8\xfe\x16\xa7\x01\x01\x81\xc3L\x04\x00\xe6\xff1\x00"\xfc\xaa\xff\xa8\xff\x0e\x00w\x00"\x00N\x023\xb6'b'\x00\x05N\xb1z\xefrL\xfe\x0e\xa8\x01\x01\x1d\xc3L\x04\x00[\x97iDR\xb8\x1e\xbee\x10+z'b'\x00\x05N\xb1z\xefr\x9c\xfe\x0e\xa9\x01\x01\x89\xc3L\x04\x00\x86\xdciD\xcd\xcc2>\xa4\x15\xa4\xcf'b'\x00\x05N\xb1z\xefr\xf4\xfe\x1f\xaa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x05;\x8a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q4\xb5'b'\x00\x05N\xb1z\xefsL\xfe\x06\xab\x01\x01}\xc2\x14\x00\x00\x03\x00\x1dJ'b"\x00\x05N\xb1z\xefs\x9c\xfe\x04\xac\x01\x01\x98\x00\x00\x80\x8a'\x8c"b'\x00\x05N\xb1z\xefs\xe0\xfe\x02\xad\x01\x01*\x00\x00M:'b'\x00\x05N\xb1z\xeft8\xfe\x1e\xae\x01\x01\x18`\xc4\xca\x10\x00\x00\x00\x00t\xa6\x02\x18\xd2\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\t\x00\xebZ\x03\x0c\x99\xe1'b'\x00\x05N\xb1z\xeft\x8c\xfe\x1a\xaf\x01\x01><\xb6x\xc0\xe0\xef,\xbf\xd7\x93\xe1\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe8\xf5'b'\x00\x05N\xb1z\xeft\xd8\xfe\x08\xb0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x83x'b'\x00\x05N\xb1z\xefu(\xfe\x14\xb1\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc={\x14\xee?\n\xd7#=\xaf\x005\x00?\xb5'b'\x00\x05N\xb1z\xefu\x80\xfe\x1c\xb2\x01\x01!|L\x04\x00s\xa6\x02\x18\xd0\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x0c\x00\x00\x00\x05\x00\xb3DH-'b'\x00\x05N\xb1z\xefu\xe0\xfe\x1c\xb3\x01\x01 \xffL\x04\x00\x00\x9a\x00>\xe1,\x1c?\xea\xbe\xc4\xbf\xf1\xa0\x02>\x19z\xfa\xb9J\x9eR\xbdmZ'b'\x00\x05N\xb1z\xefv@\xfe\x12\xb4\x01\x01\xfc%M\x04\x004\x00\x01\x00ARMMASK\x00Wr\x00\x8c'b'\x00\x05N\xb1z\xefv\xa0\xfe\t\xb5\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb2\xdd'b'\x00\x05N\xb1z\xef\x98\xa7\xfe!\xfd\xff\x00L\xfa\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x10\x00'b'\x00\x05N\xb1z\xf0\xfd(\xfe\x1c\xb6\x01\x01\x1e(M\x04\x000\x16\x86\xbd\xf5;p\xbb\xb9lD@\x81\x14$=\x1fn\xdf\xbdPSx\xbcq\xb2'b'\x00\x05N\xb1z\xf0\xfd\xa4\xfe\x18\xb7\x01\x01\xb2\xd2\xc5\x9f\xbd\xef\xb0\xab;\xc6\x7fE@\x99\t*Dt\xa6\x02\x18\xd2\xe7\xb8\xfdCK'b'\x00\x05N\xb1z\xf0\xfd\xf0\xfe\x03\xb8\x01\x01Ms\x00\x04v\xd1'b'\x00\x05N\xb1z\xf0\xfe\xa4\xfe\x1c\xb9\x01\x01\xa3\xb6\xd6\x0c:\xf0\xaf\xab\xba\xff%\xad9\x00\x00\x00\x00\x00\x00\x00\x00\xe6]\xd5<\xf8P\x87;\xbd('b'\x00\x05N\xb1z\xf0\xfe\xec\xfe\x03\xba\x01\x01\xa5\xc5\x14\x00\x9e;'b'\x00\x05N\xb1z\xf0\xffX\xfe\x0c\xbb\x01\x01\x02\x98p5{\xb1N\x05\x00\xa5\x15\xc6\xab'b'\x00\x05N\xb1z\xf2\xb0d\xfe*\xc6\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00f\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xf4%'b'\x00\x05N\xb1z\xf2\xb0\xbc\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x05;R\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf1\xa8'b'\x00\x05N\xb1z\xf2\xb1\x10\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\'b'\x00\x05N\xb1z\xf2\xb1\\\xfe\x04\xc9\x01\x01\x98\x00\x00\x80\x8ae\xef'b'\x00\x05N\xb1z\xf2\xb1\xa0\xfe\x02\xca\x01\x01*\x00\x00\xd0Y'b'\x00\x05N\xb1z\xf2\xb1\xf8\xfe\x1e\xcb\x01\x01\x18p\xd9\xcd\x10\x00\x00\x00\x00t\xa6\x02\x18\xd2\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x08\x00\xebZ\x03\x0cN\xc1'b'\x00\x05N\xb1z\xf2\xb2H\xfe\x1a\xcc\x01\x01>)JP\xc0\x10z\xe4\xbf\xeb\x11}\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0e\xa8'b'\x00\x05N\xb1z\xf2\xb2\x90\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca'b'\x00\x05N\xb1z\xf2\xb2\xe0\xfe\x14\xce\x01\x01J\n\xd7\xa3=\n\xd7\xa3=)\\\xef?)\\\x8f=\xaf\x003\x00H\xb3'b'\x00\x05N\xb1z\xf39s\xfe5\x00\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xeaH'b'\x00\x05N\xb1z\xf3O\xd7\xfe!\x01\xff\x00L\xe3\x03\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x80\x82'b'\x00\x05N\xb1z\xf4(4\xfe\x1c\xcf\x01\x01!\xfbM\x04\x00v\xa6\x02\x18\xd0\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x0f\x00\x03\x00\x08\x00\xb9D\xc00'b'\x00\x05N\xb1z\xf4(\xc8\xfe\x1c\xd0\x01\x01 \x05N\x04\x00\xbb\xbb%>\xc8m\x1c?\xf64\xc5\xbf\x94\xe6 >%O\x0e=[\x05\xa5\xbd\x13\t'b'\x00\x05N\xb1z\xf4)(\xfe\x1c\xd1\x01\x01\x1e-N\x04\x00gaX\xbd\x11\xde\x08\xbd\x8f\x81D@\xed\xca\x0e<\xe9j0\xbd\xdf3%\xbdf\xf9'b'\x00\x05N\xb1z\xf4)|\xfe\x18\xd2\x01\x01\xb2\xa1\xde\x84\xbd.\xf5\xd5\xbc\x05\x9dE@\xd7\x03*Dv\xa6\x02\x18\xd2\xe7\xb8\xfd\xc2\xe2'b'\x00\x05N\xb1z\xf4)\xc8\xfe\x03\xd3\x01\x01Ms\x00\x04\x1b\xa5'b'\x00\x05N\xb1z\xf4*P\xfe\x1c\xd4\x01\x01\xa3\xa5#\x0e:\x04N\xad\xba\xaa\xaf\xac9\x00\x00\x00\x00\x00\x00\x00\x00\r@\xbc<\x8a\x18p;\xd5+'b'\x00\x05N\xb1z\xf4*\x98\xfe\x03\xd5\x01\x01\xa5\xc5\x14\x00-Y'b'\x00\x05N\xb1z\xf4*\xe4\xfe\x0c\xd6\x01\x01\x028h9{\xb1N\x05\x00AN\x04\x00\x0c6'b'\x00\x05N\xb1z\xf4+4\xfe\x16\xd7\x01\x01\x88w\xa6\x02\x18\xd1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfc\xb9'b'\x00\x05N\xb1z\xf4+\x84\xfe\x16\xd8\x01\x01\xc1\xa5\x0f\x89<+5.<\x98=_<\xb6~\t>\x00\x00\x00\x00?\x03\xcd<'b'\x00\x05N\xb1z\xf4\xe6\x8f\xfe\t\x02\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03u"'b'\x00\x05N\xb1z\xf5\x15?\xfe5\x03\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01%_'b'\x00\x05N\xb1z\xf5?\xcf\xfe!\x04\xff\x00L2\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf9\x05'b'\x00\x05N\xb1z\xf5\xb9\xf0\xfe\x15\xda\x01\x01$t\x9c\xd2\x10\\\x06\t\x06\x16\x06A\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00p\xb6'b'\x00\x05N\xb1z\xf5\xba\x84\xfe\x16\xdb\x01\x01#~N\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8f\xdd'b'\x00\x05N\xb1z\xf5\xbb\x0c\xfe\x1a\xdc\x01\x01\x1bj8\xd3\x10\x00\x00\x00\x00\xee\xff\x1d\x00\x17\xfc\x1d\x00\xdf\xff\xdd\xff\x03\xff\xe1\xffy\x01\x17_'b'\x00\x05N\xb1z\xf5\xbbd\xfe\x16\xdd\x01\x01t\xa6N\x04\x00\xf4\xff\x17\x00#\xfc@\x00\xd2\xff\xf7\xff\x01\xff:\xff\n\x02\xcf\xb3'b"\x00\x05N\xb1z\xf5\xbb\xbc\xfe\x16\xde\x01\x01\x81\xa6N\x04\x00\xe6\xff2\x00\x12\xfcV\x00\xc9\xff\xed\xff\x99\x00'\x00|\x02\xad\xa7"b'\x00\x05N\xb1z\xf5\xbc\x1c\xfe\x0e\xdf\x01\x01\x1d\xa6N\x04\x00T\x95iD\xb8\x1e?\xbeg\x10}d'b'\x00\x05N\xb1z\xf5\xbc|\xfe\x0e\xe0\x01\x01\x89\xa6N\x04\x00\xb4\xdbiD\x14\xae%>\xa5\x15\xacM'b'\x00\x05N\xb1z\xf5\xbc\xe8\xfe\x1f\xe1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0b\x01-;~\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xa2\\'b'\x00\x05N\xb1z\xf5\xbdL\xfe\x06\xe2\x01\x01}\xc5\x14\x00\x00\x03\x00;\xa9'b'\x00\x05N\xb1z\xf5\xbd\xac\xfe\x04\xe3\x01\x01\x98\x00\x00\x80\x8al\xfc'b'\x00\x05N\xb1z\xf5\xbe\x04\xfe\x03\xe4\x01\x01Ms\x00\x04\x9d\xd4'b'\x00\x05N\xb1z\xf5\xbe\xac\xfe\x02\xe5\x01\x01*\x00\x00\xa7#'b'\x00\x05N\xb1z\xf5\xbf\x1c\xfe\x1e\xe6\x01\x01\x18x\x9c\xd0\x10\x00\x00\x00\x00v\xa6\x02\x18\xd2\xe7\xb8\xfddi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\x8f\n'b'\x00\x05N\xb1z\xf5\xbf\x84\xfe\x1a\xe7\x01\x01>8\xb63\xc0\xda\xdd\r\xc0)\xbcT\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe6\x19'b'\x00\x05N\xb1z\xf5\xbf\xe4\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl'b'\x00\x05N\xb1z\xf7\x1a\x8f\xfe5\x05\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbbp'b'\x00\x05N\xb1z\xf7\x1dh\xfe\x14\xe9\x01\x01J\xebQ8>\xebQ8>\xd7\xa3\xf0?)\\\x8f=\xaf\x002\x00\x8bc'b'\x00\x05N\xb1z\xf7\x1d\xdc\xfe\x1c\xea\x01\x01!\xc4N\x04\x00y\xa6\x02\x18\xd2\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x0c\x00\x04\x00\x05\x00\xb1Dx\x90'b'\x00\x05N\xb1z\xf7\x1eP\xfe\x1c\xeb\x01\x01 \nO\x04\x00\xe5\x1cL>T+\x1f?\x98\xb6\xc6\xbf\n\x82\xf8=\xdb\x1e?=\x0fES\xbd\xd8!'b'\x00\x05N\xb1z\xf7[c\xfe!\x06\xff\x00L2\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00xX'b"\x00\x05N\xb1z\xf7\x83\xf3\xfe%\x06\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xf3\x7f"b'\x00\x05N\xb1z\xf8\xa6t\xfe\x03\xec\x01\x01Ms\x00\x04!\xf9'b"\x00\x05N\xb1z\xf8\xa7l\xfe\x1c\xed\x01\x01\x1e2O\x04\x00\x91\xb4+\xbd\xa7.9\xbd\xebpD@\xb2\xe9j<\xe0\xc9\x0f\xba\xf3\xca\xf5;'\x0c"b'\x00\x05N\xb1z\xf8\xa7\xdc\xfe\x18\xee\x01\x01\xb2>\x1c[\xbd\xa4\x05\x1d\xbd\xa2\x8aE@3\x13*Dy\xa6\x02\x18\xd4\xe7\xb8\xfdVH'b'\x00\x05N\xb1z\xf8\xa84\xfe\x03\xef\x01\x01/\xff\x00\x00Gl'b'\x00\x05N\xb1z\xf8\xa9(\xfe\x1c\xf0\x01\x01\xa3\x1df\x0f:Q\xe8\xae\xbat3\xac9\x00\x00\x00\x00\x00\x00\x00\x00\xea\x87\x98<\x95=\x9f;t\xa2'b'\x00\x05N\xb1z\xf8\xa9\x98\xfe\x03\xf1\x01\x01\xa5\xc8\x14\x00\x8cr'b'\x00\x05N\xb1z\xf8\xaa\x0c\xfe\x0c\xf2\x01\x01\x02\xd8_={\xb1N\x05\x00FO\x04\x00c\xb9'b'\x00\x05N\xb1z\xf8\xaa\x88\xfe\x16\xf3\x01\x01\x88z\xa6\x02\x18\xd2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00n\x8c'b'\x00\x05N\xb1z\xf8\xab\x04\xfe\x16\xf4\x01\x01\xc1\xe4l\xa3\x00\x00\x00\x00?\x03\xd2/'b'\x00\x05N\xb1z\xf9\x13\x87\xfe5\x08\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcd\xda'b'\x00\x05N\xb1z\xf9*#\xfe!\t\xff\x00L}\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfa\x9f'b"\x00\x05N\xb1z\xfa\x16\xb0\xfe\x15\xf5\x01\x01$^\x97\xd6\x106\x06\x12\x06\x03\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1'"b'\x00\x05N\xb1z\xfa\x17 \xfe\x16\xf6\x01\x01#\x82O\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5q'b'\x00\x05N\xb1z\xfa\x17\x94\xfe\x1a\xf7\x01\x01\x1bH\xe6\xd6\x10\x00\x00\x00\x00\xe6\xff)\x00*\xfcx\x00+\xff\xe6\xff\x06\xff\xe4\xff~\x01\xd7N'b'\x00\x05N\xb1z\xfa\x17\xec\xfe\x16\xf8\x01\x01t\x97O\x04\x00\xe8\xff,\x00V\xfcY\x00G\xff\xfe\xff\x06\xff>\xff\x0e\x025\xf2'b'\x00\x05N\xb1z\xfa\x18D\xfe\x16\xf9\x01\x01\x81\x97O\x04\x00\xe9\xff6\x008\xfc(\x00K\xff\x07\x00\x9a\x00\x1b\x00|\x02\xc5\x9e'b"\x00\x05N\xb1z\xfa\x18\x90\xfe\x0e\xfa\x01\x01\x1d\x97O\x04\x00\xd3\x96iD33'\xbeg\x10\tc"b'\x00\x05N\xb1z\xfa\x18\xe0\xfe\x0e\xfb\x01\x01\x89\x97O\x04\x00=\xdaiDp=\x0e>\xa5\x15x\x1f'b'\x00\x05N\xb1z\xfa\x198\xfe\x1f\xfc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d-;u\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P4('b'\x00\x05N\xb1z\xfa\x19\x8c\xfe\x06\xfd\x01\x01}\xbb\x14\x00\x00\x03\x00_S'b'\x00\x05N\xb1z\xfa\x19\xd8\xfe\x04\xfe\x01\x01\x98\x00\x00\x80\x8a*\x0e'b'\x00\x05N\xb1z\xfa\x1a\x1c\xfe\x02\xff\x01\x01*\x00\x009\x7f'b'\x00\x05N\xb1z\xfa\x1ap\xfe\x1e\x00\x01\x01\x18\xc8\xbe\xd6\x10\x00\x00\x00\x00|\xa6\x02\x18\xd5\xe7\xb8\xfddi\n\x00F\x00\xff\xff\x11\x00\xebZ\x03\x0c\x0eY'b'\x00\x05N\xb1z\xfa\x1a\xc4\xfe\x1a\x01\x01\x01>\x00\x00\xe0\xbf\\\x8fR\xc03s\x15\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\xb9['b'\x00\x05N\xb1z\xfa\x1b\x10\xfe\x08\x02\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0bZ'b'\x00\x05N\xb1z\xfa\x1bX\xfe\x03\x03\x01\x01Ms\x00\x04pP'b'\x00\x05N\xb1z\xfa\xf0{\xfe5\n\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01H8'b'\x00\x05N\xb1z\xfb\x06\xa7\xfe!\x0b\xff\x00L}\x01\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00{\xc2'b'\x00\x05N\xb1z\xfb\xab\xdc\xfe\x14\x04\x01\x01J{\x14.>{\x14.>\xd7\xa3\xf0?\x00\x00\x00\x00\xaf\x005\x00~w'b'\x00\x05N\xb1z\xfb\xacT\xfe\x1c\x05\x01\x01!\x8dO\x04\x00|\xa6\x02\x18\xd3\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x04\x00\x01\x00\x00\x00\xb6DP\xec'b'\x00\x05N\xb1z\xfb\xac\xc0\xfe\x1c\x06\x01\x01 \x0fP\x04\x00zOj>\x98\xb2"?\xebN\xc6\xbf\x0f\xbeL=\xd77\x86<\xa3n\xf8;\x8f\xe9'b'\x00\x05N\xb1z\xfb\xad\x10\xfe\x03\x07\x01\x01Ms\x00\x04\xaeF'b'\x00\x05N\xb1z\xfb\xc1t\xfe\x1c\x08\x01\x01\x1e7P\x04\x00\xeck\xa8\xbc\xa6\x1e\xd4\xbd\xa4\x81D@\xf6\xb8C=*\xc5Q\xbe\xa9\x1e\xa8\xbc-\xfa'b'\x00\x05N\xb1z\xfb\xc1\xd8\xfe\x18\t\x01\x01\xb2\x95\x83\t\xbd\x9e\xd4\xc2\xbd\x7f\xa6E@\x1e\x15*D|\xa6\x02\x18\xd5\xe7\xb8\xfd\xae_'b'\x00\x05N\xb1z\xfc\xdb\x0b\xfe5\x0c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd6\x17'b'\x00\x05N\xb1z\xfd+\xb0\xfe\x1c\n\x01\x01\xa3\xd0\x96\x10:\xc3z\xb0\xba3\xad\xab9\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xa2\x81<(c\xf7;\xf0V'b'\x00\x05N\xb1z\xfd, \xfe\x03\x0b\x01\x01\xa5\xc2\x14\x00j\xcb'b'\x00\x05N\xb1z\xfd,\x80\xfe\x0c\x0c\x01\x01\x02\x98\xa5A{\xb1N\x05\x00LP\x04\x00\x9d\t'b'\x00\x05N\xb1z\xfd,\xf8\xfe\x16\r\x01\x01\x88|\xa6\x02\x18\xd4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00.\xf4'b'\x00\x05N\xb1z\xfd-L\xfe\x16\x0e\x01\x01\xc1\xb2\xff\xa7<\xe4\n\x8d<<\x82\x90:\x02\x0c\xef=\x00\x00\x00\x00?\x03R+'b'\x00\x05N\xb1z\xfd-\x98\xfe\t\xfe\n\x00m\x08\x00\x00\x00\x00\xdb\x00\x00\x00\x96\xca'b'\x00\x05N\xb1z\xfd.\x04\xfe\x1a\x0f\x01\x01\x1b\xf8\x92\xda\x10\x00\x00\x00\x00\xea\xff$\x00\xec\xfb\r\x00\\\x00\x1e\x00\x18\xff\xeb\xff\x8b\x01*u'b'\x00\x05N\xb1z\xfd.X\xfe\x16\x10\x01\x01t\x87P\x04\x00\xe5\xff\x12\x00\xe2\xfb\x1b\x00R\x00\x05\x00\x19\xffA\xff\x1c\x02\xec\xa4'b'\x00\x05N\xb1z\xfd.\xac\xfe\x16\x11\x01\x01\x81\x87P\x04\x00\xee\xff0\x00\r\xfcS\x00B\x00\xef\xff\x8f\x00/\x00\x8d\x02\xd06'b'\x00\x05N\xb1z\xfd.\xf8\xfe\x0e\x12\x01\x01\x1d\x87P\x04\x00\x81\x96iD\xebQ,\xbef\x10\x05e'b'\x00\x05N\xb1z\xfd/D\xfe\x0e\x13\x01\x01\x89\x87P\x04\x00\x0f\xdbiD)\\\x1b>\xa5\x15M\x80'b'\x00\x05N\xb1z\xfd/\x9c\xfe\x1f\x14\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x03\x01-;\xd7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Pq\xfc'b'\x00\x05N\xb1z\xfd/\xec\xfe\x06\x15\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xc5'b'\x00\x05N\xb1z\xfd08\xfe\x04\x16\x01\x01\x98\x00\x00\x80\x8am\xa4'b'\x00\x05N\xb1z\xfd0x\xfe\x02\x17\x01\x01*\x00\x00M\x83'b'\x00\x05N\xb1z\xfd0\xd0\xfe\x1e\x18\x01\x01\x18\xd8\xd3\xd9\x10\x00\x00\x00\x00}\xa6\x02\x18\xd6\xe7\xb8\xfddi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\x1a\x00'b'\x00\x05N\xb1z\xfd1 \xfe\x1a\x19\x01\x01>\xe6\xfd\xbb\xbf,]u\xc0\xcd\x04\x84\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xcc\x05'b'\x00\x05N\xb1z\xfd1h\xfe\x08\x1a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb3-'b'\x00\x05N\xb1z\xfd1\xb8\xfe\x15\x1b\x01\x01$/\xe1\xda\x10/\x06#\x068\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8d'b'\x00\x05N\xb1z\xfd2\x08\xfe\x16\x1c\x01\x01#\x9bP\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbb\xc1'b'\x00\x05N\xb1z\xfd3\x07\xfe!\r\xff\x00L\x05+\t\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbd\xed'b'\x00\x05N\xb1z\xfe\xd3\xac\xfe\x03\x1d\x01\x01Ms\x00\x04\x05;'b'\x00\x05N\xb1z\xfe\xd3\xff\xfe5\x0e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01S\xf5'b'\x00\x05N\xb1z\xff\x16\xb0\xfe\x14\x1e\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>)\\\xef?\n\xd7\xa3<\xaf\x006\x00uH'b'\x00\x05N\xb1z\xffB\xab\xfe!\x0f\xff\x00Ll\x91\x0e\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdbL'b'\x00\x05N\xb1{\x00\x81,\xfe\x12\x1f\x01\x01\xfc\x13Q\x04\x004\x00\x01\x00ARMMASK\x00Wr0\x15'b'\x00\x05N\xb1{\x00\x82\x04\xfe\t \x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe8\x00'b'\x00\x05N\xb1{\x00\x82\xb4\xfe\x1c!\x01\x01!WP\x04\x00{\xa6\x02\x18\xd4\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf1\xff\xfe\xff\x05\x00\xb8D\x89T'b'\x00\x05N\xb1{\x00\x83d\xfe\x1c"\x01\x01 \x16Q\x04\x00\xd2\x08\\>\x91y#?V\x94\xc5\xbf\x86\xad \xbe\xd2M\xf1\xbc\xde?Z\xbd\x1c\x1c'b'\x00\x05N\xb1{\x00\x83\xcc\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6'b'\x00\x05N\xb1{\x00\x998\xfe\x1c$\x01\x01\x1e>Q\x04\x00\xed\x10\xa1\xbc\xccR\x89\xbd?\x85D@xv\x0e\xbd\rjk>\xf8\x1d\x03\xbb\x90='b'\x00\x05N\xb1{\x00\x99\xa8\xfe\x18%\x01\x01\xb2W\xab\xfa\xbc"\x93\x7f\xbd|\xa9E@\n\x17*D}\xa6\x02\x18\xd6\xe7\xb8\xfd|\xb7'b'\x00\x05N\xb1{\x00\x9a\x0c\xfe\x1c&\x01\x01\xa3\x8f\xb1\x11:\xc6\x07\xb2\xba\xe0\x13\xab9\x00\x00\x00\x00\x00\x00\x00\x00\xd2Jd\x00\x00\x00\x00?\x03\x0f\xbc'b'\x00\x05N\xb1{\x01"7\xfe5\x10\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb5d'b'\x00\x05N\xb1{\x01M\x1b\xfe!\x11\xff\x00L>\xd3\x13\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd5>'b'\x00\x05N\xb1{\x01\xc5\x18\xfe\x1a+\x01\x01\x1b#F\xde\x10\x00\x00\x00\x00\xe3\xff%\x00\x18\xfc\x95\xff\xae\x00\xfc\xff\x12\xff\xed\xff\x81\x01\x06U'b'\x00\x05N\xb1{\x01\xc6(\xfe\x16,\x01\x01tzQ\x04\x00\xef\xff*\x00+\xfc\x87\xff\xc1\x00\xff\xff\x10\xffM\xff\x18\x02\xc9\x83'b'\x00\x05N\xb1{\x01\xc6\xfc\xfe\x16-\x01\x01\x81zQ\x04\x00\xe2\xff+\x00.\xfck\xff\xdc\x00\xfe\xff\xae\x007\x00~\x02\xa3c'b'\x00\x05N\xb1{\x01\xc7\xbc\xfe\x0e.\x01\x01\x1dzQ\x04\x00\xac\x97iD\x99\x99\x19\xbeg\x10\xa3\xd3'b"\x00\x05N\xb1{\x01\xc80\xfe\x0e/\x01\x01\x89zQ\x04\x00'\xdbiDG\xe1\x1c>\xa6\x15<\xb3"b'\x00\x05N\xb1{\x01\xc8\xa4\xfe\x1f0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x008\x00-;\xb7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xde\x9f'b'\x00\x05N\xb1{\x01\xc9(\xfe\x061\x01\x01}\xc5\x14\x00\x00\x03\x00\xd3y'b'\x00\x05N\xb1{\x01\xc9\xb8\xfe\x042\x01\x01\x98\x00\x00\x80\x8a\xb1l'b'\x00\x05N\xb1{\x01\xca\x14\xfe\x023\x01\x01*\x00\x00\xb8\x8f'b'\x00\x05N\xb1{\x01\xca\x80\xfe\x1e4\x01\x01\x18\xe8\xe8\xdc\x10\x00\x00\x00\x00}\xa6\x02\x18\xd6\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x01\x00\xebZ\x03\x0c\xc7['b'\x00\x05N\xb1{\x01\xca\xe4\xfe\x1a5\x01\x01>N\xa4\n\xc0>\xe9\xb5\xbf\xd7\xa3\xe0\xba\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x9b\xc9'b'\x00\x05N\xb1{\x01\xcb8\xfe\x086\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xa3'b'\x00\x05N\xb1{\x01\xcb\x90\xfe\x157\x01\x01$\xf2\xe1\xde\x10W\x06\xf6\x05\xf6\x05Z\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbbF'b'\x00\x05N\xb1{\x01\xcb\xec\xfe\x168\x01\x01#\xa2Q\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x81\xbb'b'\x00\x05N\xb1{\x01\xcc8\xfe\x039\x01\x01Ms\x00\x04+\x9b'b'\x00\x05N\xb1{\x032C\xfe5\x12\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x010\x86'b'\x00\x05N\xb1{\x03I\xf7\xfe!\x13\xff\x00L\xa49\x19\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\n\xff'b'\x00\x05N\xb1{\x03_t\xfe\x14:\x01\x01J)\\\x8f=)\\\x8f=)\\\xef?\xcc\xccL=\xaf\x006\x00*\xb8'b'\x00\x05N\xb1{\x03`\x10\xfe\x1c;\x01\x01!\xe8Q\x04\x00v\xa6\x02\x18\xd3\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xeb\xff\xfa\xff\x06\x00\xb9D\xf3\xf3'b"\x00\x05N\xb1{\x03`|\xfe\x1c<\x01\x01 \x1aR\x04\x00\xab\xa9'>g\x1d!?dq\xc6\xbfxeZ\xben\xb3v\xbd)$\x83\xbdo\xe4"b'\x00\x05N\xb1{\x04*\xef\xfe\t\x14\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xcf\xfa'b'\x00\x05N\xb1{\x04\xe7\x0c\xfe\x1c=\x01\x01\x1eBR\x04\x00\xe6C"\xbd\xd7\x10\xab\xbc\xe6\x91D@\xf2\xc8\x92\xbc\x89\x92\xd6=\x7fW\xfc<\xf1\x86'b'\x00\x05N\xb1{\x04\xe7\xa0\xfe\x18>\x01\x01\xb2@rM\xbd\x96\xcae\xbc.\xb2E@\x85\x0b*D{\xa6\x02\x18\xd5\xe7\xb8\xfd2&'b'\x00\x05N\xb1{\x04\xe8\x08\xfe\x03?\x01\x01Ms\x00\x04\x9a\x86'b'\x00\x05N\xb1{\x04\xfc\x9c\xfe\x1c@\x01\x01\xa36\xbb\x12:\xde\x90\xb3\xba\x8ev\xaa9\x00\x00\x00\x00\x00\x00\x00\x00i\xd8\x85\x00\x00\x00\x00?\x03\xe9U'b'\x00\x05N\xb1{\x04\xff`\xfe\x1aG\x01\x01\x1b\x00\xf1\xe1\x10\x00\x00\x00\x00\xea\xff(\x00G\xfc\x04\x00O\x00\xf7\xff\x02\xff\xe8\xffy\x01\xdf\xfd'b'\x00\x05N\xb1{\x04\xff\xd4\xfe\x16H\x01\x01tjR\x04\x00\xeb\xff5\x00Q\xfc\xfb\xff[\x00\x0e\x00\xff\xfe@\xff\n\x02\x0br'b'\x00\x05N\xb1{\x05\x00H\xfe\x16I\x01\x01\x81jR\x04\x00\xe3\xff&\x00,\xfc\xd3\xffq\x00\x17\x00w\x004\x00|\x02\x9d?'b'\x00\x05N\xb1{\x05\x00\xb4\xfe\x0eJ\x01\x01\x1djR\x04\x00\xc9\x97iD\n\xd7\x17\xbeh\x10\xa5\x00'b'\x00\x05N\xb1{\x05\x01\x1c\xfe\x0eK\x01\x01\x89jR\x04\x00!\xdaiD\xe1z\x0c>\xa7\x15o/'b'\x00\x05N\xb1{\x05\x01\x94\xfe\x1fL\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01!;<\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Pj\xb6'b'\x00\x05N\xb1{\x05\x02\x04\xfe\x06M\x01\x01}\xc5\x14\x00\x00\x03\x00\xe6\xc5'b'\x00\x05N\xb1{\x05\x02`\xfe\x04N\x01\x01\x98\x00\x00\x80\x8aP\xc2'b'\x00\x05N\xb1{\x05\x02\xb0\xfe\x02O\x01\x01*\x00\x00n/'b'\x00\x05N\xb1{\x05\x03\x10\xfe\x1eP\x01\x01\x18@\xf2\xdf\x10\x00\x00\x00\x00{\xa6\x02\x18\xd5\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x07\x00\xebZ\x03\x0cU&'b'\x00\x05N\xb1{\x05\x03t\xfe\x1aQ\x01\x01>\x8b](\xc0\xe7K\xf9\xbe\x00\xa0\xcc;\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00=\t'b'\x00\x05N\xb1{\x05\x03\xc4\xfe\x08R\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8ac'b'\x00\x05N\xb1{\x05\x04\x1c\xfe\x15S\x01\x01$:\x8d\xe2\x10L\x06!\x06\x11\x06Y\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8R'b'\x00\x05N\xb1{\x05\x04|\xfe\x16T\x01\x01#\x92R\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe3\xcd'b'\x00\x05N\xb1{\x05\x05\x9b\xfe5\x15\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe4\\'b'\x00\x05N\xb1{\x05\x1b\xf3\xfe!\x16\xff\x00Lq\x06$\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00o\xd4'b'\x00\x05N\xb1{\x06\x88D\xfe\x03U\x01\x01Ms\x00\x04Hs'b'\x00\x05N\xb1{\x06\x89H\xfe\x14V\x01\x01J\\\x8fB>\\\x8fB>\xd7\xa3\xf0?\n\xd7#=\xaf\x006\x00\xee\xb9'b'\x00\x05N\xb1{\x06\xf4\xef\xfe5\x17\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01a\xbe'b'\x00\x05N\xb1{\x073\x03\xfe!\x18\xff\x00L@(+\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00>z'b"\x00\x05N\xb1{\x07\xcc\x1b\xfe%\x19\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xdbM"b'\x00\x05N\xb1{\x08\t8\xfe\x1cW\x01\x01!\xb1R\x04\x00r\xa6\x02\x18\xd1\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xee\xff\xf9\xff\x05\x00\xbbD\xf8\x01'b'\x00\x05N\xb1{\x08\t\xec\xfe\x1cX\x01\x01 \x0bS\x04\x00\xbf\xb2\xef=\x88k\x1d?\xfd\xec\xc6\xbfHT=\xbe\xd1\\\x91\xbd%\xfaS\xbd\xb7\xad'b'\x00\x05N\xb1{\x08\n\x84\xfe\x1cY\x01\x01\x1e3S\x04\x00\x1a\n)\xbd\xe6p8\xbc\x8a\x8dD@\xa8\x1cS\xbd\xa5\xdb=\xbc\xb7@\xee<\xfd\xaf'b'\x00\x05N\xb1{\x08\n\xf8\xfe\x18Z\x01\x01\xb2\xb2$S\xbd.\x05L\xbb\xf3\xb4E@3\x13*Dw\xa6\x02\x18\xd4\xe7\xb8\xfd\x9e1'b'\x00\x05N\xb1{\x08\x0bP\xfe\x03[\x01\x01Ms\x00\x04EC'b"\x00\x05N\xb1{\x08 \xc4\xfe\x1c\\\x01\x01\xa3'\xa7\x13:\xf3\xf7\xb4\xba&\xf4\xa99\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x19\xb5<.]\xdf;\xb1b"b'\x00\x05N\xb1{\x08!,\xfe\x03]\x01\x01\xa5\xc8\x14\x00\xfc4'b'\x00\x05N\xb1{\x08!\x88\xfe\x0c^\x01\x01\x02X>M{\xb1N\x05\x00GS\x04\x00\xd1\x11'b'\x00\x05N\xb1{\x08"\x08\xfe\x16_\x01\x01\x88q\xa6\x02\x18\xd0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xe2'b'\x00\x05N\xb1{\x08"\x84\xfe\x16`\x01\x01\xc1\xff\xd3\x92<\xe4*^;\x88o\x11;\xa1\x81\x1e>\x00\x00\x00\x00?\x03\xefQ'b'\x00\x05N\xb1{\x08#\x08\xfe\x1aa\x01\x01\x1b\xf6\x9e\xe5\x10\x00\x00\x00\x00\xf3\xff\x16\x00#\xfc\xdc\xff\xfa\xff\xf6\xff\xfe\xfe\xe5\xffu\x01\x00\x7f'b'\x00\x05N\xb1{\x08#\x84\xfe\x16b\x01\x01t[S\x04\x00\xfe\xff\t\x00M\xfc\xd5\xff\t\x00\xf9\xff\xf8\xfe<\xff\x04\x02\xa6\xa7'b"\x00\x05N\xb1{\x08#\xfc\xfe\x16c\x01\x01\x81[S\x04\x00\xf2\xff+\x005\xfc\xa2\xff\x1e\x00\xfb\xffr\x00'\x00_\x02k\xa0"b'\x00\x05N\xb1{\x08$h\xfe\x0ed\x01\x01\x1d[S\x04\x00\xf2\x96iD\xaeG%\xbeh\x10\x91\x1a'b'\x00\x05N\xb1{\x08$\xd8\xfe\x0ee\x01\x01\x89[S\x04\x00\xe1\xdaiD\xe1z\x18>\xa7\x15G\x01'b'\x00\x05N\xb1{\x08%T\xfe\x1ff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0e\x01!;S\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x82\x80'b'\x00\x05N\xb1{\x08%\xc4\xfe\x06g\x01\x01}\xc8\x14\x00\x00\x03\x00\xab\x1e'b'\x00\x05N\xb1{\x08&\x10\xfe\x03h\x01\x01/\xff\x00\x00\xab;'b'\x00\x05N\xb1{\x08;\xb8\xfe\x04i\x01\x01\x98\x00\x00\x80\x8a\x8b\xdc'b'\x00\x05N\xb1{\x08<0\xfe\x02j\x01\x01*\x00\x00N\xbc'b'\x00\x05N\xb1{\x08<\xa8\xfe\x1ek\x01\x01\x18h\x03\xe3\x10\x00\x00\x00\x00s\xa6\x02\x18\xd2\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0c\xe3\xb2'b'\x00\x05N\xb1{\x08=\x1c\xfe\x1al\x01\x01>t69\xc06\xe9\x12\xbep\xb5\x93<\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xf4?'b'\x00\x05N\xb1{\x08=\x8c\xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9'b'\x00\x05N\xb1{\t\x04\x8f\xfe5\x1a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x17\x14'b'\x00\x05N\xb1{\t\x06\xc7\xfe!\x1b\xff\x00L\xb1\xd83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0A'b'\x00\x05N\xb1{\t\xce`\xfe\x15n\x01\x01$\x9b\x8a\xe6\x107\x06!\x06.\x06"\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00G\xc8'b'\x00\x05N\xb1{\t\xcf\x18\xfe\x16o\x01\x01#\x98S\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf4p'b'\x00\x05N\xb1{\t\xcf\x88\xfe\x03p\x01\x01Ms\x00\x00\xb95'b'\x00\x05N\xb1{\n\xad\xcb\xfe5\x1c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x89;'b'\x00\x05N\xb1{\n\xc3\xf3\xfe!\x1d\xff\x00L\xe4\x0b)C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Z\x1d'b'\x00\x05N\xb1{\x0b\x01\xa4\xfe\x14q\x01\x01J\xcc\xccL>\xcc\xccL>\x85\xeb\xf1?\x8f\xc2\xf5<\xb0\x004\x00v\xc5'b'\x00\x05N\xb1{\x0b\x02`\xfe\x1cr\x01\x01!zS\x04\x00n\xa6\x02\x18\xcf\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf1\xff\xfb\xff\x00\x00\xe8D\xb2\x86'b'\x00\x05N\xb1{\x0b\x02\xdc\xfe\x1cs\x01\x01 \x10T\x04\x00\xb2A\x88=\xc88\x19?c\x93\xc8\xbf}]!\xbe\xdd\xe7V\xbd)\xea\xde\xbb\n\xeb'b'\x00\x05N\xb1{\x0b\x038\xfe\x03t\x01\x01Ms\x00\x00g#'b'\x00\x05N\xb1{\x0c\x89g\xfe5\x1e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0c\xd9'b'\x00\x05N\xb1{\x0c\x8b$\xfe\x1cu\x01\x01\x1e9T\x04\x00\x85\xd8D\xbd\x06\xf5\x1f;\x91\xe9E@\x9a\x0c\x8c=\xc0\xe1\t=\xdfz\xc4>^\x1a'b'\x00\x05N\xb1{\x0c\x8b\xac\xfe\x18v\x01\x01\xb2Nkr\xbdv2,<\x8a\xdeF@{\x14*Ds\xa6\x02\x18\xd2\xe7\xb8\xfd\xad\xa0'b'\x00\x05N\xb1{\x0c\x8c\x14\xfe\x1aw\x01\x01\x1bGM\xe9\x10\x00\x00\x00\x00\x02\x002\x00>\xfc\x1b\x005\x00}\x01\xf4\xfe\xe9\xfft\x01\xd7\xbc'b'\x00\x05N\xb1{\x0c\x8c\xa0\xfe\x16x\x01\x01tMT\x04\x00\xfe\xff.\x00B\xfc\x1f\x00=\x00_\x01\xf7\xfeC\xff\x06\x02%\xcd'b'\x00\x05N\xb1{\x0c\x8d8\xfe\x16y\x01\x01\x81MT\x04\x00\xf8\xff3\x000\xfcc\x007\x00J\x01\x95\x006\x00`\x02[\xc0'b'\x00\x05N\xb1{\x0c\x8d\x90\xfe\x0ez\x01\x01\x1dMT\x04\x00\xdd\x96iD\\\x8f&\xbei\x10\x88\xfa'b'\x00\x05N\xb1{\x0c\x8d\xe4\xfe\x0e{\x01\x01\x89MT\x04\x00%\xd9iD\xa3p\xf9=\xa7\x15\xb7w'b'\x00\x05N\xb1{\x0c\x8eD\xfe\x1f|\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d!;u\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P@\xae'b'\x00\x05N\xb1{\x0c\x8e\xc8\xfe\x06}\x01\x01}\xc6\x14\x00\x00\x03\x00G\xfe'b'\x00\x05N\xb1{\x0c\x8f$\xfe\x04~\x01\x01\x98\x00\x00\x80\x8a\xfd\xca'b'\x00\x05N\xb1{\x0c\x8fl\xfe\x02\x7f\x01\x01*\x00\x00$\xf9'b'\x00\x05N\xb1{\x0c\x8f\xc8\xfe\x1e\x80\x01\x01\x18\xa0)\xe9\x10\x00\x00\x00\x00p\xa6\x02\x18\xd0\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0cM\x1d'b'\x00\x05N\xb1{\x0c\x90 \xfe\x1a\x81\x01\x01>3.m\xc0i`\xbc?\x85[b<\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x12\xdf'b'\x00\x05N\xb1{\x0c\x90l\xfe\x08\x82\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x9c'b'\x00\x05N\xb1{\x0c\x90\xc4\xfe\x1c\x83\x01\x01\xa3\xf3\xb4\x14:a\x9b\xb6\xba\xe4n\xa99\x00\x00\x00\x00\x00\x00\x00\x00y\x1f\xa9<\x11X\xc1;E\xfc'b'\x00\x05N\xb1{\x0c\x91\x1c\xfe\x03\x84\x01\x01\xa5\xc8\x14\x00\x94m'b'\x00\x05N\xb1{\x0c\x91h\xfe\x0c\x85\x01\x01\x02\x18\x84Q{\xb1N\x05\x00aT\x04\x00\xe9\xa9'b'\x00\x05N\xb1{\x0c\x91\xc0\xfe\x16\x86\x01\x01\x88l\xa6\x02\x18\xce\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa2\xd2'b'\x00\x05N\xb1{\x0c\x92\x18\xfe\x16\x87\x01\x01\xc1@\xce\x0f<\xd0\x10q;G&\x0e;\x93\xde\r>\x00\x00\x00\x00?\x03\xc8\x94'b'\x00\x05N\xb1{\x0c\x92d\xfe\t\xff\n\x00m\x06\x00\x00\x00\x00\xdb\x00\x00\x00\x875'b'\x00\x05N\xb1{\x0c\xb2\xf3\xfe!\x1f\xff\x00L\xb1\xd8\x18C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd9\\'b'\x00\x05N\xb1{\x0e&\x14\xfe\x15\x88\x01\x01$\x96\x87\xea\x10%\x05a\x04\xcb\x06\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00po'b'\x00\x05N\xb1{\x0e&\xa4\xfe\x16\x89\x01\x01#\x9dT\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00l!'b"\x00\x05N\xb1{\x0e'\x08\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P"b'\x00\x05N\xb1{\x0e;p\xfe\x14\x8b\x01\x01J\\\x8fB>\\\x8fB>\x85\xeb\xf1?\n\xd7#\xbc\xaf\x00;\x00R7'b'\x00\x05N\xb1{\x0e;\xe4\xfe\x12\x8c\x01\x01\xfc\xffT\x04\x004\x00\x01\x00ARMMASK\x00Wr\xda\x97'b'\x00\x05N\xb1{\x0eU\x04\x00\xfa\xff\x18\x00\xda\xfb\x03\x00\x82\x01q\xfd\xee\xfe\x18\xff\xf2\x01z\x07'b'\x00\x05N\xb1{\x0f\xa8,\xfe\x16\x93\x01\x01\x81>U\x04\x00\xf4\xff\x1d\x00\xec\xfb\x1c\x00v\x01\\\xfdw\x00\x18\x00g\x02\xbb:'b'\x00\x05N\xb1{\x0f\xa8\x90\xfe\x0e\x94\x01\x01\x1d>U\x04\x00\xc9\x97iD\n\xd7\x17\xbei\x10\xdf\x8e'b'\x00\x05N\xb1{\x0f\xa8\xdc\xfe\x0e\x95\x01\x01\x89>U\x04\x00\xb4\xd9iD\x14\xae\x05>\xa8\x15\x04N'b'\x00\x05N\xb1{\x0f\xa98\xfe\x1f\x96\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x14\x01\xe8:#\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PY3'b'\x00\x05N\xb1{\x0f\xa9\x8c\xfe\x06\x97\x01\x01}\xc5\x14\x00\x00\x03\x005\xfc'b'\x00\x05N\xb1{\x0f\xa9\xd8\xfe\x04\x98\x01\x01\x98\x00\x00\x80\x8ao\xbb'b'\x00\x05N\xb1{\x0f\xaa\x1c\xfe\x02\x99\x01\x01*\x00\x00q\x83'b'\x00\x05N\xb1{\x0f\xaap\xfe\x1e\x9a\x01\x01\x18\xe06\xec\x10\x00\x00\x00\x00n\xa6\x02\x18\xce\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x0e\x00\xebZ\x03\x0cD4'b"\x00\x05N\xb1{\x0f\xaa\xc4\xfe\x1a\x9b\x01\x01>\x13\xda`\xc0\x05\xe7\xba?)<'=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x1f\x03"b'\x00\x05N\xb1{\x0f\xab\x0c\xfe\x08\x9c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6'b'\x00\x05N\xb1{\x0f\xabp\xfe\x1c\x9d\x01\x01\x1eRU\x04\x00\x86\x82\xb0\xbd*\x93)>\x8f.\xbf\x8aC'b'\x00\x05N\xb1{\x0f\xab\xc4\xfe\x18\x9e\x01\x01\xb2\x87\x9b\xca\xbd \xf3d\xa9\x15\x06\xe1'b'\x00\x05N\xb1{\x14F(\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01\xe8:\xf7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xad\x07'b'\x00\x05N\xb1{\x14F\x84\xfe\x06\xb1\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xeb'b'\x00\x05N\xb1{\x14F\xd8\xfe\x04\xb2\x01\x01\x98\x00\x00\x80\x8af\xa8'b'\x00\x05N\xb1{\x14G \xfe\x02\xb3\x01\x01*\x00\x00\xa5\t'b'\x00\x05N\xb1{\x14G|\xfe\x1e\xb4\x01\x01\x18\x08H\xef\x10\x00\x00\x00\x00m\xa6\x02\x18\xce\xe7\xb8\xfdFi\n\x00F\x00\xff\xff\x08\x00\xebZ\x03\x0c\xa5\xbb'b'\x00\x05N\xb1{\x14G\xd4\xfe\x1a\xb5\x01\x01>.~ \xc0\xb2\xc2z\xba\xccXN=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00v\xcd'b'\x00\x05N\xb1{\x14H$\xfe\x08\xb6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00me'b'\x00\x05N\xb1{\x14Hx\xfe\x1c\xb7\x01\x01\x1eWV\x04\x00/]2\xbd\xf7\xdb\x18=\xd4b2@\x93\x07>>~\xcb\xd2\xbd\xec\xd3_\xbf<9'b'\x00\x05N\xb1{\x14H\xcc\xfe\x18\xb8\x01\x01\xb2\x9btr\xbd%=5=\xee\xf63@\x14\x0e*Dm\xa6\x02\x18\xce\xe7\xb8\xfdx\xbb'b'\x00\x05N\xb1{\x14I \xfe\x1c\xb9\x01\x01\xa3R\xa7\x16:\\\x8b\xb9\xba]\x86\xa89\x00\x00\x00\x00\x00\x00\x00\x00\x8f`\x89<8\xb6B\x99\x000\x00\xff,'b'\x00\x05N\xb1{\x17^\x9c\xfe\x1a\xc3\x01\x01\x1b\xd6X\xf4\x10\x00\x00\x00\x00\xf5\xff\x1c\x00R\xfc>\x00s\xff\xac\xfe\xff\xfe\x8d\xffp\x01\xc4K'b'\x00\x05N\xb1{\x17_(\xfe\x16\xc4\x01\x01t W\x04\x00\xf6\xff(\x00O\xfcC\x00x\xff\xa7\xfe\r\xff\xf8\xfe\xfe\x01\x991'b'\x00\x05N\xb1{\x17_\xb4\xfe\x16\xc5\x01\x01\x81!W\x04\x00\xee\xff \x00D\xfc\x08\x00t\xff\xba\xfe\xa5\x00\xff\xffi\x02\xd0\xc2'b'\x00\x05N\xb1{\x17`,\xfe\x0e\xc6\x01\x01\x1d!W\x04\x00\xdb\x96iDR\xb8&\xbei\x10+\xe5'b'\x00\x05N\xb1{\x17`\xa0\xfe\x0e\xc7\x01\x01\x89!W\x04\x00\xcf\xd9iD)\\\x07>\xa9\x15Iz'b'\x00\x05N\xb1{\x17a$\xfe\x1f\xc8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe8:\xf7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PS\x0e'b'\x00\x05N\xb1{\x17a\xa0\xfe\x06\xc9\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8\t'b'\x00\x05N\xb1{\x17b\x0c\xfe\x04\xca\x01\x01\x98\x00\x00\x80\x8ab9'b'\x00\x05N\xb1{\x17bl\xfe\x02\xcb\x01\x01*\x00\x00\x05\xc6'b'\x00\x05N\xb1{\x17b\xe8\xfe\x1e\xcc\x01\x01\x180Y\xf2\x10\x00\x00\x00\x00m\xa6\x02\x18\xce\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x01\x00\xebZ\x03\x0c\xcc\x0f'b'\x00\x05N\xb1{\x17cT\xfe\x1a\xcd\x01\x01>!E\xe9\xbf\xf0\xdc\x11\xc0R\x10\r=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\xcbR'b'\x00\x05N\xb1{\x17c\xa8\xfe\x08\xce\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00$\xc4'b'\x00\x05N\xb1{\x17d\x08\xfe\x1c\xcf\x01\x01!\x9eV\x04\x00l\xa6\x02\x18\xcf\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x10\x00\x00\x00\n\x00\x99;\xa7\xf4'b'\x00\x05N\xb1{\x17dt\xfe\x1c\xd0\x01\x01 4W\x04\x00D\x85d=-`\x18?F\x95\xcb\xbf\x8c\xfc+>#\t\x9e;\xdc\x85\xd9\xbd\xa7\\'b'\x00\x05N\xb1{\x17d\xc4\xfe\x03\xd1\x01\x01Ms\x00\x00\x14\xc9'b"\x00\x05N\xb1{\x18\x08C\xfe%+\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00,\x8e"b'\x00\x05N\xb1{\x18\xa3\xcf\xfe5,\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01hO'b'\x00\x05N\xb1{\x18\xba\x0f\xfe!-\xff\x00Lt\x1f\x16C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x85\x92'b'\x00\x05N\xb1{\x18\xe3p\xfe\x1c\xd2\x01\x01\x1e]W\x04\x00\xbd\xf8\xc7\xbc\xdeW\xac\xbb\x19\xc8)@\xbf\xf4.<\xea\xf39\xbe\xe2\xfbo\xbe\x9c\xc0'b'\x00\x05N\xb1{\x18\xe4\x00\xfe\x18\xd3\x01\x01\xb2\xe6\xd3!\xbd\xa0 \xe69\x0e\xfc*@{\x14*Dm\xa6\x02\x18\xce\xe7\xb8\xfd\x81\xb1'b'\x00\x05N\xb1{\x18\xe4p\xfe\x1c\xd4\x01\x01\xa3\xff\xa0\x17:\xaa\xea\xba\xba\x94\x14\xa89\x00\x00\x00\x00\x00\x00\x00\x00\x10/\xb4<\x95\xe7\x9c\xb8\x1e\x05>\x8f\xc2\xf5?\n\xd7\xa3<\x96\x009\x00\xe1\x0e'b'\x00\x05N\xb1{\x1a_\xc4\xfe\x1a\xde\x01\x01\x1bS\x07\xf8\x10\x00\x00\x00\x00\xe8\xff#\x00!\xfc:\x00\xbb\xff9\x00\x19\xff{\xffr\x01\xeeX'b'\x00\x05N\xb1{\x1a`8\xfe\x16\xdf\x01\x01t\x12X\x04\x00\xe9\xff\x1e\x00/\xfc:\x00\xc2\xff4\x00%\xff\xe4\xfe\x08\x02\x02\xb1'b'\x00\x05N\xb1{\x1a`\xa4\xfe\x16\xe0\x01\x01\x81\x12X\x04\x00\xe5\xff-\x00\x1c\xfc/\x00\xba\xff6\x00\xc0\x00\xc4\xfft\x02{\\'b'\x00\x05N\xb1{\x1aa\x04\xfe\x0e\xe1\x01\x01\x1d\x12X\x04\x00\x1b\x98iDR\xb8\x12\xbei\x10vr'b'\x00\x05N\xb1{\x1aa`\xfe\x0e\xe2\x01\x01\x89\x12X\x04\x00\xc5\xdaiDR\xb8\x16>\xaa\x15C"'b'\x00\x05N\xb1{\x1aa\xcc\xfe*\xe3\x01\x01\x96s\xe7f\xbc\xfdl\x01\x00i\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00E\x12'b'\x00\x05N\xb1{\x1ab,\xfe\x1f\xe4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x00\xe8:\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P|q'b"\x00\x05N\xb1{\x1ab\x88\xfe\x06\xe5\x01\x01}\xc8\x14\x00\x00\x03\x00\x92'"b'\x00\x05N\xb1{\x1ab\xd8\xfe\x04\xe6\x01\x01\x98\x00\x00\x80\x8at\x8e'b'\x00\x05N\xb1{\x1ac$\xfe\x02\xe7\x01\x01*\x00\x00\x1c\x14'b'\x00\x05N\xb1{\x1ayC\xfe\x06.\xff\x00B\x04\x00\x01\x00\x00\x01\xd4\xd2'b'\x00\x05N\xb1{\x1a\xa5G\xfe5/\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa7X'b'\x00\x05N\xb1{\x1a\xcfc\xfe!0\xff\x00L\t\xa3\x13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe8\xe0'b'\x00\x05N\xb1{\x1b\xf8\xc4\xfe\x1e\xe8\x01\x01\x18Xj\xf5\x10\x00\x00\x00\x00s\xa6\x02\x18\xcf\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\xae\xfa'b'\x00\x05N\xb1{\x1b\xf9P\xfe\x1a\xe9\x01\x01>.\x19.\xbf\x7fj\x86\xc0{TF=\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\xb7\xff'b'\x00\x05N\xb1{\x1b\xf9\xa8\xfe\x08\xea\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x000g'b'\x00\x05N\xb1{\x1b\xfa\x00\xfe\x1c\xeb\x01\x01!0X\x04\x00q\xa6\x02\x18\xce\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x11\x00\x00\x00\x02\x00\xc8:0\x9b'b'\x00\x05N\xb1{\x1b\xfah\xfe\x1c\xec\x01\x01 :X\x04\x00\x91g\xde=\x07\xd8\x17?\xf6\x1c\xcb\xbf\x94\x812>7\x028\xba\x06\xba\xf0\xbc\x02,'b'\x00\x05N\xb1{\x1b\xfa\xb4\xfe\x03\xed\x01\x01Ms\x00\x00\xfe\x1f'b'\x00\x05N\xb1{\x1b\xfbH\xfe\t\x00\n\x00m\x06\x00\x00\x00\x00\xdb\x00\x00\x00\xba\x1c'b"\x00\x05N\xb1{\x1b\xfb\xa0\xfe\x1c\xee\x01\x01\x1ebX\x04\x00\xb0\x8c\xe9\xbc\xcd\xa6R\xbd,\xc0'@T\xce\x84=\xde\xa6\x86\xbe\x04E\x11\xbejY"b'\x00\x05N\xb1{\x1b\xfb\xf4\xfe\x18\xef\x01\x01\xb2c3:\xbd,v;\xbd\xf1\xf4(@\x85\x0b*Ds\xa6\x02\x18\xcf\xe7\xb8\xfd\xd6\xd3'b'\x00\x05N\xb1{\x1b\xfcX\xfe\x1c\xf0\x01\x01\xa3q\x8f\x18:\x01A\xbc\xba\x9f\xb5\xa79\x00\x00\x00\x00\x00\x00\x00\x00\xae\xc7\xaf<\x8c\\\x8c\xaa\x15\x8fT'b'\x00\x05N\xb1{\x1f\r\x08\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00K\x01-;\x1e\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xbb\x80'b'\x00\x05N\xb1{\x1f\r\x94\xfe\x06\x00\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\x91'b'\x00\x05N\xb1{\x1f\x0e\x10\xfe\x04\x01\x01\x01\x98\x00\x00\x80\x8a\x1b\xb2'b"\x00\x05N\xb1{\x1f\x0e\x80\xfe\x02\x02\x01\x01*\x00\x00'\xc6"b'\x00\x05N\xb1{\x1f\x0f\x08\xfe\x1e\x03\x01\x01\x18\x90\x90\xfb\x10\x00\x00\x00\x00w\xa6\x02\x18\xce\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x19\x00\x13~\x03\x0c=\xc8'b'\x00\x05N\xb1{\x1f\x0f\x8c\xfe\x1a\x04\x01\x01>\xef\xb9\xef\xbe}\x86k\xc0\x85)\x8b=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x83/'b'\x00\x05N\xb1{\x1f\x0f\xec\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB'b'\x00\x05N\xb1{\x1f\x10T\xfe\x14\x06\x01\x01J\x00\x00\x80>\x00\x00\x80>\xe1z\xf4?{\x14.>\x93\x004\x00\xe6\x1b'b'\x00\x05N\xb1{\x1f\x10\xc4\xfe\x1c\x07\x01\x01!\xfaX\x04\x00u\xa6\x02\x18\xcf\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x08\x00\x03\x00\x12\x00\xa19$\xf0'b'\x00\x05N\xb1{\x1f\x11@\xfe\x1c\x08\x01\x01 ?Y\x04\x00Y\x00 >\xe9\xb5\x18?*,\xcb\xbf\xff\xc0\xb6=\x81\x98\x10=\xed\xd4=\xbe\\\xe5'b'\x00\x05N\xb1{\x1f\x11\x9c\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11'b'\x00\x05N\xb1{ x\xcb\xfe55\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Z\x04'b'\x00\x05N\xb1{ zH\xfe\x1c\n\x01\x01\x1egY\x04\x00\x83-c\xbc^;~\xbd5{$@\xf8\xaf\x03;#\xc8\x08>\xf1@\xb9\xbd+\x02'b'\x00\x05N\xb1{ z\xc4\xfe\x18\x0b\x01\x01\xb2\xfe$\xf9\xbc\xcd\xd1w\xbd\xa8\xa6%@R\x08*Dw\xa6\x02\x18\xce\xe7\xb8\xfd\xea\xcd'b'\x00\x05N\xb1{ {$\xfe\x1c\x0c\x01\x01\xa3Yp\x19:e\x88\xbd\xba\x05\x16\xa79\x00\x00\x00\x00\x00\x00\x00\x00T\xb4\xb7<\x12L\xa2\xaa\x15B\xd3'b'\x00\x05N\xb1{"\x12\x18\xfe\x1f\x19\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01-;\xb9\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xac\x95'b'\x00\x05N\xb1{"\x12\x94\xfe\x06\x1a\x01\x01}\xc8\x14\x00\x00\x03\x00\x0f\xf7'b'\x00\x05N\xb1{"\x13\x08\xfe\x04\x1b\x01\x01\x98\x00\x00\x80\x8a\xbf\xa9'b'\x00\x05N\xb1{"\x13l\xfe\x02\x1c\x01\x01*\x00\x00\xcf\xf5'b'\x00\x05N\xb1{"\x13\xdc\xfe\x1e\x1d\x01\x01\x18\xd0\x9d\xfe\x10\x00\x00\x00\x00z\xa6\x02\x18\xce\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x11\x00\x13~\x03\x0c\xdfV'b'\x00\x05N\xb1{"\x14D\xfe\x1a\x1e\x01\x01>iC\x13\xbf\x99\xf0J\xc0\xf6\x92\x80=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\xcb\xa1'b'\x00\x05N\xb1{"\x14\xa0\xfe\x08\x1f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xaa>'b'\x00\x05N\xb1{"e\xa3\xfe57\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdf\xe6'b'\x00\x05N\xb1{"\xb7\xd3\xfe!8\xff\x00L\xdd\x99\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x94\x81'b'\x00\x05N\xb1{"\xcd\xb7\xfe\t9\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03@='b'\x00\x05N\xb1{#\xac\x08\xfe\x14 \x01\x01J{\x14.>{\x14.>=\n\xf7?\xb8\x1e\x05>\x92\x001\x00lh'b'\x00\x05N\xb1{#\xac\x84\xfe\x03!\x01\x01Ms\x00\x00\x8f\x8a'b'\x00\x05N\xb1{#\xc1\x18\xfe\x1c"\x01\x01!\xc2Y\x04\x00x\xa6\x02\x18\xcf\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x03\x00\x02\x00\x0c\x00O9\x1c\x8b'b'\x00\x05N\xb1{#\xc1\x90\xfe\x1c#\x01\x01 EZ\x04\x00\xe7\xce>>"J\x19?.\x18\xce\xbf9\x8f\x1b=U\xc5\xd8\xab\x15b\xe0'b'\x00\x05N\xb1{&\x9d\x90\xfe\x1f5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01-;\xd2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PT\x1d'b'\x00\x05N\xb1{&\x9d\xec\xfe\x066\x01\x01}\xc8\x14\x00\x00\x03\x00z\xf7'b'\x00\x05N\xb1{&\x9eL\xfe\x047\x01\x01\x98\x00\x00\x80\x8a\xa9\x1e'b'\x00\x05N\xb1{&\x9e\x98\xfe\x028\x01\x01*\x00\x00:\xf9'b'\x00\x05N\xb1{&\x9e\xf8\xfe\x1e9\x01\x01\x18\xc8\xb6\x01\x11\x00\x00\x00\x00}\xa6\x02\x18\xce\xe7\xb8\xfd\xa0i\n\x00F\x00\xff\xff\x10\x00\x13~\x03\x0c\x87\x9d'b'\x00\x05N\xb1{&\x9fT\xfe\x1a:\x01\x01>\x120(\xbf\xf7\xdd?\xc0)j\x87=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00%\xe1'b'\x00\x05N\xb1{&\x9f\xa4\xfe\x08;\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x9d'b'\x00\x05N\xb1{&\x9f\xfc\xfe\x14<\x01\x01J\n\xd7#>\n\xd7#>\xebQ\xf8?)\\\x8f=\x91\x004\x00\xbc\xc1'b'\x00\x05N\xb1{&\xd0c\xfe!=\xff\x00L*b\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9c\x1a'b'\x00\x05N\xb1{(%\xc0\xfe\x1c=\x01\x01!\x8dZ\x04\x00z\xa6\x02\x18\xcf\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\x00\x00\x02\x00\t\x00\xf98U\xba'b'\x00\x05N\xb1{(&T\xfe\x1c>\x01\x01 K[\x04\x00b1V>Co\x19?\xdc[\xcf\xbf\x8d&\x07;\xdfp\xb6<\xe6\xf1\xbc\xbd\x97\xe2'b'\x00\x05N\xb1{(&\xa8\xfe\x03?\x01\x01Ms\x00\x00\xfa\xe1'b'\x00\x05N\xb1{(\'L\xfe\x1c@\x01\x01\x1es[\x04\x00l\x82\xa7\xbc\xe9\xb4G\xbd8\xdc"@RD\x8a<}K\t\xbdB\xa6\xc0\xbb?#'b"\x00\x05N\xb1{('\xd0\xfe\x18A\x01\x01\xb2$\xca\x17\xbd=\xe8;\xbd\xe9\xfb#@\xeb\x11*D\x7f\xa6\x02\x18\xcc\xe7\xb8\xfdJ?"b'\x00\x05N\xb1{((P\xfe\x1cB\x01\x01\xa3\xe8*\x1b:\x81\xe3\xbf\xba%&\xa59\x00\x00\x00\x00\x00\x00\x00\x00\x07~\xbb<\x9a\x13\x9b<\xa7\xd8'b'\x00\x05N\xb1{((\xb8\xfe\x03C\x01\x01\xa5\xc5\x14\x00\x06\xd4'b'\x00\x05N\xb1{()(\xfe\x0cD\x01\x01\x02xIm{\xb1N\x05\x00\x87[\x04\x00C\xab'b'\x00\x05N\xb1{()\xa4\xfe\x16E\x01\x01\x88{\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9b\x9b'b'\x00\x05N\xb1{(* \xfe\x16F\x01\x01\xc1\x1f\xaf\xc1<\xd6\x9f\xe9<\xd7-\xd6;y\x19\xc8=\x00\x00\x00\x00?\x03d\xf5'b"\x00\x05N\xb1{(-\x8f\xfe%>\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00x\xcc"b'\x00\x05N\xb1{(\x95\xfb\xfe5?\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf8t'b'\x00\x05N\xb1{(\xe7o\xfe!@\xff\x00L/\xf8\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Tv'b'\x00\x05N\xb1{)\xb8\xa0\xfe\x03G\x01\x01/\xff\x00\x00\xe9<'b'\x00\x05N\xb1{)\xe0T\xfe\x15H\x01\x01$\xdfs\x06\x11;\x06E\x06z\x05\x03\x06\x00\x00\x00\x00\x00\x00\x00\x00\x005{'b'\x00\x05N\xb1{)\xe0\xc4\xfe\x16I\x01\x01#\xc3[\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00O\xa6'b'\x00\x05N\xb1{)\xe1\x14\xfe\x03J\x01\x01Ms\x00\x00\xe2\xfe'b'\x00\x05N\xb1{)\xe1\xac\xfe\x1aK\x01\x01\x1b\xc4\xc1\x06\x11\x00\x00\x00\x00\xe1\xff\x0e\x00\x1c\xfc\x11\x00\xf0\xff\x07\x003\xffe\xff|\x01\xec4'b'\x00\x05N\xb1{)\xe2\x04\xfe\x16L\x01\x01t\xd7[\x04\x00\xe3\xff\x18\x00,\xfc\xf8\xff\x00\x00\x07\x00@\xff\xd2\xfe\x0c\x02\x83\xc7'b'\x00\x05N\xb1{)\xe2X\xfe\x16M\x01\x01\x81\xd7[\x04\x00\xe0\xff\x18\x00"\xfc,\x00\xd2\xff\x05\x00\xc4\x00\xd6\xffo\x02\xa6\xe4'b'\x00\x05N\xb1{)\xe2\xa4\xfe\x0eN\x01\x01\x1d\xd7[\x04\x00\x9c\x96iD\xd7\xa3*\xbei\x10iK'b'\x00\x05N\xb1{)\xe2\xf0\xfe\x0eO\x01\x01\x89\xd7[\x04\x00U\xdbiD\x8f\xc2\x1f>\xac\x15Uo'b'\x00\x05N\xb1{)\xe3L\xfe\x1fP\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00$\x01\xc4:\xd1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P5\xa3'b'\x00\x05N\xb1{)\xe3\xa0\xfe\x06Q\x01\x01}\xc6\x14\x00\x00\x03\x002\xfe'b'\x00\x05N\xb1{)\xe3\xec\xfe\x04R\x01\x01\x98\x00\x00\x80\x8a\xeb}'b'\x00\x05N\xb1{)\xe40\xfe\x02S\x01\x01*\x00\x00=+'b'\x00\x05N\xb1{)\xe4\x84\xfe\x1eT\x01\x01\x18\x08\xc4\x04\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xcc\xe7\xb8\xfd\xa0i\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c?\xb6'b'\x00\x05N\xb1{)\xe4\xd8\xfe\x1aU\x01\x01>f\x08g\xbf\xe2\x1eV\xc0\xe1\xe6\x06=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xa1N'b'\x00\x05N\xb1{)\xe5\x1c\xfe\x08V\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00>u'b'\x00\x05N\xb1{*\xba\xa7\xfe5A\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdc\x0c'b'\x00\x05N\xb1{*\xe4\xf3\xfe!B\xff\x00L/\xf8\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd5+'b'\x00\x05N\xb1{+^\xa4\xfe\x14W\x01\x01J\x8f\xc2u=\x8f\xc2u=\x99\x99\xf9?\xcc\xccL=\x92\x005\x00\xa6\x89'b'\x00\x05N\xb1{+_l\xfe\t\x01\n\x00m\x06\x00\x00\x00\x00\xd9\x00\x00\x00\xd8t'b'\x00\x05N\xb1{+`\x10\xfe\x1cX\x01\x01!\t\\\x04\x00{\xa6\x02\x18\xcf\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfd\xff\x02\x00\x04\x0089*k'b'\x00\x05N\xb1{+`\xc0\xfe\x1cY\x01\x01 P\\\x04\x00\x90\xe4a>+>\x18?.\xdb\xcf\xbf\t\x9e\x12\xbdsY\xaa<\x9c\x967\xbd\x8f\x1b'b'\x00\x05N\xb1{+aX\xfe\x03Z\x01\x01Ms\x00\x00\x9a\xa5'b'\x00\x05N\xb1{,\xb6\xcb\xfe5C\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Y\xee'b'\x00\x05N\xb1{,\xcc\xf7\xfe!D\xff\x00L/\xf8\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00V\xcd'b'\x00\x05N\xb1{,\xe2`\xfe\x1c[\x01\x01\x1ey\\\x04\x00\x01o\x82\xbc0*I\xbd\xe4I#@t-\x89\xbcz\xdc\xb9;\xae}\x18\xbe\xef\xef'b'\x00\x05N\xb1{,\xe3\x08\xfe\x18\\\x01\x01\xb2\xe9\xa9\x03\xbd\x0c}A\xbd\xe3\x82$@\x8f\x12*D\x80\xa6\x02\x18\xcd\xe7\xb8\xfd\xeb\xff'b'\x00\x05N\xb1{,\xe3p\xfe\x1c]\x01\x01\xa3\x94\x11\x1c:\xab\xf5\xc0\xba\xed\xe2\xa39\x00\x00\x00\x00\x00\x00\x00\x00q\x97\xab<\xe9\x1b\xb0<\xb6\xf6'b'\x00\x05N\xb1{,\xe3\xc4\xfe\x03^\x01\x01\xa5\xc5\x14\x00\xa35'b'\x00\x05N\xb1{,\xe4\x1c\xfe\x0c_\x01\x01\x02\x18Aq{\xb1N\x05\x00\x8c\\\x04\x00\xa1L'b'\x00\x05N\xb1{,\xe4|\xfe\x16`\x01\x01\x88{\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\x91'b'\x00\x05N\xb1{,\xe4\xdc\xfe\x16a\x01\x01\xc1\xf7\x15g<\xf9\xc3\xce<\xe43\xd5;\xb67\xc2=\x00\x00\x00\x00?\x03\xf9/'b"\x00\x05N\xb1{,\xe5<\xfe\x1ab\x01\x01\x1b\xcdp\n\x11\x00\x00\x00\x00\xe3\xff\x13\x00\xf7\xfb\x04\x00'\x00\xce\xff3\xfff\xffw\x01\x86'"b'\x00\x05N\xb1{,\xe5\x9c\xfe\x16c\x01\x01t\xc8\\\x04\x00\xe3\xff\x1d\x00\xfc\xfb\xe6\xff*\x00\xd1\xff8\xff\xc2\xfe\x00\x02\xccV'b'\x00\x05N\xb1{,\xe5\xfc\xfe\x16d\x01\x01\x81\xc8\\\x04\x00\xdd\xff\x1b\x00\x03\xfc\xb9\xff+\x00\xd4\xff\xd2\x00\xaa\xffr\x026\xeb'b'\x00\x05N\xb1{,\xe6T\xfe\x0ee\x01\x01\x1d\xc8\\\x04\x00\x0b\x97iD\x14\xae#\xbej\x10^\xca'b'\x00\x05N\xb1{,\xe6\xc0\xfe\x0ef\x01\x01\x89\xc8\\\x04\x00\x0c\xdciD33+>\xad\x15\x02\xda'b'\x00\x05N\xb1{,\xe7\x1c\xfe\x1fg\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xc4:D\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P%\xe2'b'\x00\x05N\xb1{,\xe7p\xfe\x06h\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8,'b'\x00\x05N\xb1{,\xe7\xe8\xfe\x04i\x01\x01\x98\x00\x00\x80\x8a\x8b\xdc'b'\x00\x05N\xb1{,\xe80\xfe\x02j\x01\x01*\x00\x00N\xbc'b'\x00\x05N\xb1{,\xe8\x84\xfe\x1ek\x01\x01\x188\x98\n\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xcd\xe7\xb8\xfd\xbei\n\x00F\x00\xff\xff\x04\x00\x13~\x03\x0c1\xac'b'\x00\x05N\xb1{,\xe8\xd8\xfe\x1al\x01\x01>b\xa5\xa6\xbf\x92\xdf*\xc0\xcd\x04B=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xa4\x1c'b'\x00\x05N\xb1{,\xe9 \xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9'b'\x00\x05N\xb1{,\xe9l\xfe\x12n\x01\x01\xfc\xdb\\\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd6\xde'b'\x00\x05N\xb1{,\xe9\xc0\xfe\to\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03c\xdc'b'\x00\x05N\xb1{.\xa5D\xfe\x15p\x01\x01$.\xc6\n\x11=\x06\xdb\x05\x03\x06g\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00=s'b'\x00\x05N\xb1{.\xa5\xe0\xfe\x16q\x01\x01#\xde\\\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00){'b'\x00\x05N\xb1{.\xa6D\xfe\x03r\x01\x01Ms\x00\x00\xd6>'b'\x00\x05N\xb1{.\xba\xc4\xfe\x14s\x01\x01J\xcc\xccL=\xcc\xccL=\x99\x99\xf9?\n\xd7\xa3=\x91\x005\x00e\x9c'b"\x00\x05N\xb1{.\xbc'\xfe5E\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc7\xc1"b'\x00\x05N\xb1{.\xe6W\xfe!F\xff\x00L\xbe&\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa09'b'\x00\x05N\xb1{/\xfb \xfe\x1ct\x01\x01!\xd3\\\x04\x00{\xa6\x02\x18\xcf\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfa\xff\x02\x00\x08\x00\xc68\xa3\x16'b'\x00\x05N\xb1{/\xfb\xb8\xfe\x1cu\x01\x01 U]\x04\x00{\xe3a>\x13i\x18?5<\xd0\xbf\xea\x81\x83\xbd\xfc\xa9\xa8<~\xe5\xa5\xbd\xaf\xff'b'\x00\x05N\xb1{/\xfc \xfe\x03v\x01\x01Ms\x00\x00\x08('b'\x00\x05N\xb1{0\x10\xa0\xfe\x1cw\x01\x01\x1e}]\x04\x00\xbb]\n\xbd\xbd \'\xbd/J"@\xe0\xf8\xc6\xbd\x8d\xd9$=\r\xcc\xc0\xbc3w'b'\x00\x05N\xb1{0\x11\x08\xfe\x18x\x01\x01\xb2\x1d\x15K\xbd.\x03"\xbd\xe6s#@\xae\x17*D\x81\xa6\x02\x18\xcd\xe7\xb8\xfdx/'b'\x00\x05N\xb1{0\x11h\xfe\x1cy\x01\x01\xa3\xae\xed\x1c:\xab\xfa\xc1\xba\xf4b\xa29\x00\x00\x00\x00\x00\x00\x00\x00 Z\x91\xff\xc3\xfe\x04\x02\xad\xaf'b'\x00\x05N\xb1{1a@\xfe\x16\x80\x01\x01\x81\xba]\x04\x00\xdf\xff\x0e\x009\xfc\x02\x00\xf8\xff\x0b\x00\xd9\x00\xad\xffj\x02(\x01'b'\x00\x05N\xb1{1a\xa8\xfe\x0e\x81\x01\x01\x1d\xba]\x04\x00\xcc\x94iD\x99\x99G\xbej\x10T\x81'b'\x00\x05N\xb1{1b\x14\xfe\x0e\x82\x01\x01\x89\xba]\x04\x00R\xd9iD=\n\xff=\xae\x15C\xf0'b'\x00\x05N\xb1{1b\x88\xfe\x1f\x83\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x006\x01\xc4:\\\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PgP'b'\x00\x05N\xb1{1b\xf4\xfe\x06\x84\x01\x01}\xc8\x14\x00\x00\x03\x00\x8c]'b'\x00\x05N\xb1{1cX\xfe\x04\x85\x01\x01\x98\x00\x00\x80\x8a)I'b'\x00\x05N\xb1{1c\xb0\xfe\x02\x86\x01\x01*\x00\x00L/'b'\x00\x05N\xb1{1d\x1c\xfe\x1e\x87\x01\x01\x18\x80\xf7\r\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xce\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x03\x00\x13~\x03\x0c\xa3\x9b'b'\x00\x05N\xb1{1d\x88\xfe\x1a\x88\x01\x01>9\xa5\xaa\xbfm\xf0\x12\xc0\xc2yH=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\xfa\xa5'b'\x00\x05N\xb1{1d\xe0\xfe\x08\x89\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x006\xbf'b'\x00\x05N\xb1{1e8\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P'b'\x00\x05N\xb1{1{\x0c\xfe\x15\x8b\x01\x01$W\xbc\x0e\x11\xf9\x05\x1c\x06+\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x1a'b'\x00\x05N\xb1{1{\x90\xfe\x16\x8c\x01\x01#\xe2]\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xdf6'b'\x00\x05N\xb1{21+\xfe5I\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfb\x9e'b'\x00\x05N\xb1{23W\xfe!J\xff\x00L\xf7\xb9\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x11U'b'\x00\x05N\xb1{23\x8b\xfe\tI\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03G\r'b'\x00\x05N\xb1{2\xf1\xd4\xfe\x14\x8d\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xf5(\xfc?\n\xd7#=\x91\x002\x00[:'b'\x00\x05N\xb1{2\xf2D\xfe\x03\x8e\x01\x01Ms\x00\x00/F'b'\x00\x05N\xb1{3\x07\xa4\xfe\x1c\x8f\x01\x01!\xb0]\x04\x00{\xa6\x02\x18\xd0\xe7\xb8\xfdLc\n\x00\xbc\x07\x00\x00\xfc\xff\x04\x00\x01\x00\xb58\xf3\x9f'b'\x00\x05N\xb1{3\x08\x10\xfe\x1c\x90\x01\x01 Z^\x04\x00\xdc\xea_>\xfb\xcb\x1a?@a\xd3\xbf;\x89E\xbd%V6=\xd7s\x8f\xbc\xbd*'b'\x00\x05N\xb1{3\xe6[\xfe5L\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaa\xa6'b'\x00\x05N\xb1{3\xfc\x8b\xfe!M\xff\x00L\xf7\xb9\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Z\x19'b'\x00\x05N\xb1{4~h\xfe\x1c\x91\x01\x01\x1e\x83^\x04\x00a@\r\xbdH\xc4\x0f\xbd\x0b\x18"@\x0f\x06\x80<\xe00\x12=\xd5\xc9\xe6\xbc\x1b\xea'b'\x00\x05N\xb1{4~\xdc\xfe\x18\x92\x01\x01\xb2X\xebR\xbd\xe5\xfc\t\xbd\x9aA#@\x00 *D\x81\xa6\x02\x18\xcf\xe7\xb8\xfd%\xe1'b'\x00\x05N\xb1{4\x7f4\xfe\x1c\x93\x01\x01\xa3\xc1\xb8\x1d:[\xf5\xc2\xbaS\xab\xa09\x00\x00\x00\x00\x00\x00\x00\x00r\x04\x80<\xe1\x7f\xc7<\x1f\xf6'b'\x00\x05N\xb1{4\x7f|\xfe\x03\x94\x01\x01\xa5\xc8\x14\x00\xec6'b'\x00\x05N\xb1{4\x7f\xc8\xfe\x0c\x95\x01\x01\x02X0y{\xb1N\x05\x00\x97^\x04\x007q'b'\x00\x05N\xb1{4\x80 \xfe\x16\x96\x01\x01\x88{\xa6\x02\x18\xd0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3\x12'b'\x00\x05N\xb1{4\x80t\xfe\x16\x97\x01\x01\xc1\xf3u\xa0<\xb6\xec\xc2<\x81\x046;\xc4\xbf\xd5=\x00\x00\x00\x00?\x03\x05k'b'\x00\x05N\xb1{4\x80\xf0\xfe\x1a\x99\x01\x01\x1b\xed\xcd\x11\x11\x00\x00\x00\x00\xe2\xff\x0e\x00\x11\xfc\x0e\x00\xf8\xff\x03\x003\xff[\xffr\x01q\xfe'b'\x00\x05N\xb1{4\x81D\xfe\x16\x9a\x01\x01t\xab^\x04\x00\xe6\xff\x11\x00\x12\xfc\x06\x00\n\x00\x04\x00>\xff\xcb\xfe\x07\x02#\xcd'b'\x00\x05N\xb1{4\x81\x98\xfe\x16\x9b\x01\x01\x81\xab^\x04\x00\xdd\xff\x1b\x00\x1c\xfc\xf6\xff\x0b\x00\x06\x00\xd6\x00\xb8\xffy\x02\xe7i'b'\x00\x05N\xb1{4\x81\xe4\xfe\x0e\x9c\x01\x01\x1d\xab^\x04\x00\x94\x95iD\xb8\x1e;\xbej\x10\xc5K'b'\x00\x05N\xb1{4\x820\xfe\x0e\x9d\x01\x01\x89\xab^\x04\x00\xb4\xd9iD\x14\xae\x05>\xae\x15\x8e\xb3'b'\x00\x05N\xb1{4\x82\x88\xfe\x1f\x9e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x01\xc4:\\\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xaa\xa5'b'\x00\x05N\xb1{4\x82\xdc\xfe\x06\x9f\x01\x01}\xc5\x14\x00\x00\x03\x00\x9f@'b'\x00\x05N\xb1{4\x83$\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b'\x00\x05N\xb1{4\x83\xa4\xfe\x04\xa1\x01\x01\x98\x00\x00\x80\x8a\xf5\x81'b'\x00\x05N\xb1{4\x83\xec\xfe\x02\xa2\x01\x01*\x00\x00\xb9#'b'\x00\x05N\xb1{4\x84D\xfe\x1e\xa3\x01\x01\x18\xa8\x08\x11\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xcf\xe7\xb8\xfd\xdci\n\x00F\x00\xff\xff\x02\x00\x13~\x03\x0c0V'b'\x00\x05N\xb1{4\x84\x98\xfe\x1a\xa4\x01\x01>\xc5\xees\xbf3Z\x0e\xc0\xc2]E=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xe9\xcb'b'\x00\x05N\xb1{4\x84\xdc\xfe\x08\xa5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00J1'b'\x00\x05N\xb1{5\xaf\x93\xfe5N\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01/D'b'\x00\x05N\xb1{5\xd9[\xfe!O\xff\x00L\x8f\xa7\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9f\xee'b'\x00\x05N\xb1{6\x02\x98\xfe\x15\xa6\x01\x01$\x8a\xb9\x12\x11:\x06\x0b\x06\x19\x06b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01'b'\x00\x05N\xb1{6\x034\xfe\x16\xa7\x01\x01#\xe7^\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf6\x16'b'\x00\x05N\xb1{6\x03\xa0\xfe\x03\xa8\x01\x01Ms\x00\x00n\xed'b'\x00\x05N\xb1{7~\xab\xfe5P\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc9\xd5'b'\x00\x05N\xb1{7\x82\\\xfe\x14\xa9\x01\x01J\xcc\xccL=\xcc\xccL=R\xb8\xfe?\n\xd7#=\x91\x002\x00\xffI'b'\x00\x05N\xb1{7\x82\xec\xfe\x1c\xaa\x01\x01!-_\x04\x00|\xa6\x02\x18\xd1\xe7\xb8\xfdVc\n\x00\xc6\x07\x00\x00\xfe\xff\x06\x00\x03\x00\xa88\xab\x9e'b'\x00\x05N\xb1{7\x83t\xfe\x1c\xab\x01\x01 `_\x04\x00\xc3Vf>\x97\x98\x1e?H\x1b\xd5\xbf\x93\x1b\xb8\xbc^\xe4\x88=\xbbc\x1b\xbdlv'b'\x00\x05N\xb1{7\x84\x08\xfe\x1c\xac\x01\x01\x1e\x88_\x04\x00\x84\xf7\xb5\xbc\xdb\x9a\x11\xbd\xce\x02"@ 6p=\x88z5\xaf\x15\xec\x9f'b'\x00\x05N\xb1{9$(\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\n;z\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x92\x83'b'\x00\x05N\xb1{9$\x80\xfe\x06\xb4\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xe0'b'\x00\x05N\xb1{9$\xd4\xfe\x03\xb5\x01\x01Ms\x00\x00\xcb\x0c'b'\x00\x05N\xb1{99(\xfe\x04\xb6\x01\x01\x98\x00\x00\x80\x8a\x83\x97'b'\x00\x05N\xb1{99t\xfe\x02\xb7\x01\x01*\x00\x00\xd3f'b'\x00\x05N\xb1{99\xcc\xfe\x1e\xb8\x01\x01\x18\xc8\xc7\x13\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xd0\xe7\xb8\xfd\xd2i\n\x00F\x00\xff\xff\x04\x00\x13~\x03\x0ckV'b'\x00\x05N\xb1{9:$\xfe\x1a\xb9\x01\x01>W\xaa\x06\xbf&\xc7\x0e\xc0fnK=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00N\xaa'b'\x00\x05N\xb1{9:l\xfe\x08\xba\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb1^'b'\x00\x05N\xb1{9:\xbc\xfe\x1c\xbb\x01\x01\xa3h\x83\x1e::\xf4\xc3\xbab\x8d\x9e9\x00\x00\x00\x00\x00\x00\x00\x00\xffqt<\xb0M\xd9<\xdc\xa8'b'\x00\x05N\xb1{9;\x00\xfe\x03\xbc\x01\x01\xa5\xc5\x14\x00/&'b'\x00\x05N\xb1{9;H\xfe\x0c\xbd\x01\x01\x02\x00z}{\xb1N\x05\x00\xb1_\x04\x00\xb4\xb2'b'\x00\x05N\xb1{9;\x98\xfe\x16\xbe\x01\x01\x88|\xa6\x02\x18\xd2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa4\x02'b'\x00\x05N\xb1{9<\x00\xfe\x16\xbf\x01\x01\xc1\xdc\x82t<\xe3\xdf\xc3\xd1(#?ms\xd4\xbf@#\xdc\xbc\xbd\xf3J=0k\x9a\xba~\xd4'b'\x00\x05N\xb1{\xff\xd8\xfe\x10\x02\x16\x1e'b'\x00\x05N\xb1{\xaf\x15.c'b'\x00\x05N\xb1{\x8c*\x0c>\xfeo\xde\xbfG%@=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x16\xab'b'\x00\x05N\xb1{\x11\x8a"b'\x00\x05N\xb1{\xe2\x19&?\x1cn\xd3\xbf\x9e\t\x90\xbc\xf3\x86z=\x1a\x94\x83\xbd\xaf\xbe'b'\x00\x05N\xb1{?8\x88\xfe\x1a\xe3\x01\x01\x1b\xb5\xd8\x1c\x11\x00\x00\x00\x00\xe7\xff\xfe\xff\xd8\xfb\xb2\x00\x99\x00\x04\x00.\xffc\xffv\x01\x9a2'b'\x00\x05N\xb1{?9\x10\xfe\x16\xe4\x01\x01t\x7fa\x04\x00\xe7\xff\x06\x00\xee\xfb\xac\x00\x9b\x00\xe9\xff0\xff\xb1\xfe\xf8\x01\xf9\xef'b'\x00\x05N\xb1{?9\xe4\xfe\x16\xe5\x01\x01\x81\x7fa\x04\x00\xdb\xff\x17\x00\xda\xfb\xcc\x00\xa8\x00\xd4\xff\xc1\x00\x89\xff\x86\x02\x92\x10'b'\x00\x05N\xb1{?:l\xfe\x0e\xe6\x01\x01\x1d\x7fa\x04\x00\xc2\x95iDp=8\xbek\x10\xbfy'b'\x00\x05N\xb1{?:\xf0\xfe\x0e\xe7\x01\x01\x89\x7fa\x04\x00k\xdaiD\xb8\x1e\x11>\xb0\x15\xefE'b'\x00\x05N\xb1{?;T\xfe\x1f\xe8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x00\n;\xb7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P1\x16'b'\x00\x05N\xb1{?;\xbc\xfe\x06\xe9\x01\x01}\xc8\x14\x00\x00\x03\x00m\xc5'b'\x00\x05N\xb1{?<\x18\xfe\x04\xea\x01\x01\x98\x00\x00\x80\x8a[\xce'b'\x00\x05N\xb1{?\x83g\xfe5Y\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa4\xb2'b'\x00\x05N\xb1{?\x99\xe3\xfe!Z\xff\x00LD\x16\x12C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00u\xe2'b'\x00\x05N\xb1{@\xb6d\xfe\x02\xeb\x01\x01*\x00\x00\x86\xa5'b'\x00\x05N\xb1{@\xb6\xf8\xfe\x1e\xec\x01\x01\x18@\xfb\x1c\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xd7\xe7\xb8\xfd\xd2i\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0cF\xb6'b'\x00\x05N\xb1{@\xb7`\xfe\x1a\xed\x01\x01>\x1eNp\xbd\xa6\xdf\xc1\xbf\x00\xc4\x84=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00E\xeb'b'\x00\x05N\xb1{@\xb7\xb4\xfe\x08\xee\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x84q'b'\x00\x05N\xb1{@\xb8\x14\xfe\x1c\xef\x01\x01\x1e\xa7a\x04\x00R\xc0\x99\xbcZt2\xbd\x18Z#@\xc7\x1f\x1a>])L>\x9b)\x83;7\x7f'b'\x00\x05N\xb1{@\xb8\x94\xfe\x18\xf0\x01\x01\xb2\x9d\xe7\x19\xbd<\x0b1\xbd\xe4\x87$@\xae\x07*D\x85\xa6\x02\x18\xd7\xe7\xb8\xfd\x10\xf8'b'\x00\x05N\xb1{@\xb8\xec\xfe\x03\xf1\x01\x01Ms\x00\x00\xe4\x7f'b'\x00\x05N\xb1{@\xb9\x80\xfe\x1c\xf2\x01\x01\xa3\xc6\xc9\x1f:{\xad\xc5\xba\xf0:\x9a9\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xe5\x19<\x9d\x9e\xd8\x92\x004\x00\xf4%'b'\x00\x05N\xb1{C\x1a\x17\xfe5^\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01ph'b'\x00\x05N\xb1{CX#\xfe!_\xff\x00L\x89/\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x83\xa1'b"\x00\x05N\xb1{C\xcb\xe0\xfe\x1a\xfb\x01\x01\x1b\xaf\x86 \x11\x00\x00\x00\x00\xd9\xff\r\x00\x16\xfct\x00'\x00\xca\xff+\xffm\xffz\x01\xe7\x17"b'\x00\x05N\xb1{C\xcc|\xfe\x16\xfc\x01\x01tpb\x04\x00\xdd\xff\x13\x00,\xfcW\x00-\x00\xd6\xff4\xff\xce\xfe\x03\x02\x13\xc9'b'\x00\x05N\xb1{C\xcc\xec\xfe\x16\xfd\x01\x01\x81pb\x04\x00\xd8\xff\x1b\x00\x03\xfcG\x00\x1f\x00\xcc\xff\xcd\x00\xb1\xff\x81\x02\xde\xc3'b'\x00\x05N\xb1{C\xcd`\xfe\x0e\xfe\x01\x01\x1dpb\x04\x00}\x96iD\\\x8f,\xbel\x10\xa8\xf9'b'\x00\x05N\xb1{C\xcd\xcc\xfe\x0e\xff\x01\x01\x89pb\x04\x00\x87\xd8iD\x8f\xc2\xe5=\xb0\x15ZT'b'\x00\x05N\xb1{C\xceH\xfe*\x00\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00l\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xae\xa1'b'\x00\x05N\xb1{C\xce\xbc\xfe\x1f\x01\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01\xf4:#\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf2@'b'\x00\x05N\xb1{C\xcf$\xfe\x06\x02\x01\x01}\xca\x14\x00\x00\x03\x00[\r'b'\x00\x05N\xb1{C\xcf\x88\xfe\x04\x03\x01\x01\x98\x00\x00\x80\x8a\xe1)'b'\x00\x05N\xb1{C\xcf\xe0\xfe\x02\x04\x01\x01*\x00\x00\xea\x9e'b'\x00\x05N\xb1{C\xd0L\xfe\x1e\x05\x01\x01\x18h\x0c \x11\x00\x00\x00\x00\x87\xa6\x02\x18\xd8\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0cS\xa5'b'\x00\x05N\xb1{C\xd0\xb8\xfe\x1a\x06\x01\x01>\x85`H>\x97n\xb9\xbfpe\x93=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x83H'b'\x00\x05N\xb1{C\xd1\x1c\xfe\x08\x07\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x12I'b'\x00\x05N\xb1{C\xd1t\xfe\x1c\x08\x01\x01!Qb\x04\x00\x7f\xa6\x02\x18\xd7\xe7\xb8\xfdVc\n\x00\xc6\x07\x00\x00\xff\xff\x01\x00\x0e\x00\x0294\xee'b'\x00\x05N\xb1{C\xd1\xd8\xfe\x1c\t\x01\x01 \x84b\x04\x00\xd5R\x85>|\x8d+?\x12\xab\xd4\xbf\xc76\x83\xbc\x84\x04W<\xe5\xfa\x12\xbe\x8e_'b'\x00\x05N\xb1{C\xd2 \xfe\x03\n\x01\x01Ms\x00\x00\x13\x9b'b'\x00\x05N\xb1{C\xf3\xb4\xfe\x1c\x0b\x01\x01\x1e\xacb\x04\x00\t\xf8P<\x927\xa4\xbc\x9c\xce"@ Z;=\xf0p\xb3\xbc\x8f\xf0\xd0\xbd\xee\xfe'b'\x00\x05N\xb1{C\xf4 \xfe\x18\x0c\x01\x01\xb20}\x88\xbb\x91*\x95\xbc\x8c\x05$@\xae\x17*D\x87\xa6\x02\x18\xd8\xe7\xb8\xfd]\x0b'b'\x00\x05N\xb1{E\x1d\xa3\xfe5`\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01(\xa1'b'\x00\x05N\xb1{EW\xcb\xfe!a\xff\x00L\x14\x03\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfbr'b'\x00\x05N\xb1{EX\xe0\xfe\x1c\r\x01\x01\xa3\xefI :\x00w\xc6\xba\r\xca\x979\x00\x00\x00\x00\x00\x00\x00\x00\r<<<\x02]\xf0<@z'b'\x00\x05N\xb1{EYH\xfe\x03\x0e\x01\x01\xa5\xc2\x14\x00\x0b\\'b'\x00\x05N\xb1{EY\x9c\xfe\x0c\x0f\x01\x01\x02\xf8\\\x89{\xb1N\x05\x00\xc0b\x04\x00Y\xcc'b'\x00\x05N\xb1{EY\xf4\xfe\x16\x10\x01\x01\x88\x7f\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00`F'b'\x00\x05N\xb1{EZd\xfe\x12\x11\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x009?'b'\x00\x05N\xb1{EZ\xe0\xfe\x16\x12\x01\x01\xc126\xff<\xd5z(=vN\xcc;\x9f\x80\x06>\x00\x00\x00\x00?\x03z\x8f'b'\x00\x05N\xb1{E[\x98\xfe\x15\x14\x01\x01$\x1c\xad"\x11)\x06\x1f\x06\xf9\x05-\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\' 'b'\x00\x05N\xb1{E\\\x18\xfe\x16\x15\x01\x01#\xfdb\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00R\xf8'b'\x00\x05N\xb1{F\xe7\xe8\xfe\x03\x16\x01\x01Ms\x00\x00\t\xfb'b'\x00\x05N\xb1{F\xfd\xcc\xfe\x14\x17\x01\x01J\xebQ\xb8=\xebQ\xb8=\xd7\xa3\x00@\xcc\xcc\xcc=\x91\x003\x00\xa1\x16'b'\x00\x05N\xb1{F\xfeX\xfe\x1a\x18\x01\x01\x1b\xb94$\x11\x00\x00\x00\x00\xe6\xff\x0f\x00G\xfc\xba\xff\xe8\xff\xe2\xff(\xffp\xffy\x01\xf3f'b'\x00\x05N\xb1{F\xfe\xd8\xfe\x16\x19\x01\x01tac\x04\x00\xe3\xff\x0f\x00V\xfc\xbe\xff\xf6\xff\xd7\xff7\xff\xdd\xfe\r\x02\xf4='b'\x00\x05N\xb1{F\xff<\xfe\x16\x1a\x01\x01\x81ac\x04\x00\xdc\xff\x1d\x00S\xfc\xbf\xff\xe3\xff\xd0\xff\xce\x00\xd7\xff|\x02\xe5\x18'b'\x00\x05N\xb1{F\xff\x9c\xfe\x0e\x1b\x01\x01\x1dac\x04\x00A\x97iD\xebQ \xbel\x10\x96\x9a'b'\x00\x05N\xb1{F\xff\xf0\xfe\x0e\x1c\x01\x01\x89ac\x04\x00j\xd9iD=\n\x01>\xb0\x15\xc9\xc1'b'\x00\x05N\xb1{G\x00T\xfe\x1f\x1d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01\xf4:s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x13\x11'b'\x00\x05N\xb1{G\x00\xac\xfe\x06\x1e\x01\x01}\xc2\x14\x00\x00\x03\x00\r@'b'\x00\x05N\xb1{G\x00\xfc\xfe\x04\x1f\x01\x01\x98\x00\x00\x80\x8aZ\x96'b'\x00\x05N\xb1{G\x01P\xfe\x02 \x01\x01*\x00\x00\x1f\x92'b'\x00\x05N\xb1{G\x01\xb8\xfe\x1e!\x01\x01\x18\x90\x1d#\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xda\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c[['b'\x00\x05N\xb1{G\x02\x10\xfe\x1a"\x01\x01>\x8aY\xe8\xbe2\xa7\x08\xc0\x8f\xaa\x87=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\xff\x0e'b'\x00\x05N\xb1{G\x02\\\xfe\x08#\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x06\xea'b'\x00\x05N\xb1{G#\x7f\xfe5b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xadC'b'\x00\x05N\xb1{GNW\xfe!c\xff\x00L\x14\x03\x11C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00z/'b'\x00\x05N\xb1{HI\x08\xfe\x1c$\x01\x01!\x1ac\x04\x00\x81\xa6\x02\x18\xd7\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x00\x00\xf8\xff\x07\x00\xa78\xd1Y'b'\x00\x05N\xb1{HI\x94\xfe\x1c%\x01\x01 \x89c\x04\x00\xc9\x99\x8f>\xc6E*?\xc3S\xd7\xbf\x84\x83\x1f\xbc\x08\x10\xb8\xbd\x16\xfa\x98\xbd\xae\xb3'b'\x00\x05N\xb1{HJ\x00\xfe\x03&\x01\x01Ms\x00\x00\x81\x16'b"\x00\x05N\xb1{H^\xc4\xfe\x1c'\x01\x01\x1e\xb1c\x04\x00\x00\x02%9#\x00\xdd\xbcN\xe1!@dP\xe4\xbdazy\xbdq\xba@\xbd\x19\x05"b"\x00\x05N\xb1{H_@\xfe\x18(\x01\x01\xb2\xd1\xd9x\xbc\xfb\x81\xce\xbc\xc6\x12#@\n'*D\x89\xa6\x02\x18\xda\xe7\xb8\xfdH\x04"b'\x00\x05N\xb1{H_\xa8\xfe\x1c)\x01\x01\xa3\xa5\xb7 :}7\xc7\xba\xa1=\x959\x00\x00\x00\x00\x00\x00\x00\x00\x86!\\<\x0bV\xae\x1d \x94\xbf\x1e\xbf<\xc0\xcc\xe0h=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xcc\xfd'b'\x00\x05N\xb1{Ki\x80\xfe\x08=\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00P\x80'b'\x00\x05N\xb1{Ki\xf0\xfe\x14>\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\x01@\n\xd7#=\x91\x004\x00>B'b'\x00\x05N\xb1{KjT\xfe\x1c?\x01\x01!\xe3c\x04\x00\x83\xa6\x02\x18\xd5\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\x00\x00\xf5\xff\x02\x00\xdc8\x066'b'\x00\x05N\xb1{Kj\xbc\xfe\x1c@\x01\x01 \x8fd\x04\x008N\x9d>3/%?\xb0\xb0\xd9\xbf\xc6<\x83\xba\xb3 \xea\xbd1\xca\xd0\xbc\x1e0'b'\x00\x05N\xb1{Kk\x04\xfe\x03A\x01\x01Ms\x00\x00\x8eY'b'\x00\x05N\xb1{L\xa9\x9b\xfe5i\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01E\xc6'b'\x00\x05N\xb1{L\xc0\x7f\xfe!j\xff\x00L\xed\x9d\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd4\xe8'b'\x00\x05N\xb1{L\xeb<\xfe\x12B\x01\x01\xfc\xb5d\x04\x004\x00\x01\x00ARMMASK\x00Wr\x9c\x12'b'\x00\x05N\xb1{L\xeb\xd4\xfe\tC\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x06e'b'\x00\x05N\xb1{L\xecT\xfe\x1cD\x01\x01\x1e\xb8d\x04\x00\xd8\xd7\xeb\xba\xc5V:\xbd9\\"@/.l\xbd\xf7\x95\x91\xbd)\xa2\xf2\xbd\xdd\x0b'b'\x00\x05N\xb1{L\xec\xe8\xfe\x18E\x01\x01\xb2\xf6%\x95\xbc\xd7\xa44\xbd!\xa3#@\x8f"*D\x8f\xa6\x02\x18\xd8\xe7\xb8\xfd<\x01'b'\x00\x05N\xb1{L\xedx\xfe\x1cF\x01\x01\xa3\xed\r!:\x86\xe8\xc7\xba\xed\xbb\x929\x00\x00\x00\x00\x00\x00\x00\x00\xb3H=<\x1c\xcd\x85<\xacC'b'\x00\x05N\xb1{L\xed\xe8\xfe\x03G\x01\x01\xa5\xc5\x14\x00\xd8\xc2'b'\x00\x05N\xb1{L\xee`\xfe\x0cH\x01\x01\x02X\x9a\x91{\xb1N\x05\x00\xccd\x04\x00\xda\xe3'b'\x00\x05N\xb1{L\xee\xe8\xfe\x16I\x01\x01\x88\x84\xa6\x02\x18\xd4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8b<'b'\x00\x05N\xb1{L\xefh\xfe\x16J\x01\x01\xc1c5\xbc<\x81+q=\xcd+\x14;\x07\xb4\xb1=\x00\x00\x00\x00?\x03\x80f'b'\x00\x05N\xb1{L\xef\xe8\xfe\x15K\x01\x01$\xdf\xa6*\x11a\x06/\x06\x12\x06G\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x1e'b'\x00\x05N\xb1{L\xf0h\xfe\x16L\x01\x01#\x07e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1a\xf0'b'\x00\x05N\xb1{L\xf0\xd4\xfe\x03M\x01\x01Ms\x00\x00\xecb'b'\x00\x05N\xb1{N\x82\x18\xfe\x1aN\x01\x01\x1b\x0c\x94+\x11\x00\x00\x00\x00\xd8\xff\x04\x00\xf6\xfb\xa8\xff\xf6\xff\xef\xff9\xffd\xffv\x01+&'b'\x00\x05N\xb1{N\x83\x10\xfe\x16O\x01\x01tDe\x04\x00\xe0\xff\x0e\x00\x00\xfc\x9a\xff\xf7\xff\xfb\xffA\xff\xc3\xfe\x07\x02)\x84'b'\x00\x05N\xb1{N\x83\x94\xfe\x16P\x01\x01\x81De\x04\x00\xd6\xff \x00\x05\xfc\xcb\xff\xee\xff\xf5\xff\xea\x00\xa2\xff\x82\x02\xab;'b'\x00\x05N\xb1{N\x84\x00\xfe\x0eQ\x01\x01\x1dDe\x04\x00\x93\x97iD33\x1b\xbem\x10J<'b'\x00\x05N\xb1{N\x84h\xfe\x0eR\x01\x01\x89De\x04\x00\xb0\xd9iD\xa4p\x05>\xb1\x15\xaf\x03'b'\x00\x05N\xb1{N\x84\xdc\xfe\x1fS\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x11\x01\xf4:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf33'b'\x00\x05N\xb1{N\x85D\xfe\x06T\x01\x01}\xc5\x14\x00\x00\x03\x00\x98]'b'\x00\x05N\xb1{N\x85\xa0\xfe\x04U\x01\x01\x98\x00\x00\x80\x8a\t\x94'b'\x00\x05N\xb1{N\x85\xf8\xfe\x02V\x01\x01*\x00\x00\x9e\xdb'b'\x00\x05N\xb1{N\x86\\\xfe\x1eW\x01\x01\x18\xc8C)\x11\x00\x00\x00\x00\x8f\xa6\x02\x18\xd8\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c9\xc7'b'\x00\x05N\xb1{N\x86\xc0\xfe\x1aX\x01\x01>\xeb\xde\xc5\xbf\xf2\x17H\xc0R$\x94=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x8e\xe8'b'\x00\x05N\xb1{N\x87\x1c\xfe\x08Y\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x15@'b'\x00\x05N\xb1{N\x87l\xfe\x14Z\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xaeG\x01@)\\\x8f=\x90\x007\x00\xac6'b'\x00\x05N\xb1{N\xf9o\xfe5k\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x8f\xc2u\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc0$'b"\x00\x05N\xb1{O'\xc7\xfe!l\xff\x00L\x02\xca\x10C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00$B"b"\x00\x05N\xb1{P'L\xfe\x1c[\x01\x01!ve\x04\x00\x86\xa6\x02\x18\xd1\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\xfe\xff\xf5\xff\t\x00\x858d\xc2"b"\x00\x05N\xb1{P'\xf0\xfe\x1c\\\x01\x01 \x94e\x04\x00\xc9D\xab>\xa7\x7f\x1e?*|\xd9\xbf\xc9\xa7\xaa\xbc\x1eK\xee\xbd2\xfa\xbb\xbdw0"b'\x00\x05N\xb1{P(X\xfe\x03]\x01\x01Ms\x00\x00\x949'b'\x00\x05N\xb1{P)\x1c\xfe\x1c^\x01\x01\x1e\xbce\x04\x00\x08F\xc4\xbc\x02HG\xbd\xd7\x95!@\x17\x96)\xbc\x95"-=NE\xaa\xbcy\xde'b'\x00\x05N\xb1{P)\xb0\xfe\x18_\x01\x01\xb2N<&\xbd\x85\x06I\xbd\xd1\xcc"@\xa4\x10*D\x8f\xa6\x02\x18\xd6\xe7\xb8\xfd\x9a\x9f'b'\x00\x05N\xb1{P*<\xfe\x1c`\x01\x01\xa3\xe3L!:1\x89\xc8\xba,-\x909\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x06c<\xd6[\x9f<8\xed'b'\x00\x05N\xb1{P*\xb0\xfe\x03a\x01\x01\xa5\xbd\x14\x00\x04\xd6'b'\x00\x05N\xb1{P+(\xfe\x0cb\x01\x01\x02\x10\x8e\x95{\xb1N\x05\x00\xd0e\x04\x00w\x8d'b'\x00\x05N\xb1{P+\xac\xfe\x16c\x01\x01\x88\x86\xa6\x02\x18\xd1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1f\xd6'b'\x00\x05N\xb1{P,,\xfe\x16d\x01\x01\xc1\x7f\x128<\xfeTK=\xda\xf7;-'b'\x00\x05N\xb1{Qy|\xfe\x16i\x01\x01t4f\x04\x00\xe4\xff\x18\x00\xfe\xfb\xfc\xff\xef\xff\xf7\xffC\xff\xc0\xfe\x04\x02U\xeb'b'\x00\x05N\xb1{Qy\xdc\xfe\x16j\x01\x01\x814f\x04\x00\xd9\xff!\x00\xf1\xfb\x1e\x00\xd1\xff\xf0\xff\xe1\x00\xa7\xffi\x02}\x88'b'\x00\x05N\xb1{Qz4\xfe\x0ek\x01\x01\x1d4f\x04\x00\xf0\x96iD)\\%\xbem\x10\xbbu'b'\x00\x05N\xb1{Qz\x88\xfe\x0el\x01\x01\x894f\x04\x00\xcf\xd9iD)\\\x07>\xb2\x15 \x1e'b'\x00\x05N\xb1{Qz\xe4\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\xa4:\xed\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xc7b'b'\x00\x05N\xb1{Q{8\xfe\x06n\x01\x01}\xc6\x14\x00\x00\x03\x00\xb1q'b'\x00\x05N\xb1{Q{\x84\xfe\x04o\x01\x01\x98\x00\x00\x80\x8a\x94x'b'\x00\x05N\xb1{R\xbe\x9f\xfe5p\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01*!'b'\x00\x05N\xb1{R\xd5K\xfe!q\xff\x00L\x98m+C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x00+'b'\x00\x05N\xb1{S\x11\xac\xfe\x02p\x01\x01*\x00\x00\xd0\xe0'b'\x00\x05N\xb1{S\x12D\xfe\x1eq\x01\x01\x180b/\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xd5\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x08\x00\x13~\x03\x0c?n'b'\x00\x05N\xb1{S\x12\xa8\xfe\x1ar\x01\x01>\xf89\xca\xbf\xaaaE\xc0=x\xa1=\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\xad%'b'\x00\x05N\xb1{S\x13\x00\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3'b'\x00\x05N\xb1{S\x13X\xfe\x14t\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\x85\xeb\x01@\xb8\x1e\x05>\x90\x000\x00\xad{'b'\x00\x05N\xb1{S\x13\xb8\xfe\x1cu\x01\x01!>f\x04\x00\x87\xa6\x02\x18\xcf\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\xfe\xff\xf9\xff\x0c\x00\xfa8\t\xe3'b'\x00\x05N\xb1{S\x14$\xfe\x1cv\x01\x01 \x99f\x04\x00\x1eS\xb4>\x80\xdd\x19?\xce\x98\xdb\xbf"\xe6\xae\xbc\x14\xe8\x9c\xbd\xfe\xc9\x02\xbe\xa8E'b'\x00\x05N\xb1{T\x85\xb4\xfe\x03w\x01\x01Ms\x00\x00\xb7\xa9'b'\x00\x05N\xb1{T\x86\x93\xfe5r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaf\xc3'b'\x00\x05N\xb1{T\xa20\xfe\x1cx\x01\x01\x1e\xc1f\x04\x00\xca\x926\xbd\x8bc\xf8\xbcC\x82$@Op\xcc\xbc=\x90&>\xa6\x8a,?\x91\x0b'b"\x00\x05N\xb1{T\xa2\xa8\xfe\x18y\x01\x01\xb2\x01\xf3z\xbd\x8f\xda\xfb\xbc\x8f^%@p\r*D\x90\xa6\x02\x18\xd5\xe7\xb8\xfd\xde'"b'\x00\x05N\xb1{T\xa3\x1c\xfe\x1cz\x01\x01\xa3/u!:\xc1%\xc9\xba\xf0u\x8d9\x00\x00\x00\x00\x00\x00\x00\x00R\xbd9<]q\xad<\xc7\xa2'b'\x00\x05N\xb1{T\xa3\x90\xfe\x03{\x01\x01\xa5\xbd\x14\x00\xaf\xab'b'\x00\x05N\xb1{T\xa3\xf4\xfe\x0c|\x01\x01\x02\x98\x89\x99{\xb1N\x05\x00\xd5f\x04\x00\xf8\xed'b'\x00\x05N\xb1{T\xa4\\\xfe\x16}\x01\x01\x88\x88\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x00J'b'\x00\x05N\xb1{T\xa4\xc0\xfe\x16~\x01\x01\xc1#\xfck<\x80%>=X\x0cl<\xac\xbd\xdb=\x00\x00\x00\x00?\x031\x85'b'\x00\x05N\xb1{T\xf2\x8f\xfe!s\xff\x00L\x98m+C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x81v'b'\x00\x05N\xb1{V/\xf0\xfe\x15\x80\x01\x01$\x9b\x9e2\x11\x85\x06C\x06\xaf\x05\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x0c'b'\x00\x05N\xb1{V0\x80\xfe\x16\x81\x01\x01#\x12g\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x81\x0c'b'\x00\x05N\xb1{V0\xe8\xfe\x1a\x82\x01\x01\x1b\xb6\xed2\x11\x00\x00\x00\x00\xed\xff\x0e\x00J\xfc\xa6\x00J\xff\xd9\x02&\xffh\xfft\x01\xfeN'b'\x00\x05N\xb1{V1l\xfe\x16\x83\x01\x01t&g\x04\x00\xf2\xff\x0b\x00W\xfc\x97\x00q\xff\xbb\x028\xff\xdb\xfe\r\x02\x1f\x84'b'\x00\x05N\xb1{V1\xf0\xfe\x16\x84\x01\x01\x81&g\x04\x00\xe6\xff \x00P\xfc\xa9\x00D\xff\xc2\x02\xd0\x00\xc8\xffu\x02\x07X'b'\x00\x05N\xb1{V2h\xfe\x0e\x85\x01\x01\x1d&g\x04\x00\xa6\x95iD\x00\x00:\xbem\x10\xf9\xb8'b'\x00\x05N\xb1{V2\xdc\xfe\x0e\x86\x01\x01\x89&g\x04\x00\xc6\xd9iD\xcd\xcc\x06>\xb2\x15*\xd6'b'\x00\x05N\xb1{V3d\xfe\x1f\x87\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00B\x01\xa4:m\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x8b\x1f'b'\x00\x05N\xb1{V3\xdc\xfe\x06\x88\x01\x01}\xc5\x14\x00\x00\x03\x00<\x91'b'\x00\x05N\xb1{V4P\xfe\x03\x89\x01\x01Ms\x00\x00!\xda'b'\x00\x05N\xb1{VI,\xfe\x04\x8a\x01\x01\x98\x00\x00\x80\x8a\x01\xdf'b'\x00\x05N\xb1{VI\x94\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01'b'\x00\x05N\xb1{VI\xf8\xfe\x1e\x8c\x01\x01\x18Xs2\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xd2\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0c\xd0\n'b'\x00\x05N\xb1{VJX\xfe\x1a\x8d\x01\x01>\x06\x8e\xc8\xbfK\xfb;\xc0\x14\xe6\x81=\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00xT'b'\x00\x05N\xb1{VJ\xac\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7'b'\x00\x05N\xb1{V\xb9K\xfe5t\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x011\xec'b'\x00\x05N\xb1{V\xcfk\xfe!u\xff\x00L\\\xa1,C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb3Y'b'\x00\x05N\xb1{W\xe30\xfe\x14\x8f\x01\x01J)\\\x8f=)\\\x8f=33\x03@\xcc\xccL=\x9a\x002\x00F\x8c'b'\x00\x05N\xb1{W\xe3\xcc\xfe\x1c\x90\x01\x01!\x07g\x04\x00\x89\xa6\x02\x18\xce\xe7\xb8\xfd\x92c\n\x00\x02\x08\x00\x00\x01\x00\xfc\xff\x04\x00\x1c=9\xb2'b'\x00\x05N\xb1{W\xe4t\xfe\x1c\x91\x01\x01 \x9eg\x04\x00\xe7\x19\xbf>a\xf3\x17?\xd4\xf3\xdc\xbf\xd9a)<\x9be=\xbd\x14\xaa1\xbd\xb1\xe9'b'\x00\x05N\xb1{W\xe4\xdc\xfe\x03\x92\x01\x01Ms\x00\x005&'b'\x00\x05N\xb1{W\xe5\xa0\xfe\x1c\x93\x01\x01\x1e\xc6g\x04\x002\xce\x9a\xbcU\x8dT\xbd*\xc20@i\x0e\xba=F\xa7\x04\xbe\x95\x12K?\xd6C'b'\x00\x05N\xb1{W\xe6\x0c\xfe\x18\x94\x01\x01\xb2\xa7E\x11\xbd\xf0\x86J\xbd\xbd\x8f1@\xeb!*D\x90\xa6\x02\x18\xd2\xe7\xb8\xfd^\r'b'\x00\x05N\xb1{X\xb4\xbb\xfe5v\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb4\x0e'b'\x00\x05N\xb1{X\xca\xe7\xfe!w\xff\x00L\x7f\xb00C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa5\xc3'b"\x00\x05N\xb1{X\xf6\x13\xfe%x\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x1a\xfa"b'\x00\x05N\xb1{YF\\\xfe\x1c\x95\x01\x01\xa3\xb3\x8d!:K\xbc\xc9\xba\xe3\xc8\x8a9\x00\x00\x00\x00\x00\x00\x00\x00#K\x9c<7v\x07=\xa3\xd9'b'\x00\x05N\xb1{YF\xdc\xfe\x03\x96\x01\x01\xa5\xc5\x14\x00\x0c\xb6'b'\x00\x05N\xb1{YGL\xfe\x0c\x97\x01\x01\x02P}\x9d{\xb1N\x05\x00\xdag\x04\x00\xe8J'b'\x00\x05N\xb1{YG\xb0\xfe\x16\x98\x01\x01\x88\x89\xa6\x02\x18\xce\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaf\x0f'b'\x00\x05N\xb1{YH\x0c\xfe\x16\x99\x01\x01\xc1\xec?\xa0<1\xcc\xef<\xa0\x8c\x0e;\x9e\xf1\xb1=\x00\x00\x00\x00?\x03\xc3\xe9'b'\x00\x05N\xb1{YH`\xfe\t\x04\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x00\t\xbc'b'\x00\x05N\xb1{YH\xcc\xfe\x1a\x9a\x01\x01\x1b%\x996\x11\x00\x00\x00\x00\xeb\xff\x1a\x00,\xfcD\x00\xc5\xffQ\x03\x19\xff\x92\xff}\x01U\xaf'b'\x00\x05N\xb1{YI,\xfe\x16\x9b\x01\x01t\x16h\x04\x00\xe6\xff%\x00/\xfc1\x00\xcb\xff4\x03&\xff\xf7\xfe\x0f\x02\xe7\x8d'b'\x00\x05N\xb1{YI\x90\xfe\x16\x9c\x01\x01\x81\x16h\x04\x00\xee\xff\x1e\x00H\xfc"\x00\xb4\xffF\x03\xb6\x00\xf2\xffv\x02C\xf6'b'\x00\x05N\xb1{YI\xec\xfe\x0e\x9d\x01\x01\x1d\x16h\x04\x00\xc2\x95iDp=8\xbem\x104\x8a'b'\x00\x05N\xb1{YJH\xfe\x0e\x9e\x01\x01\x89\x16h\x04\x00\xab\xdaiD\xb8\x1e\x15>\xb3\x15T\xd3'b'\x00\x05N\xb1{YJ\xb0\xfe\x1f\x9f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01\xa4:\xd2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P9\xb7'b'\x00\x05N\xb1{YK\x0c\xfe\x06\xa0\x01\x01}\xc5\x14\x00\x00\x03\x00\x1c\xcf'b'\x00\x05N\xb1{YKd\xfe\x03\xa1\x01\x01Ms\x00\x00mA'b'\x00\x05N\xb1{YK\xe0\xfe\x04\xa2\x01\x01\x98\x00\x00\x80\x8a\xf2W'b'\x00\x05N\xb1{YL0\xfe\x02\xa3\x01\x01*\x00\x00l\xbc'b'\x00\x05N\xb1{YL\x98\xfe\x1e\xa4\x01\x01\x18\x80\x845\x11\x00\x00\x00\x00\x8f\xa6\x02\x18\xd0\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x0b\x00\x13~\x03\x0c\xc7M'b'\x00\x05N\xb1{YL\xec\xfe\x1a\xa5\x01\x01>s\xf8\x06\xc0J\xa8$\xc0\x99\x19n=\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x19\x12\x14?j\xfc\xdc\xbfj\xbd\x85\xbdtEi\xbd\x07\xb9\xa7<\xccL'b'\x00\x05N\xb1{\\MX\xfe\x03\xaf\x01\x01Ms\x00\x00`q'b'\x00\x05N\xb1{\\M\xfc\xfe\x1c\xb0\x01\x01\x1e\xcbh\x04\x00\xe3b?\xbc\xfe\x8d\xa9\xbd\xffW>@-\xb5P<\xfa\x11\xa4\xbe\x82DE?\xb7\x10'b'\x00\x05N\xb1{\\NT\xfe\x18\xb1\x01\x01\xb2\xa1\xcd\xd1\xbcp\xf7\x9b\xbd\xefK?@\\\x0f*D\x90\xa6\x02\x18\xcd\xe7\xb8\xfd\xd5\xf3'b'\x00\x05N\xb1{\\N\xa8\xfe\x1c\xb2\x01\x01\xa3\x1e\xb3!:\xafI\xca\xba*\x15\x889\x00\x00\x00\x00\x00\x00\x00\x00\xf2+\x80\x00\x00\x00\x00?\x03\xfeZ'b'\x00\x05N\xb1{\\\x9d\xc3\xfe5{\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc2\xa4'b'\x00\x05N\xb1{\\\xb4#\xfe!|\xff\x00L\x7f53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x10\xa1'b'\x00\x05N\xb1{^\x14\x9c\xfe\x1a\xb7\x01\x01\x1b\xfeG:\x11\x00\x00\x00\x00\xf7\xff\x13\x00\x0c\xfc=\x00\xd5\xfe\x8c\x02\x1b\xff\xd5\xff\x88\x01\x9e\x8b'b'\x00\x05N\xb1{^\x15d\xfe\x16\xb8\x01\x01t\x08i\x04\x00\xf9\xff\x16\x00\x1a\xfc$\x00\xbe\xfe\x91\x02\x1a\xff+\xff\x18\x02Y\xdf'b'\x00\x05N\xb1{^\x15\xe0\xfe\x16\xb9\x01\x01\x81\x08i\x04\x00\xf4\xff\x1f\x00\x04\xfcD\x00\xd3\xfe\x81\x02\xac\x00\x19\x00\x8e\x02\xa4L'b'\x00\x05N\xb1{^\x16L\xfe\x0e\xba\x01\x01\x1d\x08i\x04\x007\x96iD\xc2\xf50\xben\x10\x84\xe0'b'\x00\x05N\xb1{^\x16\xb4\xfe\x0e\xbb\x01\x01\x89\x08i\x04\x00\xe2\xdaiD\\\x8f\x18>\xb5\x15\xdcP'b'\x00\x05N\xb1{^\x17D\xfe\x1f\xbc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x004\x01\xe3:/\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xe4\xbc'b'\x00\x05N\xb1{^\x17\xb4\xfe\x06\xbd\x01\x01}\xc5\x14\x00\x00\x03\x007\t'b'\x00\x05N\xb1{^\x18\x18\xfe\x04\xbe\x01\x01\x98\x00\x00\x80\x8aI\xe8'b'\x00\x05N\xb1{^\x18l\xfe\x02\xbf\x01\x01*\x00\x00?\xb8'b'\x00\x05N\xb1{^\x18\xd8\xfe\x1e\xc0\x01\x01\x18\x88G8\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xcd\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x08\x00\x13~\x03\x0c&%'b'\x00\x05N\xb1{^\x19T\xfe\x1a\xc1\x01\x01>\xa1~\xea\xbf\x8b\x0c\x8d\xc0\xc2\xdd\x93<\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x92\x10'b'\x00\x05N\xb1{^\x19\xa8\xfe\x08\xc2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff'b'\x00\x05N\xb1{^\x19\xf8\xfe\x03\xc3\x01\x01Ms\x00\x00\x03\x99'b'\x00\x05N\xb1{^.\xe4\xfe\x15\xc4\x01\x01$g\xe4:\x113\x06#\x06l\x06s\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00l\x91'b'\x00\x05N\xb1{^/P\xfe\x16\xc5\x01\x01#0i\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06X'b'\x00\x05N\xb1{^^\xbb\xfe5}\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\\\x8b'b'\x00\x05N\xb1{^\x88\xbf\xfe!~\xff\x00L\x7f53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x91\xfc'b'\x00\x05N\xb1{_\x89P\xfe\x14\xc6\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\x85\xeb\x01@\xcc\xccL=\xb0\x003\x00\xd5\xaf'b'\x00\x05N\xb1{_\x8a\x00\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f'b'\x00\x05N\xb1{_\x8a\xe0\xfe\x1c\xc8\x01\x01!bi\x04\x00\x87\xa6\x02\x18\xca\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xe6\xff\xf8\xff\x05\x00_E0\x0b'b'\x00\x05N\xb1{_\x8bx\xfe\x1c\xc9\x01\x01 \xa8i\x04\x00\xcf\x9d\xb1>~\xf3\r?r\\\xda\xbf\x15\xac\x87\xbesR\xb6\xbd\xa3Po\xbd\xfe)'b'\x00\x05N\xb1{`Z\xd7\xfe\t\x7f\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03Bp'b'\x00\x05N\xb1{`q\x9b\xfe5\x80\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01^\x8e'b'\x00\x05N\xb1{`\x87\xbb\xfe!\x81\xff\x00L\x7f53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1c\xf3'b'\x00\x05N\xb1{`\xeex\xfe\x1c\xca\x01\x01\x1e\xd1i\x04\x00\xbeF\x88\xbc\xf2\xaf\xa7\xbd\x0eNG@\x95\xd7Q\xbd\xaa\xdd\x8d>}\n\xa5>\xd1\x7f'b'\x00\x05N\xb1{`\xee\xf0\xfe\x18\xcb\x01\x01\xb2\xec?\xf9\xbc\x9f\xde\xa1\xbd\xa1\xa2H@\xc2\x15*D\x90\xa6\x02\x18\xca\xe7\xb8\xfd\x10\xde'b'\x00\x05N\xb1{`\xefL\xfe\x1c\xcc\x01\x01\xa3y\xe7!:w\xd9\xca\xba)H\x859\x00\x00\x00\x00\x00\x00\x00\x00\xb7_w'b'\x00\x05N\xb1{`\xf0\x80\xfe\x16\xd0\x01\x01\xc1\x05,\xa0;m\xa9\xe9\x00\x00\x00\x00?\x03:?'b'\x00\x05N\xb1{`\xf0\xd4\xfe\x1a\xd1\x01\x01\x1b4\xf6=\x11\x00\x00\x00\x00\xf3\xff\x1d\x00\x18\xfc\xd9\xff+\x01\xc4\x00!\xff\xf1\xff\x88\x01\xd9d'b'\x00\x05N\xb1{`\xf1(\xfe\x16\xd2\x01\x01t\xf9i\x04\x00\xf8\xff\x17\x00\x1a\xfc\xe1\xff\x1f\x01\xc4\x00\x19\xffQ\xff\x1f\x02F\xec'b'\x00\x05N\xb1{`\xf1|\xfe\x16\xd3\x01\x01\x81\xf9i\x04\x00\xeb\xff,\x00\x16\xfc\xf2\xff\x1e\x01\xb9\x00\xaf\x00U\x00\x85\x02r\xd8'b'\x00\x05N\xb1{`\xf1\xc8\xfe\x0e\xd4\x01\x01\x1d\xf9i\x04\x00\xab\x96iD\x14\xae)\xben\x10$\x0f'b'\x00\x05N\xb1{`\xf2\x14\xfe\x0e\xd5\x01\x01\x89\xf9i\x04\x00\x8f\xdaiD)\\\x13>\xb5\x15\xfe\xed'b'\x00\x05N\xb1{`\xf2l\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe3:T\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xddb'b'\x00\x05N\xb1{`\xf2\xbc\xfe\x06\xd7\x01\x01}\xc2\x14\x00\x00\x03\x00(\xf6'b'\x00\x05N\xb1{`\xf3\x0c\xfe\x04\xd8\x01\x01\x98\x00\x00\x80\x8a\x0c]'b'\x00\x05N\xb1{`\xf3P\xfe\x02\xd9\x01\x01*\x00\x00wD'b'\x00\x05N\xb1{`\xf3\xa4\xfe\x1e\xda\x01\x01\x18\xd0\xa6;\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xca\xe7\xb8\xfd\xdci\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c9\xa9'b"\x00\x05N\xb1{`\xf3\xf8\xfe\x1a\xdb\x01\x01>X\xac(\xc0\x14'M\xbf\xd7#\xc0<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd3T"b'\x00\x05N\xb1{`\xf4@\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95'b'\x00\x05N\xb1{`\xf4\x84\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\x00\x05N\xb1{b\\\xab\xfe5\x82\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdbl'b'\x00\x05N\xb1{br\xcb\xfe!\x83\xff\x00L?\xd33C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00[\x1f'b'\x00\x05N\xb1{b\x88P\xfe\x15\xde\x01\x01$ \xe1>\x11\x02\x06\xf1\x05<\x06b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x19'b'\x00\x05N\xb1{b\x88\xe0\xfe\x16\xdf\x01\x01#5j\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18?'b'\x00\x05N\xb1{b\x89H\xfe\x14\xe0\x01\x01J=\nW>=\nW>\x85\xeb\x01@\n\xd7#=\xb3\x004\x00\xc0\xb9'b'\x00\x05N\xb1{d\x0f,\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\x00\x05N\xb1{d\x0f\xf0\xfe\x1c\xe2\x01\x01!+j\x04\x00\x80\xa6\x02\x18\xc6\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xe0\xff\xf6\xff\x02\x009F\xe8\xa9'b'\x00\x05N\xb1{d\x10`\xfe\x1c\xe3\x01\x01 \xaej\x04\x00\xac]\x8b>S\x1c\x06?\x0c\xfd\xd9\xbf\x86\xd5\xa7\xbe\xe53\xd7\xbdD\xeb\xe0\xbcL='b'\x00\x05N\xb1{d\x10\xb4\xfe\x1c\xe4\x01\x01\x1e\xd6j\x04\x00\xc2\xf6\x1b\xbdq\xfa\x1f\xbc\x0c\xd2H@~\xb7\x86\xbd\xb0\xf5R>\xd0Q\x12<\xf9\x94'b'\x00\x05N\xb1{d\x11\x08\xfe\x18\xe5\x01\x01\xb2\xfb\xa0O\xbd|\xd0\xae\xbb\n\xd3G\xc0)\x1c*D\x8d\xa6\x02\x18\xc8\xe7\xb8\xfdx\xf9'b'\x00\x05N\xb1{d\x11`\xfe\x1a\xe6\x01\x01\x1b\xa9\xa1A\x11\x00\x00\x00\x00\xe8\xff\x07\x00#\xfc\x9b\xff\xc5\x00)\x00\x06\xff\xfb\xff~\x01a\x03'b'\x00\x05N\xb1{d\x11\xb0\xfe\x16\xe7\x01\x01t\xe9j\x04\x00\xe4\xff\x05\x00\x14\xfc\xaf\xff\xca\x00\x03\x00\x02\xffX\xff\x0e\x02\x92C'b'\x00\x05N\xb1{d\x12\x04\xfe\x16\xe8\x01\x01\x81\xe9j\x04\x00\xe2\xff\x16\x00\x1d\xfc\x9c\xff\xec\x00 \x00\x86\x00B\x00\x87\x02\x1c8'b'\x00\x05N\xb1{d\x12P\xfe\x0e\xe9\x01\x01\x1d\xe9j\x04\x00\xf8\x95iDG\xe14\xben\x10\xf1\xc5'b'\x00\x05N\xb1{d\x12\x9c\xfe\x0e\xea\x01\x01\x89\xe9j\x04\x00\x82\xd9iD\\\x8f\x02>\xb5\x15\xad\xc6'b'\x00\x05N\xb1{d\x12\xf4\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xe3:\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xc8\x96'b'\x00\x05N\xb1{d\x13H\xfe\x06\xec\x01\x01}\xc5\x14\x00\x00\x03\x00\xe6\xe0'b"\x00\x05N\xb1{d\x13\x90\xfe\x04\xed\x01\x01\x98\x00\x00\x80\x8a\xb9'"b'\x00\x05N\xb1{d\x13\xd4\xfe\x02\xee\x01\x01*\x00\x00%U'b'\x00\x05N\xb1{d\x14(\xfe\x1e\xef\x01\x01\x18 \xc9A\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xc5\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x1a\x00\xe2U\x03\x0c\x8aL'b'\x00\x05N\xb1{d\x14|\xfe\x1a\xf0\x01\x01>m\x95E\xc0=\x00\x00\x00\x00?\x03T\xec'b'\x00\x05N\xb1{e\x84@\xfe\x03\xf9\x01\x01Ms\x00\x00XR'b'\x00\x05N\xb1{e\x84\xe4\xfe\x15\xfa\x01\x01$\x9f\xdcB\x11\x19\x06\xfd\x05\xff\x05)\x06\x00\x00\x00\x00\x00\x00\x00\x00\x006@'b'\x00\x05N\xb1{e\x858\xfe\x16\xfb\x01\x01#:k\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9e\x05'b'\x00\x05N\xb1{f\x15\xd3\xfe5\x86\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc0\xa1'b'\x00\x05N\xb1{f,\x1b\xfe!\x87\xff\x00L\x03\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x0cn'b'\x00\x05N\xb1{g)\xa4\xfe\x14\xfc\x01\x01Jp=\x8a>p=\x8a>\\\x8f\x02@\n\xd7#\xbc\xb3\x002\x00\x02\x97'b'\x00\x05N\xb1{g*4\xfe\x03\xfd\x01\x01Ms\x00\x00\x86D'b'\x00\x05N\xb1{g?\x04\xfe\x1c\xfe\x01\x01!\xf4j\x04\x00z\xa6\x02\x18\xc3\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\xea\xff\xf8\xff\xfc\xffGF\xe2\x01'b'\x00\x05N\xb1{g?\xa4\xfe\x1c\xff\x01\x01 \xb3k\x04\x00\xac\xa2V>\x94\x80\xfe>\x0c\x06\xdb\xbf4lf\xbe)?\xae\xbdd\x00H=\xd8?'b'\x00\x05N\xb1{g\xefc\xfe5\x88\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01y\x1c'b'\x00\x05N\xb1{h\x05\xa3\xfe!\x89\xff\x00L\x03\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9a\xf6'b'\x00\x05N\xb1{h\xac(\xfe\t\x05\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\x7fr'b'\x00\x05N\xb1{h\xac\xb0\xfe\x1a\x00\x01\x01\x1b^RE\x11\x00\x00\x00\x00\xe7\xff\x1f\x002\xfc\xda\xff\xe5\xff\x01\x00\xee\xfe\xf9\xffr\x01w\xc1'b'\x00\x05N\xb1{h\xad\x10\xfe\x16\x01\x01\x01t\xdbk\x04\x00\xeb\xff\x1a\x004\xfc\xcf\xff\xf1\xff\xf5\xff\xee\xfeV\xff\x04\x02z\x05'b'\x00\x05N\xb1{h\xadh\xfe\x16\x02\x01\x01\x81\xdbk\x04\x00\xe4\xff\'\x00"\xfc\xd6\xff\xee\xff\xfb\xffn\x00C\x00g\x02\xdc\x0e'b'\x00\x05N\xb1{h\xad\xbc\xfe\x0e\x03\x01\x01\x1d\xdbk\x04\x00[\x95iDR\xb8>\xben\x10SJ'b'\x00\x05N\xb1{h\xae\x08\xfe\x0e\x04\x01\x01\x89\xdbk\x04\x00\xc7\xd9iDG\xe1\x06>\xb5\x15r`'b'\x00\x05N\xb1{h\xaeh\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xc2\x00\xe3:\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x99\xb9'b'\x00\x05N\xb1{h\xae\xc0\xfe\x06\x06\x01\x01}\xc5\x14\x00\x00\x03\x00\xfaJ'b'\x00\x05N\xb1{h\xaf\x0c\xfe\x04\x07\x01\x01\x98\x00\x00\x80\x8a\x04\x16'b'\x00\x05N\xb1{h\xafd\xfe\x02\x08\x01\x01*\x00\x00p/'b"\x00\x05N\xb1{h\xaf\xf8\xfe\x1e\t\x01\x01\x18H\xdaD\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff!\x00'N\x03\x0c\xa1J"b'\x00\x05N\xb1{h\xb0d\xfe\x1a\n\x01\x01>\x1e\xacF\xc0\xbdo\x08?R0\xa4<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xdcB'b'\x00\x05N\xb1{h\xb0\xb8\xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer'b'\x00\x05N\xb1{h\xb1\x18\xfe\x1c\x0c\x01\x01\x1e\xefk\x04\x00\xd3\x08Z\xbd\x1e_c<\xd6\xecH@@Mr\xbd!\xb7G\xbb\xab\xe5\x83\xbc\xda\xbc'b'\x00\x05N\xb1{h\xb1p\xfe\x18\r\x01\x01\xb2k\x03\x88\xbdX\x85\xb1\x00\x00\x00\x00?\x03\xbc^'b'\x00\x05N\xb1{h\xb3\xa4\xfe\x03\x13\x01\x01Ms\x00\x00hl'b"\x00\x05N\xb1{i07\xfe%\x8a\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x007\x13"b'\x00\x05N\xb1{i\xdf\xd3\xfe5\x8b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb6\x0b'b'\x00\x05N\xb1{j\x0c/\xfe!\x8c\xff\x00L\x8e\xee3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x006\xb6'b'\x00\x05N\xb1{j48\xfe\x15\x14\x01\x01$z\xdbF\x116\x067\x06\x1f\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00o\xde'b'\x00\x05N\xb1{j4\xc8\xfe\x16\x15\x01\x01#@l\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00N\x19'b'\x00\x05N\xb1{j5,\xfe\x03\x16\x01\x01/\xff\x00\x00\xdf\x83'b'\x00\x05N\xb1{j5\xfc\xfe\x12\x17\x01\x01\xfc\x8el\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8ad'b'\x00\x05N\xb1{j6\x90\xfe\t\x18\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe3\x9c'b'\x00\x05N\xb1{k\xb9|\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ'b'\x00\x05N\xb1{k\xce\x94\xfe\x14\x1a\x01\x01J)\\\x8f>)\\\x8f>\x85\xeb\x01@\n\xd7#\xbd\xb3\x005\x00\xd3w'b'\x00\x05N\xb1{k\xcf\\\xfe\x1c\x1b\x01\x01!rl\x04\x00w\xa6\x02\x18\xc2\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xf3\xff\xfc\xff\xfc\xff\x04F/c'b'\x00\x05N\xb1{k\xcf\xf0\xfe\x1c\x1c\x01\x01 \xb8l\x04\x00\xcbK.>\xc1\xcf\xf7>|\xe7\xd9\xbf\x96\xc5\x08\xbe\xe6\xcf(\xbd\xea)J=\xd3\x00'b'\x00\x05N\xb1{k\xd0d\xfe\x1a\x1d\x01\x01\x1b4\xffH\x11\x00\x00\x00\x00\x04\x00\x15\x002\xfc\xca\xff3\x00/\xff\xf4\xfe\xf8\xffq\x01I='b'\x00\x05N\xb1{k\xd0\xc0\xfe\x16\x1e\x01\x01t\xccl\x04\x00\x07\x00 \x00B\xfc\xc4\xff/\x00&\xff\xf1\xfeV\xff\x08\x02\xefW'b"\x00\x05N\xb1{k\xd1\x18\xfe\x16\x1f\x01\x01\x81\xccl\x04\x00\xf6\xff\x1d\x009\xfc\xb0\xffF\x00'\xff\x80\x003\x00v\x02_\xb8"b'\x00\x05N\xb1{k\xd1h\xfe\x0e \x01\x01\x1d\xccl\x04\x00\x8b\x95iD\x14\xae;\xbeo\x10}\xba'b'\x00\x05N\xb1{k\xd1\xb4\xfe\x0e!\x01\x01\x89\xccl\x04\x00\x0f\xdaiD)\\\x0b>\xb6\x15O\xa5'b'\x00\x05N\xb1{k\xd2\x14\xfe*"\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00o\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xa7\xf9'b'\x00\x05N\xb1{k\xd2l\xfe\x1f#\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x1b;\xf8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x19B'b'\x00\x05N\xb1{k\xd2\xdc\xfe\x06$\x01\x01}\xc5\x14\x00\x00\x03\x00R\x03'b'\x00\x05N\xb1{k\xd3,\xfe\x04%\x01\x01\x98\x00\x00\x80\x8a\xc7z'b'\x00\x05N\xb1{k\xd3p\xfe\x02&\x01\x01*\x00\x00\xd2\xca'b"\x00\x05N\xb1{k\xd3\xc8\xfe\x1e'\x01\x01\x18P\x9dG\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc1\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x1c\x00-K\x03\x0cs\xf7"b'\x00\x05N\xb1{k\xd4 \xfe\x1a(\x01\x01>\xce\xd1k\xc0\x06\xab\xba?\xd7\xd3\xe9<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00a\xd2'b'\x00\x05N\xb1{k\xd4h\xfe\x08)\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x004\xcc'b'\x00\x05N\xb1{k\xeb\xdf\xfe5\x8d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01($'b'\x00\x05N\xb1{l\x16\x7f\xfe!\x8e\xff\x00L\x8e\xee3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb7\xeb'b'\x00\x05N\xb1{m\x1c\x88\xfe\x1c*\x01\x01\x1e\xf5l\x04\x00!5d\xbd\x9d\xe0\xe8;\xe9\xb7G@\x9aCi\x98\xbdy\xca'b'\x00\x05N\xb1{m\x1d$\xfe\x18+\x01\x01\xb2\x02\xf0\x8c\xbd\xc0|H<\x91\xe6H\xc0\n\x17*D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd6\xba'b'\x00\x05N\xb1{m\x1d\x98\xfe\x1c,\x01\x01\xa3t\x95":\xbb\xc4\xcc\xba\x8c\xb4z9\x00\x00\x00\x00\x00\x00\x00\x009\xe6\xab<\xb9C\x81<\x8c\xf5'b'\x00\x05N\xb1{m\x1d\xf8\xfe\x03-\x01\x01\xa5\xc5\x14\x00\n7'b'\x00\x05N\xb1{m\x1e`\xfe\x0c.\x01\x01\x02`\xa9\xb1{\xb1N\x05\x00\nm\x04\x00&\xa1'b'\x00\x05N\xb1{m\x1e\xd0\xfe\x16/\x01\x01\x88v\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdd\x8e'b'\x00\x05N\xb1{m\x1f<\xfe\x160\x01\x01\xc1\x1d9\xd5<\x17\x12\xc4<\xb1\xf8\xe3;5\xc4\x08>\x00\x00\x00\x00?\x03\x90\xd2'b'\x00\x05N\xb1{m\x1f\x9c\xfe\x031\x01\x01Ms\x00\x00\xf7\xd1'b'\x00\x05N\xb1{m 8\xfe\x152\x01\x01$\xef\xdaJ\x11Z\x06H\x060\x06R\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xab'b'\x00\x05N\xb1{m \xa4\xfe\x163\x01\x01#Fm\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9d`'b'\x00\x05N\xb1{m\xce\xfb\xfe5\x8f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xad\xc6'b'\x00\x05N\xb1{m\xf9G\xfe!\x90\xff\x00LW\xeb3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00JN'b'\x00\x05N\xb1{n\xa2 \xfe\x034\x01\x01Ms\x00\x00\x96F'b'\x00\x05N\xb1{n\xa2\xe4\xfe\x145\x01\x01J\n\xd7#>\n\xd7#>\xd7\xa3\x00@\x8f\xc2\xf5<\xb3\x005\x00h\xe2'b'\x00\x05N\xb1{o\xb7\x9f\xfe5\x91\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01KW'b'\x00\x05N\xb1{o\xb8\x1b\xfe\t\x91\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03B\xf1'b'\x00\x05N\xb1{o\xf0c\xfe!\x93\xff\x00LW\xeb3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x03\xb9'b'\x00\x05N\xb1{p>\xb0\xfe\x1a6\x01\x01\x1b\xb3\xb2L\x11\x00\x00\x00\x00\xf0\xff"\x00\xef\xfbQ\x00\xc1\xff\xfe\xff\xec\xfe\xf1\xffm\x01^+'b"\x00\x05N\xb1{p?<\xfe\x167\x01\x01t\xbfm\x04\x00\xf3\xff+\x00\xfb\xfb'\x00\xd0\xff\x18\x00\xe9\xfeF\xff\xfb\x01\xd8?"b'\x00\x05N\xb1{p?\xa8\xfe\x168\x01\x01\x81\xbfm\x04\x00\xeb\xff/\x00\xe4\xfb\x81\x00\x91\xff\x15\x00\x88\x00;\x00c\x02\xa3\r'b'\x00\x05N\xb1{p@\x04\xfe\x0e9\x01\x01\x1d\xbfm\x04\x00\xf0\x95iD)\\5\xbeo\x10\xb1p'b'\x00\x05N\xb1{p@\\\xfe\x0e:\x01\x01\x89\xbfm\x04\x00=\xdaiDp=\x0e>\xb6\x15N\xa2'b'\x00\x05N\xb1{p@\xc0\xfe\x1f;\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01\x1b;\x01\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ow|'b'\x00\x05N\xb1{pA\x18\xfe\x06<\x01\x01}\xc5\x14\x00\x00\x03\x00\xbd\xce'b'\x00\x05N\xb1{pAp\xfe\x04=\x01\x01\x98\x00\x00\x80\x8a\x99\xfa'b'\x00\x05N\xb1{pA\xb8\xfe\x02>\x01\x01*\x00\x00\xf7\xa1'b'\x00\x05N\xb1{pB\x10\xfe\x1e?\x01\x01\x18`\xb2J\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xc0\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x10\x00-K\x03\x0c\xf6"'b'\x00\x05N\xb1{pBh\xfe\x1a@\x01\x01>\x81H=\xc0\xb9\xc9\x8a?=\xce\x1d=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe3L'b'\x00\x05N\xb1{pB\xb4\xfe\x08A\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xad7'b'\x00\x05N\xb1{pC\x0c\xfe\x1cB\x01\x01!\x11\xa1\xf7>\xc6m\xd8\xbf\x98\xd1\xf5\xbcL\xe4\x9c<\x7fjr\xbdj\xca'b'\x00\x05N\xb1{pC\xc4\xfe\x1cD\x01\x01\x1e\xfbm\x04\x00\x0b\xe5`\xbd\x1e\x93L<\x0e\xbdH@\nx\x9d=\x0e\xba\xc9\xbd\x0c\xbd\xf3\xb8\x15\xc1\xf7'b'\x00\x05N\xb1{sI\x88\xfe\x1fU\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x9f\x00\x1b;L\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xdf\xdc'b'\x00\x05N\xb1{sI\xdc\xfe\x06V\x01\x01}\xc5\x14\x00\x00\x03\x00\xba\xf6'b'\x00\x05N\xb1{sJ,\xfe\x04W\x01\x01\x98\x00\x00\x80\x8a\xf3\x0f'b'\x00\x05N\xb1{sJp\xfe\x02X\x01\x01*\x00\x00\xbf]'b'\x00\x05N\xb1{sJ\xc8\xfe\x1eY\x01\x01\x18\x88\xc3M\x11\x00\x00\x00\x00~\xa6\x02\x18\xc1\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0cp\x8c'b'\x00\x05N\xb1{sK$\xfe\x1aZ\x01\x01>\xc4\xd6\x1b\xc0\x9d\xdfz>\xb8f\x0f=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00K\x11'b'\x00\x05N\xb1{sKl\xfe\x08[\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00OK'b'\x00\x05N\xb1{sK\xc0\xfe\x1c\\\x01\x01!\x05n\x04\x00v\xa6\x02\x18\xc3\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\x01\x00\x03\x00\x02\x00NF6\x10'b'\x00\x05N\xb1{sL \xfe\x1c]\x01\x01 \xd7n\x04\x00\x84\x18$>;*\xfd>A\x02\xd9\xbf\xde\xb7cn\x13\xc0\xbdgh\xc0<\xa3\xfa'b'\x00\x05N\xb1{t\xd84\xfe\x18_\x01\x01\xb2\xdf\xceC\xbdb\xf1U\xbb\xef\x96G\xc0{\x14*D\x7f\xa6\x02\x18\xc2\xe7\xb8\xfd\xae\xfe'b'\x00\x05N\xb1{t\xd8\x94\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b'\x00\x05N\xb1{t\xd9t\xfe\x1ca\x01\x01\xa3\xd4\xf9":\xfd6\xce\xba"\xddr9\x00\x00\x00\x00\x00\x00\x00\x00\xcch\x8b<\x80^\x1a\x00\x00\x00\x00?\x03'\xe1"b'\x00\x05N\xb1{u\xc3\x83\xfe5\x98\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01&0'b'\x00\x05N\xb1{u\xd9\xab\xfe!\x99\xff\x00L\x87\xf83\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9f\xaf'b'\x00\x05N\xb1{vH\x0c\xfe\x15g\x01\x01$\x08\xd6R\x11O\x06\x0f\x06C\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xabC'b'\x00\x05N\xb1{vH|\xfe\x16h\x01\x01#Qo\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\x08'b'\x00\x05N\xb1{vH\xcc\xfe\x03i\x01\x01Ms\x00\x04\xa2\xa5'b'\x00\x05N\xb1{vIp\xfe\x1aj\x01\x01\x1b\xa0\x0eT\x11\x00\x00\x00\x00\xf4\xff\x17\x00\x1b\xfc\xdd\xff\x14\x00\xf6\xff\xfc\xfe\xfe\xffs\x01\x0f\xff'b'\x00\x05N\xb1{vI\xc8\xfe\x16k\x01\x01t\xa1o\x04\x00\xf2\xff\x17\x00\x1a\xfc\xe8\xff\x10\x00\xfd\xff\xf7\xfe]\xff\x0c\x02\xc0\x83'b"\x00\x05N\xb1{vJ\x1c\xfe\x16l\x01\x01\x81\xa1o\x04\x00\xf5\xff'\x00\x05\xfc\x10\x00\x02\x00\xe8\xff}\x00K\x00q\x02(`"b'\x00\x05N\xb1{vJh\xfe\x0em\x01\x01\x1d\xa1o\x04\x00\xae\x95iD\x1e\x859\xben\x10\xb7\xb6'b'\x00\x05N\xb1{vJ\xb4\xfe\x0en\x01\x01\x89\xa1o\x04\x00P\xd7iDG\xe1\xbe=\xb5\x15\xe0Q'b'\x00\x05N\xb1{vK\x0c\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x01\xc0:\xd9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x8b\xcc'b'\x00\x05N\xb1{vK\\\xfe\x06p\x01\x01}\xc5\x14\x00\x00\x03\x00G\xe1'b'\x00\x05N\xb1{w\x95[\xfe5\x9a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa3\xd2'b'\x00\x05N\xb1{w\xd3k\xfe!\x9b\xff\x00L\x87\xf83\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1e\xf2'b'\x00\x05N\xb1{w\xfd,\xfe\x04q\x01\x01\x98\x00\x00\x80\x8a\xd5\\'b'\x00\x05N\xb1{w\xffh\xfe\x02r\x01\x01*\x00\x00k\xd7'b'\x00\x05N\xb1{x\x00 \xfe\x1es\x01\x01\x18\xc0\xe9S\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc4\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00-K\x03\x0c]\x82'b'\x00\x05N\xb1{x\x00\x84\xfe\x1at\x01\x01>V!\x15\xc0\xaa\x85\xd7\xbd\\\xdb\x0f=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00g@'b'\x00\x05N\xb1{x\x00\xd0\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce'b'\x00\x05N\xb1{x\x01$\xfe\x14v\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xaeG\x01@\n\xd7\xa3<\xb4\x005\x00C\xe8'b'\x00\x05N\xb1{x\x01t\xfe\t\x06\n\x00m\x01\x00\x00\x00\x00\xda\x00\x00\x00f\xdd'b'\x00\x05N\xb1{x\x01\xcc\xfe\x1cw\x01\x01!\x98o\x04\x00x\xa6\x02\x18\xc4\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\x01\x00\x02\x00\x02\x00NF\x95\x18'b'\x00\x05N\xb1{x\x020\xfe\x1cx\x01\x01 \xddo\x04\x00\xa7\xee7>\x15\xee\x01?:\x91\xd9\xbf-WZ<\xbdH\xa6<\xb6Q\xd1\xbc\x1b\n'b'\x00\x05N\xb1{x\x02\x88\xfe\x1cy\x01\x01\x1e\x05p\x04\x00~\xaa\xfb\xbc\xb2\x94\x91\xbcd\x06I@&\x0f\xb7\xbbzNk\xbbN\xc5K<\x0f\x1f'b'\x00\x05N\xb1{x\x02\xdc\xfe\x18z\x01\x01\xb2\xaa\x13/\xbdw\x14.\xbc%\xa5G\xc0\xd73*D\x80\xa6\x02\x18\xc4\xe7\xb8\xfd\xe0S'b'\x00\x05N\xb1{x\x03$\xfe\x03{\x01\x01Ms\x00\x04\xb5\xf5'b"\x00\x05N\xb1{yVw\xfe%\x9c\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x86\xbe"b'\x00\x05N\xb1{yn\x0c\xfe\x1c|\x01\x01\xa3P\x19#:K\xf6\xce\xba\xc1ho9\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xa6n<\xa94\xe3;\x82Z'b'\x00\x05N\xb1{ynl\xfe\x03}\x01\x01\xa5\xc5\x14\x00\x83\t'b'\x00\x05N\xb1{yn\xc0\xfe\x0c~\x01\x01\x02x\xda\xbd{\xb1N\x05\x00\x1ap\x04\x00\x8c\r'b'\x00\x05N\xb1{yo\x14\xfe\x16\x7f\x01\x01\x88x\xa6\x02\x18\xc5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd3\xae'b'\x00\x05N\xb1{yoh\xfe\x16\x80\x01\x01\xc1\x99\x94g\x00\x00\x00\x00?\x03\x02\x80'b'\x00\x05N\xb1{yo\xb8\xfe\x15\x81\x01\x01$\xab\xd0V\x11N\x06\xe7\x05\xef\x055\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00G\xd7'b'\x00\x05N\xb1{yp\x08\xfe\x16\x82\x01\x01#Vp\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6&'b'\x00\x05N\xb1{y\x97\xcf\xfe5\x9d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01w\x08'b'\x00\x05N\xb1{y\xf3\x87\xfe!\x9e\xff\x00L\xbe\xf83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00=\xe6'b'\x00\x05N\xb1{z\xf70\xfe\x12\x83\x01\x01\xfc|p\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8b\x07'b'\x00\x05N\xb1{z\xf7\xa8\xfe\t\x84\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x030\xd0'b'\x00\x05N\xb1{z\xf8\x0c\xfe\x03\x85\x01\x01/\xff\x00\x00\x95\x99'b'\x00\x05N\xb1{{\x0ch\xfe\x1a\x86\x01\x01\x1b\x83\xbeW\x11\x00\x00\x00\x00\xf7\xff\x19\x00U\xfc\xe7\xff6\x00\xfa\xff\xf9\xfe\xfe\xffz\x019\xe7'b'\x00\x05N\xb1{{\x0c\xd8\xfe\x16\x87\x01\x01t\x93p\x04\x00\xf2\xff\x12\x00S\xfc\xe2\xff8\x00\xfe\xff\xfb\xfeg\xff\x13\x02e\x00'b"\x00\x05N\xb1{{\r<\xfe\x16\x88\x01\x01\x81\x93p\x04\x00\xf3\xff'\x00X\xfc\xec\xff7\x00\xf8\xff\x81\x00K\x00k\x02\xf8\t"b'\x00\x05N\xb1{{\r\xc8\xfe\x0e\x89\x01\x01\x1d\x93p\x04\x00i\x93iD\n\xd7]\xben\x10\xb6,'b'\x00\x05N\xb1{{\x0eP\xfe\x0e\x8a\x01\x01\x89\x93p\x04\x00\x98\xd8iD\n\xd7\xe7=\xb7\x15U+'b'\x00\x05N\xb1{{\x0f \xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00G\x01\xc0:(\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x03\xb4'b'\x00\x05N\xb1{{\x0f\xb8\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf'b'\x00\x05N\xb1{{\x10H\xfe\x04\x8d\x01\x01\x98\x00\x00\x80\x8a\xe36'b'\x00\x05N\xb1{{\x10\x98\xfe\x03\x8e\x01\x01Ms\x00\x00/F'b'\x00\x05N\xb1{{\x11\x1c\xfe\x02\x8f\x01\x01*\x00\x00un'b'\x00\x05N\xb1{{\x11|\xfe\x1e\x90\x01\x01\x18\x00\xf7V\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xc6\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x84x'b'\x00\x05N\xb1{{\x11\xd0\xfe\x1a\x91\x01\x01>=\n\xf7\xbf\xcc\xccL\xbf\xebA}\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xee\x85'b'\x00\x05N\xb1{{\x12\x1c\xfe\x08\x92\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00y\xc6'b'\x00\x05N\xb1{{\x12p\xfe\x14\x93\x01\x01J\xebQ\xb8=\xebQ\xb8=\\\x8f\x02@\x8f\xc2u\xbd\xb3\x003\x00f"'b'\x00\x05N\xb1{{\xcd\xc7\xfe5\x9f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf2\xea'b'\x00\x05N\xb1{{\xf8g\xfe!\xa0\xff\x00L\xbe\xf83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc4r'b'\x00\x05N\xb1{|xP\xfe\x1c\x94\x01\x01!`p\x04\x00z\xa6\x02\x18\xc6\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\x02\x00\x01\x00\xf7\xff\x0fF\x0e|'b'\x00\x05N\xb1{|x\xe8\xfe\x1c\x95\x01\x01 \xe3p\x04\x00m\x9fO>\x8c\xe5\x04?Z\xc2\xdb\xbfZ\x9d\xe4<\xb8\xa90=\x8d\x8b\x8b;p\xf2\xfe=\x00\x00\x00\x00?\x03\x86\x90'b'\x00\x05N\xb1{||<\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97'b'\x00\x05N\xb1{}\x9e\xeb\xfe5\xa1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaa#'b'\x00\x05N\xb1{}\xc8\xb7\xfe!\xa2\xff\x00L\xa4\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd1\xbd'b'\x00\x05N\xb1{~\x03\xdc\xfe\x15\x9e\x01\x01$\xbb\xcdZ\x11U\x066\x06@\x06K\x06\x00\x00\x00\x00\x00\x00\x00\x00\x004\x8c'b'\x00\x05N\xb1{~\x04P\xfe\x16\x9f\x01\x01#[q\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x86\xc2'b"\x00\x05N\xb1{~\x04\xb0\xfe\x1a\xa0\x01\x01\x1b\xf8i[\x11\x00\x00\x00\x00\xf8\xff'\x00\xe3\xfb/\x00\xf4\xff\x05\x00\xfd\xfe\xfa\xffx\x01\x97\xf9"b'\x00\x05N\xb1{~\x05\x08\xfe\x16\xa1\x01\x01t\x83q\x04\x00\xf4\xff7\x00\xe2\xfb9\x00\xe7\xff\x1c\x00\xfd\xfeP\xff\r\x02\x0bG'b'\x00\x05N\xb1{~\x05p\xfe\x16\xa2\x01\x01\x81\x83q\x04\x00\xee\xff-\x00\xe5\xfbI\x00\xc1\xff)\x00\x81\x00R\x00q\x02o='b'\x00\x05N\xb1{~\x05\xf8\xfe\x0e\xa3\x01\x01\x1d\x83q\x04\x00\xa9\x94iD\n\xd7I\xbeo\x10B\xc4'b'\x00\x05N\xb1{~\x06\x80\xfe\x0e\xa4\x01\x01\x89\x83q\x04\x00\xcf\xd9iD)\\\x07>\xb8\x15\xc7Q'b'\x00\x05N\xb1{~\x07\x18\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xc0:\x7f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xe6\xb2'b'\x00\x05N\xb1{~\x07\xa8\xfe\x06\xa6\x01\x01}\xc5\x14\x00\x00\x03\x00k:'b'\x00\x05N\xb1{~\x08(\xfe\x04\xa7\x01\x01\x98\x00\x00\x80\x8a\xea%'b'\x00\x05N\xb1{~\x08\xa0\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca'b'\x00\x05N\xb1{~\t<\xfe\x1e\xa9\x01\x01\x18(\x08Z\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc7\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\nC'b'\x00\x05N\xb1{~\t\xd0\xfe\x1a\xaa\x01\x01>{\xee\xd7\xbf\xf8\xbf\xbe\xbf\xa4p\t\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd5\r'b'\x00\x05N\xb1{~\nP\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01'b'\x00\x05N\xb1{~\n\xbc\xfe\x03\xac\x01\x01Ms\x00\x00\xb0\xfb'b'\x00\x05N\xb1{~\xffG\xfe\t\xa3\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xfe\x7f'b'\x00\x05N\xb1{\x7f\x87/\xfe5\xa4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfb\x1b'b'\x00\x05N\xb1{\x7f\x9dc\xfe!\xa5\xff\x00L\xa4\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9a\xf1'b'\x00\x05N\xb1{\x7f\xb2\xcc\xfe\x14\xad\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\x01@\n\xd7#\xbd\xb3\x005\x00\xc6\r'b'\x00\x05N\xb1{\x7f\xb3\x88\xfe\x1c\xae\x01\x01!)q\x04\x00|\xa6\x02\x18\xc7\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\x00\x00\xff\xff\xfd\xff;F3^'b'\x00\x05N\xb1{\x7f\xb4\x0c\xfe\x1c\xaf\x01\x01 \xe7q\x04\x00s\x16i>W\xe5\x06?_U\xda\xbf\xee\xcc\x1f\xba\xf4\x0f\x81\xbcC\xd1\x08=ga'b'\x00\x05N\xb1{\x81\x0f`\xfe\x1c\xb0\x01\x01\x1e\x10r\x04\x00\x04K\xb7\xbc\x03\xec\x0f\xbd~\xe8H@>\x03\x12\xbc[\xdf&\xbd\\\x1d\x9a<\xffE'b'\x00\x05N\xb1{\x81\x0f\xe4\xfe\x18\xb1\x01\x01\xb2\xcd\x89\x05\xbda\x98\xe7\xbcj\xd2G\xc0\x00 *D\x86\xa6\x02\x18\xc9\xe7\xb8\xfdu6'b'\x00\x05N\xb1{\x81\x10@\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90'b'\x00\x05N\xb1{\x81\x10\xf0\xfe\x1c\xb3\x01\x01\xa3G\x18#:Dy\xd0\xba;\xaci9\x00\x00\x00\x00\x00\x00\x00\x00\xba\x7fw\xb9\x15\x82K'b'\x00\x05N\xb1{\x83`(\xfe\x1f\xbf\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1d\x01\xca:\x0b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ox\xb9'b'\x00\x05N\xb1{\x83`x\xfe\x06\xc0\x01\x01}\xc5\x14\x00\x00\x03\x00\x93\xe0'b'\x00\x05N\xb1{\x83`\xd0\xfe\x04\xc1\x01\x01\x98\x00\x00\x80\x8a\xaf\x90'b'\x00\x05N\xb1{\x83a \xfe\x02\xc2\x01\x01*\x00\x00<\x87'b'\x00\x05N\xb1{\x83at\xfe\x1e\xc3\x01\x01\x18h\x15]\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xc9\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\x82\xb8'b'\x00\x05N\xb1{\x83a\xc4\xfe\x1a\xc4\x01\x01>l\x89\xfc\xbf\xd6\xf1\x97\xbf\xe1z\xa8\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x05\x11'b'\x00\x05N\xb1{\x83b\x0c\xfe\x08\xc5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xe7'b'\x00\x05N\xb1{\x83b\\\xfe\x14\xc6\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\x01@\x00\x00\x00\x00\xb3\x002\x00\xd6O'b'\x00\x05N\xb1{\x83cG\xfe!\xa9\xff\x00L\xf6\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x03\xb4'b'\x00\x05N\xb1{\x84\x17(\xfe\x1c\xc7\x01\x01!\xbar\x04\x00}\xa6\x02\x18\xc7\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xfb\xff\xfd\xff\x00\x00AF\\\x9a'b'\x00\x05N\xb1{\x84\x17\xcc\xfe\x1c\xc8\x01\x01 \xedr\x04\x00\xd7\xc4r>\x83\x9f\x07?t\xbc\xda\xbf\xe0\xd0h\xbd*\xbe\x17\xbd\x010\xb09\xa5q'b'\x00\x05N\xb1{\x84\x188\xfe\x03\xc9\x01\x01Ms\x00\x00\xd0\xbf'b'\x00\x05N\xb1{\x84A\x90\xfe\x03\xca\x01\x01Ms\x00\x00\x005'b'\x00\x05N\xb1{\x84BP\xfe\x1c\xcb\x01\x01\x1e\x15s\x04\x00\xc8>\n\xbd\xcb\xf5\xf5\xbc/\xdfH@H"\xb6\xbd\xc8\xb5\x94=\x9f\x8d\x8a\xbc4\n'b'\x00\x05N\xb1{\x84B\xb0\xfe\x18\xcc\x01\x01\xb2\x9e42\xbd\xb3\xb8\xc4\xbc\xc3\xdaG\xc0\x00 *D\x87\xa6\x02\x18\xcb\xe7\xb8\xfd\x1d*'b'\x00\x05N\xb1{\x84C\x0c\xfe\x1c\xcd\x01\x01\xa3\xa8\xf0":\x1aA\xd1\xba\xb34g9\x00\x00\x00\x00\x00\x00\x00\x00[\x9bf<\x81\xc5\xc6;\xecp'b'\x00\x05N\xb1{\x84CT\xfe\x03\xce\x01\x01\xa5\xc5\x14\x009\xa5'b'\x00\x05N\xb1{\x84C\xa0\xfe\x0c\xcf\x01\x01\x02p\xbd\xc9{\xb1N\x05\x00)s\x04\x00\xc7|'b'\x00\x05N\xb1{\x84C\xf8\xfe\x16\xd0\x01\x01\x88}\xa6\x02\x18\xc7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x16t'b'\x00\x05N\xb1{\x84DH\xfe\x12\xd1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xcc\x87'b'\x00\x05N\xb1{\x84D\xb8\xfe\x16\xd2\x01\x01\xc1\x93\x7f\x95\x00\x00\x00\x00?\x03\x16\xfb'b'\x00\x05N\xb1{\x85.k\xfe5\xaa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01B\xa6'b'\x00\x05N\xb1{\x85r\x13\xfe!\xab\xff\x00L.\xf43C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x83p'b'\x00\x05N\xb1{\x85\xb8\xb0\xfe\x1a\xd4\x01\x01\x1b\x13\xc7b\x11\x00\x00\x00\x00\x00\x00\x0e\x00.\xfc\xd0\xff\x1c\x00\xeb\xff\x01\xff\xfc\xff|\x016-'b"\x00\x05N\xb1{\x85\xb9T\xfe\x16\xd5\x01\x01tfs\x04\x00\x06\x00\x0e\x00'\xfc\xde\xff\x13\x00\xf7\xff\x00\xffZ\xff\x13\x02L\x1c"b'\x00\x05N\xb1{\x85\xb9\xd0\xfe\x16\xd6\x01\x01\x81fs\x04\x00\xff\xff"\x00+\xfc\xf0\xff\x13\x00\x00\x00\x93\x00S\x00z\x02\xf5\x1a'b'\x00\x05N\xb1{\x85\xba@\xfe\x0e\xd7\x01\x01\x1dfs\x04\x00{\x95iDR\xb8<\xbep\x10\x83\xd2'b'\x00\x05N\xb1{\x85\xba\xb0\xfe\x0e\xd8\x01\x01\x89fs\x04\x00\xb4\xd9iD\x14\xae\x05>\xba\x15\xa91'b'\x00\x05N\xb1{\x85\xbb$\xfe\x1f\xd9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\xca:;\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x18\x16'b'\x00\x05N\xb1{\x85\xbb\x98\xfe\x06\xda\x01\x01}\xab\x14\x00\x00\x03\x00\xfa\xa4'b'\x00\x05N\xb1{\x85\xbc\x04\xfe\x04\xdb\x01\x01\x98\x00\x00\x80\x8a\x0b\x8b'b'\x00\x05N\xb1{\x85\xbc`\xfe\x02\xdc\x01\x01*\x00\x00\xd4\xb4'b'\x00\x05N\xb1{\x85\xbc\xd0\xfe\x1e\xdd\x01\x01\x18\x90&`\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xcb\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x04\x00-K\x03\x0cgu'b'\x00\x05N\xb1{\x85\xbd@\xfe\x1a\xde\x01\x01>=\xef\x07\xc0;\x84&\xbf\xd7C\xa0\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x83\x9b'b'\x00\x05N\xb1{\x85\xbd\x9c\xfe\x08\xdf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Y\x9b'b'\x00\x05N\xb1{\x85\xbe\x04\xfe\x15\xe0\x01\x01$\xb9\x14c\x11Y\x06.\x06/\x065\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93G'b'\x00\x05N\xb1{\x85\xbeh\xfe\x16\xe1\x01\x01#zs\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00-\xe0'b'\x00\x05N\xb1{\x85\xbe\xc4\xfe\x03\xe2\x01\x01Ms\x00\x00L\xae'b'\x00\x05N\xb1{\x87Q\xdb\xfe5\xac\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdc\x89'b'\x00\x05N\xb1{\x87\x8ew\xfe!\xad\xff\x00L.\xf43C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x00\x96'b'\x00\x05N\xb1{\x88\xdbT\xfe\t\x07\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x007?'b'\x00\x05N\xb1{\x88\xdb\xd0\xfe\x14\xe3\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\x01@\x00\x00\x00\x00\xb3\x005\x00$Y'b'\x00\x05N\xb1{\x88\xdc0\xfe\x1c\xe4\x01\x01!\x84s\x04\x00}\xa6\x02\x18\xc7\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\xf8\xff\xfe\xff\x00\x008F\xaf\xff'b'\x00\x05N\xb1{\x88\xdc\xb0\xfe\x1c\xe5\x01\x01 \xf2s\x04\x00O\xd7q>0-\x08?Cv\xd9\xbf\x00\x8c\xae\xbd\x00\x00\x00\x00?\x03,\xc0'b'\x00\x05N\xb1{\x89\x1c,\xfe\x1a\xed\x01\x01\x1b\x1bsf\x11\x00\x00\x00\x00\xf9\xff-\x00\xf7\xfb\xfa\xffk\x00\xe2\xff\x00\xff\xf9\xffx\x01\xd3u'b'\x00\x05N\xb1{\x89\x1c\x94\xfe\x16\xee\x01\x01tVt\x04\x00\x04\x00(\x00\xf9\xfb\t\x00g\x00\xfa\xff\xfc\xfeS\xff\r\x02\xd3\xd4'b'\x00\x05N\xb1{\x89\x1d\x00\xfe\x16\xef\x01\x01\x81Vt\x04\x00\xf5\xff \x00\xf0\xfb\xea\xff\x84\x00\xfa\xff\x82\x00P\x00j\x02\x1f\x0f'b'\x00\x05N\xb1{\x89\x1d`\xfe\x0e\xf0\x01\x01\x1dVt\x04\x00\xcb\x94iD\x14\xaeG\xbep\x10\x8a\xef'b'\x00\x05N\xb1{\x89\x1d\xc0\xfe\x0e\xf1\x01\x01\x89Vt\x04\x00l\xdaiD33\x11>\xb9\x15\xbe9'b'\x00\x05N\xb1{\x89\x1e0\xfe\x1f\xf2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xca:\xf1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xd1/'b'\x00\x05N\xb1{\x89\x1e\x94\xfe\x06\xf3\x01\x01}\xc5\x14\x04\x00\x03\x00\xff\xa0'b'\x00\x05N\xb1{\x89K\x17\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Yk'b'\x00\x05N\xb1{\x89aW\xfe!\xaf\xff\x00L\xe4\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1a\x04'b"\x00\x05N\xb1{\x89\x8d\x0b\xfe%\xb0\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xf5\xed"b'\x00\x05N\xb1{\x8a+\x00\xfe\x04\xf4\x01\x01\x98\x00\x00\x80\x8a\x1a\xea'b'\x00\x05N\xb1{\x8a+h\xfe\x02\xf5\x01\x01*\x00\x00n\x96'b'\x00\x05N\xb1{\x8a+\xd0\xfe\x1e\xf6\x01\x01\x18\xe0Hf\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xcd\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c"2'b'\x00\x05N\xb1{\x8a,,\xfe\x1a\xf7\x01\x01>\xf4\x05\x01\xc0"\x07\x8d\xbe\xebQ\xdf\xba\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xbc*'b'\x00\x05N\xb1{\x8a,|\xfe\x08\xf8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xba6'b'\x00\x05N\xb1{\x8a,\xcc\xfe\x12\xf9\x01\x01\xfcit\x04\x004\x00\x01\x00ARMMASK\x00Wr\x87?'b'\x00\x05N\xb1{\x8a-,\xfe\t\xfa\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x039\x01'b'\x00\x05N\xb1{\x8a-\x80\xfe\x03\xfb\x01\x01Ms\x00\x007Y'b'\x00\x05N\xb1{\x8aN8\xfe\x15\xfc\x01\x01$s\x11g\x11`\x06\xe0\x05\xc6\x05>\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2D'b'\x00\x05N\xb1{\x8aN\x9c\xfe\x16\xfd\x01\x01#\x7ft\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4\xd7'b'\x00\x05N\xb1{\x8aN\xe8\xfe\x03\xfe\x01\x01Ms\x00\x00V\xce'b'\x00\x05N\xb1{\x8aOd\xfe\x03\xff\x01\x01/\xff\x00\x00?7'b"\x00\x05N\xb1{\x8a\xfd'\xfe5\xb1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf5\x0f"b"\x00\x05N\xb1{\x8b'o\xfe!\xb2\xff\x00L\xe4\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xef\x97"b'\x00\x05N\xb1{\x8c\xd5\xd3\xfe5\xb3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01p\xed'b'\x00\x05N\xb1{\x8c\xfd\x1b\xfe!\xb4\xff\x00L\xe4\xf63C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00lq'b'\x00\x05N\xb1{\x8e\x12(\xfe\x14\x00\x01\x01J\x8f\xc2u=\x8f\xc2u=\xaeG\x01@\x00\x00\x00\x00\xb3\x006\x00?\xd6'b'\x00\x05N\xb1{\x8e\x12\xc0\xfe\x1c\x01\x01\x01!Lt\x04\x00|\xa6\x02\x18\xc8\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\xfa\xff\xff\xff\x00\x00\xfbE%\xcc'b'\x00\x05N\xb1{\x8e\x13,\xfe\x1c\x02\x01\x01 \xf7t\x04\x00e\xebm>\xf1\xa8\t?N\xf1\xd7\xbf\x7f\xf4\x84\xbd\xfb\xff\xa2\xbc\\\xfd\xd3\xbbg\x95'b'\x00\x05N\xb1{\x8e\x13|\xfe\x03\x03\x01\x01Ms\x00\x00\x107'b"\x00\x05N\xb1{\x8e'\xd0\xfe\x1c\x04\x01\x01\x1e\x1fu\x04\x00\r\xb1%\xbd\xe2m\x0b;\xd1=G@\x9b&\xdf\xbc\xeb\xfd\xb8\xbc\xb3\x1b\xb8\xbe\x84%"b'\x00\x05N\xb1{\x8e(0\xfe\x18\x05\x01\x01\xb2\x1d\xc4L\xbd}\xe4\x12<\xf2\xc9H@\xc2\x15*D\x86\xa6\x02\x18\xcf\xe7\xb8\xfd\xbe\xf7'b'\x00\x05N\xb1{\x8e*\xa0\xfe\x1c\x06\x01\x01\xa3Pb":C\xdb\xd2\xba\xf1\x15c9\x00\x00\x00\x00\x00\x00\x00\x00Z7E\xb9\x15\xd9['b'\x00\x05N\xb1{\x8e/D\xfe\x1f\x10\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xca:\x12\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xf2\x18'b'\x00\x05N\xb1{\x8e/\xac\xfe\x06\x11\x01\x01}\xc2\x14\x00\x00\x03\x00A\\'b'\x00\x05N\xb1{\x8e0\x08\xfe\x04\x12\x01\x01\x98\x00\x00\x80\x8a\x88\x9b'b'\x00\x05N\xb1{\x8e0T\xfe\x02\x13\x01\x01*\x00\x00;\xec'b'\x00\x05N\xb1{\x8e0\xb8\xfe\x1e\x14\x01\x01\x18\x08Zi\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xcf\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xbe('b'\x00\x05N\xb1{\x8e1 \xfe\x1a\x15\x01\x01>H\xd3\x12\xc0\xbd\x7f[\xbf\xae\xc7\xf1<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe4\xb3'b'\x00\x05N\xb1{\x8e1|\xfe\x08\x16\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00o\x16'b'\x00\x05N\xb1{\x8e1\xf0\xfe\x15\x17\x01\x01$\xfe\nk\x11\xc4\x06h\x06\xd1\x05\xa4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00,\xf8'b'\x00\x05N\xb1{\x8e2L\xfe\x16\x18\x01\x01#\x83u\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00p\xac'b'\x00\x05N\xb1{\x8eH\xfb\xfe\t\xb5\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03D\xa7'b'\x00\x05N\xb1{\x8e\xe5c\xfe5\xb6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01!\xd5'b'\x00\x05N\xb1{\x8f\x0e\x8c\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ'b'\x00\x05N\xb1{\x8f\x0f8\xfe\x14\x1a\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xd7\xa3\x00@\x8f\xc2\xf5<\xb2\x005\x00\xfd\x1d'b'\x00\x05N\xb1{\x8f6_\xfe!\xb7\xff\x00L\xe7\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00z\xbd'b'\x00\x05N\xb1{\x90Zt\xfe\x1c\x1b\x01\x01!\xdeu\x04\x00}\xa6\x02\x18\xc9\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\xfc\xff\xff\xff\x03\x00\xdbE\xdfH'b'\x00\x05N\xb1{\x90[\x00\xfe\x1c\x1c\x01\x01 \xfdu\x04\x00\x1a0s>F\xd0\x0c?\xb2\x95\xd7\xbfr\x9aJ\xbd\xd9\xec\x97\xbc\xdeW\x1f\xbdG\x8e'b'\x00\x05N\xb1{\x90[P\xfe\x03\x1d\x01\x01Ms\x00\x00e\\'b'\x00\x05N\xb1{\x90\\\x04\xfe\x1c\x1e\x01\x01\x1e$v\x04\x00v{\xcb\xbc$\xd1\x08\xbc\x92\xe6G@\xf8\xdc\xa4\xbd\xb3e2>&c\x9f=\x0cp'b'\x00\x05N\xb1{\x90\\\\\xfe\x18\x1f\x01\x01\xb2\xe3 \t\xbd5_\x7f\xbb#\xf0H\xc0\x8f"*D\x86\xa6\x02\x18\xd0\xe7\xb8\xfd\x1a\xce'b'\x00\x05N\xb1{\x90\\\xb4\xfe\x1a \x01\x01\x1b\xde\xcdm\x11\x00\x00\x00\x00\xea\xff&\x00\x17\xfc\x9d\xff\x7f\x00$\x00\xff\xfe\xf8\xffx\x01\xde\xdf'b'\x00\x05N\xb1{\x90]\x14\xfe\x16!\x01\x01t8v\x04\x00\xf2\xff\x1a\x00\x19\xfc\x93\xff\x8d\x003\x00\xfb\xfeT\xff\n\x02S\xbd'b'\x00\x05N\xb1{\x90]l\xfe\x16"\x01\x01\x818v\x04\x00\xf0\xff&\x00\x1d\xfcE\xff\xb9\x00;\x00~\x00T\x00u\x02\xdc6'b'\x00\x05N\xb1{\x90]\xc0\xfe\x0e#\x01\x01\x1d8v\x04\x00L\x95iD\x99\x99?\xbep\x10}\xce'b'\x00\x05N\xb1{\x90^\x10\xfe\x0e$\x01\x01\x898v\x04\x00&\xdbiD\xcd\xcc\x1c>\xba\x15v\xc0'b'\x00\x05N\xb1{\x90^p\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x04\x01\xcb:\x12\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xb8\xf2'b'\x00\x05N\xb1{\x90^\xc8\xfe\x06&\x01\x01}\xc5\x14\x00\x00\x03\x00p\xa8'b"\x00\x05N\xb1{\x90_\x1c\xfe\x04'\x01\x01\x98\x00\x00\x80\x8a=\xe1"b'\x00\x05N\xb1{\x90_d\xfe\x02(\x01\x01*\x00\x00\xf3L'b'\x00\x05N\xb1{\x90_\xc0\xfe\x1e)\x01\x01\x180kl\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xd0\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\xe8\xcc'b'\x00\x05N\xb1{\x90`\x18\xfe\x1a*\x01\x01>\xfc\xf2\n\xc0\x94\xcf\xba>\xf5H\xc9<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf2\xf1'b'\x00\x05N\xb1{\x90`d\xfe\x08+\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00n\xc7'b'\x00\x05N\xb1{\x90`\xb8\xfe\x1c,\x01\x01\xa3\xd4\xed!:\x00\xb9\xd3\xba>qa9\x00\x00\x00\x00\x00\x00\x00\x00+\x8a4<\xc4\n\xdf;\xf5\xa7'b'\x00\x05N\xb1{\x90a\x08\xfe\x03-\x01\x01\xa5\xc2\x14\x00+`'b'\x00\x05N\xb1{\x90aP\xfe\x0c.\x01\x01\x02p\xf2\xd5{\xb1N\x05\x00Lv\x04\x00\x98\xbc'b'\x00\x05N\xb1{\x90a\x9c\xfe\x16/\x01\x01\x88}\xa6\x02\x18\xca\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00]u'b"\x00\x05N\xb1{\x90a\xec\xfe\x160\x01\x01\xc1\x89A\x04<\xc4\rE=\x92'K;\xe6&\xf2=\x00\x00\x00\x00?\x03\xdd{"b'\x00\x05N\xb1{\x90\xf1o\xfe5\xb8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x98h'b'\x00\x05N\xb1{\x90\xf2_\xfe!\xb9\xff\x00L \xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\\9'b'\x00\x05N\xb1{\x92\xa0{\xfe5\xba\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1d\x8a'b'\x00\x05N\xb1{\x92\xa1w\xfe!\xbb\xff\x00L \xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xddd'b'\x00\x05N\xb1{\x93np\xfe\x151\x01\x01$=\to\x11%\x06+\x06\x1b\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x0f'b'\x00\x05N\xb1{\x93o\x04\xfe\x162\x01\x01#\x89v\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Q\x15'b'\x00\x05N\xb1{\x93\x84,\xfe\x143\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xd7\xa3\x00@\n\xd7#<\xb3\x007\x00\x0b\xdd'b'\x00\x05N\xb1{\x93\x84\x9c\xfe\x1c4\x01\x01!\xa7v\x04\x00}\xa6\x02\x18\xcb\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x00\x00\x00\x00\x02\x00\nF\xd0~'b'\x00\x05N\xb1{\x93\x85\x0c\xfe\x1c5\x01\x01 \x01w\x04\x00\xb0\x89z>\r\xd4\x0f?\xa8\xb2\xd7\xbf\x1f\xbdT;1j\xce:Y@\xec\xbc\x8d\x9a'b'\x00\x05N\xb1{\x94s\xef\xfe5\xbc\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x83\xa5'b'\x00\x05N\xb1{\x94\x89\xf7\xfe!\xbd\xff\x00L \xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00^\x82'b'\x00\x05N\xb1{\x94\xeel\xfe\x036\x01\x01Ms\x00\x00\xf9M'b'\x00\x05N\xb1{\x94\xefh\xfe\x037\x01\x01Ms\x00\x00F\xcc'b'\x00\x05N\xb1{\x94\xf0\x10\xfe\x1a8\x01\x01\x1b\x81}q\x11\x00\x00\x00\x00\xeb\xff\n\x00\xf1\xfb\x0f\x00\xd2\xff \x00\xf4\xfe\xf7\xffn\x01\xdb\xf6'b'\x00\x05N\xb1{\x94\xf0x\xfe\x169\x01\x01t*w\x04\x00\xf2\xff\x11\x00\xff\xfb\x00\x00\xed\xff\x17\x00\xef\xfeH\xff\xff\x01\xcdP'b'\x00\x05N\xb1{\x94\xf0\xec\xfe\x16:\x01\x01\x81*w\x04\x00\xf0\xff\x1c\x00\xea\xfb\x07\x00\xb0\xff \x00s\x001\x00f\x02h\xdf'b'\x00\x05N\xb1{\x94\xf1P\xfe\x0e;\x01\x01\x1d*w\x04\x00f\x97iD\x00\x00\x1e\xbeq\x10\xeb\xc8'b'\x00\x05N\xb1{\x94\xf1\xb0\xfe\x0e<\x01\x01\x89*w\x04\x00\x8f\xdaiD)\\\x13>\xbb\x15x\xc5'b'\x00\x05N\xb1{\x94\xf2(\xfe*=\x01\x01\x96s\xe7f\xbc\xfcl\x01\x00q\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x1bK'b'\x00\x05N\xb1{\x94\xf2\x98\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xcb:\xe6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OF\x18'b'\x00\x05N\xb1{\x94\xf3\x04\xfe\x06?\x01\x01}\xc8\x14\x00\x00\x03\x00A\x1e'b'\x00\x05N\xb1{\x94\xf3d\xfe\x04@\x01\x01\x98\x00\x00\x80\x8a\x85\x19'b'\x00\x05N\xb1{\x94\xf3\xbc\xfe\x02A\x01\x01*\x00\x00O\xa9'b'\x00\x05N\xb1{\x94\xf4,\xfe\x1eB\x01\x01\x18X|o\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xd2\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xcal'b'\x00\x05N\xb1{\x94\xf4\x94\xfe\x1aC\x01\x01>@\xd5\xfb\xbf\xb7%\x92=)\xfc\xf3<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00Y\x93'b'\x00\x05N\xb1{\x94\xf4\xe0\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$'b'\x00\x05N\xb1{\x94\xf50\xfe\x1cE\x01\x01\x1e>w\x04\x00E\x05C\xbd/M\xd0;\xf6eH@\xa5Vr;cft\xbd<\x8d\xdf\xe2\xf7\x14?ds\xd7\xbfWz\x0c=\xa6\xe1\xdd<\xc0,\x9b\xbd\xf2\x98'b'\x00\x05N\xb1{\x98\xbe\xc0\xfe\x1aS\x01\x01\x1b\x8a*u\x11\x00\x00\x00\x00\xf3\xff \x00,\xfcq\x00\xe0\xff\x07\x00\xf6\xfe\xfa\xffv\x01\x8f\xc6'b'\x00\x05N\xb1{\x98\xbfD\xfe\x16T\x01\x01t\x1bx\x04\x00\xf0\xff\x1f\x00.\xfcb\x00\xed\xff\xf5\xff\xf5\xfeY\xff\t\x02x('b'\x00\x05N\xb1{\x98\xbf\xdc\xfe\x16U\x01\x01\x81\x1bx\x04\x00\xf3\xff%\x00\r\xfck\x00\xd2\xff\x04\x00\x8c\x00H\x00x\x02\xd0\xa2'b'\x00\x05N\xb1{\x98\xc0|\xfe\x0eV\x01\x01\x1d\x1bx\x04\x00\x80\x97iDff\x1c\xber\x10pV'b'\x00\x05N\xb1{\x98\xc1\x08\xfe\x0eW\x01\x01\x89\x1bx\x04\x00\x0f\xdbiD)\\\x1b>\xbc\x15s\x92'b'\x00\x05N\xb1{\x98\xc1\x80\xfe\x1fX\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0f\x01\xcb:\x8c\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OF\n'b'\x00\x05N\xb1{\x98\xc1\xe8\xfe\x06Y\x01\x01}\xc5\x14\x00\x00\x03\x00\xf6\xea'b'\x00\x05N\xb1{\x98\xc2\x8c\xfe\x04Z\x01\x01\x98\x00\x00\x80\x8a!\x02'b'\x00\x05N\xb1{\x98\xc2\xe4\xfe\x02[\x01\x01*\x00\x00\xd1\xf5'b'\x00\x05N\xb1{\x98\xc3@\xfe\x1e\\\x01\x01\x18\x80\x8dr\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xd4\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c?+'b'\x00\x05N\xb1{\x98\xc3\x94\xfe\x1a]\x01\x01>\xd7\xde\xc3\xbf\xabH\xe8\xbe\\\xef\xfa<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x0f\xdc'b'\x00\x05N\xb1{\x98\xc3\xe0\xfe\x08^\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00VX'b'\x00\x05N\xb1{\x98\xc44\xfe\x1c_\x01\x01\x1eCx\x04\x00\xc8\xaa\xd7\xbcX<\x19\xbc\x05LH@+\xb2\xb4=\xe6\x0c:\xbcA\x17\x0e\xbb\xec\r'b'\x00\x05N\xb1{\x98\xc4\x88\xfe\x18`\x01\x01\xb2"<\x14\xbd\x9cL{\xbb\x12{H\xc0\x14\x0e*D\x87\xa6\x02\x18\xd4\xe7\xb8\xfd\xcc\xc0'b'\x00\x05N\xb1{\x99\xd2`\xfe\x12a\x01\x01\xfcUx\x04\x004\x00\x01\x00ARMMASK\x00Wr\xc4:'b'\x00\x05N\xb1{\x99\xd2\xe8\xfe\tb\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03S\xbe'b'\x00\x05N\xb1{\x99\xd3P\xfe\x1cc\x01\x01\xa3\xd4\xf0 :Lg\xd5\xbah\x9d_9\x00\x00\x00\x00\x00\x00\x00\x00"\x17D=y\xd4\x82;(\x0c\t>\x00\x00\x00\x00?\x03>\xc4'b'\x00\x05N\xb1{\x99\xd4\xcc\xfe\x03h\x01\x01Ms\x00\x00}C'b'\x00\x05N\xb1{\x99\xe9\x18\xfe\x03i\x01\x01M\xbd\x00\x00YW'b'\x00\x05N\xb1{\x99\xe9\x88\xfe\x03j\x01\x01Ms\x00\x00\x12H'b'\x00\x05N\xb1{\x99\xfd\xd8\xfe\x15k\x01\x01$\x01\x02w\x11_\x06:\x06\xee\x05\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00d\xc5'b'\x00\x05N\xb1{\x99\xfe0\xfe\x16l\x01\x01#\x93x\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4i'b"\x00\x05N\xb1{\x99\xff'\xfe%\xc3\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x17m"b'\x00\x05N\xb1{\x9a:\x1f\xfe5\xc4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x019\xf2'b'\x00\x05N\xb1{\x9adC\xfe!\xc5\xff\x00L\xaa\xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf6\x81'b'\x00\x05N\xb1{\x9b\n(\xfe\x03m\x01\x01/\xff\x00\x00\xca\xac'b'\x00\x05N\xb1{\x9b\x1f\x08\xfe\x14n\x01\x01J\n\xd7#<\n\xd7#<\xd7\xa3\x00@\x8f\xc2u=\xb3\x001\x00\x00y'b'\x00\x05N\xb1{\x9b\x1f\xa4\xfe\x03o\x01\x01Ms\x00\x00s\xdf'b'\x00\x05N\xb1{\x9b\\\x1c\xfe\x1ap\x01\x01\x1b\xb5\xd8x\x11\x00\x00\x00\x00\xff\xff\x1b\x00;\xfcy\x00Q\xff\x16\x00\xf9\xfe\xfe\xffu\x01\x15\xf9'b'\x00\x05N\xb1{\x9b\\\xa0\xfe\x16q\x01\x01t\x0cy\x04\x00\x06\x00\x1a\x00q\xfcy\x00h\xff\n\x00\xf7\xfeZ\xff\n\x02a\xfe'b'\x00\x05N\xb1{\x9b](\xfe\x16r\x01\x01\x81\x0cy\x04\x00\xf9\xff)\x00c\xfct\x00p\xff\x07\x00\x82\x00P\x00v\x02\xb0\xad'b'\x00\x05N\xb1{\x9b]\x98\xfe\x0es\x01\x01\x1d\x0cy\x04\x00{\x95iDR\xb8<\xbeq\x10\xca\xd0'b'\x00\x05N\xb1{\x9b^\x08\xfe\x0et\x01\x01\x89\x0cy\x04\x00\xf7\xdaiD\n\xd7\x19>\xbd\x15\x00\x08'b'\x00\x05N\xb1{\x9b^\x84\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\xd8:\xe4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x82\xcc'b'\x00\x05N\xb1{\x9b^\xf8\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14'b'\x00\x05N\xb1{\x9c\x1b3\xfe5\xc6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xbc\x10'b'\x00\x05N\xb1{\x9cW\xc7\xfe!\xc7\xff\x00L\xaa\xfa3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00w\xdc'b'\x00\x05N\xb1{\x9d\xa7\x8b\xfe\t\xc8\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03s\xf5'b'\x00\x05N\xb1{\x9d\xe4,\xfe\x04w\x01\x01\x98\x00\x00\x80\x8a\xca\xf8'b'\x00\x05N\xb1{\x9d\xe4\x94\xfe\x02x\x01\x01*\x00\x00<>'b"\x00\x05N\xb1{\x9d\xe4\xf4\xfe\x1ey\x01\x01\x18\xd0\xafx\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xd6\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c'e"b'\x00\x05N\xb1{\x9d\xe5L\xfe\x1az\x01\x01>\x8f\xc25\xbf\xe1z\xb4\xbf\xcdP \xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x89\xe2'b'\x00\x05N\xb1{\x9d\xe5\x94\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe'b"\x00\x05N\xb1{\x9d\xe5\xfc\xfe\x1c|\x01\x01!\x02y\x04\x00\x81\xa6\x02\x18\xcf\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x03\x00\x00\x00\x03\x00\x14F8'"b'\x00\x05N\xb1{\x9d\xe6h\xfe\x1c}\x01\x01 !y\x04\x00hJ\x93>J\x98\x19?nY\xd8\xbf\x9a\xc6 =\xa7\xcb%\xbbUX\x14\xbd+L'b'\x00\x05N\xb1{\x9d\xe6\xc4\xfe\x1c~\x01\x01\x1eIy\x04\x00p\x15\xfb\xbb\x89\x02\xf4\xbcLgH@\x8a[\xfe=/\x96\x11\xbe\xb0\x8b\x86;\x03\xee'b'\x00\x05N\xb1{\x9d\xe7\x1c\xfe\x18\x7f\x01\x01\xb2Y\xe8\x8e\xbcx\xc6\xc0\xbc~eH\xc0R\x18*D\x88\xa6\x02\x18\xd6\xe7\xb8\xfd\x1eb'b'\x00\x05N\xb1{\x9d\xe7x\xfe\x1c\x80\x01\x01\xa3\xa7e :OF\xd6\xba\x0b<_9\x00\x00\x00\x00\x00\x00\x00\x00?\xcfE<\x0f\xfe\x86;\x7f\x01'b'\x00\x05N\xb1{\x9d\xe7\xc4\xfe\x03\x81\x01\x01\xa5\xc8\x14\x00\xf5\xfa'b'\x00\x05N\xb1{\x9d\xe8\x14\xfe\x0c\x82\x01\x01\x028\xdd\xe1{\xb1N\x05\x00]y\x04\x00\x8c\x07'b'\x00\x05N\xb1{\x9d\xe8l\xfe\x16\x83\x01\x01\x88\x82\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcf\x18'b'\x00\x05N\xb1{\x9d\xe8\xc0\xfe\x16\x84\x01\x01\xc1\x8c.\x01\xb8\x1e\xa5\xbf\xaeG\xa1\xbf)\xf5\x17\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00^!'b'\x00\x05N\xb1{\x9f\xf7\xcc\xfe\x08\x95\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00:\xde'b'\x00\x05N\xb1{\x9f\xf8 \xfe\x1c\x96\x01\x01!\xcby\x04\x00\x83\xa6\x02\x18\xcf\xe7\xb8\xfd`c\n\x00\xd0\x07\x00\x00\x00\x00\xf8\xff\xf2\xff\x1dF\x1f\xa3'b"\x00\x05N\xb1{\x9f\xf8\x80\xfe\x1c\x97\x01\x01 %z\x04\x00\x03\x94\x9b>='\x1a? \x83\xd6\xbf\x15gt\xbbJ\x83\xb0\xbd\x9d\x94\x17>\x0fo"b'\x00\x05N\xb1{\xa1\x9f\xcb\xfe5\xcd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01T\x95'b'\x00\x05N\xb1{\xa1\xa0\x9b\xfe!\xce\xff\x00L\xee\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00~Q'b'\x00\x05N\xb1{\xa3^;\xfe5\xcf\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd1w'b'\x00\x05N\xb1{\xa3\x88\xcb\xfe!\xd0\xff\x00L\xee\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc25'b'\x00\x05N\xb1{\xa3\x89|\xfe\x1c\x98\x01\x01\x1eNz\x04\x00\x85B\x17\xbcW\x01\xc9\xbc\xd5xH@\x0c\xb2g\xbd\x15\xaeq=\x07\x1e\xc1\xbc\xff\x14'b'\x00\x05N\xb1{\xa3\x89\xfc\xfe\x18\x99\x01\x01\xb2R\x00\x8c\xbc\x8fB\xa3\xbc\x99SH\xc0\x99)*D\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\xbcS'b'\x00\x05N\xb1{\xa3\x8aX\xfe\x03\x9a\x01\x01Ms\x00\x00\x89\x0b'b'\x00\x05N\xb1{\xa3\x8a\xfc\xfe\x1c\x9b\x01\x01\xa3\x80\xd2\x1f:9*\xd7\xba\x101_9\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x9bc\x00\x00\x00\x00?\x03m!'b'\x00\x05N\xb1{\xa3\x8c\xdc\xfe\x15\xa0\x01\x01$\xc6\xfa~\x11[\x06\xd6\x05\xb1\x05%\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x81'b"\x00\x05N\xb1{\xa3\x8dD\xfe\x16\xa1\x01\x01#\x9ez\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K'"b'\x00\x05N\xb1{\xa3\x8e\xcc\xfe\x1a\xa2\x01\x01\x1b\xd05\x80\x11\x00\x00\x00\x00\xf7\xff%\x00E\xfc\x98\xff!\x00\xfa\xff\x02\xff\x03\x00w\x01\xa6\x88'b'\x00\x05N\xb1{\xa3\x8f(\xfe\x16\xa3\x01\x01t\xefz\x04\x00\xf9\xff\x17\x00=\xfc\x9c\xff*\x00\xfb\xff\xfd\xfe^\xff\r\x02\xa7\t'b'\x00\x05N\xb1{\xa3\x8f\x80\xfe\x16\xa4\x01\x01\x81\xefz\x04\x00\xf0\xff \x00>\xfc\xc0\xff-\x00\xec\xff\x91\x00Y\x00{\x02B\xaf'b'\x00\x05N\xb1{\xa3\x8f\xcc\xfe\x0e\xa5\x01\x01\x1d\xefz\x04\x00\xaa\x95iD\x8f\xc29\xber\x10>\xe9'b'\x00\x05N\xb1{\xa3\x90\x14\xfe\x0e\xa6\x01\x01\x89\xefz\x04\x00\x97\xd8iD\x14\xae\xe7=\xbd\x15\x12\x97'b'\x00\x05N\xb1{\xa3\x90l\xfe\x1f\xa7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xd8:N\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ok\xcc'b'\x00\x05N\xb1{\xa3\x90\xbc\xfe\x06\xa8\x01\x01}\xc5\x14\x00\x00\x03\x00\xb6s'b'\x00\x05N\xb1{\xa3\x91\x04\xfe\x04\xa9\x01\x01\x98\x00\x00\x80\x8a?\xfe'b'\x00\x05N\xb1{\xa3\x91H\xfe\x02\xaa\x01\x01*\x00\x00U\xfd'b'\x00\x05N\xb1{\xa3\x91\x98\xfe\x1e\xab\x01\x01\x18 \xd2~\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\x86j\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\xc8\xb5'b'\x00\x05N\xb1{\xa3\x91\xec\xfe\x1a\xac\x01\x01>{\x14\x0e\xc0\x8f\xc2u\xbf{\xd2i\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc5:'b'\x00\x05N\xb1{\xa3\x924\xfe\x08\xad\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00"\x1c'b'\x00\x05N\xb1{\xa3\x92\x80\xfe\x14\xae\x01\x01J)\\\x8f=)\\\x8f=G\xe1\xfa?\xaeGa\xbe\xb3\x002\x00iG'b'\x00\x05N\xb1{\xa4b(\xfe\x1c\xaf\x01\x01!\x94z\x04\x00\x83\xa6\x02\x18\xcd\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfe\xff\xf3\xff\xe8\xff$Fpa'b'\x00\x05N\xb1{\xa4b\xa4\xfe\x1c\xb0\x01\x01 +{\x04\x00\xc2\x98\x9d>\x80\xed\x14?\xa8x\xd0\xbf\x92S\xc1\xbc\xc2\xd4\x0e\xbe\x9d&}>\x0f\xdf'b'\x00\x05N\xb1{\xa4b\xf4\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a'b'\x00\x05N\xb1{\xa4wD\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90'b'\x00\x05N\xb1{\xa4w\xcc\xfe\x1c\xb3\x01\x01\x1eS{\x04\x00e\xf1\x1a\xbd\xcdb\x86\xbc\x7f\x99H@F\xf5\x14\xbeQVg<\xe9\xcd\xe3<\x9ab'b'\x00\x05N\xb1{\xa4x$\xfe\x18\xb4\x01\x01\xb2\x15K9\xbd\\:4\xbc`8H\xc0\xd7#*D\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\xa8\xb3'b'\x00\x05N\xb1{\xa4xx\xfe\x1c\xb5\x01\x01\xa3\x04>\x1f:\xb7\x17\xd8\xba\xb2g_9\x00\x00\x00\x00\x00\x00\x00\x00#\xd0Y\x00\x00\x00\x00?\x03\xff\xf4'b'\x00\x05N\xb1{\xa4zt\xfe\t\t\n\x00m\x0f\x00\x00\x00\x00\xd9\x00\x00\x00\xb5\xde'b"\x00\x05N\xb1{\xa5O'\xfe5\xd1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x017\xe6"b'\x00\x05N\xb1{\xa5\xa1\x13\xfe!\xd2\xff\x00L\xe2\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00K\xa3'b'\x00\x05N\xb1{\xa5\xf2\xc8\xfe\x15\xbc\x01\x01$T\xf8\x82\x11H\x064\x06\xfa\x05\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xdd'b'\x00\x05N\xb1{\xa5\xf3@\xfe\x16\xbd\x01\x01#\xa3{\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00j\xfd'b'\x00\x05N\xb1{\xa5\xf3\x90\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\x00\x05N\xb1{\xa7y\x97\xfe5\xd3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb2\x04'b'\x00\x05N\xb1{\xa7z\x8b\xfe!\xd4\xff\x00L\xe2\xf53C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc8E'b'\x00\x05N\xb1{\xa8\xa1$\xfe\x1a\xbf\x01\x01\x1bL\xe6\x83\x11\x00\x00\x00\x00\xf7\xff\x1f\x00-\xfc\x11\x00\x00\x00 \x00\xfb\xfe\xf7\xffu\x01\xa8\x96'b'\x00\x05N\xb1{\xa8\xa1\xa0\xfe\x16\xc0\x01\x01t\xe0{\x04\x00\xfa\xff$\x005\xfc\xf6\xff\x1c\x00\x19\x00\xfa\xfeW\xff\r\x02O\xce'b'\x00\x05N\xb1{\xa8\xa1\xfc\xfe\x16\xc1\x01\x01\x81\xe0{\x04\x00\xf8\xff%\x004\xfc\n\x00\x02\x00\x17\x00\x89\x003\x00\x86\x02\xf2i'b'\x00\x05N\xb1{\xa8\xa2L\xfe\x0e\xc2\x01\x01\x1d\xe0{\x04\x00\x1d\x94iD\\\x8fR\xbeq\x10\x169'b'\x00\x05N\xb1{\xa8\xa2\x98\xfe\x0e\xc3\x01\x01\x89\xe0{\x04\x00\xaf\xd8iDR\xb8\xea=\xbc\x15iJ'b'\x00\x05N\xb1{\xa8\xa2\xf4\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00(\x01\xd8:\x9c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xda?'b'\x00\x05N\xb1{\xa8\xa3D\xfe\x06\xc5\x01\x01}\xc2\x14\x00\x00\x03\x00O,'b'\x00\x05N\xb1{\xa8\xa3\x90\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy'b'\x00\x05N\xb1{\xa8\xa3\xd4\xfe\x02\xc7\x01\x01*\x00\x00\x9fw'b'\x00\x05N\xb1{\xa8\xa4(\xfe\x1e\xc8\x01\x01\x18H\xe3\x81\x11\x00\x00\x00\x00\x8a\xa6\x02\x18\xd5\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\t\x00-K\x03\x0ci:'b'\x00\x05N\xb1{\xa8\xa4|\xfe\x1a\xc9\x01\x01>\x8f\xc2%\xc0{\x14n\xbf\xdc\x1f\x95\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xcb\x04'b'\x00\x05N\xb1{\xa8\xa4\xc4\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2'b'\x00\x05N\xb1{\xa8\xa5\x14\xfe\x14\xcb\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=33\xf3?\x99\x99\x99\xbe\xb3\x002\x008&'b'\x00\x05N\xb1{\xa8\xa5h\xfe\x1c\xcc\x01\x01!\x12|\x04\x00\x83\xa6\x02\x18\xca\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xfe\xff\xf5\xff\xe1\xff1F\xbeY'b'\x00\x05N\xb1{\xa8\xa5\xc8\xfe\x1c\xcd\x01\x01 0|\x04\x00`.\x9f>\xfd=\x0f?@Y\xc8\xbf\xc2\xc8\xbd\xbc\x04\r\xef\xbd\xd7\x85\xa0>\xdak'b'\x00\x05N\xb1{\xa8\xa6\x14\xfe\x12\xce\x01\x01\xfcB|\x04\x004\x00\x01\x00ARMMASK\x00Wri\xf6'b'\x00\x05N\xb1{\xa8\xa6h\xfe\t\xcf\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03H\xef'b'\x00\x05N\xb1{\xa9\x01\xdc\xfe\x1c\xd0\x01\x01\x1eX|\x04\x00)\xbbE\xbd$\x81:\xbc*\xd5H@\xfe\x88\x8f=u\xb1)\xbc,\x99\x8e=\x1ds'b"\x00\x05N\xb1{\xa9\x02\\\xfe\x18\xd1\x01\x01\xb2\xf1\xb4i\xbd\x1d\xed\xbc\xbb\x96\x03H\xc0\xae'*D\x8a\xa6\x02\x18\xd3\xe7\xb8\xfd\x93\xe0"b'\x00\x05N\xb1{\xa9\x02\xc4\xfe\x1c\xd2\x01\x01\xa3\x0b\x9f\x1e:X\t\xd9\xba\xdb\xf7_9\x00\x00\x00\x00\x00\x00\x00\x00e\xe4\x85<\xf5\x8d\xbc;\xf9f'b'\x00\x05N\xb1{\xa9\x03\x14\xfe\x03\xd3\x01\x01\xa5\xc5\x14\x00\x9cD'b'\x00\x05N\xb1{\xa9\x03h\xfe\x0c\xd4\x01\x01\x02\x18\xc4\xed{\xb1N\x05\x00m|\x04\x00s;'b'\x00\x05N\xb1{\xa9\x03\xc4\xfe\x16\xd5\x01\x01\x88\x83\xa6\x02\x18\xca\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00i\x85'b'\x00\x05N\xb1{\xa9\x04\x18\xfe\x16\xd6\x01\x01\xc1(\x89\xb8<\x1c\x8e\r=\xa8\xe3\xc6;\x81\xb4\x03>\x00\x00\x00\x00?\x03<\xbf'b'\x00\x05N\xb1{\xa9\x04d\xfe\x03\xd7\x01\x01Ms\x00\x00\xa5\xd4'b'\x00\x05N\xb1{\xa9Ng\xfe5\xd5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01,+'b'\x00\x05N\xb1{\xa9v\xc3\xfe!\xd6\xff\x00L\xbf\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x007r'b"\x00\x05N\xb1{\xaad'\xfe%\xd7\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xef\x8d"b'\x00\x05N\xb1{\xaa\x9b\x88\xfe\x15\xd8\x01\x01$\xf9\xf8\x86\x11G\x06\xf0\x05\r\x063\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6x'b'\x00\x05N\xb1{\xaa\x9b\xf8\xfe\x16\xd9\x01\x01#\xaa|\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc07'b'\x00\x05N\xb1{\xaa\x9cH\xfe\x03\xda\x01\x01Ms\x00\x00xn'b"\x00\x05N\xb1{\xaa\xb0\xd0\xfe\x1a\xdb\x01\x01\x1b\xff\x94\x87\x11\x00\x00\x00\x00\xfb\xff'\x006\xfc\x02\x00\xd8\xff\x07\x00\xfa\xfe\xf9\xffv\x01m\x98"b'\x00\x05N\xb1{\xaa\xb1@\xfe\x16\xdc\x01\x01t\xd2|\x04\x00\xfe\xff\x1e\x00;\xfc\x1d\x00\xd3\xff\x02\x00\xf8\xfe[\xff\x0f\x02\xf1\x81'b'\x00\x05N\xb1{\xaa\xb1\xe8\xfe\x16\xdd\x01\x01\x81\xd2|\x04\x00\xf7\xff3\x00M\xfc\xcf\xff\xe1\xff\xec\xffx\x00h\x00i\x02\xecZ'b'\x00\x05N\xb1{\xaa\xb2t\xfe\x0e\xde\x01\x01\x1d\xd2|\x04\x009\x95iD\xcd\xcc@\xbeq\x10f='b'\x00\x05N\xb1{\xaa\xb3,\xfe\x0e\xdf\x01\x01\x89\xd2|\x04\x00\x8f\xdaiD)\\\x13>\xbd\x15\xe2 'b'\x00\x05N\xb1{\xaa\xb3\x94\xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xd0:\x9c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x1e('b'\x00\x05N\xb1{\xaa\xb3\xec\xfe\x06\xe1\x01\x01}\xc5\x14\x00\x00\x03\x00\x88W'b'\x00\x05N\xb1{\xaa\xb4@\xfe\x04\xe2\x01\x01\x98\x00\x00\x80\x8a\x91\xb1'b'\x00\x05N\xb1{\xaa\xb4\x84\xfe\x02\xe3\x01\x01*\x00\x00j{'b'\x00\x05N\xb1{\xaa\xb4\xe0\xfe\x1e\xe4\x01\x01\x18P\xa6\x84\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xd0\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0c\xd2\x1a'b'\x00\x05N\xb1{\xaa\xb54\xfe\x1a\xe5\x01\x01>\x8f\xc2%\xc0\xc2\xf5h\xbf\x0f\xcd\xb0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00=b'b'\x00\x05N\xb1{\xaa\xb5\x80\xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\'b'\x00\x05N\xb1{\xaa\xb5\xc8\xfe\x03\xe7\x01\x01/\xff\x00\x00\xfbA'b'\x00\x05N\xb1{\xab^\xcb\xfe5\xd8\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Z\x81'b'\x00\x05N\xb1{\xabt\x0f\xfe!\xd9\xff\x00L\xbf\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00i@'b'\x00\x05N\xb1{\xad$\x1f\xfe5\xda\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdfc'b'\x00\x05N\xb1{\xadL\xdf\xfe\t\xda\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03p\xde'b'\x00\x05N\xb1{\xadM\xab\xfe!\xdb\xff\x00L\xbf\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe8\x1d'b'\x00\x05N\xb1{\xad\xc5\xc8\xfe\x14\xe8\x01\x01J\\\x8fB>\\\x8fB>p=\xea?\xebQ\xb8\xbe\xb3\x003\x00\x8c%'b'\x00\x05N\xb1{\xad\xc6H\xfe\x1c\xe9\x01\x01!\xf0|\x04\x00\x83\xa6\x02\x18\xc8\xe7\xb8\xfd\xa2b\n\x00\x12\x07\x00\x00\xff\xff\xf6\xff\xdc\xffSF\xcb\x9d'b'\x00\x05N\xb1{\xad\xc6\xd0\xfe\x1c\xea\x01\x01 6}\x04\x00\xf9G\x9f>\x83\xbc\t?k5\xbe\xbf\x80\x95\x88\xbc\x9e\xd1\xe0\xbdp\x0b\xbc>\x13J'b'\x00\x05N\xb1{\xad\xc7D\xfe\x1c\xeb\x01\x01\x1e^}\x04\x00K<\x1a\xbd\xb4\xd3\x98\xbc\x8e\tI\xc0\x98\xb4\xd5;\xf8\xa03;\x16\xfa,\xbcE\x91'b'\x00\x05N\xb1{\xad\xc7\xb4\xfe\x18\xec\x01\x01\xb2\xcf\xa58\xbdm8`\xbc\x81\xc2G\xc0)\x1c*D\x89\xa6\x02\x18\xd0\xe7\xb8\xfd\x9d\x86'b'\x00\x05N\xb1{\xad\xc9\x14\xfe\x1c\xed\x01\x01\xa3_\x08\x1e:\xc8\x01\xda\xba9\xc1`9\x00\x00\x00\x00\x00\x00\x00\x00\x99\xee\xb3<|\x15\x90;\x95\xee'b'\x00\x05N\xb1{\xad\xc9|\xfe\x03\xee\x01\x01\xa5\xc2\x14\x00\xe8D'b'\x00\x05N\xb1{\xad\xc9\xe0\xfe\x0c\xef\x01\x01\x02\xa0\xbf\xf1{\xb1N\x05\x00s}\x04\x00p('b'\x00\x05N\xb1{\xad\xcaX\xfe\x16\xf0\x01\x01\x88\x83\xa6\x02\x18\xc7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\xfb'b"\x00\x05N\xb1{\xad\xca\xac\xfe\x16\xf1\x01\x01\xc1\xfa'\xaf<\xcb\x00\xe9\xbf\x15s:'b'\x00\x05N\xb1{\xad\xcd0\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x00\xd0:\xdd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Opf'b'\x00\x05N\xb1{\xad\xcd|\xfe\x06\xfa\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4d'b'\x00\x05N\xb1{\xad\xcd\xc8\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|'b'\x00\x05N\xb1{\xad\xce\x08\xfe\x02\xfc\x01\x01*\x00\x00W\xd7'b'\x00\x05N\xb1{\xad\xce\\\xfe\x1e\xfd\x01\x01\x18\x88\xcc\x8a\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xcd\xe7\xb8\xfd\xb4i\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0c\xa7\\'b'\x00\x05N\xb1{\xaf\x13/\xfe5\xdd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0b\xb9'b'\x00\x05N\xb1{\xaf\x144\xfe\x1a\xfe\x01\x01>\xa4p=\xc0G\xe1z\xbfx\\\xc4\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf3\xbe'b'\x00\x05N\xb1{\xaf\x14\x98\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.'b'\x00\x05N\xb1{\xaf\x14\xf8\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd'b'\x00\x05N\xb1{\xaf*\xe3\xfe!\xde\xff\x00L\xd4\xf53\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00}@'b'\x00\x05N\xb1{\xaf+\xa8\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b'\x00\x05N\xb1{\xaf,,\xfe\x14\x02\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=R\xb8\xde?\xcc\xcc\xcc\xbe\xb3\x003\x00uR'b'\x00\x05N\xb1{\xb0\xb4<\xfe\x1c\x03\x01\x01!\xa5}\x04\x00\x84\xa6\x02\x18\xc5\xe7\xb8\xfdHb\n\x00\xb8\x06\x00\x00\xff\xff\xf6\xff\xd8\xffMF\x19\x8e'b'\x00\x05N\xb1{\xb0\xb4\xbc\xfe\x1c\x04\x01\x01 <~\x04\x00W\x17\xa1>\xea\xa0\x02?Qd\xb2\xbf\xad"7\xbcH\x1f\xdb\xbd\xa1\xab\xcd>\xb9\xcc'b'\x00\x05N\xb1{\xb0\xb5\x0c\xfe\x03\x05\x01\x01Ms\x00\x04\xc1M'b'\x00\x05N\xb1{\xb0\xb5\xac\xfe\x1c\x06\x01\x01\x1ed~\x04\x00\xac]M\xbd\xef\xbdm\xbc\x9b\xfcH@\n\xee\xbd\xbc\xddE\x01:C\xbf\x13\xbd\x92\x93'b'\x00\x05N\xb1{\xb0\xb6\x04\xfe\x18\x07\x01\x01\xb2\xf2\xa8m\xbd\xb2\x0f\x17\xbcx\xd4G\xc0\xb8\x1e*D\x89\xa6\x02\x18\xcd\xe7\xb8\xfd$\xe3'b'\x00\x05N\xb1{\xb0\xb6X\xfe\x1c\x08\x01\x01\xa3=\x7f\x1d:J\xfb\xda\xba2\xaba9\x00\x00\x00\x00\x00\x00\x00\x00\xb5@\xbe<\xcew\x82;C\xc1'b'\x00\x05N\xb1{\xb0\xb6\xa0\xfe\x03\t\x01\x01\xa5\xc5\x14\x00$\x97'b'\x00\x05N\xb1{\xb0\xb6\xe8\xfe\x0c\n\x01\x01\x02p\xaf\xf5{\xb1N\x05\x00x~\x04\x00\x82\xdb'b'\x00\x05N\xb1{\xb0\xb78\xfe\x16\x0b\x01\x01\x88\x84\xa6\x02\x18\xc4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00F\xd7'b'\x00\x05N\xb1{\xb0\xb7\x88\xfe\x16\x0c\x01\x01\xc1"\xcbm<\x1c\x9b\xcf\x00\x00\x00\x00?\x03\x1bd'b'\x00\x05N\xb1{\xb0\xe4\x0b\xfe5\xdf\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8e['b"\x00\x05N\xb1{\xb0\xe5'\xfe!\xe0\xff\x00LL\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00}\x06"b'\x00\x05N\xb1{\xb2\xb3\xeb\xfe5\xe1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd6\x92'b'\x00\x05N\xb1{\xb2\xc8\xe3\xfe!\xe2\xff\x00LL\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfc['b'\x00\x05N\xb1{\xb3\x16P\xfe\x1a\r\x01\x01\x1b\x94\xf2\x8e\x11\x00\x00\x00\x00\xfc\xff\x1e\x00$\xfc\x17\x00\xf3\xff\x03\x00\xf9\xfe\xf8\xffu\x01]\xdc'b'\x00\x05N\xb1{\xb3\x16\xec\xfe\x16\x0e\x01\x01t\xb4~\x04\x00\x08\x00!\x00.\xfc\n\x00\xf9\xff\x05\x00\xf7\xfeV\xff\x0c\x02\n\x82'b'\x00\x05N\xb1{\xb3\x17\\\xfe\x16\x0f\x01\x01\x81\xb4~\x04\x00\xfd\xff/\x00,\xfc\x15\x00\xe9\xff\x03\x00\x88\x00;\x00\x80\x02\xa9:'b'\x00\x05N\xb1{\xb3\x17\xbc\xfe\x0e\x10\x01\x01\x1d\xb4~\x04\x00\x0b\x98iD\x14\xae\x13\xbes\x10\x96M'b'\x00\x05N\xb1{\xb3\x18 \xfe\x0e\x11\x01\x01\x89\xb4~\x04\x00\x99\xdaiD\x00\x00\x14>\xbe\x15\xd2r'b'\x00\x05N\xb1{\xb3\x18\x98\xfe\x1f\x12\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xcc\x00\xd0:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oj\x03'b'\x00\x05N\xb1{\xb3\x19\x04\xfe\x06\x13\x01\x01}\xc5\x14\x00\x00\x03\x00{0'b'\x00\x05N\xb1{\xb3\x19h\xfe\x04\x14\x01\x01\x98\x00\x00\x80\x8a\x97?'b'\x00\x05N\xb1{\xb3\x19\xc0\xfe\x02\x15\x01\x01*\x00\x00\xf6\xb4'b'\x00\x05N\xb1{\xb3\x1a0\xfe\x1e\x16\x01\x01\x18\xd0+\x8e\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xc9\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00-K\x03\x0c[O'b'\x00\x05N\xb1{\xb3\x1a\x9c\xfe\x1a\x17\x01\x01>\x8f\xc2E\xc0\\\x8f\x82\xbf\xa9\xae\xd3\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xff\xc0'b'\x00\x05N\xb1{\xb3\x1a\xf8\xfe\x08\x18\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe9&'b'\x00\x05N\xb1{\xb3\x1b\\\xfe\x15\x19\x01\x01$\xba@\x8f\x11N\x06\xdb\x05\xeb\x05C\x06\x00\x00\x00\x00\x00\x00\x00\x00\x003\xff'b'\x00\x05N\xb1{\xb3\x1b\xc0\xfe\x16\x1a\x01\x01#\xc8~\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbe\r'b'\x00\x05N\xb1{\xb3\xc24\xfe\x14\x1b\x01\x01J\\\x8fB>\\\x8fB>\xd7\xa3\xd0?\xf5(\xdc\xbe\xb3\x003\x00UH'b'\x00\x05N\xb1{\xb3\xc2\xac\xfe\x1c\x1c\x01\x01!\x82~\x04\x00\x84\xa6\x02\x18\xc2\xe7\xb8\xfd\xe4a\n\x00T\x06\x00\x00\xfe\xff\xf8\xff\xd6\xffJFc\x8d'b'\x00\x05N\xb1{\xb3\xc3\x18\xfe\x1c\x1d\x01\x01 A\x7f\x04\x00\xb7\xcf\x9f>\x82\x7f\xf7><\x1f\xa5\xbfMi\xc0\xbc\x03\xc1\xb1\xbd\xb8\x94\xda>\xf7\x86'b'\x00\x05N\xb1{\xb3\xc3\x80\xfe\x03\x1e\x01\x01Ms\x00\x00\xb5\xd6'b'\x00\x05N\xb1{\xb3\xc4\x14\xfe\x03\x1f\x01\x01Ms\x00\x00\nW'b'\x00\x05N\xb1{\xb3\xc4\x9c\xfe\t\n\n\x00m\x1e\x00\x00\x00\x00\xdd\x00\x00\x00\xee\x8e'b'\x00\x05N\xb1{\xb4kO\xfe5\xe3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Sp'b'\x00\x05N\xb1{\xb4\x81\xdb\xfe!\xe4\xff\x00LL\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x7f\xbd'b'\x00\x05N\xb1{\xb5Q(\xfe\x1c \x01\x01\x1ei\x7f\x04\x00-\x8fP\xbd\x1c\x10s\xbc\xee\x06I@E\x1b\x89<\xf6i\x08\xbd\xc2\x00|<\x96\x8d'b'\x00\x05N\xb1{\xb5Q\xa8\xfe\x18!\x01\x01\xb2/fq\xbd\x07+\x1e\xbcY\xd2G\xc0\xd7\x03*D\x88\xa6\x02\x18\xc5\xe7\xb8\xfdIS'b'\x00\x05N\xb1{\xb5R\x10\xfe\x1c"\x01\x01\xa3#\x10\x1d:\xf6\xfa\xdb\xba\xaa\xb1b9\x00\x00\x00\x00\x00\x00\x00\x00d\xc9\xc0<\xce\xef\x8a;\x8c`'b'\x00\x05N\xb1{\xb5Rd\xfe\x03#\x01\x01\xa5\xbb\x14\x00\x00\xf3'b'\x00\x05N\xb1{\xb5R\xb8\xfe\x0c$\x01\x01\x02\x10\xa7\xf9{\xb1N\x05\x00}\x7f\x04\x00\x17.'b'\x00\x05N\xb1{\xb5S\x18\xfe\x16%\x01\x01\x88\x83\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00,\xc2'b'\x00\x05N\xb1{\xb5St\xfe\x16&\x01\x01\xc1\xac\xdd\xde<\x15Q\x88<[\xd2c:\x18\x8d\xdb=\x00\x00\x00\x00?\x03|\xd7'b'\x00\x05N\xb1{\xb5S\xf0\xfe\x03(\x01\x01Ms\x00\x00\x8c&'b'\x00\x05N\xb1{\xb5yT\xfe\x1a)\x01\x01\x1b5\xa0\x92\x11\x00\x00\x00\x00\xff\xff\x10\x00\x15\xfc\x03\x00\xcd\xff\xed\xff\xfc\xfe\xf5\xffr\x01U\x9f'b"\x00\x05N\xb1{\xb5y\xc8\xfe\x16*\x01\x01t\xa5\x7f\x04\x00\x07\x00\x11\x00'\xfc\xfd\xff\xbe\xff\xfc\xff\xf8\xfeX\xff\x0c\x02r\x9e"b'\x00\x05N\xb1{\xb5z(\xfe\x16+\x01\x01\x81\xa5\x7f\x04\x00\x00\x00\x1e\x00&\xfc\xe7\xff\xa2\xff\xfe\xffu\x00U\x00[\x02\xddu'b'\x00\x05N\xb1{\xb5z\x80\xfe\x0e,\x01\x01\x1d\xa5\x7f\x04\x00\x99\x98iD\xcd\xcc\n\xbes\x10\xf7-'b'\x00\x05N\xb1{\xb5z\xd4\xfe\x0e-\x01\x01\x89\xa5\x7f\x04\x00\x0c\xdciD33+>\xbf\x15\xd7\xd4'b'\x00\x05N\xb1{\xb5{8\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00"\x01\xc8:\xcd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O}\xf5'b'\x00\x05N\xb1{\xb5{\x94\xfe\x06/\x01\x01}\xc5\x14\x00\x00\x03\x00KA'b'\x00\x05N\xb1{\xb5|$\xfe\x040\x01\x01\x98\x00\x00\x80\x8aK\xf7'b'\x00\x05N\xb1{\xb5|\xa4\xfe\x021\x01\x01*\x00\x00\x03\xb8'b'\x00\x05N\xb1{\xb5}L\xfe\x1e2\x01\x01\x18\xf8<\x91\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xc5\xe7\xb8\xfd\x00i\n\x00F\x00\xff\xff\x13\x00-K\x03\x0cD\xad'b'\x00\x05N\xb1{\xb5}\xe4\xfe\x1a3\x01\x01>\xf5(L\xc0R\xb8^\xbf\xf8\xcc\xde\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x94\xe0'b'\x00\x05N\xb1{\xb5~\\\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8'b'\x00\x05N\xb1{\xb6Ps\xfe5\xe5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcd_'b'\x00\x05N\xb1{\xb6h\xf3\xfe!\xe6\xff\x00L\xcc\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb1\xb8'b'\x00\x05N\xb1{\xb8\x12g\xfe5\xe7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01H\xbd'b"\x00\x05N\xb1{\xb8JG\xfe!\xe8\xff\x00L\xcc\xef3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00' "b'\x00\x05N\xb1{\xb8f\xf8\xfe\x155\x01\x01$2?\x93\x11\x1e\x06&\x06(\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00UG'b'\x00\x05N\xb1{\xb8g\xac\xfe\x166\x01\x01#\xce\x7f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9fR'b'\x00\x05N\xb1{\xb8h\\\xfe\x147\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>\n\xd7\xc3?\xaeG\xe1\xbe\xb3\x003\x00C\xe3'b'\x00\x05N\xb1{\xb8i\x00\xfe\x128\x01\x01\xfc0\x80\x04\x004\x00\x01\x00ARMMASK\x00Wr\xed\x05'b'\x00\x05N\xb1{\xb8i\xac\xfe\t9\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\xfcW'b'\x00\x05N\xb1{\xb8k\xb0\xfe\x1c:\x01\x01!\x00\x80\x04\x00\x83\xa6\x02\x18\xbf\xe7\xb8\xfdva\n\x00\xe6\x05\x00\x00\xfb\xff\xfc\xff\xd4\xff6F\x877'b'\x00\x05N\xb1{\xb8l|\xfe\x1c;\x01\x01 G\x80\x04\x00E:\x9b>\xc4\xa0\xea>WD\x97\xbf\xe3Un\xbd\x16\xceD\xbd\xf6\x1f\xe5>Ar'b'\x00\x05N\xb1{\xb8m\x1c\xfe\x1c<\x01\x01\x1eo\x80\x04\x00 \x9bk\xbd\xbc\xff\x9b\xbc\x9c\xc1H@\xd2\xf7\xc2\xbcL\xd7#=\xd6-H\xbc\x156'b'\x00\x05N\xb1{\xb8m|\xfe\x18=\x01\x01\xb2\xa9-\x87\xbd^6m\xbc\x9e\x10H\xc0\xd7\x03*D\x87\xa6\x02\x18\xc3\xe7\xb8\xfd\xe4\xf5'b'\x00\x05N\xb1{\xb8m\xdc\xfe\x1c>\x01\x01\xa3\x19\xbf\x1c:\xbd\x00\xdd\xbah\xbcc9\x00\x00\x00\x00\x00\x00\x00\x00\x15c\xd3<\xdd;\xa6;\xde|'b'\x00\x05N\xb1{\xb8n(\xfe\x03?\x01\x01\xa5\xc5\x14\x00\x1dg'b'\x00\x05N\xb1{\xb8o$\xfe\x0c@\x01\x01\x02\xe8\xe8\xfd{\xb1N\x05\x00\x82\x80\x04\x00O\x8a'b'\x00\x05N\xb1{\xb8o\xa4\xfe\x16A\x01\x01\x88\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\x06'b'\x00\x05N\xb1{\xb8p\x0c\xfe\x16B\x01\x01\xc1\xb6kl\x00\x00\x00\x00?\x03y\r'b'\x00\x05N\xb1{\xb9\xe7\xf4\xfe\x1aC\x01\x01\x1b\xdaP\x96\x11\x00\x00\x00\x00\x03\x00\x19\x00\x1e\xfc\xd4\xff \x00\x04\x00\xfe\xfe\xf3\xffv\x01\xac\x88'b'\x00\x05N\xb1{\xb9\xe8|\xfe\x16D\x01\x01t\x97\x80\x04\x00\xfb\xff\x19\x00C\xfc\xd7\xff \x00\xf6\xff\xfa\xfeU\xff\x0f\x02\x8b\xcd'b'\x00\x05N\xb1{\xb9\xe8\xdc\xfe\x16E\x01\x01\x81\x97\x80\x04\x00\xfb\xff\x1e\x00!\xfc\xe3\xff\x1b\x00\xe3\xff\x83\x00U\x00k\x02 t'b'\x00\x05N\xb1{\xb9\xe94\xfe\x0eF\x01\x01\x1d\x97\x80\x04\x00F\x99iD\x00\x00\x00\xbes\x10@\xe4'b'\x00\x05N\xb1{\xb9\xe9\x84\xfe\x0eG\x01\x01\x89\x97\x80\x04\x00\xd7\xddiD\n\xd7G>\xc0\x15\x1eO'b'\x00\x05N\xb1{\xb9\xe9\xe8\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x009\x01\xc8:\xd8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oy\\'b'\x00\x05N\xb1{\xb9\xea@\xfe\x06I\x01\x01}\xc2\x14\x00\x00\x03\x00\xab\\'b'\x00\x05N\xb1{\xb9\xea\x94\xfe\x04J\x01\x01\x98\x00\x00\x80\x8a\xb5\xfd'b'\x00\x05N\xb1{\xb9\xea\xe0\xfe\x03K\x01\x01Ms\x00\x00]\x7f'b'\x00\x05N\xb1{\xb9\xeb`\xfe\x03L\x01\x01Ms\x00\x00S\xe3'b'\x00\x05N\xb1{\xb9\xeb\xd8\xfe\x02M\x01\x01*\x00\x00\xd5\x18'b'\x00\x05N\xb1{\xb9\xec<\xfe\x1eN\x01\x01\x18\x00\x00\x94\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xc3\xe7\xb8\xfd\xb0h\n\x00F\x00\xff\xff\r\x00-K\x03\x0c\x93@'b'\x00\x05N\xb1{\xb9\xec\x90\xfe\x1aO\x01\x01>\xc2\xf58\xc0\xcc\xcc\xcc\xbe\xdc\xdf\xe7\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00D\x96'b'\x00\x05N\xb1{\xb9\xec\xd8\xfe\x08P\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd0h'b'\x00\x05N\xb1{\xb9\xed(\xfe\x15Q\x01\x01$\xd3:\x97\x11Y\x06\x1a\x06\x13\x06*\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00V\xe0'b'\x00\x05N\xb1{\xb9\xedx\xfe\x16R\x01\x01#\xd3\x80\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00d@'b'\x00\x05N\xb1{\xba3\xc3\xfe5\xe9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf1\x00'b"\x00\x05N\xb1{\xba\x87'\xfe!\xea\xff\x00L\xb2\xea3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd6\xce"b"\x00\x05N\xb1{\xba\x9cK\xfe%\xea\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00Z\x06"b'\x00\x05N\xb1{\xbc\x1c\xa0\xfe\x14S\x01\x01J\x99\x99\x19>\x99\x99\x19>\xe1z\xb4?ff\xe6\xbe\xb3\x003\x00y\xf8'b'\x00\x05N\xb1{\xbc\x1d$\xfe\x03T\x01\x01Ms\x00\x00\x97\x95'b'\x00\x05N\xb1{\xbc4\x0c\xfe\x03U\x01\x01/\xff\x00\x00\xfel'b'\x00\x05N\xb1{\xbcH\xcf\xfe5\xec\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa08'b'\x00\x05N\xb1{\xbc\x85\xd8\xfe\x1cV\x01\x01!\xc9\x80\x04\x00\x81\xa6\x02\x18\xbd\xe7\xb8\xfd\x08a\n\x00x\x05\x00\x00\xf9\xff\x00\x00\xd3\xff/F=Y'b'\x00\x05N\xb1{\xbc\x86T\xfe\x1cW\x01\x01 K\x81\x04\x00\xb4\x91\x91>\x11o\xe5>\xe8\xbe\x88\xbf\xe5\xfc\x90\xbd\xca\xc9\xab;\xb1F\xea>%\xd7'b'\x00\x05N\xb1{\xbc\x9co\xfe\t\xed\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\x9f\xdd'b'\x00\x05N\xb1{\xbc\xb2\xaf\xfe!\xee\xff\x00L\xb2\xea3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd4u'b'\x00\x05N\xb1{\xbd\x10$\xfe\x1cX\x01\x01\x1eu\x81\x04\x00\x03\xebI\xbd\xbe*\x93\xbb\xba\xafH@\x8bu\x1d>3\xb7\x0c=l\xec\xb7:\xb6\xcd'b'\x00\x05N\xb1{\xbd\x10\xc4\xfe\x18Y\x01\x01\xb2\xce\xcas\xbd\xb9k*:\xb3)H\xc0{\x04*D\x86\xa6\x02\x18\xc0\xe7\xb8\xfd\x14\xe9'b'\x00\x05N\xb1{\xbd\x11D\xfe\x1aZ\x01\x01\x1bY\xff\x99\x11\x00\x00\x00\x00\xf2\xff(\x004\xfc\x93\x00\x05\x00\xfe\xff\xf9\xfe\xf3\xffq\x01\xb9d'b'\x00\x05N\xb1{\xbd\x11\xb4\xfe\x16[\x01\x01t\x89\x81\x04\x00\xf9\xff%\x00:\xfc\x95\x00\x10\x00\x01\x00\xf6\xfeU\xff\x0c\x02~\x82'b'\x00\x05N\xb1{\xbd\x120\xfe\x16\\\x01\x01\x81\x89\x81\x04\x00\xf1\xff1\x00\x16\xfc\x91\x00\x03\x00\x01\x00t\x00]\x00]\x02\x99\x16'b'\x00\x05N\xb1{\xbd\x12\x90\xfe\x0e]\x01\x01\x1d\x89\x81\x04\x00\x81\x98iD\xebQ\x0c\xbet\x10\xa4\x92'b'\x00\x05N\xb1{\xbd\x12\xf0\xfe\x0e^\x01\x01\x89\x89\x81\x04\x00\xf0\xdbiD\xa4p)>\xc1\x15\x06\xe0'b'\x00\x05N\xb1{\xbd\x13d\xfe*_\x01\x01\x96s\xe7f\xbc\xfel\x01\x00t\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00U\x9a'b'\x00\x05N\xb1{\xbd\x13\xd0\xfe\x1f`\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01\xc8:\xa4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xdc}'b'\x00\x05N\xb1{\xbd\x148\xfe\x06a\x01\x01}\xbe\x14\x00\x00\x03\x00]\xa2'b'\x00\x05N\xb1{\xbd\x14\x9c\xfe\x04b\x01\x01\x98\x00\x00\x80\x8aFu'b'\x00\x05N\xb1{\xbd\x14\xe8\xfe\x02c\x01\x01*\x00\x00w\xfd'b'\x00\x05N\xb1{\xbd\x15@\xfe\x1ed\x01\x01\x188&\x9a\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xbf\xe7\xb8\xfd\x06h\n\x00F\x00\xff\xff\t\x00-K\x03\x0cK]'b'\x00\x05N\xb1{\xbd\x15\x9c\xfe\x1ae\x01\x01>\xd7\xa3 \xc0{\x14.\xbe\xd5\x8e\xf0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe4\x86'b'\x00\x05N\xb1{\xbd\x15\xe8\xfe\x08f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00N\x9a'b'\x00\x05N\xb1{\xbd\x16@\xfe\x1cg\x01\x01\xa3\xb0\x83\x1c:\xf5"\xde\xba\xe3\xf1d9\x00\x00\x00\x00\x00\x00\x00\x00L(\xe4>f\x0fu\xbf^\xd8\xe6\xbc\xc1w\xed'b'\x00\x05N\xb1{\xc0\x18\x80\xfe\x1as\x01\x01\x1b]\xae\x9d\x11\x00\x00\x00\x00\xfd\xff\x16\x00\x16\xfc\xdc\xff\xc5\xff\x10\x00\xf6\xfe\xf9\xffr\x01\x13n'b'\x00\x05N\xb1{\xc0\x18\xd8\xfe\x16t\x01\x01tz\x82\x04\x00\xee\xff\x1a\x00\r\xfc\xc4\xff\xcf\xff\x0c\x00\xf4\xfeV\xff\t\x02O\x0e'b'\x00\x05N\xb1{\xc0\x19,\xfe\x16u\x01\x01\x81z\x82\x04\x00\xf2\xff\x1e\x00\x04\xfc\xb4\xff\xea\xff\xfa\xff\x82\x00G\x00n\x02\xdb\xb6'b'\x00\x05N\xb1{\xc0\x19\x8c\xfe\x0ev\x01\x01\x1dz\x82\x04\x00\xde\x98iD\xe1z\x06\xbet\x10|\xd0'b'\x00\x05N\xb1{\xc0\x19\xf8\xfe\x0ew\x01\x01\x89z\x82\x04\x00l\xdbiD33!>\xc2\x15no'b'\x00\x05N\xb1{\xc0\x1ax\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdd\x00\xc8:\x0b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xbe\xae'b'\x00\x05N\xb1{\xc0\x1a\xf0\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08'b'\x00\x05N\xb1{\xc0\x1b\\\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5'b'\x00\x05N\xb1{\xc0\x1b\xc0\xfe\x02{\x01\x01*\x00\x00R\x96'b'\x00\x05N\xb1{\xc0oo\xfe5\xf1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x89\xbe'b'\x00\x05N\xb1{\xc0\xad\x9f\xfe!\xf2\xff\x00L\xae\xf13C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00(]'b'\x00\x05N\xb1{\xc1\x92\\\xfe\x1e|\x01\x01\x18`7\x9d\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc0\xe7\xb8\xfd\xa2g\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x07w'b'\x00\x05N\xb1{\xc1\x92\xd0\xfe\x1a}\x01\x01>\xaeG\x11\xc0\x14\xae\x07\xbf\x07\xe7\xf9\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00b\x8a'b'\x00\x05N\xb1{\xc1\x93 \xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\x00\x05N\xb1{\xc1\x93x\xfe\x1c\x7f\x01\x01\x1e\x8f\x82\x04\x00\xb3\xa6+\xbd\x0eD\x06\xbc-\x9aH@\x17\xe8\xa0\xbd\xa0C\xd1\xbc\x98\x06D9\xbe\x1a'b'\x00\x05N\xb1{\xc1\x93\xf8\xfe\x18\x80\x01\x01\xb2\xfb:N\xbd\xbb3#\xbb\xa2BH\xc0\x85\xfb)D\x84\xa6\x02\x18\xc0\xe7\xb8\xfd\x8c\xea'b'\x00\x05N\xb1{\xc1\x94h\xfe\x1c\x81\x01\x01\xa3\xf4`\x1c:.2\xdf\xba\xba\rf9\x00\x00\x00\x00\x00\x00\x00\x00\xaej\xb1<\xad3\xac;\xac\x9a'b'\x00\x05N\xb1{\xc1\x94\xc8\xfe\x03\x82\x01\x01\xa5\xc5\x14\x00\xaa\xfb'b'\x00\x05N\xb1{\xc1\x950\xfe\x0c\x83\x01\x01\x02\xf8\xdf\x05|\xb1N\x05\x00\xa3\x82\x04\x00\xdf\xde'b'\x00\x05N\xb1{\xc1\x95\xa0\xfe\x16\x84\x01\x01\x88\x80\xa6\x02\x18\xbd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x08\xe6'b'\x00\x05N\xb1{\xc1\x96 \xfe\x16\x85\x01\x01\xc1\xb8\xae\x86\xf5\xdb\xe8>RAV\xbf!\x0b\x90;\xf6nt=sV\xf8>\xb4\xbe'b'\x00\x05N\xb1{\xc4\xaf\xac\xfe\x1a\x8d\x01\x01\x1b\x86^\xa1\x11\x00\x00\x00\x00\xf9\xff$\x00*\xfcN\x00\x96\xff\xfa\xff\xf7\xfe\xf4\xffq\x01t\x10'b'\x00\x05N\xb1{\xc4\xb0\x00\xfe\x16\x8e\x01\x01tl\x83\x04\x00\xfb\xff*\x00)\xfcA\x00\xae\xff\x0e\x00\xf4\xfeV\xff\n\x02|k'b'\x00\x05N\xb1{\xc4\xb0X\xfe\x16\x8f\x01\x01\x81l\x83\x04\x00\xf5\xff\x1e\x00!\xfc,\x00\xb3\xff\x08\x00\x85\x00?\x00\x84\x02\xeb^'b'\x00\x05N\xb1{\xc4\xb0\xa4\xfe\x0e\x90\x01\x01\x1dl\x83\x04\x00\xf3\x9biDff\xaa\xbdt\x10\xb3\x94'b'\x00\x05N\xb1{\xc4\xb1\x08\xfe\x0e\x91\x01\x01\x89l\x83\x04\x00[\xdfiD{\x14`>\xc1\x15\xb8\xa6'b'\x00\x05N\xb1{\xc4\xb1|\xfe\x1f\x92\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xca\x00\xda:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xb8T'b'\x00\x05N\xb1{\xc4\xb1\xe8\xfe\x06\x93\x01\x01}\xc2\x14\x00\x00\x03\x00xe'b'\x00\x05N\xb1{\xc4\xb2H\xfe\x04\x94\x01\x01\x98\x00\x00\x80\x8a@\xfb'b'\x00\x05N\xb1{\xc4\xb2\x9c\xfe\x02\x95\x01\x01*\x00\x00\xeb2'b'\x00\x05N\xb1{\xc4\xb3\x1c\xfe\x1e\x96\x01\x01\x18\x88H\xa0\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xbf\xe7\xb8\xfd4g\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x06Q'b'\x00\x05N\xb1{\xc4\xb3\x88\xfe\x1a\x97\x01\x01>\x8f\xc2\xf5\xbf\xa3p}\xbf\x90\xdf\xfc\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xbfh'b'\x00\x05N\xb1{\xc4\xb3\xe4\xfe\x08\x98\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00K\xe0'b'\x00\x05N\xb1{\xc4\xb4L\xfe\x1c\x99\x01\x01\x1e\x94\x83\x04\x00\x022J\xbdF\x11Z\xbc\xe5\x06I@>X\xdc= \xa9\xcb\xbdA\x86\x95;A\x84'b'\x00\x05N\xb1{\xc4\xb4\xbc\xfe\x18\x9a\x01\x01\xb2\xbd/t\xbd\xad\xac\xcb\xbb\xe2\xd2G\xc0{\xe4)D\x85\xa6\x02\x18\xbf\xe7\xb8\xfd\xb9e'b'\x00\x05N\xb1{\xc4\xb5\x0c\xfe\x1c\x9b\x01\x01\xa3\xfcN\x1c:\xd47\xe0\xba\x8aWg9\x00\x00\x00\x00\x00\x00\x00\x00\x8a=\xd8\xa0\xfe\x15\xa3\x01\x01$\x155\xa3\x11.\x06\r\x06%\x06(\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xa7'b'\x00\x05N\xb1{\xc6>\xfc\xfe\x16\xa4\x01\x01#\xe4\x83\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc5\xdf'b'\x00\x05N\xb1{\xc6?x\xfe\x12\xa5\x01\x01\xfc\x1e\x84\x04\x004\x00\x01\x00ARMMASK\x00Wr\xa4\x13'b'\x00\x05N\xb1{\xc6?\xf0\xfe\t\xa6\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x11\x98'b"\x00\x05N\xb1{\xc6}'\xfe5\xf7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x17\x91"b'\x00\x05N\xb1{\xc6\xa7\x7f\xfe!\xf8\xff\x00L\xf1\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x86\xfe'b'\x00\x05N\xb1{\xc7\xb4\xac\xfe\x14\xa7\x01\x01J\n\xd7#=\n\xd7#=ff\x86?\x00\x00\x00\xbf\xb4\x004\x00\xf4A'b'\x00\x05N\xb1{\xc7\xb5 \xfe\x03\xa8\x01\x01Ms\x00\x00n\xed'b'\x00\x05N\xb1{\xc7\xb5\xc4\xfe\x1a\xa9\x01\x01\x1bb\x0b\xa5\x11\x00\x00\x00\x00\xfe\xff\x14\x00\x18\xfc*\x00\xc7\xff\xe0\xff\xfb\xfe\xfd\xffv\x01\xb4-'b'\x00\x05N\xb1{\xc7\xb6 \xfe\x16\xaa\x01\x01t]\x84\x04\x00\x00\x00\x10\x00\x1d\xfc#\x00\xd8\xff\x00\x00\xf8\xfeW\xff\x0c\x02y\xf4'b'\x00\x05N\xb1{\xc7\xb6|\xfe\x16\xab\x01\x01\x81]\x84\x04\x00\xf8\xff"\x00\x18\xfc\n\x00\xdb\xff\x1b\x00|\x00F\x00f\x02\x7f\xc2'b'\x00\x05N\xb1{\xc7\xb6\xcc\xfe\x0e\xac\x01\x01\x1d]\x84\x04\x00K\x9eiDR\xb8>\xbdt\x10\xaf\xd7'b'\x00\x05N\xb1{\xc7\xb7\x18\xfe\x0e\xad\x01\x01\x89]\x84\x04\x00\xbb\xe0iD{\x14v>\xc1\x15N\xf3'b'\x00\x05N\xb1{\xc7\xb7x\xfe\x1f\xae\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xda:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x11\xc7'b'\x00\x05N\xb1{\xc7\xb7\xcc\xfe\x06\xaf\x01\x01}\xc2\x14\x00\x00\x03\x00H\x14'b'\x00\x05N\xb1{\xc7\xb8\x1c\xfe\x04\xb0\x01\x01\x98\x00\x00\x80\x8a\x9c3'b'\x00\x05N\xb1{\xc7\xb8`\xfe\x02\xb1\x01\x01*\x00\x00\x1e>'b'\x00\x05N\xb1{\xc7\xb8\xb8\xfe\x1e\xb2\x01\x01\x18\xb0Y\xa3\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc0\xe7\xb8\xfd\xd0f\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\xce\x0c'b'\x00\x05N\xb1{\xc7\xb9\x14\xfe\x1a\xb3\x01\x01>\xc2\xf5\xc8\xbf\xf6(\x9c\xbfE\xd1\xf7\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00y\x92'b'\x00\x05N\xb1{\xc7\xb9\\\xfe\x08\xb4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x007n'b'\x00\x05N\xb1{\xc7\xb9\xb0\xfe\x1c\xb5\x01\x01!\xee\x83\x04\x00\x82\xa6\x02\x18\xc0\xe7\xb8\xfd\x8c_\n\x00\xfc\x03\x00\x00\x00\x00\x06\x00\xcf\xffVF=c'b'\x00\x05N\xb1{\xc7\xba\x10\xfe\x1c\xb6\x01\x01 p\x84\x04\x004\xc3\x95>\x9ci\xf0>v\x8a/\xbf\x9a\xc5\x1d;\xfb\x19\x81=&=\xff>\xc3\xd4'b'\x00\x05N\xb1{\xc8IS\xfe5\xf9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xae,'b'\x00\x05N\xb1{\xc8_O\xfe!\xfa\xff\x00L\xf1\xf03C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x07\xa3'b'\x00\x05N\xb1{\xc94|\xfe\x1c\xb7\x01\x01\x1e\x99\x84\x04\x00b4\xe7\xbc\xcc\xdc\xd0\xbca\xe6H\xc0 D\x16\xbc\n\x99\xd3\xbdt\xbf\x87=\x07\xba'b'\x00\x05N\xb1{\xc94\xec\xfe\x18\xb8\x01\x01\xb2f\x9d\x19\xbd`\xd1\x9e\xbc(\xacG\xc0\xc2\xe5)D\x85\xa6\x02\x18\xc0\xe7\xb8\xfd\x07c'b'\x00\x05N\xb1{\xc95H\xfe\x1c\xb9\x01\x01\xa3\xb0K\x1c:!4\xe1\xba\xb8\xaeh9\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xc5\xfd<\xaa\xdb\xb1;\xc5\xe0'b'\x00\x05N\xb1{\xc95\x90\xfe\x03\xba\x01\x01\xa5\xc2\x14\x00\xbfl'b'\x00\x05N\xb1{\xc95\xd8\xfe\x0c\xbb\x01\x01\x02p\x19\x0e|\xb1N\x05\x00\xad\x84\x04\x00\x18:'b'\x00\x05N\xb1{\xc96,\xfe\x16\xbc\x01\x01\x88\x82\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfbb'b'\x00\x05N\xb1{\xc96|\xfe\x16\xbd\x01\x01\xc1V\x81\xa4<24\xa5<\xb7\xf4\x06;\x19Y\x05>\x00\x00\x00\x00?\x03\x81d'b'\x00\x05N\xb1{\xc96\xc0\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\x00\x05N\xb1{\xca]\x1f\xfe5\xfb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01+\xce'b'\x00\x05N\xb1{\xca\x9c\x93\xfe!\xfc\xff\x00L\xa4\xf73\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe4\xe5'b"\x00\x05N\xb1{\xca\xd7{\xfe%\xfd\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00G\t"b'\x00\x05N\xb1{\xca\xd88\xfe\x15\xbf\x01\x01$\xfc1\xa7\x11X\x06\xdd\x05\x12\x06H\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xe5'b'\x00\x05N\xb1{\xca\xd8\xb8\xfe\x16\xc0\x01\x01#\xe9\x84\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00i"'b'\x00\x05N\xb1{\xca\xd9\x14\xfe\x14\xc1\x01\x01J\x8f\xc2u=\x8f\xc2u=\xc2\xf5h?\x8f\xc2\xf5\xbe\xb4\x004\x008<'b'\x00\x05N\xb1{\xca\xd9\x80\xfe\x03\xc2\x01\x01Ms\x00\x04\xdc\x7f'b'\x00\x05N\xb1{\xcb\xcc\x8b\xfe\t\xfe\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03v\x88'b'\x00\x05N\xb1{\xccX\xfc\xfe\x1a\xc3\x01\x01\x1b\xfe\xba\xa8\x11\x00\x00\x00\x00\xfa\xff\x13\x00\x10\xfcJ\x00\x14\x00#\x00\x02\xff\x00\x00z\x01\xee\x10'b'\x00\x05N\xb1{\xccYl\xfe\x16\xc4\x01\x01tN\x85\x04\x00\xf4\xff\x12\x00\n\xfc@\x00\x18\x00\x08\x00\xfe\xfe^\xff\x10\x02\x86\\'b'\x00\x05N\xb1{\xccY\xcc\xfe\x16\xc5\x01\x01\x81N\x85\x04\x00\xf2\xff\x17\x00\xf5\xfb?\x00\x12\x00\xfa\xff\x8c\x00M\x00\x7f\x02?\xd4'b'\x00\x05N\xb1{\xccZ\x1c\xfe\x0e\xc6\x01\x01\x1dN\x85\x04\x00\xfd\x9diDp=R\xbdt\x10#T'b'\x00\x05N\xb1{\xccZh\xfe\x0e\xc7\x01\x01\x89N\x85\x04\x00\xf4\xe0iD\x14\xaey>\xc3\x15\x96;'b'\x00\x05N\xb1{\xccZ\xc4\xfe\x1f\xc8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\xda:\x1d\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OmV'b'\x00\x05N\xb1{\xcc[\x14\xfe\x06\xc9\x01\x01}\xc2\x14\x00\x00\x03\x00\xb0\xce'b'\x00\x05N\xb1{\xcc[`\xfe\x03\xca\x01\x01/\xff\x00\x00\xd6M'b'\x00\x05N\xb1{\xcc[\xe4\xfe\x04\xcb\x01\x01\x98\x00\x00\x80\x8a\x9ft'b'\x00\x05N\xb1{\xcc\\(\xfe\x02\xcc\x01\x01*\x00\x00\x1d\x01'b'\x00\x05N\xb1{\xcc\\\x80\xfe\x1e\xcd\x01\x01\x18\xd8j\xa6\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc1\xe7\xb8\xfdbf\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\x9e}'b'\x00\x05N\xb1{\xcc\\\xd4\xfe\x1a\xce\x01\x01>)\\\xcf\xbf\xf5(\\\xbfx{\xf4\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xaen'b'\x00\x05N\xb1{\xcc] \xfe\x08\xcf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x89\xc1'b'\x00\x05N\xb1{\xcc]t\xfe\x1c\xd0\x01\x01!\xb7\x84\x04\x00\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x00_\n\x00p\x03\x00\x00\xfb\xff\x03\x00\xd0\xffkF@\xba'b'\x00\x05N\xb1{\xcc]\xd4\xfe\x1c\xd1\x01\x01 v\x85\x04\x00s\xe9\x95>\xf8#\xf7>\xcfc\x0c\xbfz\xceO\xbdbX\x05=^\xfe\xf5>`\x94'b'\x00\x05N\xb1{\xcc^(\xfe\x1c\xd2\x01\x01\x1e\x9e\x85\x04\x00\xe2S\xb3\xbc\xc0\xda\xd1\xbc\xe1\xdaH\xc0\xca\xc3\x1a=\xee\xf2\x93=\x1ap\x81\xbd\xf4\xa3'b'\x00\x05N\xb1{\xcc^|\xfe\x18\xd3\x01\x01\xb2\xfc\x0b\x03\xbd\xb2\xf4\xad\xbc\xaa\x92G\xc0G\xd1)D\x85\xa6\x02\x18\xc1\xe7\xb8\xfd\x12\xf6'b'\x00\x05N\xb1{\xcc\x96g\xfe5\xff\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x010\x03'b'\x00\x05N\xb1{\xcc\xc5o\xfe!\x00\xff\x00Li\xf93\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1eu'b'\x00\x05N\xb1{\xcd\xd0\xa8\xfe\x1c\xd4\x01\x01\xa3\x18U\x1c:\xaa*\xe2\xba\xaf\x17j9\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x91\xdf<\xba\xc6\x9a;\xd8\xfd'b'\x00\x05N\xb1{\xcd\xd1\x10\xfe\x03\xd5\x01\x01\xa5\xc5\x14\x00-Y'b'\x00\x05N\xb1{\xcd\xd1`\xfe\x0c\xd6\x01\x01\x02\xf8\x14\x12|\xb1N\x05\x00\xb3\x85\x04\x00\xe9\xe3'b'\x00\x05N\xb1{\xcd\xd1\xb8\xfe\x16\xd7\x01\x01\x88\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf6\xaf'b'\x00\x05N\xb1{\xcd\xd2\x0c\xfe\x16\xd8\x01\x01\xc1+\x95\xd6<\x8e\xea<\x00\x00\x00\x00?\x03E\xc4'b'\x00\x05N\xb1{\xcd\xd2x\xfe\x03\xd9\x01\x01Ms\x00\x04\xc8\x83'b'\x00\x05N\xb1{\xcd\xd3\\\xfe\x15\xda\x01\x01$W,\xab\x11l\x06\x07\x06\x05\x06)\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\t'b'\x00\x05N\xb1{\xcd\xd3\xdc\xfe\x16\xdb\x01\x01#\xee\x85\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x17V'b'\x00\x05N\xb1{\xce\x88\xcf\xfe5\x01\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfd\x11'b'\x00\x05N\xb1{\xce\x9e\xe7\xfe!\x02\xff\x00Li\xf93\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9f('b'\x00\x05N\xb1{\xcfJ8\xfe\x1a\xdc\x01\x01\x1bIi\xac\x11\x00\x00\x00\x00\xf8\xff\x1a\x00%\xfc\xab\xff<\x00\xd0\xff\xfd\xfe\x00\x00y\x017Q'b'\x00\x05N\xb1{\xcfJ\xd4\xfe\x16\xdd\x01\x01t?\x86\x04\x00\xfb\xff&\x00\x1d\xfc\xba\xff-\x00\xeb\xff\xfc\xfea\xff\x12\x02[\xd9'b'\x00\x05N\xb1{\xcfKD\xfe\x16\xde\x01\x01\x81?\x86\x04\x00\xf5\xff-\x00\x17\xfc\xd6\xff\x0e\x00\xe2\xff\x82\x00?\x00\x81\x02\xfa\xff'b'\x00\x05N\xb1{\xcfK\xa4\xfe\x0e\xdf\x01\x01\x1d?\x86\x04\x00\xdd\x9diDp=Z\xbdu\x10\x82\\'b'\x00\x05N\xb1{\xcfK\xfc\xfe\x0e\xe0\x01\x01\x89?\x86\x04\x00}\xe1iD\xb8\x1e\x81>\xc3\x15$\x98'b'\x00\x05N\xb1{\xcfL`\xfe\x1f\xe1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdc:\xf4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ov\r'b'\x00\x05N\xb1{\xcfL\xbc\xfe\x06\xe2\x01\x01}\xc3\x14\x00\x00\x03\x00\xf6\xf1'b'\x00\x05N\xb1{\xcfM\x10\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H'b'\x00\x05N\xb1{\xcfa\xa0\xfe\x04\xe4\x01\x01\x98\x00\x00\x80\x8a\x8e\x15'b'\x00\x05N\xb1{\xcfa\xf8\xfe\x02\xe5\x01\x01*\x00\x00\xa7#'b'\x00\x05N\xb1{\xcfb`\xfe\x1e\xe6\x01\x01\x18(\x8d\xac\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc1\xe7\xb8\xfdre\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c1\xe7'b'\x00\x05N\xb1{\xcfb\xc4\xfe\x1a\xe7\x01\x01>p=\n\xc0\xd7\xa3\xf0\xbe\xe0)\xf2\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd1B'b'\x00\x05N\xb1{\xcfc\x14\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl'b'\x00\x05N\xb1{\xcfch\xfe\x14\xe9\x01\x01J\n\xd7#=\n\xd7#=\\\x8fB?G\xe1\xfa\xbe\xb3\x004\x00k$'b'\x00\x05N\xb1{\xd0k\x03\xfe5\x03\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01x\xf3'b'\x00\x05N\xb1{\xd0\x82K\xfe!\x04\xff\x00Li\xf93\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1c\xce'b'\x00\x05N\xb1{\xd0\xd2\x04\xfe\x1c\xea\x01\x01!I\x86\x04\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfdt^\n\x00\xe4\x02\x00\x00\xfa\xff\x00\x00\xd1\xff.\xb9\xf4>\x82\x1b\xd3\xbe\x15*\x8e\xbd\x05\xfc\x08:\x84\x8a\xf5>X\xf6'b'\x00\x05N\xb1{\xd0\xd2\xe0\xfe\x1c\xec\x01\x01\x1e\xa4\x86\x04\x00_+\x0e\xbd\xac\xd3s\xbca\xc5H@\xca\xd4\xbb\x00\x00\x00\x00?\x03\x17\xef'b'\x00\x05N\xb1{\xd0\xd5\x9c\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13'b'\x00\x05N\xb1{\xd2m\xcb\xfe5\x05\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe6\xdc'b'\x00\x05N\xb1{\xd2p\xa0\xfe\x15\xf4\x01\x01$\xaf-\xaf\x11\x90\x06\x0c\x06\xec\x05\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\xbe'b'\x00\x05N\xb1{\xd2q\x14\xfe\x16\xf5\x01\x01#\xf5\x86\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6\xfb'b'\x00\x05N\xb1{\xd2qh\xfe\t\x0c\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\xf6\xe3'b'\x00\x05N\xb1{\xd2q\xc0\xfe\x1a\xf6\x01\x01\x1b\xd7\x17\xb0\x11\x00\x00\x00\x00\xec\xff&\x00\x13\xfc<\x00 \x00\xd4\xff\xf9\xfe\xfb\xffy\x01]\x9b'b'\x00\x05N\xb1{\xd2r\x14\xfe\x16\xf7\x01\x01t1\x87\x04\x00\xe8\xff7\x00 \xfcC\x00\x18\x00\xda\xff\xfa\xfe]\xff\x0e\x02\x9d!'b'\x00\x05N\xb1{\xd2rh\xfe\x16\xf8\x01\x01\x811\x87\x04\x00\xe8\xff-\x00\x15\xfc*\x00\x17\x00\xe1\xff\x87\x00N\x00y\x02C\xa4'b'\x00\x05N\xb1{\xd2r\xb4\xfe\x0e\xf9\x01\x01\x1d1\x87\x04\x00\x17\xa0iD\x14\xae\x97\xbcu\x10\xa7('b'\x00\x05N\xb1{\xd2s\x10\xfe\x0e\xfa\x01\x01\x891\x87\x04\x00\xec\xe2iD\x99\x99\x8c>\xc4\x15%0'b'\x00\x05N\xb1{\xd2sp\xfe\x1f\xfb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f\xdc:\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oq\x97'b'\x00\x05N\xb1{\xd2s\xc4\xfe\x06\xfc\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\x91'b'\x00\x05N\xb1{\xd2t\x10\xfe\x04\xfd\x01\x01\x98\x00\x00\x80\x8a-\xd8'b'\x00\x05N\xb1{\xd2\xab\xc3\xfe!\x06\xff\x00L\xa7\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb5\x9d'b'\x00\x05N\xb1{\xd3\xf1`\xfe\x02\xfe\x01\x01*\x00\x00\xec\xe0'b'\x00\x05N\xb1{\xd3\xf1\xd4\xfe\x1e\xff\x01\x01\x18P\x9e\xaf\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\x18e\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\xcb)'b'\x00\x05N\xb1{\xd3\xf24\xfe\x1a\x00\x01\x01>\xe1z\x14\xc0\x14\xae\xc7\xbec>\xf0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00N\xce'b'\x00\x05N\xb1{\xd3\xf2\x80\xfe\x08\x01\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfcT'b'\x00\x05N\xb1{\xd3\xf2\xcc\xfe\x03\x02\x01\x01Ms\x00\x00\xaf\xb6'b'\x00\x05N\xb1{\xd4\x07$\xfe\x14\x03\x01\x01J\x8f\xc2u=\x8f\xc2u=\xaeG!?\x1e\x85\xeb\xbe\xb3\x004\x00\xc8\xd8'b'\x00\x05N\xb1{\xd4\x07\x84\xfe\x1c\x04\x01\x01!\x12\x87\x04\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\xf2]\n\x00b\x02\x00\x00\xfc\xff\xff\xff\xd0\xff\xfdE\xe4\x06'b'\x00\x05N\xb1{\xd4\x07\xe8\xfe\x1c\x05\x01\x01 \x81\x87\x04\x00\xe2&\x8f>\x86@\xf4>\xcb\xfe\x8e\xbe\xee\xf4B\xbd\xaep\x84\xbc\xd2\x03\xf7>\x92\x8e'b'\x00\x05N\xb1{\xd4[\xff\xfe5\x07\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01c>'b'\x00\x05N\xb1{\xd4r\x9b\xfe!\x08\xff\x00L\xa7\xf73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00#\x05'b'\x00\x05N\xb1{\xd5\x95 \xfe\x1c\x06\x01\x01\x1e\xa9\x87\x04\x00\x00g\xe3\xbcNz$\xbc\xef\xfbG@\x8e\x020<\xf8pM\xba\xde\xdcQ\xbd\xd8\x95'b'\x00\x05N\xb1{\xd5\x95\xb4\xfe\x18\x07\x01\x01\xb2\x82\x11\x1a\xbd/{\xad\xbb\xa7\xe5H\xc0\xf6\xb8)D\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\xc6\x9c'b'\x00\x05N\xb1{\xd5\x96\x1c\xfe\x1c\x08\x01\x01\xa3\xe5\x94\x1c:s\x01\xe4\xba\xe5#m9\x00\x00\x00\x00\x00\x00\x00\x00\x90\xa7\xea<\x10Y\x99;\x15\x1c'b'\x00\x05N\xb1{\xd5\x96l\xfe\x03\t\x01\x01\xa5\xc5\x14\x00$\x97'b'\x00\x05N\xb1{\xd5\x96\xc0\xfe\x0c\n\x01\x01\x02h\xfc\x19|\xb1N\x05\x00\xbd\x87\x04\x00\x99\x11'b'\x00\x05N\xb1{\xd5\x97\x18\xfe\x16\x0b\x01\x01\x88\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6\xa7'b'\x00\x05N\xb1{\xd5\x97t\xfe\x16\x0c\x01\x01\xc1D[\xb0<~T:<}|\xa1;\xaf\x17\x04>\x00\x00\x00\x00?\x03\x87S'b'\x00\x05N\xb1{\xd5\x97\xe8\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d'b'\x00\x05N\xb1{\xd5\x98t\xfe\x15\x0f\x01\x01$\xb6&\xb3\x11e\x06k\x06\xe5\x05\xef\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00#f'b'\x00\x05N\xb1{\xd5\x98\xc8\xfe\x16\x10\x01\x01#\xf9\x87\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xaeT'b'\x00\x05N\xb1{\xd68\x17\xfe5\t\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xda\x83'b'\x00\x05N\xb1{\xd6Nc\xfe!\n\xff\x00LR\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd9\xf0'b'\x00\x05N\xb1{\xd7\x1b\\\xfe\x12\x11\x01\x01\xfc\x0b\x88\x04\x004\x00\x01\x00ARMMASK\x00Wr\x9b.'b'\x00\x05N\xb1{\xd7\x1b\xe4\xfe\t\x12\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x1e\x9e'b'\x00\x05N\xb1{\xd7\x1cT\xfe\x1a\x13\x01\x01\x1b\x06\xc5\xb3\x11\x00\x00\x00\x00\xe6\xff#\x00%\xfcR\x00=\x00\xcb\xff\xf7\xfe\xfc\xffw\x01\x0fr'b'\x00\x05N\xb1{\xd7\x1c\xb8\xfe\x16\x14\x01\x01t"\x88\x04\x00\xe0\xff(\x00!\xfcK\x007\x00\xda\xff\xf7\xfeW\xff\n\x02\xe6)'b'\x00\x05N\xb1{\xd7\x1d\x14\xfe\x16\x15\x01\x01\x81"\x88\x04\x00\xe6\xff,\x00\x0e\xfcd\x003\x00\xbb\xff\x81\x00I\x00o\x02\xbd\xc8'b'\x00\x05N\xb1{\xd7\x1dl\xfe\x0e\x16\x01\x01\x1d"\x88\x04\x00[\x9fiD\x8f\xc2\xf5\xbcu\x10\xac\xd7'b'\x00\x05N\xb1{\xd7\x1d\xc0\xfe\x0e\x17\x01\x01\x89"\x88\x04\x00y\xe4iD\x00\x00\x99>\xc4\x15\x94\xdb'b'\x00\x05N\xb1{\xd7\x1e$\xfe\x1f\x18\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00D\x01\xdc:\x05\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O>x'b'\x00\x05N\xb1{\xd7\x1e\x88\xfe\x06\x19\x01\x01}\xbd\x14\x00\x00\x03\x00S\xe8'b'\x00\x05N\xb1{\xd7\x1e\xd4\xfe\x04\x1a\x01\x01\x98\x00\x00\x80\x8aB\xe4'b'\x00\x05N\xb1{\xd7\x1f\x18\xfe\x02\x1b\x01\x01*\x00\x00\xd72'b'\x00\x05N\xb1{\xd7\x1fl\xfe\x1e\x1c\x01\x01\x18x\xaf\xb2\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xc0\xe7\xb8\xfd\xb4d\n\x00F\x00\xff\xff\r\x00-K\x03\x0c`\x10'b'\x00\x05N\xb1{\xd7\x1f\xc0\xfe\x1a\x1d\x01\x01>\xcd\xcc,\xc0\xc2\xf5(\xbf=\xa0\xee\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x10)'b'\x00\x05N\xb1{\xd7 \x04\xfe\x08\x1e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x07;'b'\x00\x05N\xb1{\xd7 L\xfe\x03\x1f\x01\x01Ms\x00\x00\nW'b'\x00\x05N\xb1{\xd74\xa0\xfe\x14 \x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>\x00\x00\x00?\xd7\xa3\xf0\xbe\xb2\x005\x00\xa8u'b'\x00\x05N\xb1{\xd8*\xe7\xfe5\x0b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01_a'b'\x00\x05N\xb1{\xd8AG\xfe!\x0c\xff\x00LR\xf93C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Z\x16'b'\x00\x05N\xb1{\xd8\x92\x84\xfe\x1c!\x01\x01!\xdb\x87\x04\x00\x80\xa6\x02\x18\xbf\xe7\xb8\xfdf]\n\x00\xd6\x01\x00\x00\x00\x00\xfa\xff\xd1\xff\xcbE\xc4['b'\x00\x05N\xb1{\xd8\x93\x08\xfe\x1c"\x01\x01 \x86\x88\x04\x00\xe7\'\x8e>c\x14\xec>\xc15\x14\xbef(\xae8?\xa6\x86\xbd\'\x80\xf3>\xa3('b'\x00\x05N\xb1{\xd8\x93h\xfe\x1c#\x01\x01\x1e\xae\x88\x04\x00xr\xda\xbc\xed\xd9\xed\xbb\x95\x98G@\x00\xf3/\xbd\xb20\x08\xbeu\x85\xba<\xce\xd0'b'\x00\x05N\xb1{\xd8\x93\xbc\xfe\x18$\x01\x01\xb2\x19\xb1\r\xbd\xdb\x9d\xd9\xba\x99\xccH@\xf6\xb8)D\x83\xa6\x02\x18\xbf\xe7\xb8\xfd\x07\xcd'b'\x00\x05N\xb1{\xd8\x94\x10\xfe\x1c%\x01\x01\xa3\xa4\xcc\x1c:\xc6\xe6\xe4\xba\xe4\xb5n9\x00\x00\x00\x00\x00\x00\x00\x00\x1e\xdd)=\x97\xf2m;E\x1b'b'\x00\x05N\xb1{\xd8\x94T\xfe\x03&\x01\x01\xa5\xbd\x14\x00\xfb/'b"\x00\x05N\xb1{\xd8\x94\xa0\xfe\x0c'\x01\x01\x02\xf0\xf7\x1d|\xb1N\x05\x00\xc2\x88\x04\x00\xab\x7f"b'\x00\x05N\xb1{\xd8\x94\xf0\xfe\x16(\x01\x01\x88\x81\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Zn'b'\x00\x05N\xb1{\xd8\x95@\xfe\x16)\x01\x01\xc18$\xdc<\xb1\x9dB<.f\x1e;y\x9c\xf8=\x00\x00\x00\x00?\x03\xa3~'b'\x00\x05N\xb1{\xd8\x95\x84\xfe\x03*\x01\x01Ms\x00\x00\xe3-'b'\x00\x05N\xb1{\xd9\xff\x93\xfe5\r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc1N'b'\x00\x05N\xb1{\xda0\x04\xfe\x15+\x01\x01$%#\xb7\x11\x8d\x06\x13\x06\xef\x05\xdd\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xdc'b'\x00\x05N\xb1{\xda0t\xfe\x16,\x01\x01#\xfe\x88\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd3\x03'b'\x00\x05N\xb1{\xda0\xd4\xfe\x1a-\x01\x01\x1b\xa3q\xb7\x11\x00\x00\x00\x00\x1d\x00*\x00\x18\xfc\x81\xff\x96\xff\x18\x00\xf6\xfe\xfb\xffs\x01\x03\xbd'b'\x00\x05N\xb1{\xda1D\xfe\x16.\x01\x01t\x12\x89\x04\x00\x1a\x00;\x00$\xfc\x86\xff\x95\xff"\x00\xf8\xfeV\xff\r\x02\x9a\xd9'b'\x00\x05N\xb1{\xda1\xb4\xfe\x16/\x01\x01\x81\x12\x89\x04\x00\x0e\x001\x006\xfcc\xff\x8f\xff&\x00y\x00@\x00k\x02\xdbi'b'\x00\x05N\xb1{\xda2\x14\xfe\x0e0\x01\x01\x1d\x12\x89\x04\x000\xa2iDp=j\xc5\x15\xaf\x84'b'\x00\x05N\xb1{\xda2\xdc\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xdc:\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oh\xdf'b'\x00\x05N\xb1{\xda3D\xfe\x063\x01\x01}\xc5\x14\x00\x00\x03\x00\xf1\xd2'b'\x00\x05N\xb1{\xda3\xa0\xfe\x044\x01\x01\x98\x00\x00\x80\x8a\xae\xc8'b'\x00\x05N\xb1{\xda3\xf4\xfe\x025\x01\x01*\x00\x00u\xd7'b'\x00\x05N\xb1{\xda4`\xfe\x1e6\x01\x01\x18\xa0\xc0\xb5\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xbf\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c&\x0c'b'\x00\x05N\xb1{\xda4\xc4\xfe\x1a7\x01\x01>\x00\x00`\xc0p=\x8a\xbf,\xc8\xeb\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00bk'b'\x00\x05N\xb1{\xda5\x14\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93'b'\x00\x05N\xb1{\xdaL\x1f\xfe!\x0e\xff\x00L\x8e\xf83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xbf\x9d'b'\x00\x05N\xb1{\xdb\x13\xfb\xfe\t\x0f\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03E@'b"\x00\x05N\xb1{\xdbe\xd7\xfe%\x10\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00B\xd2"b'\x00\x05N\xb1{\xdb\xa1\xcc\xfe\x039\x01\x01Ms\x00\x00K\xfc'b'\x00\x05N\xb1{\xdb\xa2\x80\xfe\x14:\x01\x01J\xcc\xccL=\xcc\xccL=\xebQ\xb8>\x1e\x85\xeb\xbe\xb2\x005\x00l\xf5'b'\x00\x05N\xb1{\xdb\xa2\xe0\xfe\x1c;\x01\x01!m\x89\x04\x00\x81\xa6\x02\x18\xbb\xe7\xb8\xfd\xda\\\n\x00J\x01\x00\x00\xfe\xff\xf7\xff\xd2\xff\xefE1q'b'\x00\x05N\xb1{\xdb\xa3d\xfe\x1c<\x01\x01 \x8b\x89\x04\x00\xd2\x06\x90>v#\xdc>\xd3\x9cS\xba\xa36\xea\xbc(\x9f\xb9\xbd\x12\r\xef>\x91\xe6'b'\x00\x05N\xb1{\xdb\xa3\xc4\xfe\x03=\x01\x01/\xff\x00\x00C\x92'b'\x00\x05N\xb1{\xdc\x00\x9b\xfe5\x11\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa2='b'\x00\x05N\xb1{\xdcg\x7f\xfe!\x12\xff\x00L\x8e\xf83C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x82\xa4'b"\x00\x05N\xb1{\xdd'\xfc\xfe\x1c>\x01\x01\x1e\xb3\x89\x04\x00J\xd7n\xbd\x14J\xb9\xbci\x0eH@5\x1e\x17\xbe\x18]P<\xab\x88-=\xb4\xec"b'\x00\x05N\xb1{\xdd(|\xfe\x18?\x01\x01\xb2o\x82\x88\xbd\xa0\x93\x99\xbc\xb6\xd4H\xc0=\x8a)D\x82\xa6\x02\x18\xbd\xe7\xb8\xfdBB'b'\x00\x05N\xb1{\xdd(\xd4\xfe\x1c@\x01\x01\xa3\xf7\x16\x1d:\x0f\xc9\xe5\xba\xf9Xp9\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xa9#=\xc7\xe4\xe4;\xf1\xf3'b'\x00\x05N\xb1{\xdd)\x1c\xfe\x03A\x01\x01\xa5\xc8\x14\x00\xe6T'b'\x00\x05N\xb1{\xdd)x\xfe\x0cB\x01\x01\x02x\xf3!|\xb1N\x05\x00\xc8\x89\x04\x00A\xd2'b'\x00\x05N\xb1{\xdd)\xf4\xfe\x16C\x01\x01\x88\x81\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x18m'b'\x00\x05N\xb1{\xdd*l\xfe\x16D\x01\x01\xc1\xc3\xf7\xa1<#\xb8\x03<\xca\x12\x88<#\x06\xeb=\x00\x00\x00\x00?\x03\xf0)'b'\x00\x05N\xb1{\xdd*\xd4\xfe\x03E\x01\x01Ms\x00\x00PO'b"\x00\x05N\xb1{\xdeH\xc3\xfe5\x13\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01'\xdf"b'\x00\x05N\xb1{\xde\x86G\xfe!\x14\xff\x00L\xee\xe73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00i\x03'b'\x00\x05N\xb1{\xde\xafL\xfe\x1aF\x01\x01\x1b\x10"\xbb\x11\x00\x00\x00\x00\xfe\xff\x0c\x00\xf1\xfb\xa8\xff-\x00\xfd\xff\xfd\xfe\xee\xffu\x01\xa6\xa5'b'\x00\x05N\xb1{\xde\xaf\xc8\xfe\x16G\x01\x01t\x04\x8a\x04\x00\x0b\x00"\x00\x0c\xfc\x8e\xff=\x00\t\x00\xfe\xfeK\xff\x0c\x02l\x1e'b'\x00\x05N\xb1{\xde\xb0$\xfe\x16H\x01\x01\x81\x04\x8a\x04\x00\xfb\xff\x16\x00\xe9\xfb\xa3\xff<\x00\xff\xffq\x00E\x00d\x02x\x86'b'\x00\x05N\xb1{\xde\xb0t\xfe\x0eI\x01\x01\x1d\x04\x8a\x04\x00\xa7\xa5iD\xf6(\x8c=t\x10\xe8\xb4'b'\x00\x05N\xb1{\xde\xb0\xc4\xfe\x0eJ\x01\x01\x89\x04\x8a\x04\x00\x0f\xeaiD\x14\xae\xc5>\xc4\x15\xc0h'b'\x00\x05N\xb1{\xde\xb1 \xfe\x1fK\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xb5:\x0f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xd8\xe5'b'\x00\x05N\xb1{\xde\xb1x\xfe\x06L\x01\x01}\xc5\x14\x00\x00\x03\x00w\x90'b'\x00\x05N\xb1{\xde\xb1\xc4\xfe\x04M\x01\x01\x98\x00\x00\x80\x8aW\x14'b'\x00\x05N\xb1{\xde\xb2\x08\xfe\x02N\x01\x01*\x00\x00\xbb\xb0'b'\x00\x05N\xb1{\xde\xb2`\xfe\x1eO\x01\x01\x18\xc8\xd1\xb8\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xbd\xe7\xb8\xfd\xcec\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x80\xf2'b'\x00\x05N\xb1{\xde\xb2\xb4\xfe\x1aP\x01\x01>=\nw\xc0\x99\x99\x19\xbfO\x04\xe3\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8bs'b'\x00\x05N\xb1{\xde\xb3\x00\xfe\x08Q\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00}m'b'\x00\x05N\xb1{\xde\xb3t\xfe\x15R\x01\x01$\xf6o\xbb\x11D\x062\x06\xf6\x05\xe0\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdew'b'\x00\x05N\xb1{\xde\xb3\xc8\xfe\x16S\x01\x01#\x18\x8a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x89n'b'\x00\x05N\xb1{\xde\xb4\x10\xfe\x03T\x01\x01Ms\x00\x00\x97\x95'b'\x00\x05N\xb1{\xe05\x0b\xfe5\x15\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb9\xf0'b'\x00\x05N\xb1{\xe0_\x17\xfe!\x16\xff\x00L\xee\xe73C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe8^'b'\x00\x05N\xb1{\xe0_\xb8\xfe\x14U\x01\x01J\x99\x99\x19>\x99\x99\x19>=\nW>\x85\xeb\xd1\xbe\xb3\x002\x00\xaf\x1a'b'\x00\x05N\xb1{\xe0`D\xfe\x1cV\x01\x01!6\x8a\x04\x00\x80\xa6\x02\x18\xb8\xe7\xb8\xfdN\\\n\x00\xbe\x00\x00\x00\xf9\xff\xff\xff\xd8\xff\x1aF\x1ce'b'\x00\x05N\xb1{\xe0`\xb4\xfe\x1cW\x01\x01 \x90\x8a\x04\x00\x93\r\x89>\xfe^\xd0>\x95\x8a\x13>\x13&\x92\xbd$v,\xbc3\x06\xcd>\xe0\xc2'b'\x00\x05N\xb1{\xe0a\x10\xfe\x1cX\x01\x01\x1e\xb8\x8a\x04\x00\xcc"\xa3\xbd\x00\xdfQ\xbc\xb9\x95H@\x1c3g\xbdXz\x87=T\xfeE=\xc3\x84'b'\x00\x05N\xb1{\xe0al\xfe\x18Y\x01\x01\xb2\xec\xbc\xb7\xbd`$\x12\xbc\xf6NH\xc0)l)D\x82\xa6\x02\x18\xb9\xe7\xb8\xfd\x01\x05'b'\x00\x05N\xb1{\xe1\xc9\x14\xfe\x1cZ\x01\x01\xa3\xd9p\x1d:\xd6\xab\xe6\xbag\x08r9\x00\x00\x00\x00\x00\x00\x00\x00\xad\xb2\x11=\xa0\xbf\xee;\x13I'b'\x00\x05N\xb1{\xe1\xc9|\xfe\x03[\x01\x01\xa5\xb2\x14\x00\xa6\xaf'b'\x00\x05N\xb1{\xe1\xc9\xd8\xfe\x0c\\\x01\x01\x02\x18\xeb%|\xb1N\x05\x00\xcd\x8a\x04\x00\xf3\xae'b'\x00\x05N\xb1{\xe1\xca8\xfe\x16]\x01\x01\x88\x7f\xa6\x02\x18\xb8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc8\xbe'b'\x00\x05N\xb1{\xe1\xca\x94\xfe\x16^\x01\x01\xc1\xc4\xa0\xec<)\xca0<\x0b09=\x84o\xaf=\x00\x00\x00\x00?\x03\x9a\xfb'b'\x00\x05N\xb1{\xe1\xca\xe0\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1{\xe1\xdf\\\xfe\x1a`\x01\x01\x1b\xf5\xd0\xbe\x11\x00\x00\x00\x00\xef\xff\x1a\x00\xf6\xfbH\x00c\x00\x0b\x00\xf9\xfe\xeb\xffr\x014\x16'b'\x00\x05N\xb1{\xe1\xdf\xe4\xfe\x16a\x01\x01t\xf6\x8a\x04\x00\xf1\xff\x13\x00\x01\xfcN\x00u\x00\x14\x00\xf9\xfeK\xff\x0b\x02\xdc\x7f'b'\x00\x05N\xb1{\xe1\xe0P\xfe\x16b\x01\x01\x81\xf6\x8a\x04\x00\xf3\xff\x1f\x00\xf5\xfbE\x00n\x00\x07\x00v\x00A\x00v\x02\x87\xaf'b'\x00\x05N\xb1{\xe1\xe0\xac\xfe\x0ec\x01\x01\x1d\xf6\x8a\x04\x00\xb7\xaeiD=\nW>u\x10\xbb\x12'b'\x00\x05N\xb1{\xe1\xe1\x08\xfe\x0ed\x01\x01\x89\xf6\x8a\x04\x00\xbd\xf1iD\\\x8f\x01?\xc5\x15\xb0_'b'\x00\x05N\xb1{\xe1\xe1p\xfe\x1fe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00$\x01\xb5: \x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x91R'b'\x00\x05N\xb1{\xe1\xe1\xd0\xfe\x06f\x01\x01}\xc6\x14\x00\x00\x03\x00\x1b\xcd'b'\x00\x05N\xb1{\xe1\xe2(\xfe\x04g\x01\x01\x98\x00\x00\x80\x8a^\x07'b'\x00\x05N\xb1{\xe1\xe2t\xfe\x02h\x01\x01*\x00\x00\xf5\x8b'b'\x00\x05N\xb1{\xe1\xe2\xd8\xfe\x1ei\x01\x01\x18\x18\xf4\xbe\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xbb\xe7\xb8\xfd\xacb\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\xa3m'b'\x00\x05N\xb1{\xe1\xe38\xfe\x1aj\x01\x01>{\x14N\xc0\xcc\xcc\xcc\xbd\x92i\xdf\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00`\xef'b'\x00\x05N\xb1{\xe1\xe3\x88\xfe\x08k\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00?\xa4'b'\x00\x05N\xb1{\xe1\xe3\xdc\xfe\t\r\n\x00m\x03\x00\x00\x00\x00\xdd\x00\x00\x00\xa9\xd9'b'\x00\x05N\xb1{\xe1\xe48\xfe\x15l\x01\x01$\x06m\xbf\x11U\x06\xdc\x05\xe4\x05\x10\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11O'b'\x00\x05N\xb1{\xe1\xe4\x8c\xfe\x16m\x01\x01#\x1d\x8b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa7\x0b'b'\x00\x05N\xb1{\xe2:\x8b\xfe5\x17\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01<\x12'b'\x00\x05N\xb1{\xe2P\xd7\xfe!\x18\xff\x00L&\xda3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc1\x1a'b'\x00\x05N\xb1{\xe3U\xd4\xfe\x03n\x01\x01Ms\x00\x00\xcc^'b'\x00\x05N\xb1{\xe3j\xb4\xfe\x14o\x01\x01J\n\xd7#=\n\xd7#=)\\\x8f=33\xb3\xbe\xb3\x00.\x00\xbc\x0b'b'\x00\x05N\xb1{\xe4\x03\x87\xfe5\x19\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x85\xaf'b'\x00\x05N\xb1{\xe4AS\xfe!\x1a\xff\x00L&\xda3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00@G'b'\x00\x05N\xb1{\xe5\x19\xf4\xfe\x1cp\x01\x01!\xff\x8a\x04\x00\x7f\xa6\x02\x18\xb9\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xf9\xff\x08\x00\xdd\xff7FI\xed'b'\x00\x05N\xb1{\xe5\x1a\x88\xfe\x1cq\x01\x01 \x95\x8b\x04\x00\x8f\xf4\x82>\xbe\xd2\xd4>\xd0\x8f\x8c>?\xf9\x8f\xbd\r\xd2\xb5=\xf98\xb8>g\x10'b'\x00\x05N\xb1{\xe5\x1a\xe4\xfe\x1cr\x01\x01\x1e\xbe\x8b\x04\x00/l\x91\xbd[m\xd2;\xd1\xd7H@\x12\t\x10\xbd\x8c\x10\xce;\x9e\xdb\x1e=E\xf9'b'\x00\x05N\xb1{\xe5\x1b<\xfe\x18s\x01\x01\xb2\xa6\xa0\xa6\xbd\x0b,;v\x10vU'b'\x00\x05N\xb1{\xe5\x1f\xf0\xfe\x0e\x80\x01\x01\x89\xe6\x8b\x04\x00\xb0\xf9iD)\\!?\xc6\x15\x07\xdf'b'\x00\x05N\xb1{\xe5 L\xfe*\x81\x01\x01\x96s\xe7f\xbc-m\x01\x00v\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00G\xad'b'\x00\x05N\xb1{\xe5 \xa0\xfe\x1f\x82\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x000\x01\xb5:\x85\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xe9e'b'\x00\x05N\xb1{\xe5 \xf0\xfe\x06\x83\x01\x01}\xc5\x14\x00\x00\x03\x00%\xd3'b'\x00\x05N\xb1{\xe5!8\xfe\x04\x84\x01\x01\x98\x00\x00\x80\x8a\xd4\x04'b'\x00\x05N\xb1{\xe5!|\xfe\x02\x85\x01\x01*\x00\x00"\x87'b'\x00\x05N\xb1{\xe5"\x04\xfe\x1e\x86\x01\x01\x18@\x05\xc2\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xbd\xe7\xb8\xfd\x16b\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\x07Z'b'\x00\x05N\xb1{\xe5"l\xfe\x1a\x87\x01\x01>\xe1z\xf4\xbf\x8f\xc2\xf5\xbd\xd2\xac\xe0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x89S'b'\x00\x05N\xb1{\xe6\x07[\xfe5\x1b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x00M'b'\x00\x05N\xb1{\xe6E\x97\xfe!\x1c\xff\x00L\xaa\xe23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf3\xad'b'\x00\x05N\xb1{\xe6\xa0`\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba'b'\x00\x05N\xb1{\xe6\xa0\xd8\xfe\x12\x89\x01\x01\xfc\xf8\x8b\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8et'b'\x00\x05N\xb1{\xe6\xa1<\xfe\t\x8a\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03t!'b'\x00\x05N\xb1{\xe6\xa1\xa0\xfe\x15\x8b\x01\x01$\xeae\xc3\x11\x19\x06\xe9\x05\xf6\x05\xde\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7#'b'\x00\x05N\xb1{\xe6\xa2\x0c\xfe\x16\x8c\x01\x01#"\x8c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00`\xf4'b'\x00\x05N\xb1{\xe7\xfe;\xfe5\x1d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9eb'b'\x00\x05N\xb1{\xe8\x00\xf4\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc'b'\x00\x05N\xb1{\xe8\x01\xac\xfe\x14\x8e\x01\x01J\n\xd7#=\n\xd7#=\n\xd7#\xbd\xc2\xf5\xa8\xbe\xb3\x00*\x00\xb5g'b'\x00\x05N\xb1{\xe8\x024\xfe\x1c\x8f\x01\x01!\x91\x8c\x04\x00~\xa6\x02\x18\xbe\xe7\xb8\xfdJ[\n\x00\xba\xff\xff\xff\xfd\xff\x12\x00\xee\xff?F\xc1{'b'\x00\x05N\xb1{\xe8\x02\xc0\xfe\x1c\x90\x01\x01 \x9b\x8c\x04\x00F4\x82>@\xce\xe7>\xf7\x16\xcf>@N\x18\xbd\xea\x0b9>K\x1b?>\x01F'b'\x00\x05N\xb1{\xe8\x03\xeb\xfe!\x1e\xff\x00L\xaa\xe23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00r\xf0'b'\x00\x05N\xb1{\xe9o\xbc\xfe\x1c\x91\x01\x01\x1e\xc3\x8c\x04\x00\xee\xf94\xbd\xe2\x01\x83\xbc\x94bH@\xdcd\xa9>S\xcc\xba\xbe\xfb0?\xbeS:'b'\x00\x05N\xb1{\xe9p8\xfe\x18\x92\x01\x01\xb2\xbcFc\xbd\x1b\x97@\xbc]lH\xc0\xc2e(D\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x7f'b'\x00\x05N\xb1{\xe9p\x88\xfe\x03\x93\x01\x01Ms\x00\x00\x8a\xa7'b'\x00\x05N\xb1{\xe9q\x1c\xfe\x1a\x94\x01\x01\x1bl+\xc6\x11\x00\x00\x00\x00A\x00\xbd\x00#\xfc:\xff\x91\x01\x05\x00\xf3\xfe\xf5\xffu\x01\xed\x88'b'\x00\x05N\xb1{\xe9q\x80\xfe\x16\x95\x01\x01t\xd7\x8c\x04\x00=\x00\xb2\x00!\xfcb\xffj\x01\xf2\xff\xf6\xfel\xff\x12\x02\x1cO'b'\x00\x05N\xb1{\xe9q\xd4\xfe\x16\x96\x01\x01\x81\xd7\x8c\x04\x00\n\x00\xbc\x00+\xfcH\xff\x96\x01\x07\x00\x84\x00e\x00[\x026H'b'\x00\x05N\xb1{\xe9r$\xfe\x0e\x97\x01\x01\x1d\xd7\x8c\x04\x00\xf0\xc4iD\xf6\xa8\x0e?v\x10\xe8\t'b'\x00\x05N\xb1{\xe9r\x80\xfe\x0e\x98\x01\x01\x89\xd7\x8c\x04\x00\x99\tjD\x00\x00a?\xc7\x15\x9fV'b'\x00\x05N\xb1{\xe9s \xfe\x1f\x99\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd4\x00\xff:\xfc\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x87\x07'b'\x00\x05N\xb1{\xe9s\xb0\xfe\x06\x9a\x01\x01}\xc5\x14\x00\x00\x03\x00[K'b'\x00\x05N\xb1{\xe9t4\xfe\x04\x9b\x01\x01\x98\x00\x00\x80\x8ahm'b'\x00\x05N\xb1{\xe9t\xb0\xfe\x02\x9c\x01\x01*\x00\x00\xd2s'b'\x00\x05N\xb1{\xe9uT\xfe\x1e\x9d\x01\x01\x18h\x16\xc5\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\xd0a\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xb9\xb7'b'\x00\x05N\xb1{\xe9v\x08\xfe\x1a\x9e\x01\x01>\x1e\x85\xab\xbf\x00\x00\x00\x00\x86y\xeb\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xab\n'b'\x00\x05N\xb1{\xe9v\xac\xfe\x08\x9f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8'b'\x00\x05N\xb1{\xe9wP\xfe\x1c\xa0\x01\x01\xa3\x9a@\x1e:\xc3`\xe8\xba\xc4\xd3u9\x00\x00\x00\x00\x00\x00\x00\x00\xe8n\x04=\xe2H\x9d;SU'b'\x00\x05N\xb1{\xe9w\xa0\xfe\x03\xa1\x01\x01\xa5\xc5\x14\x00\x8a\xc7'b'\x00\x05N\xb1{\xe9w\xec\xfe\x0c\xa2\x01\x01\x02\x90$.|\xb1N\x05\x00\xeb\x8c\x04\x00\x92\xfb'b'\x00\x05N\xb1{\xe9x@\xfe\x16\xa3\x01\x01\x88~\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4c'b'\x00\x05N\xb1{\xe9x\x90\xfe\x16\xa4\x01\x01\xc1\x07\xb4v<\x94]\x95<\xa4$\xf4=n\xac\x19>\x00\x00\x00\x00?\x03\xfc7'b'\x00\x05N\xb1{\xe9\xc9w\xfe5\x1f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1b\x80'b'\x00\x05N\xb1{\xea\x07\xc3\xfe! \xff\x00L\x99\xf23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x17\xee'b'\x00\x05N\xb1{\xea\xbck\xfe\t!\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf4\x04'b'\x00\x05N\xb1{\xeb\x08\x10\xfe\x15\xa5\x01\x01$\x92c\xc7\x11\xae\x05I\x05]\x048\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe'b"\x00\x05N\xb1{\xeb\x08\xac\xfe\x16\xa6\x01\x01#'\x8d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xaa\xdc"b'\x00\x05N\xb1{\xeb\t\x0c\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\'b'\x00\x05N\xb1{\xeb\x1d|\xfe\x14\xa8\x01\x01J\n\xd7#>\n\xd7#>\xaeG\xe1\xbd\x00\x00\x00\x00\xb3\x00\x0b\x00\xaa\xad'b'\x00\x05N\xb1{\xeb\xaaS\xfe%"\xff\x00\'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xb5\x11'b'\x00\x05N\xb1{\xeb\xf5\x03\xfe5#\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc6\xab'b'\x00\x05N\xb1{\xec\x1bG\xfe!$\xff\x00L\x99\xf23C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x15U'b'\x00\x05N\xb1{\xec\x85D\xfe\x1c\xa9\x01\x01!Y\x8d\x04\x00}\xa6\x02\x18\xbe\xe7\xb8\xfd\x18[\n\x00\x88\xff\xff\xff\xfa\xff\x01\x00\x00\x00\x0cF\xcc\xa0'b'\x00\x05N\xb1{\xec\x85\xd8\xfe\x1c\xaa\x01\x01 \xa0\x8d\x04\x00\x01*w>\x90\xa8\xe9>\xbb\xdb\xe7>\'\x87\x8d\xbdp[\x8cv\x10\x06>'b"\x00\x05N\xb1{\xec\x88\x14\xfe\x0e\xb0\x01\x01\x89\xc8\x8d\x04\x00{\xfciD\x1e\x85,?\xc7\x15\xc1'"b'\x00\x05N\xb1{\xec\x88p\xfe\x1f\xb1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1c\x01\xff::\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xae\x11'b'\x00\x05N\xb1{\xec\x88\xc0\xfe\x06\xb2\x01\x01}\xc5\x14\x00\x00\x03\x00{\x15'b'\x00\x05N\xb1{\xec\x89\x0c\xfe\x04\xb3\x01\x01\x98\x00\x00\x80\x8a\x9b\xe5'b'\x00\x05N\xb1{\xec\x89T\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d'b'\x00\x05N\xb1{\xec\x89\xd4\xfe\x02\xb5\x01\x01*\x00\x00hQ'b'\x00\x05N\xb1{\xec\x8a,\xfe\x1e\xb6\x01\x01\x18\xa8#\xc8\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x80a\n\x00F\x00\xff\xff\x10\x00-K\x03\x0c\xe7>'b'\x00\x05N\xb1{\xec\x8a\x80\xfe\x1a\xb7\x01\x01>\x00\x00 \xc0\x00\x00\x00\x00\xf7\xf2\n\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00oF'b'\x00\x05N\xb1{\xec\x8a\xc8\xfe\x08\xb8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xebU'b'\x00\x05N\xb1{\xec\x8b\x1c\xfe\x1c\xb9\x01\x01\x1e\xdc\x8d\x04\x00x8\xb6\xbc:t|;\xbdDH@%2\xfa\xbc+\xf5\xde\xbch~\x80;8\xac'b'\x00\x05N\xb1{\xec\x8bt\xfe\x18\xba\x01\x01\xb2\xc5%\xfd\xbc\xd4L\xff;\x00\xa6H\xc0\xa4\xe0(D\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x87K'b'\x00\x05N\xb1{\xed\xbd\xcf\xfe5%\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01X\x84'b'\x00\x05N\xb1{\xed\xe7\x9b\xfe!&\xff\x00L/\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9c\x84'b"\x00\x05N\xb1{\xee\x0c<\xfe\x1c\xbb\x01\x01\xa3/\xb6\x1e:5'\xe9\xba\x01\rx9\x00\x00\x00\x00\x00\x00\x00\x00Z\x0b\x0e=>\xba4<-\xf0"b'\x00\x05N\xb1{\xee\x0c\xd8\xfe\x03\xbc\x01\x01\xa5\xc5\x14\x00/&'b'\x00\x05N\xb1{\xee\rX\xfe\x0c\xbd\x01\x01\x02\x18 2|\xb1N\x05\x00\xf0\x8d\x04\x007\x91'b'\x00\x05N\xb1{\xee\r\xc0\xfe\x16\xbe\x01\x01\x88}\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00@l'b'\x00\x05N\xb1{\xee\x0e\x1c\xfe\x16\xbf\x01\x01\xc1\x9dI\x1a=\x04C\x8d<\t\xcc\\=\xd8#\x1f>\x00\x00\x00\x00?\x03\xcd\x0c'b'\x00\x05N\xb1{\xee\x0e|\xfe\x15\xc0\x01\x01$\xba^\xcb\x11\xea\x04\xb5\x04]\x04\x99\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00M\x0b'b'\x00\x05N\xb1{\xee\x0e\xd4\xfe\x16\xc1\x01\x01#,\x8e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\rN'b'\x00\x05N\xb1{\xee\x0f$\xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18'b'\x00\x05N\xb1{\xef\x8e\x88\xfe\x14\xc3\x01\x01J\xcc\xccL=\xcc\xccL=)\\\x0f\xbe\x00\x00\x00\x00\xb3\x00\x0b\x007L'b'\x00\x05N\xb1{\xef\x8f\x04\xfe\x1c\xc4\x01\x01!\x0e\x8e\x04\x00}\xa6\x02\x18\xbf\xe7\xb8\xfd\xfaZ\n\x00j\xff\xff\xff\xf9\xff\x02\x00\x00\x00\x05F\x84\xc3'b'\x00\x05N\xb1{\xef\x8fp\xfe\x1c\xc5\x01\x01 \xa5\x8e\x04\x00\x86\x0bp>\xfc \xec>!\xfe\xf8>g\x9e\x98\xbd\x81\xe3\xc7<\xf1}\x01<\x06Q'b"\x00\x05N\xb1{\xef\xa6\xd3\xfe5'\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xddf"b'\x00\x05N\xb1{\xef\xa9\x07\xfe!(\xff\x00L/\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\n\x1c'b"\x00\x05N\xb1{\xf0\xfeX\xfe\x1a\xc6\x01\x01\x1b\x14\x85\xcd\x11\x00\x00\x00\x00\xf6\xff\xff\xff'\xfc\xf5\xff\xf6\xff\x00\x00\xf5\xfe\x04\x00y\x01\x04\xe4"b'\x00\x05N\xb1{\xf0\xfe\xe0\xfe\x16\xc7\x01\x01t\xb9\x8e\x04\x00\x00\x00\x00\x00(\xfc\xf4\xff\xfd\xff\xf9\xff\xfd\xfe\xaa\xff1\x02"\x0e'b'\x00\x05N\xb1{\xf0\xffH\xfe\x16\xc8\x01\x01\x81\xb9\x8e\x04\x00\xfe\xff"\x00&\xfc\xf0\xff\xf9\xff\xfb\xff\x83\x00\xb0\x00f\x02 \x0b'b'\x00\x05N\xb1{\xf0\xff\xa4\xfe\x0e\xc9\x01\x01\x1d\xb9\x8e\x04\x00\x94\xaciDG\xe14>v\x10\xa2\x0f'b'\x00\x05N\xb1{\xf1\x00\x08\xfe\x0e\xca\x01\x01\x89\xb9\x8e\x04\x00\x8f\xf2iD\n\xd7\x04?\xc9\x15\xa6\xdb'b'\x00\x05N\xb1{\xf1\x00x\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x01\xff:_\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcc\x02'b'\x00\x05N\xb1{\xf1\x00\xe0\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02'b'\x00\x05N\xb1{\xf1\x01D\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\x00\x05N\xb1{\xf1\x15\xec\xfe\x04\xce\x01\x01\x98\x00\x00\x80\x8a\x87\x06'b'\x00\x05N\xb1{\xf1\x16D\xfe\x02\xcf\x01\x01*\x00\x00s\xa9'b'\x00\x05N\xb1{\xf1\x16\xac\xfe\x1e\xd0\x01\x01\x18\xb0\xe6\xca\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\x0f\xa5'b'\x00\x05N\xb1{\xf1\x17\x14\xfe\x1a\xd1\x01\x01>\xf6(\x0c\xc0\xebQ8>\x12\xcb!\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x88\xe1'b'\x00\x05N\xb1{\xf1\x17h\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5'b'\x00\x05N\xb1{\xf1\x17\xd4\xfe\x1c\xd3\x01\x01\x1e\xe1\x8e\x04\x00>\x10\xb8\xbc\xe6\xa0";\x0b9H@k?\xdd\xba\xf7.\x8b\xbb\xfd\xbb\x8f\xbb\x13\x18'b'\x00\x05N\xb1{\xf1\x18<\xfe\x18\xd4\x01\x01\xb2\xa9\xd4\x00\xbd\xfaa\xaf;#\xafH\xc0\xf6H)D\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\x0e^'b'\x00\x05N\xb1{\xf1\x18\xa4\xfe\x1c\xd5\x01\x01\xa359\x1f:)\xe5\xe9\xba\x8a\xd6z9\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x80\xe9<\x82f\x8c<\x90\xc5'b'\x00\x05N\xb1{\xf1\x18\xf8\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3'b'\x00\x05N\xb1{\xf1\x19T\xfe\x0c\xd7\x01\x01\x02\xe8\x0f6|\xb1N\x05\x00\xf5\x8e\x04\x00\x9c\xb7'b'\x00\x05N\xb1{\xf1\x19\xb8\xfe\x16\xd8\x01\x01\x88|\xa6\x02\x18\xbf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9f\xb9'b'\x00\x05N\xb1{\xf1\x1a\x1c\xfe\x16\xd9\x01\x01\xc1G\x83\xc9<\x9fb\x8c\x00\x00\x00\x00?\x03_6'b'\x00\x05N\xb1{\xf1\x1ax\xfe\t\x0e\n\x00mn\x00\x00\x00\x00\xd3\x00\x00\x00s3'b'\x00\x05N\xb1{\xf1`_\xfe5)\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01d\xdb'b'\x00\x05N\xb1{\xf1v\xcf\xfe!*\xff\x00L\x12\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00v\x9f'b'\x00\x05N\xb1{\xf2\xaaT\xfe\x15\xda\x01\x01$[\\\xcf\x11\xf1\x04\xb5\x04]\x04\x91\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4B'b'\x00\x05N\xb1{\xf2\xaa\xc4\xfe\x16\xdb\x01\x01#2\x8f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe6S'b'\x00\x05N\xb1{\xf2\xab\x14\xfe\x03\xdc\x01\x01Ms\x00\x00\xc9s'b'\x00\x05N\xb1{\xf3e\x1b\xfe5+\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xe19'b'\x00\x05N\xb1{\xf3{\x7f\xfe!,\xff\x00L\x12\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf5y'b'\x00\x05N\xb1{\xf4\x1dt\xfe\x14\xdd\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xebQ8\xbe\x00\x00\x00\x00\xb3\x00\x0b\x00Y\xb0'b'\x00\x05N\xb1{\xf4\x1e\x10\xfe\x1a\xde\x01\x01\x1b\xe21\xd1\x11\x00\x00\x00\x00\x04\x00\x0f\x00\x14\xfc\xfe\xff\xfc\xff\x02\x00\xf5\xfe\x02\x00w\x01\xfe\xe5'b'\x00\x05N\xb1{\xf4\x1e\x84\xfe\x16\xdf\x01\x01t\xaa\x8f\x04\x00\x0f\x00\x16\x00/\xfc\x04\x00\x03\x00\xfb\xff\xfd\xfe\xa9\xff1\x02\xed\x83'b'\x00\x05N\xb1{\xf4\x1e\xf4\xfe\x16\xe0\x01\x01\x81\xaa\x8f\x04\x00\n\x00\x1a\x00\x1d\xfc\x01\x00\xfd\xff\xf7\xffz\x00\xb3\x00a\x02\xcfP'b'\x00\x05N\xb1{\xf4\x1fd\xfe\x0e\xe1\x01\x01\x1d\xaa\x8f\x04\x004\xabiDG\xe1\x1e>w\x10M\x8b'b'\x00\x05N\xb1{\xf4\x1f\xcc\xfe\x0e\xe2\x01\x01\x89\xaa\x8f\x04\x00\xd2\xf0iD\x8f\xc2\xfb>\xc9\x15\xc0\x07'b'\x00\x05N\xb1{\xf4 D\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01\xff:]\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xddn'b'\x00\x05N\xb1{\xf4 \xa8\xfe\x06\xe4\x01\x01}\xc5\x14\x00\x00\x03\x00L\\'b'\x00\x05N\xb1{\xf4!\x08\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX'b'\x00\x05N\xb1{\xf4!X\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b'b'\x00\x05N\xb1{\xf4!\xc0\xfe\x1e\xe7\x01\x01\x18 W\xd1\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xa2\xe6'b'\x00\x05N\xb1{\xf4"$\xfe\x1a\xe8\x01\x01>\x99\x99\xf9\xbf\x1e\x85k>\xc0G9\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00rY'b'\x00\x05N\xb1{\xf4"x\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\x00\x05N\xb1{\xf4"\xdc\xfe\x1c\xea\x01\x01!\xb4\x8f\x04\x00|\xa6\x02\x18\xc0\xe7\xb8\xfd\xdcZ\n\x00L\xff\xff\xff\xf9\xff\x03\x00\x00\x00\x04F\xd1\xac'b'\x00\x05N\xb1{\xf4#L\xfe\x1c\xeb\x01\x01 \xbe\x8f\x04\x00\xe0\xbef>T\xf6\xf0>\x1f8\x05?,\xb9\x94\xbd\xa7l\x0f=Ib\xef;m\xe6'b'\x00\x05N\xb1{\xf4#\xa0\xfe\x03\xec\x01\x01Ms\x00\x00A\x9e'b'\x00\x05N\xb1{\xf5F\xcb\xfe5-\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x7f\x16'b'\x00\x05N\xb1{\xf5]\x0b\xfe!.\xff\x00L\x12\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00t$'b'\x00\x05N\xb1{\xf5\xc5$\xfe\x12\xed\x01\x01\xfc\xe4\x8f\x04\x004\x00\x01\x00ARMMASK\x00WrV\xfb'b'\x00\x05N\xb1{\xf5\xc5\xdc\xfe\t\xee\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x1d4'b'\x00\x05N\xb1{\xf5\xc6|\xfe\x1c\xef\x01\x01\x1e\xe7\x8f\x04\x00\xdc\x81\xb7\xbc\x84\x8e\xf2:\xef;H@\xecL\x89;\xfb\x86Y\xba\x12k\xeb\xbb\x8f\x0b'b'\x00\x05N\xb1{\xf5\xc6\xf8\xfe\x18\xf0\x01\x01\xb2\x8f\x88\xff\xbc\xbc\xe6\x9a;\xe8\xa9H\xc0\xf6H)D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd{ 'b'\x00\x05N\xb1{\xf5\xc7p\xfe\x1c\xf1\x01\x01\xa3\xc5\xc0\x1f:\x96\x9b\xea\xba{*~9\x00\x00\x00\x00\x00\x00\x00\x00\xea\x12\xe8<\xc1\x12\xa4\x00\x00\x00\x00?\x03\x14,'b'\x00\x05N\xb1{\xf5\xc9\xbc\xfe\x15\xf7\x01\x01$\xd6W\xd3\x11\xf3\x04\xc7\x04]\x04t\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xe5'b'\x00\x05N\xb1{\xf5\xca$\xfe\x16\xf8\x01\x01#7\x90\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00<\xe3'b'\x00\x05N\xb1{\xf5\xcap\xfe\x03\xf9\x01\x01Ms\x00\x00XR'b'\x00\x05N\xb1{\xf7"\x8b\xfe5/\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfa\xf4'b'\x00\x05N\xb1{\xf7M\x83\xfe!0\xff\x00L!\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00 \xec'b'\x00\x05N\xb1{\xf7\x89\xfc\xfe\x14\xfa\x01\x01J\n\xd7#<\n\xd7#<=\nW\xbe\n\xd7#\xbc\xb3\x00\x0b\x00\xe8\x8a'b"\x00\x05N\xb1{\xf7\x8a\xc4\xfe\x1a\xfb\x01\x01\x1b\x83\xde\xd4\x11\x00\x00\x00\x00\r\x00\x1b\x00'\xfc\x03\x00\xfe\xff\x06\x00\xf4\xfe\x05\x00y\x01\x8aj"b'\x00\x05N\xb1{\xf7\x8bT\xfe\x16\xfc\x01\x01t\x9b\x90\x04\x00\x19\x00\x1e\x00*\xfc\x06\x00\x04\x00\x01\x00\xfe\xfe\xaa\xff1\x02q\xa5'b'\x00\x05N\xb1{\xf7\x8b\xe0\xfe\x16\xfd\x01\x01\x81\x9b\x90\x04\x00\x0c\x00\x1b\x00 \xfc\xf9\xff\x08\x00\x04\x00x\x00\xb5\x00a\x02 \xb9'b'\x00\x05N\xb1{\xf7\x8c\\\xfe\x0e\xfe\x01\x01\x1d\x9b\x90\x04\x00\x86\xabiD\x00\x00$>w\x10\t\xf7'b'\x00\x05N\xb1{\xf7\x8c\xd4\xfe\x0e\xff\x01\x01\x89\x9b\x90\x04\x00\xa2\xefiD\xaeG\xf2>\xc9\x15\xfd|'b'\x00\x05N\xb1{\xf7\x8dX\xfe\x1f\x00\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01B\xd7\xa3\xf0\xbf\x00\x00\x80>$mO\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00%\xb7'b'\x00\x05N\xb1{\xf7\x8f\xe0\xfe\x08\x06\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbfL'b'\x00\x05N\xb1{\xf8\xce\xc8\xfe\x03\x07\x01\x01Ms\x00\x00\xce!'b'\x00\x05N\xb1{\xf8\xcf\xac\xfe\x1c\x08\x01\x01!i\x90\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\xb4Z\n\x00$\xff\xff\xff\xf9\xff\x03\x00\xff\xff\x06F\x90P'b'\x00\x05N\xb1{\xf8\xd00\xfe\x1c\t\x01\x01 \xc3\x90\x04\x00C\xe8]>"\xf1\xf3>Q\x9e\x0e?\x96\xe6\x8f\xbd\xed\xf9\x19=d\xec\x85<\xf9\xf4'b'\x00\x05N\xb1{\xf8\xd0\x98\xfe\x1c\n\x01\x01\x1e\xec\x90\x04\x00\x85\xeb\xb2\xbc\xb2\xd3\x03;\xcc=H@~X~\xbb\x98\x8b\xa4;\xfd\xe7f;\x84p'b'\x00\x05N\xb1{\xf8\xd0\xfc\xfe\x18\x0b\x01\x01\xb2\xc4\xed\xf9\xbc\x00\x8f\x8e;\xab\xa8H\xc0\xb8N)D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd\xbdW'b'\x00\x05N\xb1{\xf8\xd1X\xfe\x1c\x0c\x01\x01\xa3\xbeW :@O\xeb\xba4\x04\x819\x00\x00\x00\x00\x00\x00\x00\x00I\xa8\xbe<\xeam\xbc<\xca\x00'b'\x00\x05N\xb1{\xf8\xd1\xb0\xfe\x03\r\x01\x01\xa5\xc5\x14\x00\xfa\x81'b'\x00\x05N\xb1{\xf8\xd2\x04\xfe\x0c\x0e\x01\x01\x02\xf8\x06>|\xb1N\x05\x00\x00\x91\x04\x00\xef\xea'b'\x00\x05N\xb1{\xf8\xd2\\\xfe\x16\x0f\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb4G'b'\x00\x05N\xb1{\xf8\xd2\xc4\xfe\x16\x10\x01\x01\xc1F\xd2\xad<\x12H\x88< \xdf\xcf<`\x9f >\x00\x00\x00\x00?\x03\xab\x87'b'\x00\x05N\xb1{\xf9\x17[\xfe51\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x1ce'b'\x00\x05N\xb1{\xf9As\xfe!2\xff\x00LI\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00u\x92'b'\x00\x05N\xb1{\xfa\x13\x8b\xfe\t3\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xf7/'b'\x00\x05N\xb1{\xfaF\x90\xfe\x03\x11\x01\x01Ms\x00\x00\x07g'b'\x00\x05N\xb1{\xfa[(\xfe\x15\x12\x01\x01$\x8fT\xd7\x11\xf5\x04\xba\x04]\x04\x82\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00 P'b'\x00\x05N\xb1{\xfa[\x94\xfe\x16\x13\x01\x01#<\x91\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xcb\x8e'b'\x00\x05N\xb1{\xfb.\x7f\xfe54\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01M]'b'\x00\x05N\xb1{\xfb\xa9\x0f\xfe!5\xff\x00LI\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00>\xde'b'\x00\x05N\xb1{\xfb\xcd\xa4\xfe\x1a\x14\x01\x01\x1b\xa5\x8d\xd8\x11\x00\x00\x00\x00\xfa\xff\x05\x00\x19\xfc\x00\x00\x01\x00\xfb\xff\xf7\xfe\x03\x00v\x01l\xc6'b'\x00\x05N\xb1{\xfb\xce\xc8\xfe\x16\x15\x01\x01t\x8c\x91\x04\x00\xfd\xff\x0e\x00\x1c\xfc\xff\xff\t\x00\x00\x00\xfe\xfe\xaa\xff1\x02^\x9c'b'\x00\x05N\xb1{\xfb\xcfl\xfe\x16\x16\x01\x01\x81\x8c\x91\x04\x00\x01\x00\x15\x00\x15\xfc\xf9\xff\xf7\xff\xf6\xff{\x00\xb9\x00Y\x02\xa1f'b'\x00\x05N\xb1{\xfb\xcf\xc4\xfe\x0e\x17\x01\x01\x1d\x8c\x91\x04\x00\xe1\xaaiD\x14\xae\x19>x\x10*('b'\x00\x05N\xb1{\xfb\xd0\x14\xfe\x0e\x18\x01\x01\x89\x8c\x91\x04\x00\x8b\xefiD\\\x8f\xf1>\xca\x15|7'b'\x00\x05N\xb1{\xfb\xd0\x84\xfe\x1f\x19\x01\x01\x01/\xfca\x00/\xfca\x00/\xfcA\x003\x01B\xcc\xcc\xec\xbf\xe1z\x94>\xe1\xaa{\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x92,'b'\x00\x05N\xb1{\xfb\xd2\\\xfe\x08\x1f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xaa>'b'\x00\x05N\xb1{\xfb\xd2\xac\xfe\x14 \x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7#\xbc\xb3\x00\x00\x00\xc1\xab'b'\x00\x05N\xb1{\xfb\xd3\x00\xfe\x1c!\x01\x01!2\x91\x04\x00\x80\xa6\x02\x18\xc2\xe7\xb8\xfd\xa0Z\n\x00\x10\xff\xff\xff\x00\x00\xff\xff\x00\x00\x08F\xcc\n'b'\x00\x05N\xb1{\xfb\xd3T\xfe\x03"\x01\x01Ms\x00\x00_\x00'b"\x00\x05N\xb1{\xfb\xd6\xa3\xfe%6\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00M\xf1"b'\x00\x05N\xb1{\xfd]c\xfe57\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x82J'b'\x00\x05N\xb1{\xfd\x933\xfe!8\xff\x00LI\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe1\xb1'b'\x00\x05N\xb1{\xfd\xa8\xc0\xfe\x1c#\x01\x01\x1e\xdd\x91\x04\x00N\xed\xaf\xbc.q\x05;\xd8BH@\x98W\xb9\xba\x95\xd2\x9c8\xe0\x86F\xb9@\x19'b'\x00\x05N\xb1{\xfd\xa9D\xfe\x18$\x01\x01\xb2\x84x\xf7\xbc\x16\x1a\x8c;l\xa8H\xc0\xc2U)D\x80\xa6\x02\x18\xc2\xe7\xb8\xfdL\x92'b'\x00\x05N\xb1{\xfd\xa9\x9c\xfe\x03%\x01\x01/\xff\x00\x00\x87\xe4'b'\x00\x05N\xb1{\xfd\xaaH\xfe\x1c&\x01\x01\xa3\xf9\xec :\xa9\xf1\xeb\xbaJ\x0c\x839\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xb1\xaa<\x0f\xe6\xc1<\x7f^'b"\x00\x05N\xb1{\xfd\xaa\x94\xfe\x03'\x01\x01\xa5\xbd\x14\x00D\xae"b'\x00\x05N\xb1{\xfd\xaa\xe4\xfe\x0c(\x01\x01\x02\x98\xfeA|\xb1N\x05\x00\xf1\x91\x04\x00\xbeV'b'\x00\x05N\xb1{\xfd\xab<\xfe\x16)\x01\x01\x88\x80\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xff.'b'\x00\x05N\xb1{\xfd\xab\x90\xfe\x16*\x01\x01\xc1\x14q\x95:\xaa]\t;\xec\x85!;\xde:\x18>\x00\x00\x00\x00\x00\x00\xcf\xc7'b'\x00\x05N\xb1{\xfd\xab\xe4\xfe\x15+\x01\x01$\x7f\x01\xdb\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00p\xc5'b'\x00\x05N\xb1{\xfd\xac8\xfe\x16,\x01\x01#-\x92\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18\x08'b'\x00\x05N\xb1{\xfe\xd1\x04\xfe\x03-\x01\x01Ms\x00\x00\xed\xb1'b'\x00\x05N\xb1{\xfe\xf9\x90\xfe\x1a.\x01\x01\x1b\x1a<\xdc\x11\x00\x00\x00\x00\x07\x00\r\x00"\xfc\x04\x00\xff\xff\xfe\xff\xf7\xfe\x06\x00z\x011\xcf'b'\x00\x05N\xb1{\xfe\xfa\x0c\xfe\x16/\x01\x01t}\x92\x04\x00\x05\x00\x13\x00,\xfc\x00\x00\x04\x00\xf9\xff\xff\xfe\xb9\xff7\x02K\xdd'b'\x00\x05N\xb1{\xfe\xfa|\xfe\x160\x01\x01\x81~\x92\x04\x00\x02\x00\x14\x00\x1a\xfc\xf9\xff\x03\x00\xf7\xff\x80\x00\xc1\x00_\x02u-'b'\x00\x05N\xb1{\xfe\xfa\xd8\xfe\x0e1\x01\x01\x1d~\x92\x04\x00;\xa8iD\\\x8f\xde=w\x10\xb0\x16'b'\x00\x05N\xb1{\xfe\xfb0\xfe\x0e2\x01\x01\x89~\x92\x04\x00p\xediDR\xb8\xe0>\xcb\x15\x0fm'b'\x00\x05N\xb1{\xfe\xfb\xd0\xfe\x1f3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfcA\x00\xa1\x00B\xcc\xcc\xec\xbf\xe1z\x94>\xf64\x9f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x18\xeb'b'\x00\x05N\xb1{\xfe\xfe\xb0\xfe\x089\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x96'b'\x00\x05N\xb1{\xfe\xff\x08\xfe\x14:\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#\xbc\xb3\x00\x00\x00Q\x00'b'\x00\x05N\xb1{\xffJ\xcf\xfe59\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01;\xf7'b'\x00\x05N\xb1{\xffv\xb7\xfe\x06:\xff\x00B\x04\x00\x01\x00\x00\x01\xc4\xfd'b'\x00\x05N\xb1{\xffw\x8b\xfe!:\xff\x00Ll\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd2\x99'b'\x00\x05N\xb1|\x00kh\xfe\x1c;\x01\x01!\xfb\x91\x04\x00\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\xa0Z\n\x00\x10\xff\xff\xff\x00\x00\x00\x00\x00\x00\tF\xf7\xda'b'\x00\x05N\xb1|\x00l\x04\xfe\x1c<\x01\x01\x1e\xce\x92\x04\x00\x1a\x14\xa7\xbc<\x86\xac:\xc5DH@\x17\x1bK:\xa8\xb8\xc3:\xf3\t\xef\xba\xe2\xaa'b'\x00\x05N\xb1|\x00ld\xfe\x18=\x01\x01\xb2\xfd\x99\xf0\xbc^#{;R\xacH\xc0)l)D\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\xfe\xcb'b'\x00\x05N\xb1|\x00l\xb4\xfe\x03>\x01\x01Ms\x00\x00E`'b'\x00\x05N\xb1|\x00mT\xfe\x1c?\x01\x01\xa3\r\x85!:\x8b\x9b\xec\xba\xc9J\x859\x00\x00\x00\x00\x00\x00\x00\x007\x15}<\x87`\xd9<\xfaV'b'\x00\x05N\xb1|\x00m\x9c\xfe\x03@\x01\x01\xa5\xc5\x14\x00\xd6^'b'\x00\x05N\xb1|\x00m\xec\xfe\x0cA\x01\x01\x02\x18\xa8E|\xb1N\x05\x00\xe2\x92\x04\x00L\xa5'b'\x00\x05N\xb1|\x00n@\xfe\x16B\x01\x01\x88\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfd\xd2'b'\x00\x05N\xb1|\x00n\xac\xfe\x16C\x01\x01\xc1\xb1\x8f\xd5:[;\x02;X\x92^<,\xd5(>\x00\x00\x00\x00\xa5\x03\xb2\xea'b'\x00\x05N\xb1|\x00o8\xfe\t\x0f\n\x00m\r\x00\x00\x00\x00\xd2\x00\x00\x00z\xcf'b'\x00\x05N\xb1|\x01P\xd7\xfe5<\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01j\xcf'b'\x00\x05N\xb1|\x01gO\xfe!=\xff\x00L\xb6\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00A\xaf'b'\x00\x05N\xb1|\x01\xf4\x18\xfe\x15D\x01\x01$\x00\xaf\xde\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf/'b'\x00\x05N\xb1|\x01\xf4\xa0\xfe\x16E\x01\x01#\x1e\x93\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe2\xa5'b'\x00\x05N\xb1|\x01\xf5\x04\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b'\x00\x05N\xb1|\x03-\x1f\xfe5>\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xef-'b'\x00\x05N\xb1|\x03C+\xfe!?\xff\x00L\xb6\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc0\xf2'b'\x00\x05N\xb1|\x03\xb0\xb8\xfe\x1aG\x01\x01\x1b\x80\xe9\xdf\x11\x00\x00\x00\x00\x08\x00\x03\x00\x15\xfc\x01\x00\x00\x00\x00\x00\xf4\xfe\x05\x00y\x01P\xf1'b"\x00\x05N\xb1|\x03\xb1<\xfe\x16H\x01\x01tn\x93\x04\x00\x0c\x00\n\x00'\xfc\xff\xff\x04\x00\xfd\xff\x00\xff\xb8\xff8\x02p["b'\x00\x05N\xb1|\x03\xb1\xa4\xfe\x16I\x01\x01\x81n\x93\x04\x00\x06\x00\x11\x00\x19\xfc\xfa\xff\x03\x00\xfd\xff~\x00\xbf\x00a\x023b'b'\x00\x05N\xb1|\x03\xb1\xfc\xfe\x0eJ\x01\x01\x1do\x93\x04\x00\xdd\xa5iDG\xe1\x92=x\x10\x80\xc5'b'\x00\x05N\xb1|\x03\xb2T\xfe\x0eK\x01\x01\x89o\x93\x04\x00\xf8\xe9iD\xc2\xf5\xc4>\xca\x15\xea!'b'\x00\x05N\xb1|\x03\xb2\xb8\xfe\x1fL\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x00\x9b<6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x06\x01'b'\x00\x05N\xb1|\x03\xb3\x10\xfe\x06M\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xeb'b'\x00\x05N\xb1|\x03\xb3d\xfe\x04N\x01\x01\x98\x00\x00\xa0\x8ak\xc1'b'\x00\x05N\xb1|\x03\xb3\xb0\xfe\x02O\x01\x01*\x00\x00n/'b'\x00\x05N\xb1|\x03\xb4\x0c\xfe\x1eP\x01\x01\x18\xa0M\xdd\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c]+'b'\x00\x05N\xb1|\x03\xb4l\xfe\x1aQ\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x14\x80:\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe5\xb0'b'\x00\x05N\xb1|\x03\xb4\xbc\xfe\x08R\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8ac'b'\x00\x05N\xb1|\x03\xb5\x14\xfe\x14S\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xa3p}\xbf\x00\x00\x00\x00\xb3\x00\x00\x00\x91@'b'\x00\x05N\xb1|\x03\xb5t\xfe\x1cT\x01\x01!\x8c\x93\x04\x00~\xa6\x02\x18\xc2\xe7\xb8\xfd\xdaW\n\x00J\xfc\xff\xff\x00\x00\x00\x00\x01\x00\tF[\x9f'b'\x00\x05N\xb1|\x03\xb5\xdc\xfe\x1cU\x01\x01\x1e\xbe\x93\x04\x00\ns\xa3\xbc\xc8\xc8X:bGH@\xae\xc179N\xf3\x949\xaa4\x958\xf0\xe9'b'\x00\x05N\xb1|\x03\xb68\xfe\x18V\x01\x01\xb2\xe6\xcc\xed\xbc\x80\xc4b;m\xa9H\xc0\xae\x87)D~\xa6\x02\x18\xc2\xe7\xb8\xfd\x9c\x1a'b'\x00\x05N\xb1|\x03\xb6\x88\xfe\x12W\x01\x01\xfc\xc8\x93\x04\x004\x00\x01\x00ARMMASK\x00Wr1\xdf'b'\x00\x05N\xb1|\x03\xb6\xd8\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae'b'\x00\x05N\xb1|\x03\xcb\xa4\xfe\tY\x01\x01\x00\t\x00\x00\x00\x02\x03Q\x03\x03G\x10'b'\x00\x05N\xb1|\x05\x06\xa3\xfe5@\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xcbU'b'\x00\x05N\xb1|\x05\x1d\xc8\xfe\x1cZ\x01\x01\xa3\x0e ":\xd0N\xed\xba\xa1\xc0\x879\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xc9]\x00\x00\x00\x00\xa5\x03\x02\x89'b'\x00\x05N\xb1|\x05\x1f\xd4\xfe\x03`\x01\x01M\x0b\x00\x00\\\xd1'b'\x00\x05N\xb1|\x05"\x0c\xfe\ta\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03!\xb0'b'\x00\x05N\xb1|\x05"o\xfe!A\xff\x00L\xd8\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa9A'b'\x00\x05N\xb1|\x05J\xc8\xfe\x15b\x01\x01$\xd8X\xe2\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\xa8'b'\x00\x05N\xb1|\x05KH\xfe\x16c\x01\x01#\x0e\x94\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Q\xc3'b'\x00\x05N\xb1|\x06\x9eD\xfe\x03d\x01\x01Ms\x00\x00\x1fx'b'\x00\x05N\xb1|\x06\xb3P\xfe\x1ae\x01\x01\x1b\xb6\x94\xe3\x11\x00\x00\x00\x00\x0b\x00\x00\x00\x1f\xfc\x00\x00\xfb\xff\x04\x00\xf6\xfe\x05\x00z\x01\x8d\xb5'b'\x00\x05N\xb1|\x06\xb3\xb8\xfe\x16f\x01\x01t_\x94\x04\x00\x0f\x00\t\x00$\xfc\x00\x00\xff\xff\x02\x00\xff\xfe\xb9\xff8\x02T\x82'b'\x00\x05N\xb1|\x06\xb44\xfe\x16g\x01\x01\x81_\x94\x04\x00\x08\x00\x0e\x00\x1c\xfc\xfe\xff\x00\x00\xf5\xff\x81\x00\xc2\x00d\x02\xf6\xa7'b'\x00\x05N\xb1|\x06\xb4\xac\xfe\x0eh\x01\x01\x1d_\x94\x04\x00\x06\xa5iD\x00\x00p=x\x10\xa1['b'\x00\x05N\xb1|\x06\xb5$\xfe\x0ei\x01\x01\x89_\x94\x04\x00}\xe9iD\xb8\x1e\xc1>\xcb\x15\xbb\xda'b'\x00\x05N\xb1|\x06\xb5\xb0\xfe\x1fj\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x9b<5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xad\xb4'b'\x00\x05N\xb1|\x06\xb6(\xfe\x06k\x01\x01}\xc2\x14\x00\x00\x03\x00\x03\x15'b'\x00\x05N\xb1|\x06\xb6\xbc\xfe\x04l\x01\x01\x98\x00\x00\xa0\x8a\xa8\xad'b'\x00\x05N\xb1|\x06\xb7T\xfe\x02m\x01\x01*\x00\x00V{'b'\x00\x05N\xb1|\x06\xb7\xd8\xfe\x1en\x01\x01\x18\x08l\xe3\x11\x00\x00\x00\x00}\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x03\x00-K\x03\x0c\xd7\xa3'b'\x00\x05N\xb1|\x06\xb8\\\xfe\x1ao\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xa9\xfc'b'\x00\x05N\xb1|\x06\xb8\xd0\xfe\x08p\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00p\xdd'b'\x00\x05N\xb1|\x06\xb9@\xfe\x14q\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xf5(\\\xbf\n\xd7\xa3<\xb3\x00\x00\x00\x92\xee'b"\x00\x05N\xb1|\x06\xb9\xa4\xfe\x1cr\x01\x01!U\x94\x04\x00}\xa6\x02\x18\xc1\xe7\xb8\xfd4X\n\x00\xa4\xfc\xff\xff\xff\xff\x00\x00\x02\x00\x0cF'{"b'\x00\x05N\xb1|\x06\xe7W\xfe5B\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01N\xb7'b"\x00\x05N\xb1|\x07'\xb7\xfe!C\xff\x00L\xd8\xfc3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00(\x1c"b'\x00\x05N\xb1|\x08\x13\xe0\xfe\x1cs\x01\x01\x1e\xaf\x94\x04\x00\xddH\x9f\xbc\x00\xac\xf6\xb7\xfePH@\xaa\x0f\xeb\xba\xbf!\xae\xbb\xc6K\x84:\n`'b'\x00\x05N\xb1|\x08\x14T\xfe\x18t\x01\x01\xb2A\xfe\xe8\xbc\x17\x03>;_\xa5H\xc0\x14\x8e)D}\xa6\x02\x18\xc1\xe7\xb8\xfdso'b'\x00\x05N\xb1|\x08\x14\xac\xfe\x1cu\x01\x01\xa3\xd6\xbd":t\n\xee\xba8g\x8a9\x00\x00\x00\x00\x00\x00\x00\x00\xb3\xa9D<\xf4\xd9\xd6<\n\x93'b'\x00\x05N\xb1|\x08\x15\x08\xfe\x03v\x01\x01\xa5\xc8\x14\x00`%'b'\x00\x05N\xb1|\x08\x15`\xfe\x0cw\x01\x01\x02\x18\xfbL|\xb1N\x05\x00\xc3\x94\x04\x00o\xd0'b'\x00\x05N\xb1|\x08\x15\xb4\xfe\x16x\x01\x01\x88}\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf3\xfa'b'\x00\x05N\xb1|\x08\x16\x04\xfe\x16y\x01\x01\xc1s\xc9\xed;\xfc\rb;\xc72\xf8<\xf8\xcd >\x00\x00\x00\x00\xa5\x03XA'b'\x00\x05N\xb1|\x08\x16x\xfe\x03{\x01\x01Ms\x00\x00\xd5\x92'b'\x00\x05N\xb1|\x08\xfbo\xfe5D\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd0\x98'b'\x00\x05N\xb1|\t&\x07\xfe!E\xff\x00L\n\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xda^'b'\x00\x05N\xb1|\tb\x0f\xfe\tF\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa3\x92'b'\x00\x05N\xb1|\t\xb6\xd8\xfe\x15|\x01\x01$\\\x07\xe6\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00z\xd9'b'\x00\x05N\xb1|\t\xb7\\\xfe\x16}\x01\x01#\xff\x94\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00B\xf5'b'\x00\x05N\xb1|\t\xb7\xb0\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b'\x00\x05N\xb1|\t\xcc\x0c\xfe\x1a\x7f\x01\x01\x1bG>\xe7\x11\x00\x00\x00\x00\n\x00\x06\x00\x1a\xfc\x01\x00\xff\xff\x00\x00\xf6\xfe\x06\x00z\x01[\xd9'b'\x00\x05N\xb1|\t\xcch\xfe\x16\x80\x01\x01tO\x95\x04\x00\x10\x00\x12\x00#\xfc\x04\x00\x00\x00\x00\x00\xff\xfe\xb8\xff7\x02\x86\x0c'b'\x00\x05N\xb1|\t\xcc\xcc\xfe\x16\x81\x01\x01\x81O\x95\x04\x00\x07\x00\x11\x00\x1f\xfc\xfd\xff\x00\x00\xfe\xff\x85\x00\xcb\x00k\x02\xa1\xd2'b'\x00\x05N\xb1|\t\xcd(\xfe\x0e\x82\x01\x01\x1dO\x95\x04\x00\xcb\xa4iD\xaeGa=u\x10\xef\x12'b'\x00\x05N\xb1|\t\xcdt\xfe\x0e\x83\x01\x01\x89O\x95\x04\x00\x87\xe8iD\xa4p\xb9>\xc8\x15\xef\x87'b'\x00\x05N\xb1|\t\xcd\xcc\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x00\x9b<5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xbfw'b'\x00\x05N\xb1|\t\xce\x1c\xfe\x06\x85\x01\x01}\xc6\x14\x00\x00\x03\x00<\x8e'b'\x00\x05N\xb1|\t\xceh\xfe\x04\x86\x01\x01\x98\x00\x00\xa0\x8a\x15\x9c'b'\x00\x05N\xb1|\t\xce\xac\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0'b'\x00\x05N\xb1|\t\xcf\x00\xfe\x1e\x88\x01\x01\x18Hy\xe6\x11\x00\x00\x00\x00}\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c)S'b'\x00\x05N\xb1|\t\xcfT\xfe\x1a\x89\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00jO'b'\x00\x05N\xb1|\t\xcf\x9c\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1'b'\x00\x05N\xb1|\t\xcf\xe8\xfe\x14\x8b\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x8d9\x00\x00\x00\x00\x00\x00\x00\x00`\xfe+<\xf4\xd0\xde\x00\x00\x00\x00\xa5\x03XD'b'\x00\x05N\xb1|\x0b38\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b"\x00\x05N\xb1|\x0c\x86\xb3\xfe%I\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x08\xd6"b'\x00\x05N\xb1|\x0c\xba\\\xfe\x15\x95\x01\x01$*\xb1\xe9\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00[`'b'\x00\x05N\xb1|\x0c\xba\xc4\xfe\x16\x96\x01\x01#\xef\x95\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xeb\xb8'b'\x00\x05N\xb1|\x0c\xbb\x14\xfe\x03\x97\x01\x01/\xff\x00\x00\x82\xc9'b'\x00\x05N\xb1|\r\x0c\x03\xfe5J\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01i%'b'\x00\x05N\xb1|\r"\x83\xfe!K\xff\x00L7\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb1\x18'b'\x00\x05N\xb1|\x0eX$\xfe\x1a\x98\x01\x01\x1b@\xea\xea\x11\x00\x00\x00\x00\r\x00\x04\x00\x19\xfc\x02\x00\x00\x00\x02\x00\xf6\xfe\x04\x00x\x01()'b'\x00\x05N\xb1|\x0eX\xfc\xfe\x16\x99\x01\x01t@\x96\x04\x00\n\x00\x04\x00!\xfc\x02\x00\x00\x00\xfd\xff\x00\xff\xb8\xff7\x02\\\xba'b'\x00\x05N\xb1|\x0eY\x94\xfe\x16\x9a\x01\x01\x81@\x96\x04\x00\x05\x00\x10\x00\x1e\xfc\xfc\xff\x00\x00\xff\xff\x86\x00\xc2\x00\\\x02/_'b'\x00\x05N\xb1|\x0eZ4\xfe\x0e\x9b\x01\x01\x1d@\x96\x04\x00\xa0\xa3iDff\x16=w\x10`B'b'\x00\x05N\xb1|\x0eZ\xbc\xfe\x0e\x9c\x01\x01\x89@\x96\x04\x00N\xe6iD\xd7\xa3\xa7>\xca\x15\xaf$'b'\x00\x05N\xb1|\x0e[$\xfe*\x9d\x01\x01\x96s\xe7f\xbc\x0fm\x01\x00w\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x0fd'b'\x00\x05N\xb1|\x0e[\x84\xfe\x1f\x9e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\x9b<:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x98\x10'b'\x00\x05N\xb1|\x0e[\xd8\xfe\x06\x9f\x01\x01}\xc5\x14\x00\x00\x03\x00\x9f@'b'\x00\x05N\xb1|\x0e\\,\xfe\x04\xa0\x01\x01\x98\x00\x00\xa0\x8a3\xcf'b'\x00\x05N\xb1|\x0e\\t\xfe\x02\xa1\x01\x01*\x00\x00\xd7\x8b'b'\x00\x05N\xb1|\x0e\\\xcc\xfe\x1e\xa2\x01\x01\x18\x88\x86\xe9\x11\x00\x00\x00\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xb0\xb2'b'\x00\x05N\xb1|\x0e]$\xfe\x1a\xa3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xcd\xb3'b'\x00\x05N\xb1|\x0e]l\xfe\x08\xa4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe74'b'\x00\x05N\xb1|\x0e]\xc0\xfe\x14\xa5\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5(\xbf\n\xd7#=\xb3\x00\x00\x00\xaa\x93'b'\x00\x05N\xb1|\x0e^\x08\xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd'b'\x00\x05N\xb1|\x0er\x98\xfe\x1c\xa7\x01\x01!\xe5\x95\x04\x00|\xa6\x02\x18\xc1\xe7\xb8\xfd\x06Y\n\x00v\xfd\xff\xff\xfc\xff\x00\x00\x05\x00\x12F\xd2\x9a'b'\x00\x05N\xb1|\x0e\xf5\xeb\xfe5L\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf7\n'b'\x00\x05N\xb1|\x0f,o\xfe!M\xff\x00L7\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x002\xfe'b"\x00\x05N\xb1|\x0f\xc7|\xfe\x1c\xa8\x01\x01\x1e\x90\x96\x04\x00=5\x96\xbc\xc4\xaf\xe6\xba\xbddH@\xa1p\xca9\xa5/)8\x97\x80\x11;\xb1'"b'\x00\x05N\xb1|\x0f\xc8\x04\xfe\x18\xa9\x01\x01\xb2\xb3\x84\xe2\xbcZR\xd5:\x9a\x96H\xc03\x93)D|\xa6\x02\x18\xc1\xe7\xb8\xfd\x03l'b'\x00\x05N\xb1|\x0f\xc8l\xfe\x1c\xaa\x01\x01\xa3\x8e\x01$:\x03\x94\xef\xba\x89C\x909\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xba\x18\x00\x00\x00\x00\xa5\x03\x9aN"b'\x00\x05N\xb1|\x0f\xca\x18\xfe\t\x10\n\x00m\x1a\x00\x00\x00\x00\xd2\x00\x00\x00\xee\x90'b'\x00\x05N\xb1|\x0f\xcad\xfe\x03\xaf\x01\x01Ms\x00\x00`q'b'\x00\x05N\xb1|\x0f\xde\xc8\xfe\x15\xb0\x01\x01$h]\xed\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xbe'b'\x00\x05N\xb1|\x0f\xdf(\xfe\x16\xb1\x01\x01#\xe0\x96\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1e.'b'\x00\x05N\xb1|\x10\xdd\xe7\xfe5N\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01r\xe8'b'\x00\x05N\xb1|\x10\xf4\x0f\xfe!O\xff\x00Lj\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00P\xc0'b'\x00\x05N\xb1|\x111\x8c\xfe\x1a\xb2\x01\x01\x1b\xc9\x97\xee\x11\x00\x00\x00\x00\x05\x00\x08\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x06\x00z\x019H'b'\x00\x05N\xb1|\x112$\xfe\x16\xb3\x01\x01t1\x97\x04\x00\x06\x00\t\x00 \xfc\x04\x00\x00\x00\x02\x00\x00\xff\xb7\xff7\x02\x9b\xe7'b'\x00\x05N\xb1|\x112\xc8\xfe\x16\xb4\x01\x01\x811\x97\x04\x00\x03\x00\x14\x00\x19\xfc\xfb\xff\x00\x00\xfd\xff\x80\x00\xc1\x00`\x02s#'b'\x00\x05N\xb1|\x1138\xfe\x0e\xb5\x01\x01\x1d1\x97\x04\x00\x06\xa4iD\x00\x000=x\x10j\x02'b'\x00\x05N\xb1|\x113\xa0\xfe\x0e\xb6\x01\x01\x891\x97\x04\x00\xc5\xe7iD)\\\xb3>\xcb\x15\x8e\xd9'b'\x00\x05N\xb1|\x114\x10\xfe\x1f\xb7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xdb\xcd'b'\x00\x05N\xb1|\x114x\xfe\x06\xb8\x01\x01}\xc3\x14\x00\x00\x03\x00>Z'b'\x00\x05N\xb1|\x114\xd4\xfe\x04\xb9\x01\x01\x98\x00\x00\xa0\x8a\x90\x02'b'\x00\x05N\xb1|\x115H\xfe\x02\xba\x01\x01*\x00\x00\x9cH'b'\x00\x05N\xb1|\x115\xcc\xfe\x1e\xbb\x01\x01\x18\xb0\x97\xec\x11\x00\x00\x00\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xa4r'b'\x00\x05N\xb1|\x1168\xfe\x1a\xbc\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00)\xd2'b'\x00\x05N\xb1|\x116\x84\xfe\x08\xbd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf2F'b'\x00\x05N\xb1|\x116\xd8\xfe\x14\xbe\x01\x01J\n\xd7#<\n\xd7#<=\n\x17\xbf\xcc\xccL=\xb3\x00\x00\x00\x16\x83'b'\x00\x05N\xb1|\x117 \xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b'\x00\x05N\xb1|\x12\xbc\x0b\xfe5P\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x94y'b'\x00\x05N\xb1|\x12\xd1\xf0\xfe\x1c\xc0\x01\x01!\xae\x96\x04\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdBY\n\x00\xb2\xfd\xff\xff\xfb\xff\x00\x00\x05\x00\x16F\xaf\xc3'b'\x00\x05N\xb1|\x12\xd2\x80\xfe\x1c\xc1\x01\x01\x1e\x81\x97\x04\x00\xb2\xe8\x93\xbcB\xcc$\xbb\x9dkH@\xec<\x98:\xb2u!\xbbcU\x8b\xb9\xde\x03'b'\x00\x05N\xb1|\x12\xd3\x10\xfe\x18\xc2\x01\x01\xb2\x01N\xe1\xbcV\xed\x8b:\xb9\x8eH\xc0=\x9a)D|\xa6\x02\x18\xc0\xe7\xb8\xfd\x9c\xb7'b'\x00\x05N\xb1|\x12\xd3t\xfe\x1c\xc3\x01\x01\xa3\x92\xa6$:5^\xf0\xba>t\x939\x00\x00\x00\x00\x00\x00\x00\x00\xdey\xee;\n\x0b\xd4\x00\x00\x00\x00\xa5\x03V\xed'b'\x00\x05N\xb1|\x12\xd5\x00\xfe\x12\xc8\x01\x01\xfc\xb3\x97\x04\x004\x00\x01\x00ARMMASK\x00Wr\x88\x98'b'\x00\x05N\xb1|\x12\xd5X\xfe\t\xc9\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03#|'b'\x00\x05N\xb1|\x12\xea\x97\xfe!Q\xff\x00Lj\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xec\xa4'b'\x00\x05N\xb1|\x14St\xfe\x03\xca\x01\x01Ms\x00\x00\x005'b'\x00\x05N\xb1|\x14g\xe4\xfe\x15\xcb\x01\x01$\xf4\x0c\xf1\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e{'b'\x00\x05N\xb1|\x14h@\xfe\x16\xcc\x01\x01#\xd2\x97\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc9G'b'\x00\x05N\xb1|\x14\xcf?\xfe5R\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x11\x9b'b'\x00\x05N\xb1|\x15!g\xfe!S\xff\x00L\x81\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe7\x8c'b"\x00\x05N\xb1|\x15\xddt\xfe\x1a\xcd\x01\x01\x1b\x1eE\xf2\x11\x00\x00\x00\x00\x0b\x00\x06\x00\x1b\xfc\x01\x00\x00\x00\x00\x00\xf6\xfe\x05\x00x\x01'\xb1"b'\x00\x05N\xb1|\x15\xdd\xec\xfe\x16\xce\x01\x01t"\x98\x04\x00\x03\x00\n\x00%\xfc\xfa\xff\xfe\xff\xfd\xff\xfe\xfe\xb8\xff7\x02\x95\x05'b'\x00\x05N\xb1|\x15\xdeL\xfe\x16\xcf\x01\x01\x81"\x98\x04\x00\x05\x00\x11\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x80\x00\xc0\x00X\x024\x0e'b'\x00\x05N\xb1|\x15\xde\xb8\xfe\x0e\xd0\x01\x01\x1d"\x98\x04\x003\xa3iDff\xf6\xcc\x15\xdc\xf3'b'\x00\x05N\xb1|\x15\xdf\x90\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00NX0'b'\x00\x05N\xb1|\x15\xe0\x04\xfe\x06\xd3\x01\x01}\xc8\x14\x00\x00\x03\x00*A'b'\x00\x05N\xb1|\x15\xe0|\xfe\x04\xd4\x01\x01\x98\x00\x00\xa0\x8a\x18\x1e'b'\x00\x05N\xb1|\x15\xe0\xd4\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5'b'\x00\x05N\xb1|\x15\xe1@\xfe\x1e\xd6\x01\x01\x18\xd8\xa8\xef\x11\x00\x00\x00\x00|\xa6\x02\x18\xc0\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xb2T'b'\x00\x05N\xb1|\x15\xe1\xb0\xfe\x1a\xd7\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x8a%'b'\x00\x05N\xb1|\x15\xe2\x0c\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83'b'\x00\x05N\xb1|\x15\xe2t\xfe\x14\xd9\x01\x01J\n\xd7#<\n\xd7#<\x14\xae\x07\xbf\x8f\xc2u=\xb3\x00\x00\x00\xfa\xfc'b'\x00\x05N\xb1|\x15\xe2\xcc\xfe\x1c\xda\x01\x01!@\x98\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\x9cY\n\x00\x0c\xfe\xff\xff\xfa\xff\x00\x00\x06\x00\x19F\xf9o'b'\x00\x05N\xb1|\x15\xe30\xfe\x03\xdb\x01\x01Ms\x00\x00\xc7\xef'b'\x00\x05N\xb1|\x15\xe3\xd0\xfe\x1c\xdc\x01\x01\x1er\x98\x04\x00\xd6a\x90\xbc\xaa1Z\xbbEsH@\xb7\x82`\xb7\xae\x8d\xa8\xbaZi\xa7:\xd3j'b'\x00\x05N\xb1|\x15\xe4$\xfe\x18\xdd\x01\x01\xb2\xc6\x1c\xdf\xbc`8\xe89\xa9\x87H\xc0G\xa1)D{\xa6\x02\x18\xc1\xe7\xb8\xfd\xc8\r'b'\x00\x05N\xb1|\x16\xdc\xb7\xfe5T\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8f\xb4'b'\x00\x05N\xb1|\x16\xf2\xf7\xfe!U\xff\x00L\x9e\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00)|'b'\x00\x05N\xb1|\x17|\xb8\xfe\x1c\xde\x01\x01\xa3\xf1K%:\x1b)\xf1\xba\x15\xc4\x969\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xbe\xd0;L\xba\xd4<6\x8d'b'\x00\x05N\xb1|\x17},\xfe\x03\xdf\x01\x01\xa5\xc2\x14\x00\xdf('b'\x00\x05N\xb1|\x17}\x80\xfe\x0c\xe0\x01\x01\x02\x18\xa1[|\xb1N\x05\x00\x87\x98\x04\x00\xe1\x0f'b'\x00\x05N\xb1|\x17}\xd8\xfe\x16\xe1\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00!l'b'\x00\x05N\xb1|\x17~,\xfe\x16\xe2\x01\x01\xc1\x154\xc3<\x92/\x86<\x95\rd<\x116\x1a>\x00\x00\x00\x00\xa5\x03$\xcd'b'\x00\x05N\xb1|\x17~\x80\xfe\x15\xe3\x01\x01$E\xb8\xf4\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x0c'b'\x00\x05N\xb1|\x17~\xd4\xfe\x16\xe4\x01\x01#\xc2\x98\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x04$'b'\x00\x05N\xb1|\x17\x7f\x1c\xfe\x03\xe5\x01\x01Ms\x00\x00B2'b'\x00\x05N\xb1|\x18\xa5O\xfe5V\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\nV'b'\x00\x05N\xb1|\x18\xbb{\xfe!W\xff\x00L\x9e\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa8!'b'\x00\x05N\xb1|\x18\xd1\x83\xfe\tX\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03z\xa5'b'\x00\x05N\xb1|\x18\xe6\xa0\xfe\x1a\xe6\x01\x01\x1b5\xf2\xf5\x11\x00\x00\x00\x00\x08\x00\x08\x00\x1d\xfc\x00\x00\x00\x00\xff\xff\xf6\xfe\x07\x00y\x01\xbb8'b'\x00\x05N\xb1|\x18\xe7\x1c\xfe\x16\xe7\x01\x01t\x13\x99\x04\x00\x06\x00\x0f\x00(\xfc\x00\x00\x00\x00\xfc\xff\xff\xfe\xb7\xff6\x02\x9aK'b'\x00\x05N\xb1|\x18\xe7\x80\xfe\x16\xe8\x01\x01\x81\x13\x99\x04\x00\x02\x00\x13\x00\x1e\xfc\xfb\xff\x01\x00\xfb\xff\x86\x00\xc0\x00_\x02\x8e\x84'b'\x00\x05N\xb1|\x18\xe7\xd0\xfe\x0e\xe9\x01\x01\x1d\x13\x99\x04\x00\x05\xa4iD\x14\xae/=y\x10\xd3D'b'\x00\x05N\xb1|\x18\xe8 \xfe\x0e\xea\x01\x01\x89\x13\x99\x04\x008\xe7iD\xc2\xf5\xae>\xcd\x15\xc2\x12'b'\x00\x05N\xb1|\x18\xe8x\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc5I'b'\x00\x05N\xb1|\x18\xe8\xe8\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce'b'\x00\x05N\xb1|\x18\xe9H\xfe\x04\xed\x01\x01\x98\x00\x00\xa0\x8a\x82$'b'\x00\x05N\xb1|\x18\xe9\x90\xfe\x02\xee\x01\x01*\x00\x00%U'b'\x00\x05N\xb1|\x18\xe9\xe8\xfe\x1e\xef\x01\x01\x18@\xc7\xf5\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xed#'b'\x00\x05N\xb1|\x18\xea<\xfe\x1a\xf0\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00<\t'b'\x00\x05N\xb1|\x18\xea\x84\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e'b'\x00\x05N\xb1|\x18\xea\xd4\xfe\x14\xf2\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xfe\xff\xff\xf9\xff\x00\x00\x07\x00\x1bF\x8c\x7f'b'\x00\x05N\xb1|\x1a`\xa0\xfe\x03\xf4\x01\x01Ms\x00\x00\x85\xe8'b'\x00\x05N\xb1|\x1at\xcf\xfe5Y\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf9\x1e'b'\x00\x05N\xb1|\x1au\x9c\xfe\x1c\xf5\x01\x01\x1ec\x99\x04\x00*\xc2\x8c\xbc\xa6D\x8b\xbb\x03~H@iM\x19\xb9\xd7W\xc2\xba\x87G\xe7\xba\xdeT'b'\x00\x05N\xb1|\x1au\xfc\xfe\x18\xf6\x01\x01\xb2[:\xdd\xbc\xe0uY\xb9\x9f\x7fH\xc0\xae\x87)D{\xa6\x02\x18\xc1\xe7\xb8\xfd\xd6\xfb'b'\x00\x05N\xb1|\x1avT\xfe\x1c\xf7\x01\x01\xa3\xaf\xf2%:y\xf3\xf1\xba\xdc<\x9a9\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xd1\xb9;\xb0C\xe5<\xc5|'b'\x00\x05N\xb1|\x1av\x98\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U'b'\x00\x05N\xb1|\x1av\xe4\xfe\x0c\xf9\x01\x01\x02\xb0F_|\xb1N\x05\x00w\x99\x04\x00\xddD'b'\x00\x05N\xb1|\x1aw4\xfe\x16\xfa\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00N\x14'b'\x00\x05N\xb1|\x1aw\x88\xfe\x16\xfb\x01\x01\xc1R\x1c\xdb<\xc7\xe5\x91<\x82\xf2\xb4;.\xa4%>\x00\x00\x00\x00\xa5\x03x\xa4'b'\x00\x05N\xb1|\x1a\xc7\x0b\xfe!Z\xff\x00L\x9e\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00wN'b'\x00\x05N\xb1|\x1b\xe9\x88\xfe\x15\xfd\x01\x01$\xb5e\xf8\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00)I'b'\x00\x05N\xb1|\x1b\xea\x14\xfe\x16\xfe\x01\x01#\xb3\x99\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xdd*'b'\x00\x05N\xb1|\x1b\xeah\xfe\x03\xff\x01\x01Ms\x00\x00\xe9O'b'\x00\x05N\xb1|\x1c\x11@\xfe\x1a\x00\x01\x01\x1bi\x9e\xf9\x11\x00\x00\x00\x00\x08\x00\x05\x00\x1b\xfc\x01\x00\x00\x00\x03\x00\xf4\xfe\x07\x00z\x01[\xbb'b'\x00\x05N\xb1|\x1c\x11\xa0\xfe\x16\x01\x01\x01t\x03\x9a\x04\x00\x0c\x00\x08\x00&\xfc\x00\x00\x00\x00\x00\x00\x01\xff\xb7\xff8\x02\xe1]'b'\x00\x05N\xb1|\x1c\x11\xf8\xfe\x16\x02\x01\x01\x81\x03\x9a\x04\x00\x04\x00\x11\x00\x1e\xfc\xfd\xff\x01\x00\xff\xff\x85\x00\xbf\x00a\x02\x80\xf1'b'\x00\x05N\xb1|\x1c\x12\\\xfe\x0e\x03\x01\x01\x1d\x03\x9a\x04\x00L\xa4iD\x99\x99A=z\x10\xd8q'b'\x00\x05N\xb1|\x1c\x12\xb0\xfe\x0e\x04\x01\x01\x89\x03\x9a\x04\x00\\\xe7iD{\x14\xb0>\xcd\x15\xb91'b'\x00\x05N\xb1|\x1c\x13\x14\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdb\x00\xc6<<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xdcB'b'\x00\x05N\xb1|\x1c\x13t\xfe\x06\x06\x01\x01}\xc5\x14\x00\x00\x03\x00\xfaJ'b'\x00\x05N\xb1|\x1c\x13\xc8\xfe\x04\x07\x01\x01\x98\x00\x00\xa0\x8a?\x15'b'\x00\x05N\xb1|\x1c\x14\x14\xfe\x02\x08\x01\x01*\x00\x00p/'b'\x00\x05N\xb1|\x1c\x14t\xfe\x1e\t\x01\x01\x18h\xd8\xf8\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xe5\xc9'b'\x00\x05N\xb1|\x1c\x14\xd0\xfe\x1a\n\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00V\x9c'b'\x00\x05N\xb1|\x1c\x15 \xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer'b'\x00\x05N\xb1|\x1c\x15x\xfe\x14\x0c\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x85\xeb\xd1\xbe)\\\x8f=\xb3\x00\x00\x00W\xa2'b'\x00\x05N\xb1|\x1c\xa0_\xfe5[\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01|\xfc'b'\x00\x05N\xb1|\x1c\xbf\xf3\xfe!\\\xff\x00L\xbc\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00D`'b"\x00\x05N\xb1|\x1c\xd5\xff\xfe%]\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xf06"b"\x00\x05N\xb1|\x1d\x83\xec\xfe\x1c\r\x01\x01!\xd1\x99\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00Z\n\x00p\xfe\xff\xff\xf7\xff\x00\x00\x07\x00 FL'"b'\x00\x05N\xb1|\x1d\x84x\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d'b'\x00\x05N\xb1|\x1d\x85,\xfe\x1c\x0f\x01\x01\x1eS\x9a\x04\x00W\xaf\x89\xbc9\t\xa2\xbb\xb2\x86H@\xe9\xa4\xc1\xb9\x19\xfd\xbb\xba\x0e\x9eq:\x17\xd6'b'\x00\x05N\xb1|\x1d\x85\x90\xfe\x18\x10\x01\x01\xb2\xb4m\xdb\xbc\xb9EP\xba\\wH\xc0\xcd\x8c)D{\xa6\x02\x18\xc1\xe7\xb8\xfdY\xae'b'\x00\x05N\xb1|\x1d\x85\xe0\xfe\x03\x11\x01\x01/\xff\x00\x00\xd1\x1f'b'\x00\x05N\xb1|\x1d\xaep\xfe\x1c\x12\x01\x01\xa3\xda\x9a&:\xb0\xba\xf2\xba\xad\xe0\x9d9\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xa3\xa9;\xbc<\xea<@\xe5'b'\x00\x05N\xb1|\x1d\xae\xe8\xfe\x03\x13\x01\x01\xa5\xdb\x14\x00l\x87'b'\x00\x05N\xb1|\x1d\xaf\\\xfe\x0c\x14\x01\x01\x02\x18\xf4b|\xb1N\x05\x00h\x9a\x04\x00q\xf2'b'\x00\x05N\xb1|\x1d\xaf\xd0\xfe\x16\x15\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x93m'b'\x00\x05N\xb1|\x1d\xb0D\xfe\x16\x16\x01\x01\xc1\x86t\xef\x00\x00\x00\x00\xa5\x03\x08\xaa'b'\x00\x05N\xb1|\x1et\xaf\xfe5^\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01-\xc4'b'\x00\x05N\xb1|\x1e\x8a\xdf\xfe!_\xff\x00L\xd3\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xdb\t'b'\x00\x05N\xb1|\x1f\n\x1c\xfe\x15\x17\x01\x01$N\x10\xfc\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xec'b'\x00\x05N\xb1|\x1f\n\xb4\xfe\x16\x18\x01\x01#\xa3\x9a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4\xac'b'\x00\x05N\xb1|\x1f\x0b \xfe\t\x11\n\x00m\x17\x00\x00\x00\x00\xd3\x00\x00\x00\xd2\x10'b'\x00\x05N\xb1|\x1f\x0b|\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ'b'\x00\x05N\xb1| L\xf7\xfe5`\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01u\r'b'\x00\x05N\xb1| c\x0f\xfe!a\xff\x00L\xd3\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00"\x9d'b'\x00\x05N\xb1| \x90\x80\xfe\x1a\x1a\x01\x01\x1b\xa0J\xfd\x11\x00\x00\x00\x00\t\x00\x08\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf4\xfe\x06\x00{\x01=o'b'\x00\x05N\xb1| \x91\x00\xfe\x16\x1b\x01\x01t\xf4\x9a\x04\x00\t\x00\x0b\x004\xfc\x00\x00\xff\xff\x00\x00\x00\xff\xb5\xff7\x02\x19\xf9'b'\x00\x05N\xb1| \x91\\\xfe\x16\x1c\x01\x01\x81\xf4\x9a\x04\x00\x04\x00\x11\x00\x1b\xfc\xfc\xff\x01\x00\xfc\xff\x88\x00\xc0\x00f\x02j\x85'b'\x00\x05N\xb1| \x91\xbc\xfe\x0e\x1d\x01\x01\x1d\xf4\x9a\x04\x00\x0c\xa4iD\x99\x991=z\x10\x93\xa7'b'\x00\x05N\xb1| \x92\x08\xfe\x0e\x1e\x01\x01\x89\xf4\x9a\x04\x004\xe8iD\n\xd7\xb6>\xcf\x15LW'b'\x00\x05N\xb1| \x92d\xfe\x1f\x1f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00\xc6<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8cA'b'\x00\x05N\xb1| \x92\xb4\xfe\x06 \x01\x01}\xc2\x14\x00\x00\x03\x00\x1f\x9a'b'\x00\x05N\xb1| \x93\x00\xfe\x04!\x01\x01\x98\x00\x00\xa0\x8a\x19F'b'\x00\x05N\xb1| \x93D\xfe\x02"\x01\x01*\x00\x00\xa4\xa5'b'\x00\x05N\xb1| \x93\x98\xfe\x1e#\x01\x01\x18\x90\xe9\xfb\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x94\xa8'b'\x00\x05N\xb1| \x93\xec\xfe\x1a$\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x12l'b'\x00\x05N\xb1| \x948\xfe\x08%\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xf7'b'\x00\x05N\xb1| \x94\x88\xfe\x14&\x01\x01J\n\xd7#<\n\xd7#<\xebQ\xb8\xbe)\\\x8f=\xb3\x00\x00\x00+y'b"\x00\x05N\xb1| \x94\xdc\xfe\x1c'\x01\x01!\x9a\x9a\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd(Z\n\x00\x98\xfe\xff\xff\xf5\xff\x00\x00\x07\x00#FF?"b'\x00\x05N\xb1|!\xf5\xd0\xfe\x03(\x01\x01Ms\x00\x00\x8c&'b'\x00\x05N\xb1|!\xf6\xa0\xfe\x1c)\x01\x01\x1eD\x9b\x04\x00\xf7\x8b\x85\xbcn\xe5\xb8\xbbS\x93H@\x8e\x84\x0f\xb8\x94\x96*\xba\xec\xe9H:\x9cg'b'\x00\x05N\xb1|!\xf6\xfc\xfe\x18*\x01\x01\xb2\xdb\xfb\xd8\xbcT\x16\xb3\xba\xe9nH\xc0\x8f\x92)D{\xa6\x02\x18\xc1\xe7\xb8\xfdZ\xa5'b"\x00\x05N\xb1|!\xf7T\xfe\x1c+\x01\x01\xa3\x1cC':\xd4|\xf3\xbaA\xaa\xa19\x00\x00\x00\x00\x00\x00\x00\x009\xbc\x94;\xb9x\xe6\x00\x00\x00\x00\xa5\x03\x95i'b'\x00\x05N\xb1|!\xf8\xd8\xfe\x150\x01\x01$W\xbd\xff\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9cq'b'\x00\x05N\xb1|!\xf9(\xfe\x161\x01\x01#\x94\x9b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00l\x05'b'\x00\x05N\xb1|!\xf9x\xfe\x122\x01\x01\xfc\x9e\x9b\x04\x004\x00\x01\x00ARMMASK\x00Wrz\xb1'b'\x00\x05N\xb1|"(\xf7\xfe5b\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf0\xef'b'\x00\x05N\xb1|"S\x0b\xfe!c\xff\x00L\xf3\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa9\xab'b'\x00\x05N\xb1|#~$\xfe\t3\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03M\xd8'b'\x00\x05N\xb1|#~\x94\xfe\x034\x01\x01Ms\x00\x00\x96F'b'\x00\x05N\xb1|#\xa6`\xfe\x1a5\x01\x01\x1b\xdd\xf5\x00\x12\x00\x00\x00\x00\t\x00\x06\x00\x1a\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01T\x81'b'\x00\x05N\xb1|#\xa7\x04\xfe\x166\x01\x01t\xe4\x9b\x04\x00\x10\x00\x04\x00\x1f\xfc\xfe\xff\x00\x00\x02\x00\xff\xfe\xb6\xff6\x02\xd7\xf6'b'\x00\x05N\xb1|#\xa7\x88\xfe\x167\x01\x01\x81\xe4\x9b\x04\x00\x03\x00\x12\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff\x83\x00\xbb\x00]\x02I\xa3'b'\x00\x05N\xb1|#\xa8 \xfe\x0e8\x01\x01\x1d\xe4\x9b\x04\x00\x8f\xa3iDp=\x12=z\x10\x0fk'b'\x00\x05N\xb1|#\xa8\xdc\xfe\x0e9\x01\x01\x89\xe4\x9b\x04\x00\xac\xe7iD\x99\x99\xb2>\xcf\x15m\xec'b'\x00\x05N\xb1|#\xa9\xa0\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xc6<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x13"'b'\x00\x05N\xb1|#\xaad\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n'b'\x00\x05N\xb1|#\xab\x14\xfe\x04<\x01\x01\x98\x00\x00\xa0\x8a_\xb4'b'\x00\x05N\xb1|#\xab\xd4\xfe\x02=\x01\x01*\x00\x00\x99\t'b'\x00\x05N\xb1|#\xacx\xfe\x1e>\x01\x01\x18\xd0\xf6\xfe\x11\x00\x00\x00\x00z\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\x023'b'\x00\x05N\xb1|#\xadl\xfe\x1a?\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x15\x01'b'\x00\x05N\xb1|#\xae\x0c\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002'b'\x00\x05N\xb1|#\xae\xbc\xfe\x14A\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7\xa3=\xb3\x00\x00\x00\xf3*'b'\x00\x05N\xb1|$\x18;\xfe5d\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01n\xc0'b'\x00\x05N\xb1|$.\x7f\xfe!e\xff\x00L\xf3\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00*M'b"\x00\x05N\xb1|%\x19\x08\xfe\x1cB\x01\x01!b\x9b\x04\x00z\xa6\x02\x18\xc1\xe7\xb8\xfdZZ\n\x00\xca\xfe\xff\xff\xf4\xff\xff\xff\x08\x00'F7c"b'\x00\x05N\xb1|%\x19\xd8\xfe\x1cC\x01\x01\x1e5\x9c\x04\x00%a\x83\xbc\xf2\xc6\xcf\xbb\x17\x9cH@MZ\xb38\x84\xc5\xd0\xba\x8c\xc5\xd6\xb8`\x1c'b'\x00\x05N\xb1|%\x1ap\xfe\x18D\x01\x01\xb2G\xce\xd7\xbc2E\xfc\xbaXfH\xc0\x00\x90)Dy\xa6\x02\x18\xc1\xe7\xb8\xfdb\xa2'b'\x00\x05N\xb1|%\x1a\xcc\xfe\x03E\x01\x01Ms\x00\x00PO'b"\x00\x05N\xb1|%5t\xfe\x1cF\x01\x01\xa3\x90\xea':\xf77\xf4\xba]\x96\xa59\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x96u;\x01\xdb\xe8<7\xbd"b'\x00\x05N\xb1|%5\xcc\xfe\x03G\x01\x01\xa5\xbb\x14\x00\xdf6'b'\x00\x05N\xb1|%6 \xfe\x0cH\x01\x01\x020Cj|\xb1N\x05\x00H\x9c\x04\x00\t\x04'b'\x00\x05N\xb1|%6x\xfe\x16I\x01\x01\x88y\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc2\x8a'b'\x00\x05N\xb1|%6\xc8\xfe\x12J\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x004w'b'\x00\x05N\xb1|%7\x1c\xfe\x16K\x01\x01\xc1sA\x14=\xc4\xe6\xa1<\x07<\xab;n\xda\x18>\x00\x00\x00\x00\xa5\x03k\xbb'b'\x00\x05N\xb1|&\t\x93\xfe5f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xeb"'b'\x00\x05N\xb1|&\x1f\xcb\xfe!g\xff\x00L\xff\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x04\xc1'b'\x00\x05N\xb1|&\xbe\xbc\xfe\x15L\x01\x01$\x9cj\x03\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"\xb1'b'\x00\x05N\xb1|&\xbf\\\xfe\x16M\x01\x01#\x85\x9c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00e\xf3'b'\x00\x05N\xb1|&\xbf\xc8\xfe\x03N\x01\x01Ms\x00\x00<\xe8'b"\x00\x05N\xb1|'\xe4\xdf\xfe5h\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01R\x9f"b'\x00\x05N\xb1|(\x0e\xbf\xfe!i\xff\x00L\xff\xfd3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x92Y'b'\x00\x05N\xb1|(%\x13\xfe\tj\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc6+'b'\x00\x05N\xb1|(ND\xfe\x1aO\x01\x01\x1b#\xa3\x04\x12\x00\x00\x00\x00\x07\x00\x07\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00{\x01x\x1a'b'\x00\x05N\xb1|(N\xdc\xfe\x16P\x01\x01t\xd5\x9c\x04\x00\x0b\x00\x0b\x00.\xfc\x00\x00\xfe\xff\x00\x00\x00\xff\xb6\xff7\x02\xfem'b'\x00\x05N\xb1|(Ot\xfe\x16Q\x01\x01\x81\xd5\x9c\x04\x00\x03\x00\x12\x00\x1d\xfc\xfc\xff\x01\x00\xfd\xff\x87\x00\xbd\x00_\x02>\xbe'b'\x00\x05N\xb1|(O\xd8\xfe\x0eR\x01\x01\x1d\xd5\x9c\x04\x00y\xa5iDff\x86={\x10\xda0'b'\x00\x05N\xb1|(P0\xfe\x0eS\x01\x01\x89\xd5\x9c\x04\x00\xf3\xe7iD\xcd\xcc\xb4>\xcf\x15\x9e}'b'\x00\x05N\xb1|(P\x98\xfe\x1fT\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc3\x84'b'\x00\x05N\xb1|(P\xf4\xfe\x06U\x01\x01}\xc8\x14\x00\x00\x03\x00F&'b'\x00\x05N\xb1|(QH\xfe\x04V\x01\x01\x98\x00\x00\xa0\x8a5A'b'\x00\x05N\xb1|(Q\x94\xfe\x02W\x01\x01*\x00\x00KD'b'\x00\x05N\xb1|(Q\xf0\xfe\x1eX\x01\x01\x18\xf8\x07\x02\x12\x00\x00\x00\x00y\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xc4>'b'\x00\x05N\xb1|(RH\xfe\x1aY\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xa7&'b'\x00\x05N\xb1|(R\xa0\xfe\x08Z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe2N'b'\x00\x05N\xb1|(R\xf0\xfe\x14[\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\n\xd7\xa3=\xb3\x00\x00\x00\x8d\xde'b'\x00\x05N\xb1|(SH\xfe\x1c\\\x01\x01!\xf3\x9c\x04\x00y\xa6\x02\x18\xc2\xe7\xb8\xfdxZ\n\x00\xe8\xfe\xff\xff\xf3\xff\xff\xff\x08\x00*F\t\x1c'b'\x00\x05N\xb1|(S\xa8\xfe\x1c]\x01\x01\x1e%\x9d\x04\x00/l\x7f\xbc\x98\xed\xe8\xbb1\xa4H@\xd2\x0eG\xb9\xca\xcf{\xba\xe7(\x88\xb8\x85\x17'b"\x00\x05N\xb1|(S\xf8\xfe\x18^\x01\x01\xb2\x1d\xc7\xd5\xbc\xf2\xfc'\xbb\x0f^H\xc0\x85\x8b)Dy\xa6\x02\x18\xc2\xe7\xb8\xfd\xc9*"b'\x00\x05N\xb1|(T<\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1|)\xc1o\xfe5k\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x9d\x88'b'\x00\x05N\xb1|)\xd6@\xfe\x1c`\x01\x01\xa3@\x90(:W\xea\xf4\xbaC\xa3\xa99\x00\x00\x00\x00\x00\x00\x00\x00\x84\x7f\\;t\xf3\xe9<#D'b'\x00\x05N\xb1|)\xd6\xbc\xfe\x03a\x01\x01\xa5\xc5\x14\x00\x99i'b'\x00\x05N\xb1|)\xd7\x14\xfe\x0cb\x01\x01\x02\xb0\xecm|\xb1N\x05\x009\x9d\x04\x00\xe1\xdc'b'\x00\x05N\xb1|)\xd7t\xfe\x16c\x01\x01\x88y\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00P\x08'b'\x00\x05N\xb1|)\xd7\xcc\xfe\x16d\x01\x01\xc19\x08#=^\xd2\x9f<\x97\x9e\x08\x00\x00\x00\x00\xa5\x03\xceC'b'\x00\x05N\xb1|)\xd8,\xfe\x15e\x01\x01$\x18\x14\x07\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00G\x8e'b'\x00\x05N\xb1|)\xd8\xb4\xfe\x16f\x01\x01#u\x9d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe4\xe3'b"\x00\x05N\xb1|)\xef'\xfe!l\xff\x00L\x0e\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x82\xf5"b'\x00\x05N\xb1|+|\xc0\xfe\x03g\x01\x01Ms\x00\x00\xcf\xf2'b'\x00\x05N\xb1|+}\x9c\xfe\x1ah\x01\x01\x1b\x9aM\x08\x12\x00\x00\x00\x00\x08\x00\x06\x00\x18\xfc\x01\x00\x00\x00\x00\x00\xf6\xfe\x07\x00{\x01\xff_'b'\x00\x05N\xb1|+~\x00\xfe\x16i\x01\x01t\xc6\x9d\x04\x00\x04\x00\x12\x00)\xfc\x01\x00\x00\x00\x00\x00\xff\xfe\xb6\xff7\x02\xacW'b'\x00\x05N\xb1|+~`\xfe\x16j\x01\x01\x81\xc6\x9d\x04\x00\x05\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfc\xff\x82\x00\xbd\x00`\x02\xa9\xb7'b'\x00\x05N\xb1|+~\xb0\xfe\x0ek\x01\x01\x1d\xc6\x9d\x04\x00\xc1\xa5iD)\\\x8f={\x10\xc2E'b'\x00\x05N\xb1|+\x7f\x0c\xfe\x0el\x01\x01\x89\xc6\x9d\x04\x00F\xe9iDff\xbf>\xd0\x15\xb0\x9e'b'\x00\x05N\xb1|+\x7fp\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nm\xa1'b'\x00\x05N\xb1|+\x7f\xcc\xfe\x06n\x01\x01}\xc8\x14\x00\x00\x03\x00\x90\xf7'b'\x00\x05N\xb1|+\x80$\xfe\x04o\x01\x01\x98\x00\x00\xa0\x8a\xaf{'b'\x00\x05N\xb1|+\x80p\xfe\x02p\x01\x01*\x00\x00\xd0\xe0'b'\x00\x05N\xb1|+\x80\xd0\xfe\x1eq\x01\x01\x18`&\x08\x12\x00\x00\x00\x00y\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xdbe'b'\x00\x05N\xb1|+\x810\xfe\x1ar\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x004\x1f'b'\x00\x05N\xb1|+\x81\x80\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3'b'\x00\x05N\xb1|+\x81\xd4\xfe\x14t\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7\xa3=\xb3\x00\x00\x00\xd6s'b'\x00\x05N\xb1|+\x820\xfe\x1cu\x01\x01!\xbc\x9d\x04\x00y\xa6\x02\x18\xc2\xe7\xb8\xfd\x96Z\n\x00\x06\xff\xff\xff\xf2\xff\xfe\xff\x08\x00-F\xda\x1a'b'\x00\x05N\xb1|+\x99\xb3\xfe5m\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x03\xa7'b'\x00\x05N\xb1|+\xb0\x07\xfe!n\xff\x00L\x0e\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x03\xa8'b'\x00\x05N\xb1|,\xda\x8c\xfe\x1cv\x01\x01\x1e\x16\x9e\x04\x00\x089z\xbcZ\n\xfa\xbbS\xaeH@\x95zy\xb9\t\x0cc\xb9\rM\x957\x16\xb6'b'\x00\x05N\xb1|,\xdb\x00\xfe\x18w\x01\x01\xb2`!\xd4\xbc\xe86H\xbb\x16VH\xc0\x14\x8e)Dy\xa6\x02\x18\xc2\xe7\xb8\xfde0'b'\x00\x05N\xb1|,\xdbL\xfe\x03x\x01\x01Ms\x00\x00\x05\x18'b'\x00\x05N\xb1|,\xf0\x00\xfe\x1cy\x01\x01\xa3,3):z\x92\xf5\xba\xe5\xd0\xad9\x00\x00\x00\x00\x00\x00\x00\x00\x18\xeaK;F\xce\xdb\x00\x00\x00\x00\xa5\x03\x94E'b"\x00\x05N\xb1|-1\x0f\xfe%o\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x07\xf5"b'\x00\x05N\xb1|-P\x83\xfe5p\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01*!'b'\x00\x05N\xb1|-zS\xfe!q\xff\x00L\x1d\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x95\xa1'b'\x00\x05N\xb1|.i@\xfe\x15\x7f\x01\x01$\xb4\xc4\n\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x7f'b'\x00\x05N\xb1|.j,\xfe\x16\x80\x01\x01#g\x9e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00~~'b'\x00\x05N\xb1|.j\xc0\xfe\x03\x81\x01\x01/\xff\x00\x00K\x8f'b'\x00\x05N\xb1|.k\x84\xfe\x03\x82\x01\x01Ms\x00\x00M}'b'\x00\x05N\xb1|.l\\\xfe\t\x12\n\x00m\t\x00\x00\x00\x00\xd2\x00\x00\x00\x01\xcb'b'\x00\x05N\xb1|.l\xdc\xfe\x1a\x83\x01\x01\x1b\x98\xfc\x0b\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1a\xfc\x00\x00\x00\x00\x01\x00\xf5\xfe\x08\x00{\x01\x86\x13'b'\x00\x05N\xb1|.mH\xfe\x16\x84\x01\x01t\xb7\x9e\x04\x00\n\x00\r\x000\xfc\x01\x00\xff\xff\x00\x00\xff\xfe\xb5\xff6\x02\x0e\xc9'b'\x00\x05N\xb1|.m\xa4\xfe\x16\x85\x01\x01\x81\xb7\x9e\x04\x00\x05\x00\x11\x00\x1b\xfc\xfc\xff\x01\x00\xfc\xff\x86\x00\xbd\x00g\x02AV'b'\x00\x05N\xb1|.m\xf4\xfe\x0e\x86\x01\x01\x1d\xb7\x9e\x04\x00\xa9\xa4iD\xd7\xa3X=z\x10)\xb0'b'\x00\x05N\xb1|.nH\xfe\x0e\x87\x01\x01\x89\xb7\x9e\x04\x00\n\xe8iD\x1e\x85\xb5>\xd0\x15\n\xd0'b'\x00\x05N\xb1|.n\xa4\xfe\x1f\x88\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x9f\xd8'b'\x00\x05N\xb1|.n\xfc\xfe\x06\x89\x01\x01}\xc5\x14\x00\x00\x03\x00\xad\xc4'b'\x00\x05N\xb1|.oH\xfe\x04\x8a\x01\x01\x98\x00\x00\xa0\x8a:\xdc'b'\x00\x05N\xb1|.o\x90\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01'b'\x00\x05N\xb1|.o\xe4\xfe\x1e\x8c\x01\x01\x18P\xed\n\x12\x00\x00\x00\x00x\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x90~'b'\x00\x05N\xb1|.p<\xfe\x1a\x8d\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x89C'b'\x00\x05N\xb1|.p\x84\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7'b'\x00\x05N\xb1|.p\xd8\xfe\x14\x8f\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe)\\\x8f=\xb3\x00\x00\x006\x9c'b'\x00\x05N\xb1|/2#\xfe5r\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaf\xc3'b'\x00\x05N\xb1|/H\xeb\xfe!s\xff\x00L\x1d\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x14\xfc'b'\x00\x05N\xb1|/\xf9d\xfe\x1c\x90\x01\x01!r\x9e\x04\x00x\xa6\x02\x18\xc2\xe7\xb8\xfd\xb4Z\n\x00$\xff\xff\xff\xf1\xff\xfe\xff\x08\x001F\t\xbd'b"\x00\x05N\xb1|/\xfa\x18\xfe\x1c\x91\x01\x01\x1e\x07\x9f\x04\x00h\x19x\xbcx\x7f\x07\xbc\xa4\xb8H@&\xde\xb49'\x9c\x05\xbaN\xf2\x83\xb9HO"b'\x00\x05N\xb1|/\xfa\x8c\xfe\x18\x92\x01\x01\xb2\x87\x8d\xd3\xbc:\xeck\xbbRMH\xc0\x85\x9b)Dx\xa6\x02\x18\xc2\xe7\xb8\xfd#\xf3'b'\x00\x05N\xb1|/\xfa\xe4\xfe\x03\x93\x01\x01Ms\x00\x00\x8a\xa7'b'\x00\x05N\xb1|0\x0fd\xfe\x1c\x94\x01\x01\xa3\x06\xd1):\x89/\xf6\xba\x15\x13\xb29\x00\x00\x00\x00\x00\x00\x00\x007\xc1G;\xbc\x9e\xdc<\\z'b'\x00\x05N\xb1|0\x0f\xc4\xfe\x03\x95\x01\x01\xa5\xc8\x14\x00S\xb7'b'\x00\x05N\xb1|0\x10 \xfe\x0c\x96\x01\x01\x02\x98Cu|\xb1N\x05\x00\x1b\x9f\x04\x00>\xf6'b'\x00\x05N\xb1|0\x10\x84\xfe\x16\x97\x01\x01\x88x\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00+\x80'b'\x00\x05N\xb1|0\x10\xe4\xfe\x16\x98\x01\x01\xc1l#5=W\xd0\x98<\xadW(<\x94\xc1\x17>\x00\x00\x00\x00\xa5\x03hl'b'\x00\x05N\xb1|1\x00W\xfe5t\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x011\xec'b'\x00\x05N\xb1|1R\xe7\xfe!u\xff\x00L\x1e\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xf0\xe8'b'\x00\x05N\xb1|1\x84\x8c\xfe\x15\x99\x01\x01$\xc6o\x0e\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00j\xcf'b'\x00\x05N\xb1|1\x85\x00\xfe\x16\x9a\x01\x01#X\x9f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00}Z'b'\x00\x05N\xb1|1\x85\\\xfe\x12\x9b\x01\x01\xfc\x8a\x9f\x04\x004\x00\x01\x00ARMMASK\x00Wr\x98\xec'b'\x00\x05N\xb1|1\x85\xbc\xfe\t\x9c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc8d'b'\x00\x05N\xb1|2\xee\x14\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97'b'\x00\x05N\xb1|3\x05<\xfe\x1a\x9e\x01\x01\x1b\xad\xa9\x0f\x12\x00\x00\x00\x00\t\x00\x06\x00\x19\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x08\x00z\x01_q'b'\x00\x05N\xb1|3\x05\xa8\xfe\x16\x9f\x01\x01t\xa8\x9f\x04\x00\x0b\x00\x0e\x00$\xfc\x00\x00\x00\x00\xfe\xff\xff\xfe\xb6\xff7\x02\x12\x97'b'\x00\x05N\xb1|3\x06\x04\xfe\x16\xa0\x01\x01\x81\xa8\x9f\x04\x00\x04\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfb\xff\x85\x00\xc0\x00b\x02{e'b'\x00\x05N\xb1|3\x06T\xfe\x0e\xa1\x01\x01\x1d\xa8\x9f\x04\x00\x1e\xa5iD{\x14v=|\x10\x0e\x05'b'\x00\x05N\xb1|3\x06\xa4\xfe\x0e\xa2\x01\x01\x89\xa8\x9f\x04\x00S\xe9iD\xcd\xcc\xbf>\xd1\x15\xda\x8f'b'\x00\x05N\xb1|3\x07\x00\xfe\x1f\xa3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1e\x01\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x81*'b'\x00\x05N\xb1|3\x07`\xfe\x06\xa4\x01\x01}\xc5\x14\x00\x00\x03\x00I\x91'b'\x00\x05N\xb1|3\x07\xb8\xfe\x04\xa5\x01\x01\x98\x00\x00\xa0\x8a+\xbd'b'\x00\x05N\xb1|3\x07\xfc\xfe\x02\xa6\x01\x01*\x00\x00\xcfL'b'\x00\x05N\xb1|3\x08T\xfe\x1e\xa7\x01\x01\x18\x90\xfa\r\x12\x00\x00\x00\x00x\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\xc8h'b'\x00\x05N\xb1|3\x08\xa8\xfe\x1a\xa8\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00F\xed'b'\x00\x05N\xb1|3\x08\xec\xfe\x08\xa9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x96\n'b'\x00\x05N\xb1|3\tL\xfe\x14\xaa\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xccL\xbe\n\xd7\xa3=\xb3\x00\x00\x00]\xb9'b'\x00\x05N\xb1|3\t\xe0\xfe\x1c\xab\x01\x01!:\x9f\x04\x00x\xa6\x02\x18\xc2\xe7\xb8\xfd\xc8Z\n\x008\xff\xff\xff\xef\xff\xfd\xff\x08\x004F\x19\xa2'b'\x00\x05N\xb1|3,C\xfe5v\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb4\x0e'b'\x00\x05N\xb1|3C\x03\xfe!w\xff\x00L\x1e\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00q\xb5'b'\x00\x05N\xb1|4\x86\xd8\xfe\x1c\xac\x01\x01\x1e\xf8\x9f\x04\x00\xf82r\xbc\xba\x8d\x0e\xbc\xf7\xc3H@\xbc\xd0W:\xc9]\xe0\xbak5\x87\xb9\xce"'b'\x00\x05N\xb1|4\x87t\xfe\x18\xad\x01\x01\xb2\xf3\xd7\xd1\xbc\\\xc6\x85\xbb,EH\xc0=\x9a)Dx\xa6\x02\x18\xc2\xe7\xb8\xfd\x9e5'b'\x00\x05N\xb1|4\x88(\xfe\x1c\xae\x01\x01\xa3\x10i*:\x8d\xc0\xf6\xbaro\xb69\x00\x00\x00\x00\x00\x00\x00\x00\x94r=;|\x0c\xd9\x00\x00\x00\x00\xa5\x03g\x19'b'\x00\x05N\xb1|4\x89\xfc\xfe\x03\xb3\x01\x01Ms\x00\x00z\x11'b'\x00\x05N\xb1|4\x9e\x80\xfe\x15\xb4\x01\x01$\n\x1c\x12\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xbc'b'\x00\x05N\xb1|4\x9e\xf0\xfe\x16\xb5\x01\x01#H\xa0\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc6\xc9'b'\x00\x05N\xb1|5\x08\xe3\xfe5x\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\r\xb3'b'\x00\x05N\xb1|5\x1fW\xfe!y\xff\x00L.\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00hs'b'\x00\x05N\xb1|6\r\x8c\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86'b'\x00\x05N\xb1|6\x0e\xa8\xfe\x1a\xb7\x01\x01\x1b\xa2T\x13\x12\x00\x00\x00\x00\x07\x00\x06\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00|\x01\x9a8'b'\x00\x05N\xb1|6\x0f`\xfe\x16\xb8\x01\x01t\x98\xa0\x04\x00\x05\x00\x0c\x00%\xfc\x00\x00\x00\x00\xfd\xff\xff\xfe\xb5\xff7\x02\x9c\\'b'\x00\x05N\xb1|6\x11\xac\xfe\x16\xb9\x01\x01\x81\x98\xa0\x04\x00\x06\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfd\xff\x86\x00\xbe\x00d\x02_6'b'\x00\x05N\xb1|6\x12X\xfe\x0e\xba\x01\x01\x1d\x98\xa0\x04\x00\xe7\xa4iD\xebQh=|\x10\xc7\x84'b'\x00\x05N\xb1|6\x12\xf4\xfe\x0e\xbb\x01\x01\x89\x98\xa0\x04\x00\x99\xe9iD\x00\x00\xc2>\xd2\x15\x81N'b'\x00\x05N\xb1|6\x13\xa4\xfe*\xbc\x01\x01\x96s\xe7f\xbc\x11m\x01\x00|\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00P\xb4'b'\x00\x05N\xb1|6\x14d\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nn\x00'b'\x00\x05N\xb1|6\x14\xd8\xfe\x06\xbe\x01\x01}\xc5\x14\x00\x00\x03\x00\x84\xf7'b'\x00\x05N\xb1|6\x158\xfe\x04\xbf\x01\x01\x98\x00\x00\xa0\x8a\x8f\xa6'b'\x00\x05N\xb1|6\x15\x8c\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0'b'\x00\x05N\xb1|6\x15\xf0\xfe\x1e\xc1\x01\x01\x18\xf0U\x11\x12\x00\x00\x00\x00x\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c3\xd7'b'\x00\x05N\xb1|6\x16L\xfe\x1a\xc2\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xd1\xdf'b'\x00\x05N\xb1|6\x16\xb0\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa'b'\x00\x05N\xb1|6\x17\x04\xfe\x14\xc4\x01\x01J\n\xd7#<\n\xd7#<{\x14.\xbe\n\xd7\xa3=\xb3\x00\x00\x00\x7f\x07'b'\x00\x05N\xb1|6\xe4\x0b\xfe5z\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x88Q'b'\x00\x05N\xb1|6\xfbW\xfe!{\xff\x00L.\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe9.'b'\x00\x05N\xb1|7\x87\xdb\xfe\t|\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03|\xf3'b'\x00\x05N\xb1|7\x89D\xfe\x1c\xc5\x01\x01!\x16\xa0\x04\x00x\xa6\x02\x18\xc1\xe7\xb8\xfd\xe6Z\n\x00V\xff\xff\xff\xef\xff\xfd\xff\x08\x007F3/'b'\x00\x05N\xb1|7\x89\xd8\xfe\x1c\xc6\x01\x01\x1e\xe9\xa0\x04\x00Hxn\xbc\xc4h\x15\xbc\xe0\xc9H@i\x95d\xb9\x9c+\x80\xba\xf1\n\xee\xb9\x15\x11'b'\x00\x05N\xb1|7\x8aH\xfe\x18\xc7\x01\x01\xb2\xef\xe5\xd0\xbc\x13\xb4\x94\xbb\xc3>H\xc0\x85\x9b)Dw\xa6\x02\x18\xc1\xe7\xb8\xfd\x92\x9c'b'\x00\x05N\xb1|7\x8a\xa8\xfe\x1c\xc8\x01\x01\xa3.\xfa*:\xf3C\xf7\xba)\xe2\xba9\x00\x00\x00\x00\x00\x00\x00\x001\xd1L;\xe3\xbf\xd4<\x80\xea'b'\x00\x05N\xb1|7\x8a\xf8\xfe\x03\xc9\x01\x01\xa5\xc8\x14\x00\xb8\xb2'b'\x00\x05N\xb1|7\x8bH\xfe\x0c\xca\x01\x01\x02\x98\x96||\xb1N\x05\x00\xfd\xa0\x04\x00\nv'b'\x00\x05N\xb1|7\x8b\xa4\xfe\x16\xcb\x01\x01\x88w\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00s\n'b'\x00\x05N\xb1|7\x8b\xfc\xfe\x16\xcc\x01\x01\xc1\xd9%K=k\x1a\x8e<\x81\x81\xee;\x14\xc9\x06>\x00\x00\x00\x00\xa5\x03!\xe6'b'\x00\x05N\xb1|7\x8cH\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\x00\x05N\xb1|8\xb5\xe3\xfe5}\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\\\x8b'b'\x00\x05N\xb1|8\xdf\xe3\xfe!~\xff\x00L1\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00n)'b'\x00\x05N\xb1|9\x08\xf4\xfe\x15\xce\x01\x01$\x9e\xc7\x15\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86Z'b'\x00\x05N\xb1|9\tl\xfe\x16\xcf\x01\x01#9\xa1\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe1\xed'b'\x00\x05N\xb1|9\t\xe0\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH'b'\x00\x05N\xb1|:\x91[\xfe5\x7f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd9i'b'\x00\x05N\xb1|:\xa7[\xfe!\x80\xff\x00L1\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00+\x8c'b'\x00\x05N\xb1|:\xbc0\xfe\x1a\xd1\x01\x01\x1b\xf3\x00\x17\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf6\xfe\x07\x00z\x01\xed:'b'\x00\x05N\xb1|:\xbc\xc0\xfe\x16\xd2\x01\x01t\x89\xa1\x04\x00\x12\x00\x03\x002\xfc\x01\x00\x00\x00\xfe\xff\x00\xff\xb6\xff7\x02G\xd6'b'\x00\x05N\xb1|:\xbd,\xfe\x16\xd3\x01\x01\x81\x89\xa1\x04\x00\x05\x00\x12\x00\x1a\xfc\xfc\xff\x01\x00\xfd\xff\x82\x00\xbd\x00]\x027n'b'\x00\x05N\xb1|:\xbd\x8c\xfe\x0e\xd4\x01\x01\x1d\x89\xa1\x04\x00\xbb\xa3iD\xb8\x1e\x1d={\x10\\\x19'b'\x00\x05N\xb1|:\xbe\x0c\xfe\x0e\xd5\x01\x01\x89\x89\xa1\x04\x00P\xe8iDR\xb8\xb7>\xd2\x15\xf0\x1c'b'\x00\x05N\xb1|:\xbet\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xec\xe9'b'\x00\x05N\xb1|:\xbe\xd0\xfe\x06\xd7\x01\x01}\xc5\x14\x00\x00\x03\x0001'b'\x00\x05N\xb1|:\xbf$\xfe\x04\xd8\x01\x01\x98\x00\x00\xa0\x8a7^'b'\x00\x05N\xb1|:\xbfl\xfe\x02\xd9\x01\x01*\x00\x00wD'b'\x00\x05N\xb1|:\xbf\xc8\xfe\x1e\xda\x01\x01\x18\x18g\x14\x12\x00\x00\x00\x00w\xa6\x02\x18\xc1\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xf2\xde'b'\x00\x05N\xb1|:\xc00\xfe\x1a\xdb\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xaf0'b'\x00\x05N\xb1|:\xc0\x84\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95'b'\x00\x05N\xb1|:\xc0\xe0\xfe\x14\xdd\x01\x01J\n\xd7#<\n\xd7#<)\\\x0f\xbe\n\xd7\xa3=\xb3\x00\x00\x00 \xbf'b'\x00\x05N\xb1|:\xc1@\xfe\x1c\xde\x01\x01!\x94\xa1\x04\x00w\xa6\x02\x18\xc0\xe7\xb8\xfd\x0e[\n\x00~\xff\xff\xff\xed\xff\xfc\xff\x08\x00:F\xd1\x98'b'\x00\x05N\xb1|:\xc1\xb0\xfe\x1c\xdf\x01\x01\x1e\xd9\xa1\x04\x00r\xaah\xbc\xa2u\x1e\xbcP\xd1H@=\xef\xb09\xa0\x15\x87\xba\xeb\xf7\x1d:\xebL'b'\x00\x05N\xb1|:\xc2\x04\xfe\x18\xe0\x01\x01\xb21\xd5\xce\xbc\xf3\x9c\xa6\xbb\x8d7H\xc0)\x9c)Dw\xa6\x02\x18\xc0\xe7\xb8\xfd\xebF'b'\x00\x05N\xb1|<+\xe4\xfe\x1c\xe1\x01\x01\xa3\xba\x82+:J\xb8\xf7\xba\xf2c\xbf9\x00\x00\x00\x00\x00\x00\x00\x00\x16TZ;4_\xc9<\x86\xcb'b'\x00\x05N\xb1|<,x\xfe\x03\xe2\x01\x01\xa5\xc5\x14\x00\xab('b"\x00\x05N\xb1|<,\xec\xfe\x0c\xe3\x01\x01\x020<\x80|\xb1N\x05\x00\xed\xa1\x04\x00'\xa2"b'\x00\x05N\xb1|<-d\xfe\x16\xe4\x01\x01\x88w\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1b\xb5'b'\x00\x05N\xb1|<-\xc0\xfe\x16\xe5\x01\x01\xc15|X=\xa9\x9c\x86<1I/\x00\x00\x00\x00\xa5\x03\xael'b'\x00\x05N\xb1|<.\x10\xfe\x03\xe6\x01\x01Ms\x00\x00\x92\xb8'b'\x00\x05N\xb1|\xd2\x15\xfd\xb0'b'\x00\x05N\xb1|=\xcd\x98\xfe\x1f\xef\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcc\x14'b'\x00\x05N\xb1|=\xcd\xec\xfe\x06\xf0\x01\x01}\xb8\x14\x00\x00\x03\x00_L'b'\x00\x05N\xb1|=\xce8\xfe\x04\xf1\x01\x01\x98\x00\x00\xa0\x8a9\x9b'b'\x00\x05N\xb1|=\xce|\xfe\x02\xf2\x01\x01*\x00\x00vQ'b'\x00\x05N\xb1|=\xce\xd0\xfe\x1e\xf3\x01\x01\x18x3\x1a\x12\x00\x00\x00\x00w\xa6\x02\x18\xc0\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xbe8'b'\x00\x05N\xb1|=\xcf$\xfe\x1a\xf4\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xdf\x05'b'\x00\x05N\xb1|=\xcfl\xfe\x08\xf5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x08'b'\x00\x05N\xb1|=\xcf\xbc\xfe\x14\xf6\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2\xf5\xbd)\\\x8f=\xb3\x00\x00\x00Y\xf7'b'\x00\x05N\xb1|=\xd0\x04\xfe\t\x13\n\x00m\t\x00\x00\x00\x00\xd2\x00\x00\x00\xeb\xb5'b'\x00\x05N\xb1|=\xd0X\xfe\x1c\xf7\x01\x01![\xa2\x04\x00w\xa6\x02\x18\xc0\xe7\xb8\xfd\x18[\n\x00\x88\xff\xff\xff\xec\xff\xfc\xff\x07\x00=F3\x97'b'\x00\x05N\xb1|>\x11\xaf\xfe5\x84\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01EC'b'\x00\x05N\xb1|>;\x9b\xfe!\x85\xff\x00L6\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xe3 'b'\x00\x05N\xb1|?Bl\xfe\x03\xf8\x01\x01/\xff\x00\x001\xab'b'\x00\x05N\xb1|?W\xa8\xfe\x1c\xf9\x01\x01\x1e\xc9\xa2\x04\x00BOc\xbc\x0e\xbc#\xbc3\xddH@\xb7N\x0f9\xc1\xaa0\xbag\x1c\xc2\xb9\xa2\x01'b'\x00\x05N\xb1|?X4\xfe\x18\xfa\x01\x01\xb2\x05;\xcd\xbch]\xb6\xbb]/H\xc0\\\x9f)Dw\xa6\x02\x18\xc0\xe7\xb8\xfd\x9b\x02'b'\x00\x05N\xb1|?X\xa8\xfe\x1c\xfb\x01\x01\xa3\xc1\x01,:\x99\x1c\xf8\xba\xda\xf8\xc39\x00\x00\x00\x00\x00\x00\x00\x00 \xb8m;"\xec\xca<)Y'b'\x00\x05N\xb1|?Y\x04\xfe\x03\xfc\x01\x01\xa5\xc5\x14\x00\xdeC'b'\x00\x05N\xb1|?Y\x84\xfe\x0c\xfd\x01\x01\x02\x98\xe9\x83|\xb1N\x05\x00\xde\xa2\x04\x00\xcej'b'\x00\x05N\xb1|?Z\x08\xfe\x16\xfe\x01\x01\x88w\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00<\x9f'b'\x00\x05N\xb1|?Z\x88\xfe\x16\xff\x01\x01\xc1@\xa7_=\xc30\x82<\x81[\xec;\\d\x0f>\x00\x00\x00\x00\xa5\x03\xdf7'b'\x00\x05N\xb1|?[4\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b'\x00\x05N\xb1|?\xf77\xfe5\x86\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xc0\xa1'b'\x00\x05N\xb1|@"\x0b\xfe!\x87\xff\x00LB\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9c\xba'b'\x00\x05N\xb1|@\xad`\xfe\x15\x02\x01\x01$\xe5\x1f\x1d\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19|'b'\x00\x05N\xb1|@\xad\xd8\xfe\x16\x03\x01\x01#\x1a\xa3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8e\x03'b'\x00\x05N\xb1|@\xae(\xfe\x03\x04\x01\x01Ms\x00\x00\x1e\xab'b'\x00\x05N\xb1|@\xae\xe4\xfe\x1a\x05\x01\x01\x1b\x85X\x1e\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x06\x00|\x01k\xae'b'\x00\x05N\xb1|@\xafh\xfe\x16\x06\x01\x01tj\xa3\x04\x00\x04\x00\x0e\x00"\xfc\x00\x00\x00\x00\x01\x00\x00\xff\xb6\xff7\x02\xfc8'b'\x00\x05N\xb1|@\xaf\xe8\xfe\x16\x07\x01\x01\x81j\xa3\x04\x00\x04\x00\x14\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x86\x00\xc0\x00b\x02Bg'b'\x00\x05N\xb1|@\xb0`\xfe\x0e\x08\x01\x01\x1dj\xa3\x04\x00\xa6\xa3iD\x00\x00\x18=|\x10v\xd7'b'\x00\x05N\xb1|@\xb0\xd4\xfe\x0e\t\x01\x01\x89j\xa3\x04\x00+\xe9iD\\\x8f\xbe>\xd3\x15e-'b'\x00\x05N\xb1|@\xb1X\xfe\x1f\n\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe6\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nf\xdd'b'\x00\x05N\xb1|@\xb1\xd4\xfe\x06\x0b\x01\x01}\xc5\x14\x00\x00\x03\x00\x94\xfd'b'\x00\x05N\xb1|@\xb2H\xfe\x04\x0c\x01\x01\x98\x00\x00\xa0\x8a\xf2\xbc'b'\x00\x05N\xb1|@\xb2\xb0\xfe\x02\r\x01\x01*\x00\x00\xd3\xdf'b'\x00\x05N\xb1|@\xb3\x18\xfe\x1e\x0e\x01\x01\x18\x88H\x1d\x12\x00\x00\x00\x00v\xa6\x02\x18\xbf\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c!\xad'b'\x00\x05N\xb1|@\xb3l\xfe\x1a\x0f\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x81U'b'\x00\x05N\xb1|@\xb3\xb4\xfe\x08\x10\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x81\x0b'b'\x00\x05N\xb1|@\xb4\x00\xfe\x14\x11\x01\x01J\n\xd7#<\n\xd7#<\xebQ\xb8\xbd\n\xd7\xa3=\xb3\x00\x00\x00ZG'b'\x00\x05N\xb1|@\xb4P\xfe\x12\x12\x01\x01\xfct\xa3\x04\x004\x00\x01\x00ARMMASK\x00WrG\x81'b'\x00\x05N\xb1|@\xb4\xa0\xfe\t\x13\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xf2}'b'\x00\x05N\xb1|A\xfa\xc3\xfe5\x88\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01y\x1c'b'\x00\x05N\xb1|B\x10\xd3\xfe!\x89\xff\x00LB\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\n"'b'\x00\x05N\xb1|B:\xa0\xfe\x1c\x14\x01\x01!%\xa3\x04\x00v\xa6\x02\x18\xbf\xe7\xb8\xfd6[\n\x00\xa6\xff\xff\xff\xec\xff\xfc\xff\x08\x00@F\xf6Q'b'\x00\x05N\xb1|B;D\xfe\x1c\x15\x01\x01\x1e\xba\xa3\x04\x00\xbb8]\xbc4\x04*\xbcT\xe4H@\x99\xc2\x9a9\x81\xf0\xbc\xba\xfd\xe2h\xb8\xc0V'b"\x00\x05N\xb1|B;\xb4\xfe\x18\x16\x01\x01\xb2#K\xcb\xbci>\xc6\xbbN'H\xc03\x93)Dv\xa6\x02\x18\xbf\xe7\xb8\xfd\xe9\xb7"b'\x00\x05N\xb1|B<\x18\xfe\x1c\x17\x01\x01\xa3\rv,:\x12q\xf8\xbaS\x97\xc89\x00\x00\x00\x00\x00\x00\x00\x00\xab\xb5w;:\xf5\xbc<\x9cE'b'\x00\x05N\xb1|B\x00\x00\x00\x00\xa5\x03Ht'b'\x00\x05N\xb1|B=\xd4\xfe\x03\x1c\x01\x01Ms\x00\x00\xda\xdd'b'\x00\x05N\xb1|C\xb2\x9c\xfe\x15\x1d\x01\x01$;\xc9 \x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&`'b'\x00\x05N\xb1|C\xb3\x1c\xfe\x16\x1e\x01\x01#\n\xa4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf8\x04'b'\x00\x05N\xb1|C\xee\xdf\xfe5\x8a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xfc\xfe'b'\x00\x05N\xb1|D\x05\x1f\xfe!\x8b\xff\x00LI\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00&\x13'b'\x00\x05N\xb1|EU\x84\xfe\x1a\x1f\x01\x01\x1bK\x05"\x12\x00\x00\x00\x00\x08\x00\x04\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x01{\xfb'b'\x00\x05N\xb1|EV\x00\xfe\x16 \x01\x01t[\xa4\x04\x00\x13\x00\r\x00)\xfc\x00\x00\x00\x00\x00\x00\x00\xff\xb5\xff6\x02\x92H'b'\x00\x05N\xb1|EV\\\xfe\x16!\x01\x01\x81[\xa4\x04\x00\x04\x00\x10\x00\x1d\xfc\xfc\xff\x01\x00\xfc\xff\x85\x00\xbe\x00_\x02@\x88'b'\x00\x05N\xb1|EV\xac\xfe\x0e"\x01\x01\x1d[\xa4\x04\x00\xe1\xa2iD\xa4p\xcd<|\x10\x8e\xa7'b'\x00\x05N\xb1|EV\xf8\xfe\x0e#\x01\x01\x89[\xa4\x04\x00\x81\xe6iDp=\xa9>\xd3\x15\x0c\xc0'b'\x00\x05N\xb1|EWP\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xb9]'b'\x00\x05N\xb1|EW\xa8\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V'b'\x00\x05N\xb1|EW\xf0\xfe\x04&\x01\x01\x98\x00\x00\xa0\x8a\xfb\xaf'b"\x00\x05N\xb1|EX4\xfe\x02'\x01\x01*\x00\x00\x07U"b'\x00\x05N\xb1|EX\x8c\xfe\x1e(\x01\x01\x18\x00\xa0 \x12\x00\x00\x00\x00v\xa6\x02\x18\xbe\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x06s'b'\x00\x05N\xb1|EX\xe0\xfe\x1a)\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x03\xbc'b'\x00\x05N\xb1|EY(\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2'b'\x00\x05N\xb1|EYt\xfe\x14+\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbd\n\xd7\xa3=\xb3\x00\x00\x00\xeb\xb3'b'\x00\x05N\xb1|EY\xbc\xfe\x03,\x01\x01Ms\x00\x00R0'b'\x00\x05N\xb1|En\x1c\xfe\x1c-\x01\x01!\x00\xa4\x04\x00v\xa6\x02\x18\xbe\xe7\xb8\xfdT[\n\x00\xc4\xff\xff\xff\xea\xff\xfb\xff\x08\x00BFb\xe6'b'\x00\x05N\xb1|E\xd8\xcf\xfe5\x8c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01b\xd1'b'\x00\x05N\xb1|E\xef\xb3\xfe!\x8d\xff\x00LI\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa5\xf5'b'\x00\x05N\xb1|F\xd8\x83\xfe\t\x8e\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03q\xb8'b'\x00\x05N\xb1|F\xedh\xfe\x1c.\x01\x01\x1e\xac\xa4\x04\x00\xae`Y\xbczW.\xbcC\xedH@\xea\xda\xc49\x1b\xd4\xa1\xba"\xf1\x0c9\xf1\xfd'b'\x00\x05N\xb1|F\xed\xf8\xfe\x18/\x01\x01\xb2\x1c\xe0\xc9\xbc\x02\xed\xd6\xbb\xf4\x1eH\xc0\x85\x9b)Dv\xa6\x02\x18\xbe\xe7\xb8\xfd\xab\xe9'b'\x00\x05N\xb1|F\xeeT\xfe\x1c0\x01\x01\xa3t\xdd,:\xac\xb3\xf8\xba\x1b;\xcd9\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x98\x90;}\x9c\xb1\x00\x00\x00\x00\xa5\x03\x98T'b'\x00\x05N\xb1|F\xf0\x14\xfe\x036\x01\x01Ms\x00\x00\xf9M'b'\x00\x05N\xb1|G\x04p\xfe\x157\x01\x01$\xa9x$\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xc1'b'\x00\x05N\xb1|G\x04\xc8\xfe\x168\x01\x01#\xfc\xa4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xba\x00'b'\x00\x05N\xb1|G\xb0o\xfe5\x8f\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xad\xc6'b'\x00\x05N\xb1|G\xc7\xe3\xfe!\x90\xff\x00LN\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00R\xdb'b'\x00\x05N\xb1|H}\xe8\xfe\x1a9\x01\x01\x1b&\xb4%\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x07\x00{\x018\xa3'b"\x00\x05N\xb1|H~X\xfe\x16:\x01\x01tL\xa5\x04\x00\t\x00\x0b\x00'\xfc\x00\x00\xff\xff\x01\x00\x00\xff\xb5\xff7\x02\x8d4"b'\x00\x05N\xb1|H~\xb4\xfe\x16;\x01\x01\x81L\xa5\x04\x00\x05\x00\x12\x00\x1b\xfc\xfc\xff\x01\x00\xfc\xff\x81\x00\xbd\x00_\x02n\x0b'b'\x00\x05N\xb1|H\x7f\x04\xfe\x0e<\x01\x01\x1dL\xa5\x04\x00\xa9\xa4iD\xd7\xa3X=}\x10\x00\t'b'\x00\x05N\xb1|H\x7fP\xfe\x0e=\x01\x01\x89L\xa5\x04\x00\xe3\xe7iD\xebQ\xb4>\xd4\x15\xedF'b'\x00\x05N\xb1|H\x7f\xa8\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x92\x00\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcch'b'\x00\x05N\xb1|H\x7f\xfc\xfe\x06?\x01\x01}\xc2\x14\x00\x00\x03\x00\x16\xf7'b'\x00\x05N\xb1|H\x80H\xfe\x04@\x01\x01\x98\x00\x00\xa0\x8a\xbe\x1a'b'\x00\x05N\xb1|H\x80\x98\xfe\x02A\x01\x01*\x00\x00O\xa9'b'\x00\x05N\xb1|H\x80\xfc\xfe\x1eB\x01\x01\x18\xf0f#\x12\x00\x00\x00\x00v\xa6\x02\x18\xbd\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cQ\x0f'b'\x00\x05N\xb1|H\x81P\xfe\x1aC\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x94\x8e'b'\x00\x05N\xb1|H\x81\x98\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$'b'\x00\x05N\xb1|H\x81\xe8\xfe\x14E\x01\x01J\n\xd7#<\n\xd7#<\xcc\xccL\xbd\n\xd7\xa3=\xb3\x00\x00\x00g\t'b'\x00\x05N\xb1|H\x82,\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b'\x00\x05N\xb1|I\xb4\xeb\xfe5\x91\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01KW'b'\x00\x05N\xb1|I\xcc\x03\xfe!\x92\xff\x00LN\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xd3\x86'b'\x00\x05N\xb1|I\xf6\xa0\xfe\x1cG\x01\x01!\xb6\xa4\x04\x00v\xa6\x02\x18\xbd\xe7\xb8\xfd^[\n\x00\xce\xff\xff\xff\xea\xff\xfb\xff\x08\x00EF\xe8\xa6'b'\x00\x05N\xb1|I\xf7D\xfe\x1cH\x01\x01\x1e\x9c\xa5\x04\x00\xc9\xcbU\xbc\x80\xff3\xbc\x0b\xf4H@\xcb\x10\t9D1\x98\xba\xbcr\xc16\xd9\x1c'b'\x00\x05N\xb1|I\xf7\xb4\xfe\x18I\x01\x01\xb2\xf8\xa4\xc8\xbcH,\xe6\xbb\xba\x15H\xc0\xeb\xa1)Dv\xa6\x02\x18\xbc\xe7\xb8\xfd\x96\xff'b"\x00\x05N\xb1|I\xf8\x18\xfe\x1cJ\x01\x01\xa3\xb37-:9\xe4\xf8\xba\x11\xe7\xd19\x00\x00\x00\x00\x00\x00\x00\x008=\xa0;@'\xae<\x04\x9e"b'\x00\x05N\xb1|I\xf8\x94\xfe\x03K\x01\x01\xa5\xc5\x14\x00\xba\xf9'b'\x00\x05N\xb1|I\xf9\x08\xfe\x0cL\x01\x01\x020\xe2\x8e|\xb1N\x05\x00\xb0\xa5\x04\x00\xc6\xd7'b'\x00\x05N\xb1|I\xf9\x88\xfe\x16M\x01\x01\x88v\xa6\x02\x18\xbc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xde\x08'b'\x00\x05N\xb1|I\xfa\x00\xfe\x16N\x01\x01\xc1\xc8\x12~=\xbe\xe0g<\xfd\x9a\xbd;\xf1\xf1\x06>\x00\x00\x00\x00\xa5\x039\x04'b'\x00\x05N\xb1|Kj\xb4\xfe\x03O\x01\x01Ms\x00\x00\x83i'b'\x00\x05N\xb1|K\x81/\xfe5\x93\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xce\xb5'b'\x00\x05N\xb1|K\x834\xfe\x15P\x01\x01$\xb0%(\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b2'b'\x00\x05N\xb1|K\x83\xbc\xfe\x16Q\x01\x01#\xec\xa5\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00+\x8f'b'\x00\x05N\xb1|K\xe8\xa7\xfe!\x94\xff\x00LN\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00P`'b'\x00\x05N\xb1|L\xe0\xbc\xfe\x1aR\x01\x01\x1b&`)\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1b\xfc\x00\x00\x00\x00\x01\x00\xf4\xfe\x07\x00{\x01\x9d\xc5'b'\x00\x05N\xb1|L\xe1,\xfe\x16S\x01\x01t=\xa6\x04\x00\x0b\x00\x08\x00 \xfc\x00\x00\xfd\xff\x00\x00\xff\xfe\xb5\xff6\x02\xd4h'b'\x00\x05N\xb1|L\xe1\x88\xfe\x16T\x01\x01\x81=\xa6\x04\x00\x04\x00\x12\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x82\x00\xbf\x00a\x02(<'b'\x00\x05N\xb1|L\xe1\xd8\xfe\x0eU\x01\x01\x1d=\xa6\x04\x00\xf0\xa3iD\\\x8f*=|\x10\xdb\x13'b'\x00\x05N\xb1|L\xe2(\xfe\x0eV\x01\x01\x89=\xa6\x04\x00~\xe7iD\xf6(\xb1>\xd4\x15\x07\xf7'b'\x00\x05N\xb1|L\xe2\x80\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00NA\x15'b'\x00\x05N\xb1|L\xe2\xd4\xfe\x06X\x01\x01}\xc5\x14\x00\x00\x03\x00g\xbf'b'\x00\x05N\xb1|L\xe3 \xfe\x04Y\x01\x01\x98\x00\x00\xa0\x8a\x1d\xd7'b'\x00\x05N\xb1|L\xe3d\xfe\x02Z\x01\x01*\x00\x00\x04j'b'\x00\x05N\xb1|L\xe3\xb8\xfe\x1e[\x01\x01\x18\x18x&\x12\x00\x00\x00\x00u\xa6\x02\x18\xbc\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xb5\xe2'b'\x00\x05N\xb1|L\xe4\x0c\xfe\x1a\\\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00p\xef'b'\x00\x05N\xb1|L\xe4T\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V'b'\x00\x05N\xb1|L\xe4\xa0\xfe\x14^\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2\xf5\xbc\n\xd7\xa3=\xb3\x00\x00\x00\xc3\x02'b'\x00\x05N\xb1|L\xe4\xe8\xfe\x03_\x01\x01Ms\x00\x00\xfb2'b'\x00\x05N\xb1|L\xf9@\xfe\x1c`\x01\x01!H\xa6\x04\x00u\xa6\x02\x18\xbc\xe7\xb8\xfd|[\n\x00\xec\xff\xff\xff\xe9\xff\xfa\xff\x08\x00IFx\xfc'b'\x00\x05N\xb1|L\xf9\x9c\xfe\t\x14\n\x00m\x1a\x00\x00\x00\x00\xd2\x00\x00\x00Wc'b'\x00\x05N\xb1|L\xf9\xf0\xfe\x1ca\x01\x01\x1e\x8d\xa6\x04\x00\t\xccP\xbc\x0e\x1c:\xbcQ\xfbH@b\x0cb:\xe4\xe2A\xba\xe26\x9d\xb9|`'b'\x00\x05N\xb1|L\xfaD\xfe\x18b\x01\x01\xb2\xe7\x1a\xc7\xbc\x82f\xf5\xbb\x8a\x0cH\xc0=\x9a)Du\xa6\x02\x18\xbc\xe7\xb8\xfd\x9a.'b'\x00\x05N\xb1|M\xa3\xcb\xfe5\x95\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01P\x9a'b"\x00\x05N\xb1|M\xbb#\xfe%\x96\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xfa\xce"b'\x00\x05N\xb1|M\xd0g\xfe!\x96\xff\x00LP\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00Az'b'\x00\x05N\xb1|Nxd\xfe\x1cc\x01\x01\xa3\x02\x84-:>\x02\xf9\xba9\x99\xd69\x00\x00\x00\x00\x00\x00\x00\x00\x85\xc8\xac;\x92`\xa4<\x99$'b'\x00\x05N\xb1|Nx\xc8\xfe\x03d\x01\x01\xa5\xb5\x14\x00\xbd\xa4'b'\x00\x05N\xb1|Ny\x18\xfe\x0ce\x01\x01\x02\xb0\x8b\x92|\xb1N\x05\x00\xa1\xa6\x04\x00\xcbj'b'\x00\x05N\xb1|Nyx\xfe\x16f\x01\x01\x88u\xa6\x02\x18\xbc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x84\xf7'b'\x00\x05N\xb1|Ny\xec\xfe\x16g\x01\x01\xc1y\xfd\x84=(\xf7[<\xea\xef\xfb;\x87\x05\x03>\x00\x00\x00\x00\xa5\x03\xa3\xad'b'\x00\x05N\xb1|NzL\xfe\x03h\x01\x01/\xff\x00\x00\xab;'b'\x00\x05N\xb1|N{\x04\xfe\x15i\x01\x01$M\xd1+\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x87'b'\x00\x05N\xb1|N{x\xfe\x16j\x01\x01#\xdd\xa6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe8\xf8'b'\x00\x05N\xb1|N{\xdc\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9'b'\x00\x05N\xb1|O\x93\x7f\xfe5\x98\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01&0'b'\x00\x05N\xb1|O\xa9\xa3\xfe!\x99\xff\x00LP\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x1fH'b'\x00\x05N\xb1|P\x13\x0c\xfe\x1al\x01\x01\x1b\xe0\n-\x12\x00\x00\x00\x00\t\x00\x06\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01mj'b'\x00\x05N\xb1|P\x13\x88\xfe\x16m\x01\x01t-\xa7\x04\x00\x0b\x00\x07\x00$\xfc\x02\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02\xcb`'b'\x00\x05N\xb1|P\x13\xe8\xfe\x16n\x01\x01\x81-\xa7\x04\x00\x04\x00\x13\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff\x8a\x00\xc3\x00m\x02\xa2n'b"\x00\x05N\xb1|P\x144\xfe\x0eo\x01\x01\x1d-\xa7\x04\x00'\xa4iD\xebQ8={\x10\xeaP"b'\x00\x05N\xb1|P\x14\x84\xfe\x0ep\x01\x01\x89-\xa7\x04\x00\xac\xe7iD\x99\x99\xb2>\xd5\x15\xdf\x19'b'\x00\x05N\xb1|P\x14\xdc\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf2\x00\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N(o'b'\x00\x05N\xb1|P\x150\xfe\x06r\x01\x01}\xc6\x14\x00\x00\x03\x00\x0b\xe2'b'\x00\x05N\xb1|P\x15|\xfe\x04s\x01\x01\x98\x00\x00\xa0\x8a\x14\xc4'b'\x00\x05N\xb1|P\x15\xc0\xfe\x02t\x01\x01*\x00\x00\xa6\x8f'b'\x00\x05N\xb1|P\x16\x14\xfe\x1eu\x01\x01\x18\x80\x96,\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0cE\x1f'b'\x00\x05N\xb1|P\x16h\xfe\x1av\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xd7\x13'b'\x00\x05N\xb1|P\x16\xb0\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5'b'\x00\x05N\xb1|P\x16\xfc\xfe\x14x\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3=\xb3\x00\x00\x00m\xd7'b'\x00\x05N\xb1|P\x17P\xfe\x1cy\x01\x01!\x10\xa7\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xe8\xff\xf9\xff\x08\x00KF\xe9\x1f'b'\x00\x05N\xb1|P\x17\xa4\xfe\x03z\x01\x01Ms\x00\x00j\x13'b'\x00\x05N\xb1|P+\xf4\xfe\x12{\x01\x01\xfc`\xa7\x04\x004\x00\x01\x00ARMMASK\x00WrPd'b'\x00\x05N\xb1|P,P\xfe\t|\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc6\x04'b'\x00\x05N\xb1|Q\x8e\xef\xfe5\x9a\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa3\xd2'b'\x00\x05N\xb1|Q\xa7+\xfe!\x9b\xff\x00LP\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x9e\x15'b'\x00\x05N\xb1|Q\xbc\\\xfe\x1c}\x01\x01\x1e~\xa7\x04\x00l;N\xbc\x93\x14<\xbc\xb9\x04I@\x14\x86q:?\x7f\x8a\xba\x10\x93/\xbau\x84'b'\x00\x05N\xb1|Q\xbc\xe4\xfe\x18~\x01\x01\xb2\x02\xbf\xc5\xbc\xe8\x01\x02\xbce\x03H\xc0\n\x97)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xf5\xe2'b'\x00\x05N\xb1|Q\xbdP\xfe\x1c\x7f\x01\x01\xa3\xb2\xc0-:}\x0c\xf9\xba\xaeQ\xdb9\x00\x00\x00\x00\x00\x00\x00\x00\xb6j\xb6;\xa1=\x9f<\x1d 'b'\x00\x05N\xb1|Q\xbd\xb0\xfe\x03\x80\x01\x01\xa5\xc5\x14\x00\xc5\xf0'b'\x00\x05N\xb1|Q\xbe,\xfe\x0c\x81\x01\x01\x02\x189\x96|\xb1N\x05\x00\x92\xa7\x04\x003\x18'b'\x00\x05N\xb1|Q\xbe\xb4\xfe\x16\x82\x01\x01\x88u\xa6\x02\x18\xbb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00/\x1a'b'\x00\x05N\xb1|Q\xbf4\xfe\x16\x83\x01\x01\xc1\xa5\xf9\x87=\x88\x8bT<-\x12\x9f;,\xbf\x03>\x00\x00\x00\x00\xa5\x03\xc0\xcb'b'\x00\x05N\xb1|S%\xd0\xfe\x15\x85\x01\x01$u\x82/\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x16'b'\x00\x05N\xb1|S&\x94\xfe\x16\x86\x01\x01#\xcf\xa7\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00+\x19'b"\x00\x05N\xb1|S'\x08\xfe\x03\x87\x01\x01Ms\x00\x00,\xea"b"\x00\x05N\xb1|S'\xf8\xfe\x1a\x88\x01\x01\x1b\x9a\xb90\x12\x00\x00\x00\x00\x08\x00\x05\x00\x19\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01l\x16"b'\x00\x05N\xb1|S(t\xfe\x16\x89\x01\x01t\x1f\xa8\x04\x00\x10\x00\x06\x00*\xfc\x03\x00\xff\xff\xff\xff\x00\xff\xb5\xff7\x02\xc1P'b'\x00\x05N\xb1|S(\xe0\xfe\x16\x8a\x01\x01\x81\x1f\xa8\x04\x00\x05\x00\x10\x00\x1c\xfc\xfc\xff\x01\x00\xfd\xff\x84\x00\xbe\x00\\\x02i\xed'b'\x00\x05N\xb1|S)@\xfe\x0e\x8b\x01\x01\x1d\x1f\xa8\x04\x00\xbd\xa2iD\x1e\x85\xbb\xd2\x15\xe8\x9b'b'\x00\x05N\xb1|S*\x00\xfe\x1f\x8d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa4\x00\xfd<<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc4i'b'\x00\x05N\xb1|S*`\xfe\x06\x8e\x01\x01}\xc5\x147\x00\x03\x00F\x80'b'\x00\x05N\xb1|S*\xb8\xfe\x04\x8f\x01\x01\x98\x00\x00\xa0\x8a"\xae'b'\x00\x05N\xb1|S+\x04\xfe\x02\x90\x01\x01*\x00\x00H\xc2'b'\x00\x05N\xb1|S+`\xfe\x1e\x91\x01\x01\x18\xc8\xf5/\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\xc1\x93'b'\x00\x05N\xb1|S+\xbc\xfe\x1a\x92\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00m"'b'\x00\x05N\xb1|S,\x0c\xfe\x08\x93\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xc3'b'\x00\x05N\xb1|S,`\xfe\x14\x94\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7#<\n\xd7\xa3=\xb3\x00\x00\x00\xf3\xa2'b'\x00\x05N\xb1|S^\x1b\xfe5\x9c\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01=\xfd'b'\x00\x05N\xb1|S\x88\x8b\xfe!\x9d\xff\x00LS\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00z\x01'b'\x00\x05N\xb1|T\xa74\xfe\x1c\x95\x01\x01!\xed\xa7\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\x9a[\n\x00\n\x00\x00\x00\xe8\xff\xf9\xff\x08\x00MF\xd3\xab'b'\x00\x05N\xb1|T\xa8\x1c\xfe\x03\x96\x01\x01Ms\x00\x00\xeb0'b'\x00\x05N\xb1|T\xa9H\xfe\x1c\x97\x01\x01\x1eo\xa8\x04\x00(\x93I\xbc#\x90A\xbcG\nI@y\xd4A:\xf0\x8d\x85\xba\xd7\xe8x9\x8bR'b'\x00\x05N\xb1|T\xaa\x0c\xfe\x18\x98\x01\x01\xb2\xb6\x18\xc4\xbcb\xff\t\xbc}\xfbG\xc0\x00\xa0)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xaf\xfc'b'\x00\x05N\xb1|T\xaa\x88\xfe\x1c\x99\x01\x01\xa3\x9b\xed-:\xdc\x03\xf9\xbad\r\xe09\x00\x00\x00\x00\x00\x00\x00\x00\x0e\xe3\xc2;N\xf0\x9d\x8b=\xeelM<\x7f\x94\x9e:\xdcH\x02>\x00\x00\x00\x00\xa5\x03\xea'"b'\x00\x05N\xb1|UM\xc3\xfe5\x9e\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb8\x1f'b'\x00\x05N\xb1|Uc_\xfe!\x9f\xff\x00LS\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfb\\'b'\x00\x05N\xb1|V\x1dO\xfe\t\xa0\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc0\xfc'b'\x00\x05N\xb1|V\x1e\x88\xfe\x15\x9e\x01\x01$\x9e*3\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x90'b'\x00\x05N\xb1|V\x1f\x04\xfe\x16\x9f\x01\x01#\xbf\xa8\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa3\xe5'b'\x00\x05N\xb1|V\x1fh\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b'\x00\x05N\xb1|W7\x9f\xfe5\xa1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xaa#'b'\x00\x05N\xb1|WM\xc3\xfe!\xa2\xff\x00LS\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00K?'b'\x00\x05N\xb1|W\xa3\xe0\xfe\x1a\xa1\x01\x01\x1b\x01f4\x12\x00\x00\x00\x00\x08\x00\x08\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x06\x00z\x01r\x9f'b'\x00\x05N\xb1|W\xa4T\xfe\x16\xa2\x01\x01t\x0f\xa9\x04\x00\x07\x00\x0e\x005\xfc\x00\x00\xff\xff\x03\x00\xff\xfe\xb5\xff6\x02\xc2\x11'b'\x00\x05N\xb1|W\xa4\xb0\xfe\x16\xa3\x01\x01\x81\x0f\xa9\x04\x00\x04\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff\x82\x00\xbd\x00^\x02-\xfa'b'\x00\x05N\xb1|W\xa5\x00\xfe\x0e\xa4\x01\x01\x1d\x0f\xa9\x04\x00\x97\xa4iD\xf5(T=}\x10\xf5\xb9'b"\x00\x05N\xb1|W\xa5P\xfe\x0e\xa5\x01\x01\x89\x0f\xa9\x04\x00\xe3\xe7iD\xebQ\xb4>\xd4\x15\x85'"b'\x00\x05N\xb1|W\xa5\xac\xfe\x1f\xa6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x01\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xaab'b'\x00\x05N\xb1|W\xa6\x00\xfe\x06\xa7\x01\x01}\xc8\x14\x00\x00\x03\x00\xb5A'b'\x00\x05N\xb1|W\xa6L\xfe\x04\xa8\x01\x01\x98\x00\x00\xa0\x8a\xf9\xb0'b'\x00\x05N\xb1|W\xa6\x90\xfe\x02\xa9\x01\x01*\x00\x00;U'b'\x00\x05N\xb1|W\xa6\xe8\xfe\x1e\xaa\x01\x01\x18\xe8\xb42\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cX\x04'b'\x00\x05N\xb1|W\xa7<\xfe\x1a\xab\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x13m'b'\x00\x05N\xb1|W\xa7\x84\xfe\x08\xac\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x19'b'\x00\x05N\xb1|W\xa7\xd4\xfe\x14\xad\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3<\n\xd7\xa3=\xb4\x00\x00\x00\xbe\xa1'b'\x00\x05N\xb1|W\xa8(\xfe\x1c\xae\x01\x01!\xa1\xa8\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\xa4[\n\x00\x14\x00\x00\x00\xe7\xff\xf9\xff\x08\x00QF\x88\xb7'b'\x00\x05N\xb1|W\xa8|\xfe\x03\xaf\x01\x01Ms\x00\x00`q'b'\x00\x05N\xb1|Y\x13\xb7\xfe5\xa3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01/\xc1'b'\x00\x05N\xb1|Y=\x93\xfe!\xa4\xff\x00LS\xfe3C\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc8\xd9'b'\x00\x05N\xb1|Yl,\xfe\x1c\xb0\x01\x01\x1e_\xa9\x04\x00*\xf0F\xbc\xb47B\xbc\xfa\x0bI\xc0\xdf\xd7\xca8M\xc0\xa3\xbaq\xbc\x019\xc91'b'\x00\x05N\xb1|Yl\xa8\xfe\x18\xb1\x01\x01\xb2\x8b\xc4\xc2\xbc4V\x11\xbcJ\xf2G\xc0=\x9a)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xd8y'b'\x00\x05N\xb1|Ym\x10\xfe\x1c\xb2\x01\x01\xa3\xce\t.:$\xe7\xf8\xbaZ\xd1\xe49\x00\x00\x00\x00\x00\x00\x00\x00\xa5{\xd7;\t\x12\x95<\t\xcc'b'\x00\x05N\xb1|Ymd\xfe\x03\xb3\x01\x01\xa5\xc5\x14\x00\x9d\x97'b'\x00\x05N\xb1|Ym\xbc\xfe\x0c\xb4\x01\x01\x028\xda\x9d|\xb1N\x05\x00t\xa9\x04\x00XM'b'\x00\x05N\xb1|Yn \xfe\x16\xb5\x01\x01\x88u\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf0+'b'\x00\x05N\xb1|Yn|\xfe\x16\xb6\x01\x01\xc1@*\x8f="\x19C<9\xc4\x88;\xdd\xe8\xf7=\x00\x00\x00\x00\xa5\x03M\x13'b'\x00\x05N\xb1|Yn\xdc\xfe\x15\xb7\x01\x01$\xfe\xd66\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00FP'b'\x00\x05N\xb1|Yo<\xfe\x16\xb8\x01\x01#\xaf\xa9\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5>'b'\x00\x05N\xb1|Z\xbb\x0c\xfe\x03\xb9\x01\x01Ms\x00\x00\xa97'b'\x00\x05N\xb1|Z\xcf\xf0\xfe\x1a\xba\x01\x01\x1b\xed\x108\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x08\x00{\x01\x03:'b'\x00\x05N\xb1|Z\xd0\\\xfe\x16\xbb\x01\x01t\x00\xaa\x04\x00\r\x00\x11\x00%\xfc\x00\x00\x01\x00\x02\x00\x00\xff\xb6\xff6\x02QD'b'\x00\x05N\xb1|Z\xd0\xb8\xfe\x16\xbc\x01\x01\x81\x00\xaa\x04\x00\x03\x00\x12\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x81\x00\xbe\x00j\x02M\xf3'b'\x00\x05N\xb1|Z\xd1\x08\xfe\x0e\xbd\x01\x01\x1d\x00\xaa\x04\x00\x97\xa4iD\xf5(T=}\x102\xce'b'\x00\x05N\xb1|Z\xd1X\xfe\x0e\xbe\x01\x01\x89\x00\xaa\x04\x00"\xe8iD\xaeG\xb6>\xd5\x15)\xf8'b'\x00\x05N\xb1|Z\xd1\xb4\xfe\x1f\xbf\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdc\x00\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N!='b'\x00\x05N\xb1|Z\xd2\x08\xfe\x06\xc0\x01\x01}\xca\x14\x00\x00\x03\x00g\xf9'b'\x00\x05N\xb1|Z\xd2T\xfe\x04\xc1\x01\x01\x98\x00\x00\xa0\x8a\x94\x93'b'\x00\x05N\xb1|Z\xd2\x98\xfe\x02\xc2\x01\x01*\x00\x00<\x87'b'\x00\x05N\xb1|Z\xd2\xf0\xfe\x1e\xc3\x01\x01\x18\x10\xc65\x12\x00\x00\x00\x00u\xa6\x02\x18\xba\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x87\xd0'b'\x00\x05N\xb1|Z\xd3D\xfe\x1a\xc4\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00S\x96'b'\x00\x05N\xb1|Z\xd3\x8c\xfe\x08\xc5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xe7'b'\x00\x05N\xb1|Z\xd3\xdc\xfe\x14\xc6\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2\xf5<)\\\x8f=\xb4\x00\x00\x00\x84\x81'b'\x00\x05N\xb1|[\x03\x97\xfe5\xa5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xb1\xee'b'\x00\x05N\xb1|[\x06\xd7\xfe!\xa6\xff\x00LW\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00]_'b'\x00\x05N\xb1|\\e\x14\xfe\x1c\xc7\x01\x01!j\xa9\x04\x00u\xa6\x02\x18\xba\xe7\xb8\xfd\xae[\n\x00\x1e\x00\x00\x00\xe7\xff\xf8\xff\x07\x00TFf\xa0'b'\x00\x05N\xb1|\\e\xa8\xfe\x03\xc8\x01\x01Ms\x00\x04\x0fY'b'\x00\x05N\xb1|\\z(\xfe\x1c\xc9\x01\x01\x1eP\xaa\x04\x00\xc9\xebC\xbc\x9f\xdcD\xbc{\x04I\xc0\xe3y\xd6\xb9t\x1fa\xba\x1e\xebR:\xc7\xf4'b'\x00\x05N\xb1|\\z\x94\xfe\x18\xca\x01\x01\xb2lf\xc1\xbc\x85\x13\x18\xbc3\xe9G\xc0\xe1\x9a)Du\xa6\x02\x18\xba\xe7\xb8\xfd\xd7e'b'\x00\x05N\xb1|\\z\xec\xfe\t\x15\n\x00m\n\x00\x00\x00\x00\xd2\x00\x00\x00\xef\xcf'b'\x00\x05N\xb1|\\{L\xfe\x1c\xcb\x01\x01\xa3\xb4\x13.:!\xb6\xf8\xba~\x94\xe99\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83\xe2;\x19\xc0\x8c<\xbf\xd5'b'\x00\x05N\xb1|\\{\xa8\xfe\x03\xcc\x01\x01\xa5\xc8\x14\x00\xd9%'b'\x00\x05N\xb1|\\{\xf4\xfe\x0c\xcd\x01\x01\x02\xd0\x7f\xa1|\xb1N\x05\x00d\xaa\x04\x00]?'b'\x00\x05N\xb1|\\|H\xfe\x16\xce\x01\x01\x88u\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00ay'b'\x00\x05N\xb1|\\|\x9c\xfe\x16\xcf\x01\x01\xc1Vd\x91=\xa8\xb6<<\x7frk;Z\xde\xf9=\x00\x00\x00\x00\xa5\x03C\x88'b'\x00\x05N\xb1|\\\xb9\xc7\xfe5\xa7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x014\x0c'b'\x00\x05N\xb1|\\\xe3\xb3\xfe!\xa8\xff\x00LX\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x03\xe4'b'\x00\x05N\xb1|]\xc3\x9c\xfe\x15\xd0\x01\x01$\x8e\x88:\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xbe'b'\x00\x05N\xb1|]\xc4\x0c\xfe\x16\xd1\x01\x01#\xa1\xaa\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0eu'b'\x00\x05N\xb1|]\xc4\\\xfe\x03\xd2\x01\x01Ms\x00\x04\xa4$'b"\x00\x05N\xb1|]\xdc[\xfe%\xa9\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x06\x08"b'\x00\x05N\xb1|^\x87K\xfe5\xaa\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01B\xa6'b'\x00\x05N\xb1|^\xc5\xaf\xfe!\xab\xff\x00LX\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00J\x13'b'\x00\x05N\xb1|_R\x00\xfe\x1a\xd3\x01\x01\x1b-\xc4;\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf4\xfe\x07\x00{\x01\xf5:'b'\x00\x05N\xb1|_Rx\xfe\x16\xd4\x01\x01t\xf2\xaa\x04\x00\x0b\x00\x0e\x00,\xfc\x01\x00\xfe\xff\xff\xff\xff\xfe\xb6\xff7\x024\xf6'b'\x00\x05N\xb1|_R\xd4\xfe\x16\xd5\x01\x01\x81\xf2\xaa\x04\x00\x06\x00\x13\x00\x1e\xfc\xfc\xff\x00\x00\xfd\xff\x81\x00\xc1\x00^\x02\xd5\x17'b'\x00\x05N\xb1|_S \xfe\x0e\xd6\x01\x01\x1d\xf2\xaa\x04\x00\x1d\xa4iD\x8f\xc25=|\x10\xc34'b'\x00\x05N\xb1|_Sl\xfe\x0e\xd7\x01\x01\x89\xf2\xaa\x04\x00O\xe7iD\x14\xae\xaf>\xd4\x15@\x9e'b'\x00\x05N\xb1|_S\xcc\xfe*\xd8\x01\x01\x96s\xe7f\xbc\x10m\x01\x00|\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00s\x94'b'\x00\x05N\xb1|_T8\xfe\x1f\xd9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x06=:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xecT'b'\x00\x05N\xb1|_T\xa0\xfe\x06\xda\x01\x01}\xcd\x14\x00\x00\x03\x00\xb2X'b'\x00\x05N\xb1|_T\xfc\xfe\x04\xdb\x01\x01\x98\x00\x00\xa0\x8a0\x88'b'\x00\x05N\xb1|_UP\xfe\x02\xdc\x01\x01*\x00\x00\xd4\xb4'b'\x00\x05N\xb1|_U\xb8\xfe\x1e\xdd\x01\x01\x188\xd78\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x9eb'b'\x00\x05N\xb1|_V \xfe\x1a\xde\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00`>'b'\x00\x05N\xb1|_Vx\xfe\x08\xdf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Y\x9b'b'\x00\x05N\xb1|_V\xd8\xfe\x14\xe0\x01\x01J\n\xd7#<\n\xd7#<\xcc\xccL=)\\\x8f=\xb4\x00\x00\x00\xb1\xb3'b'\x00\x05N\xb1|_W0\xfe\x03\xe1\x01\x01/\xff\x00\x00J\\'b'\x00\x05N\xb1|_W\xe4\xfe\x1c\xe2\x01\x01!\xfc\xaa\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xb8[\n\x00(\x00\x00\x00\xe6\xff\xf7\xff\x07\x00XFdG'b'\x00\x05N\xb1|_XD\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H'b'\x00\x05N\xb1|_\x94\xc8\xfe\x1c\xe4\x01\x01\x1eB\xab\x04\x00\xb9.A\xbc>\xe1I\xbc\xf4\xfaH\xc0\x9b\xf5\xbb\xb8]y\x04\xba\x97\x0b\xb08J\x89'b"\x00\x05N\xb1|_\x95L\xfe\x18\xe5\x01\x01\xb2\x9d\xee\xbf\xbc\x8d\r \xbcz\xdfG\xc0R\x98)Du\xa6\x02\x18\xb9\xe7\xb8\xfd'["b'\x00\x05N\xb1|_\x95\xa8\xfe\x12\xe6\x01\x01\xfcL\xab\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd5\xa3'b'\x00\x05N\xb1|`\x98o\xfe5\xac\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xdc\x89'b'\x00\x05N\xb1|`\xe6\xff\xfe!\xad\xff\x00LQ\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xde:'b'\x00\x05N\xb1|`\xe7\xbc\xfe\t\xe7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x928'b'\x00\x05N\xb1|`\xe8@\xfe\x1c\xe8\x01\x01\xa3\xed\t.:\xbfq\xf8\xba\xa2T\xee9\x00\x00\x00\x00\x00\x00\x00\x00C\x8f\xf1;\xc9:\x80<\xaaK'b'\x00\x05N\xb1|`\xe8\x8c\xfe\x03\xe9\x01\x01\xa5\xc6\x14\x00\n\xaa'b'\x00\x05N\xb1|`\xe8\xd8\xfe\x0c\xea\x01\x01\x02 1\xa5|\xb1N\x05\x00W\xab\x04\x00\x83\xc5'b'\x00\x05N\xb1|`\xe9,\xfe\x16\xeb\x01\x01\x88u\xa6\x02\x18\xb9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00x\xce'b'\x00\x05N\xb1|`\xe9\xac\xfe\x16\xec\x01\x01\xc1i\xcb\x94=u\x183<\x05\x1d+;\xddh\xef=\x00\x00\x00\x00\xa5\x03\xcd\t'b'\x00\x05N\xb1|`\xea(\xfe\x15\xed\x01\x01$<6>\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Om'b'\x00\x05N\xb1|`\xea\xa4\xfe\x16\xee\x01\x01#\x93\xab\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1d\x8b'b'\x00\x05N\xb1|bi\xb4\xfe\x03\xef\x01\x01Ms\x00\x04\xf1s'b'\x00\x05N\xb1|b\x80\x9b\xfe5\xae\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01Yk'b'\x00\x05N\xb1|b\xd2\x93\xfe!\xaf\xff\x00LQ\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00_g'b'\x00\x05N\xb1|b\xd3t\xfe\x1a\xf0\x01\x01\x1b\x9cn?\x12\x00\x00\x00\x00\x08\x00\x08\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00z\x01\x97H'b'\x00\x05N\xb1|b\xd3\xe0\xfe\x16\xf1\x01\x01t\xe2\xab\x04\x00\x07\x00\x06\x00.\xfc\x00\x00\xff\xff\xfd\xff\x00\xff\xb5\xff7\x02\x00"'b'\x00\x05N\xb1|b\xd4<\xfe\x16\xf2\x01\x01\x81\xe2\xab\x04\x00\x02\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff\x84\x00\xc9\x00b\x02\xfe%'b'\x00\x05N\xb1|b\xd4\x8c\xfe\x0e\xf3\x01\x01\x1d\xe3\xab\x04\x00\x1d\xa4iD\x8f\xc25=}\x10f\xcc'b'\x00\x05N\xb1|b\xd4\xd8\xfe\x0e\xf4\x01\x01\x89\xe3\xab\x04\x00\x1c\xe8iD{\x14\xb6>\xd6\x15\x02\xa6'b'\x00\x05N\xb1|b\xd54\xfe\x1f\xf5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x00\x06=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xda\xbc'b'\x00\x05N\xb1|b\xd5\x84\xfe\x06\xf6\x01\x01}\xc8\x14\x00\x00\x03\x00d\xa8'b'\x00\x05N\xb1|b\xd5\xd0\xfe\x04\xf7\x01\x01\x98\x00\x00\xa0\x8a&?'b'\x00\x05N\xb1|b\xd6\x14\xfe\x02\xf8\x01\x01*\x00\x00!\xb8'b'\x00\x05N\xb1|b\xd6h\xfe\x1e\xf9\x01\x01\x18\x88\xf9>\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xc3d'b'\x00\x05N\xb1|b\xd6\xbc\xfe\x1a\xfa\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x9bU'b'\x00\x05N\xb1|b\xd7\x08\xfe\x08\xfb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00M8'b'\x00\x05N\xb1|b\xd7l\xfe\x14\xfc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xcc\xccL=)\\\x8f=\xb4\x00\x00\x00;\x01'b'\x00\x05N\xb1|b\xd7\xd0\xfe\x1c\xfd\x01\x01!\xc5\xab\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe5\xff\xf7\xff\x07\x00ZF~\xcc'b'\x00\x05N\xb1|c\xf2,\xfe\x1c\xfe\x01\x01\x1e3\xac\x04\x00\x96\xebA\xbc\xdf\x9eI\xbc\xa5\xf2H\xc0\xbe\\\xe4\xb8\xc0K\xf6\xba\xa2\x0e\xa289\x90'b"\x00\x05N\xb1|c\xf2\xe8\xfe\x18\xff\x01\x01\xb2v<\xbf\xbc4\x08'\xbc\xfd\xd6G\xc0)\x9c)Du\xa6\x02\x18\xb9\xe7\xb8\xfdn\xeb"b'\x00\x05N\xb1|c\xf3<\xfe\x03\x00\x01\x01Ms\x00\x04\xa0\xda'b'\x00\x05N\xb1|d\x07\xc4\xfe\x1c\x01\x01\x01\xa3^\xeb-:\x94\x18\xf8\xba\x04\x17\xf39\x00\x00\x00\x00\x00\x00\x00\x00\r\xed\xfc;v\xac\x85\xd8\x15\x9d\x08'b'\x00\x05N\xb1|e^\xfc\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00\x06=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8fM'b'\x00\x05N\xb1|e_\\\xfe\x06\x10\x01\x01}\xc8\x14\x00\x00\x03\x00\x87\xe0'b'\x00\x05N\xb1|e_\xb8\xfe\x04\x11\x01\x01\x98\x00\x00\xa0\x8a\xb4N'b'\x00\x05N\xb1|e`\x08\xfe\x02\x12\x01\x01*\x00\x00\xees'b'\x00\x05N\xb1|e`l\xfe\x1e\x13\x01\x01\x18\xc8\x06B\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x81\xcc'b'\x00\x05N\xb1|e`\xcc\xfe\x1a\x14\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x9e\xff'b'\x00\x05N\xb1|ea\x1c\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18'b'\x00\x05N\xb1|eax\xfe\x14\x16\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\x8f\xc2u=\xb4\x00\x00\x00\x97\t'b'\x00\x05N\xb1|e\x8bc\xfe\t\xb2\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xc3\xd7'b'\x00\x05N\xb1|f\xa5O\xfe5\xb3\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01p\xed'b'\x00\x05N\xb1|f\xbbG\xfe!\xb4\xff\x00LN\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00d\x04'b'\x00\x05N\xb1|f\xf1@\xfe\x1c\x17\x01\x01!\x8d\xac\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe6\xff\xf7\xff\x06\x00^Fi\xe1'b'\x00\x05N\xb1|f\xf1\xd8\xfe\x1c\x18\x01\x01\x1e#\xad\x04\x00\xb2\xdd>\xbc&\x18L\xbc\xbc\xe9H\xc0\x9f\xa2\x8a9oB)\xba^\xed\xae9\x85\x87'b'\x00\x05N\xb1|f\xf24\xfe\x18\x19\x01\x01\xb2\xfa\xec\xbd\xbc\xfev-\xbc(\xceG\xc0R\x98)Du\xa6\x02\x18\xb9\xe7\xb8\xfd\xb5\xf9'b'\x00\x05N\xb1|f\xf2\x8c\xfe\x1c\x1a\x01\x01\xa3\x1f\xb9-:\xf3\xac\xf7\xbaN\xda\xf79\x00\x00\x00\x00\x00\x00\x00\x00*\xef\x02<\xab4\x80<\xfcJ'b'\x00\x05N\xb1|f\xf2\xd0\xfe\x03\x1b\x01\x01\xa5\xc5\x14\x003\xc7'b'\x00\x05N\xb1|f\xf3\x1c\xfe\x0c\x1c\x01\x01\x02P|\xac|\xb1N\x05\x007\xad\x04\x00\x92\x8a'b'\x00\x05N\xb1|f\xf3|\xfe\x16\x1d\x01\x01\x88u\xa6\x02\x18\xb9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Zk'b'\x00\x05N\xb1|f\xf3\xd0\xfe\x12\x1e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00y\xf4'b"\x00\x05N\xb1|f\xf4(\xfe\x16\x1f\x01\x01\xc1\xf9\xaa\x96='\x14'<\xb8\x8c\xf4;\xbe\xff\xff=\x00\x00\x00\x00\xa5\x03\xaa\x82"b'\x00\x05N\xb1|hqK\xfe5\xb5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xee\xc2'b'\x00\x05N\xb1|h\x9b\xb3\xfe!\xb6\xff\x00LL\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00_\xfa'b'\x00\x05N\xb1|h\xbe\x10\xfe\x03 \x01\x01Ms\x00\x04Pl'b'\x00\x05N\xb1|h\xbe\xc8\xfe\x15!\x01\x01$\x0f\x8dE\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xb2'b'\x00\x05N\xb1|h\xbf$\xfe\x16"\x01\x01#s\xad\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9b\xfa'b'\x00\x05N\xb1|j\x05\xd0\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6'b'\x00\x05N\xb1|j\x1a\xc0\xfe\x1a$\x01\x01\x1b\x9e\xc5F\x12\x00\x00\x00\x00\t\x00\x07\x00\x1b\xfc\x01\x00\xff\xff\x00\x00\xf5\xfe\x06\x00z\x01\xfeg'b'\x00\x05N\xb1|j\x1b8\xfe\x16%\x01\x01t\xc4\xad\x04\x00\x0b\x00\x0b\x00 \xfc\x02\x00\x00\x00\xfd\xff\x01\xff\xb6\xff8\x020\xa4'b'\x00\x05N\xb1|j\x1b\x94\xfe\x16&\x01\x01\x81\xc4\xad\x04\x00\x05\x00\x13\x00\x1b\xfc\xfc\xff\x00\x00\xfc\xff\x7f\x00\xbe\x00a\x02 \x95'b"\x00\x05N\xb1|j\x1b\xe4\xfe\x0e'\x01\x01\x1d\xc4\xad\x04\x00\xef\xa4iDp=j=~\x10\xd2\xba"b'\x00\x05N\xb1|j\x1c0\xfe\x0e(\x01\x01\x89\xc4\xad\x04\x00P\xe8iDR\xb8\xb7>\xd8\x15\x15)'b'\x00\x05N\xb1|j\x1c\xb0\xfe\x1f)\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\x0e=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x11\xec'b'\x00\x05N\xb1|j\x1d$\xfe\x06*\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0d'b'\x00\x05N\xb1|j\x1d\x8c\xfe\x04+\x01\x01\x98\x00\x00\xa0\x8a)\xa2'b'\x00\x05N\xb1|j\x1d\xec\xfe\x02,\x01\x01*\x00\x00\x85#'b'\x00\x05N\xb1|j\x1ed\xfe\x1e-\x01\x01\x18\xf0\x17E\x12\x00\x00\x00\x00u\xa6\x02\x18\xb8\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c1\xe9'b'\x00\x05N\xb1|j\x1e\xd4\xfe\x1a.\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xb50'b'\x00\x05N\xb1|j\x1f8\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1'b'\x00\x05N\xb1|j\x1f\xa4\xfe\x140\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\x8f\xc2u=\xb4\x00\x00\x00\xed\x9f'b'\x00\x05N\xb1|j \x1c\xfe\x1c1\x01\x01!V\xad\x04\x00u\xa6\x02\x18\xb8\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe5\xff\xf6\xff\x06\x00aF\xc1\x91'b'\x00\x05N\xb1|jV3\xfe5\xb7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01k 'b'\x00\x05N\xb1|jl+\xfe!\xb8\xff\x00LL\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc9b'b'\x00\x05N\xb1|k\x900\xfe\x1c2\x01\x01\x1e\x14\xae\x04\x00\xcc\xaa=\xbc FI\xbc\x0e\xdfH\xc0\x85F\x06\xb9B\xbd\xb5\xba\xfd\xf9\r8\xbc\x80'b'\x00\x05N\xb1|k\x90\xb0\xfe\x183\x01\x01\xb2\xcf\x90\xbc\xbc\xef\xb32\xbc\xeb\xc4G\xc0\xc2\xa5)Du\xa6\x02\x18\xb8\xe7\xb8\xfd\xcbG'b'\x00\x05N\xb1|k\x91\x0c\xfe\x1c4\x01\x01\xa3~q-:g-\xf7\xba6\x9d\xfc9\x00\x00\x00\x00\x00\x00\x00\x00.=\x10<\t\xe7n<\x8b5'b'\x00\x05N\xb1|k\x91T\xfe\x035\x01\x01\xa5\xc8\x14\x00A\xca'b'\x00\x05N\xb1|k\x91\x9c\xfe\x0c6\x01\x01\x02\xd0%\xb0|\xb1N\x05\x00(\xae\x04\x00^X'b'\x00\x05N\xb1|k\x92\x1c\xfe\x167\x01\x01\x88v\xa6\x02\x18\xb8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x01U'b'\x00\x05N\xb1|k\x92l\xfe\x168\x01\x01\xc1x\xb2\x97=\xf0\xca\x1d<\x14\xa3/;\x8db\x05>\x00\x00\x00\x00\xa5\x03`\xc4'b'\x00\x05N\xb1|k\x92\xb4\xfe\x039\x01\x01Ms\x00\x04+\x9b'b'\x00\x05N\xb1|k\x93@\xfe\t\x16\n\x00m\x02\x00\x00\x00\x00\xd3\x00\x00\x00\xbc.'b'\x00\x05N\xb1|k\x93\x90\xfe\x15:\x01\x01$[7I\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00D\xd1'b'\x00\x05N\xb1|k\x93\xe0\xfe\x16;\x01\x01#d\xae\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc6\xac'b'\x00\x05N\xb1|l\x0b\xeb\xfe5\xb9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd2\x9d'b'\x00\x05N\xb1|l!\xf7\xfe!\xba\xff\x00LO\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00/\xcd'b'\x00\x05N\xb1|m\x17\x10\xfe\x03<\x01\x01Ms\x00\x04J\x0c'b'\x00\x05N\xb1|mN\xdc\xfe\x1a=\x01\x01\x1b%oJ\x12\x00\x00\x00\x00\t\x00\x06\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x08\x00{\x01\x9a\x16'b'\x00\x05N\xb1|mOD\xfe\x16>\x01\x01t\xb4\xae\x04\x00\x03\x00\t\x00*\xfc\x00\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02\x9a1'b'\x00\x05N\xb1|mO\xa0\xfe\x16?\x01\x01\x81\xb4\xae\x04\x00\x05\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfc\xff\x84\x00\xbd\x00`\x02\xb6E'b'\x00\x05N\xb1|mO\xf0\xfe\x0e@\x01\x01\x1d\xb4\xae\x04\x00\xe6\xa4iD\x00\x00h=\x7f\x10\xa4\xeb'b'\x00\x05N\xb1|mP@\xfe\x0eA\x01\x01\x89\xb4\xae\x04\x004\xe8iD\n\xd7\xb6>\xd8\x15C\x9b'b'\x00\x05N\xb1|mP\x9c\xfe\x1fB\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x0e=<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N5E'b'\x00\x05N\xb1|mP\xec\xfe\x06C\x01\x01}\xc5\x14\x00\x00\x03\x00;\x8c'b'\x00\x05N\xb1|mQ8\xfe\x04D\x01\x01\x98\x00\x00\xa0\x8a[%'b'\x00\x05N\xb1|mQ|\xfe\x02E\x01\x01*\x00\x009\xc6'b'\x00\x05N\xb1|mQ\xd4\xfe\x1eF\x01\x01\x18H!H\x12\x00\x00\x00\x00v\xa6\x02\x18\xb8\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xbc2'b'\x00\x05N\xb1|mR$\xfe\x1aG\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00oE'b'\x00\x05N\xb1|mRl\xfe\x08H\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00h\x1f'b'\x00\x05N\xb1|mR\xd0\xfe\x14I\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\xcc\xccL=\xb4\x00\x00\x00U\xf1'b'\x00\x05N\xb1|m\xd7\xb3\xfe5\xbb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01W\x7f'b'\x00\x05N\xb1|n\x01\xe7\xfe!\xbc\xff\x00LO\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xac+'b"\x00\x05N\xb1|n\x183\xfe%\xbd\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xfe\xe8"b'\x00\x05N\xb1|n\xb0\xe4\xfe\x1cJ\x01\x01!\x1d\xae\x04\x00v\xa6\x02\x18\xb8\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe5\xff\xf7\xff\x05\x00dF:\x19'b'\x00\x05N\xb1|n\xb1\x90\xfe\x1cK\x01\x01\x1e\x04\xaf\x04\x00\xb9\x87;\xbcMTI\xbcX\xd8H\xc0\xbf1\xc79J\xf5\xba\xb9Iq\xa19\x8ec'b'\x00\x05N\xb1|n\xb2\x0c\xfe\x18L\x01\x01\xb2\xdb\x83\xbb\xbc\n\x897\xbc\xeb\xbcG\xc0\x85\x9b)Du\xa6\x02\x18\xb7\xe7\xb8\xfd\xb1\xb1'b'\x00\x05N\xb1|n\xb2x\xfe\x1cM\x01\x01\xa3\x95\x15-:\x82\x9b\xf6\xbad\xb0\x00:\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xfe\x15<>\xe9t<-\xb5'b'\x00\x05N\xb1|n\xb2\xd0\xfe\x03N\x01\x01\xa5\xb5\x14\x00\x9e4'b'\x00\x05N\xb1|n\xb3(\xfe\x0cO\x01\x01\x02P\xcf\xb3|\xb1N\x05\x00\x18\xaf\x04\x00\xb2\xd8'b'\x00\x05N\xb1|n\xb3\x8c\xfe\x16P\x01\x01\x88u\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9c\x00'b'\x00\x05N\xb1|n\xb3\xec\xfe\x16Q\x01\x01\xc1Z\xd8\x98=\xdfL\x18\xd8\x15\xd4\t'b'\x00\x05N\xb1|q\xac@\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\x0e=<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x04L'b'\x00\x05N\xb1|q\xac\xa4\xfe\x06_\x01\x01}\xcb\x14\x00\x00\x03\x00\xa0\x99'b'\x00\x05N\xb1|q\xac\xf8\xfe\x04`\x01\x01\x98\x00\x00\xa0\x8a\x87\xed'b'\x00\x05N\xb1|q\xad@\xfe\x02a\x01\x01*\x00\x00\xcc\xca'b'\x00\x05N\xb1|q\xad\xa8\xfe\x1eb\x01\x01\x18X6K\x12\x00\x00\x00\x00u\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xe6\xac'b'\x00\x05N\xb1|q\xae8\xfe\x1ac\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x94.'b'\x00\x05N\xb1|q\xae\xa0\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91'b'\x00\x05N\xb1|q\xaf\x14\xfe\x14e\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3=\xcc\xccL=\xb4\x00\x00\x00\xe1\xd4'b'\x00\x05N\xb1|q\xafx\xfe\x1cf\x01\x01!\xaf\xaf\x04\x00u\xa6\x02\x18\xb7\xe7\xb8\xfd\xe0[\n\x00P\x00\x00\x00\xe5\xff\xf6\xff\x05\x00gFA]'b'\x00\x05N\xb1|q\xb0 \xfe\x1cg\x01\x01\x1e\xf4\xaf\x04\x00\xe6\xb1:\xbc\xff\xc8J\xbc\x93\xcfH\xc0\x06\x8c0:\xf5\xf3\xa1\xba\xb3\x89D:\x8b\xaf'b'\x00\x05N\xb1|q\xb0\x8c\xfe\x18h\x01\x01\xb2\xb8\xa6\xba\xbc\x83)=\xbc$\xb4G\xc0\x99\x99)Du\xa6\x02\x18\xb7\xe7\xb8\xfdV\xa6'b'\x00\x05N\xb1|sE\xab\xfe5\xc2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa7\xdd'b'\x00\x05N\xb1|s]L\xfe\x1ci\x01\x01\xa3\x8d\xa5,:j\xf7\xf5\xbai\x10\x03:\x00\x00\x00\x00\x00\x00\x00\x00\xf6d\x1a<\xd3\x1fg<\xadx'b'\x00\x05N\xb1|s]\xe8\xfe\x03j\x01\x01\xa5\xc8\x14\x00zE'b'\x00\x05N\xb1|s^H\xfe\x0ck\x01\x01\x02\xd0x\xb7|\xb1N\x05\x00\x08\xb0\x04\x00\x93\xc6'b'\x00\x05N\xb1|s^\xa8\xfe\x16l\x01\x01\x88u\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb0\xd6'b'\x00\x05N\xb1|s_\x04\xfe\x16m\x01\x01\xc15L\x99=x\xe1\x0f\xd9\x15\xc2\xdf'b'\x00\x05N\xb1|t\xcf\x1c\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00\x0e==\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8b$'b'\x00\x05N\xb1|t\xcfp\xfe\x06x\x01\x01}\xc6\x14\x00\x00\x03\x00\x83\xf5'b'\x00\x05N\xb1|t\xcf\xc0\xfe\x04y\x01\x01\x98\x00\x00\xa0\x8a$ 'b'\x00\x05N\xb1|t\xd0\x04\xfe\x02z\x01\x01*\x00\x00\x87\t'b'\x00\x05N\xb1|t\xd0X\xfe\x1e{\x01\x01\x18\xf0LQ\x12\x00\x00\x00\x00u\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cZ\x02'b'\x00\x05N\xb1|t\xd0\xa8\xfe\x1a|\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00pO'b'\x00\x05N\xb1|t\xd0\xf0\xfe\x08}\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x01\xe3'b'\x00\x05N\xb1|t\xd1@\xfe\x14~\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\n\xd7#=\xb4\x00\x00\x00*\xe3'b'\x00\x05N\xb1|t\xd1\x94\xfe\x1c\x7f\x01\x01!v\xb0\x04\x00u\xa6\x02\x18\xb7\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe4\xff\xf6\xff\x04\x00iF\x92\xc8'b'\x00\x05N\xb1|t\xe7\xd3\xfe\t\xc4\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xa9\xe9'b'\x00\x05N\xb1|u\x8d\xf3\xfe5\xc5\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01s\x07'b'\x00\x05N\xb1|u\xcb\xd7\xfe!\xc6\xff\x00LI\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x13\x00'b'\x00\x05N\xb1|v\x94\xfc\xfe\x1c\x80\x01\x01\x1e\xe5\xb0\x04\x00\x1e|=\xbc\x7fRI\xbc\xf0\xc6H\xc0\xcf\xf0 9\xd9S\xe4\xba\x8e\xef\x13:@D'b'\x00\x05N\xb1|v\x95h\xfe\x18\x81\x01\x01\xb28H\xba\xbc\xb6\x02D\xbcn\xacG\xc03\xa3)Du\xa6\x02\x18\xb7\xe7\xb8\xfd\n\x88'b'\x00\x05N\xb1|v\x95\xc4\xfe\x1c\x82\x01\x01\xa3\xee ,:\xa1@\xf5\xba\xb2p\x05:\x00\x00\x00\x00\x00\x00\x00\x00f\xf0\x1d<\x12\xc0V\x00\x00\x00\x00\xa5\x03\xce\xbc'b'\x00\x05N\xb1|v\x97l\xfe\x03\x88\x01\x01Ms\x00\x04\xfe<'b'\x00\x05N\xb1|w\x99\x03\xfe5\xc7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf6\xe5'b'\x00\x05N\xb1|w\xc2\xef\xfe!\xc8\xff\x00L@\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x92W'b'\x00\x05N\xb1|w\xec\x18\xfe\x15\x89\x01\x01$F9T\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x88'b'\x00\x05N\xb1|w\xec\x98\xfe\x16\x8a\x01\x01#5\xb1\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbcQ'b'\x00\x05N\xb1|w\xec\xf8\xfe\x1a\x8b\x01\x01\x1b\xeeqU\x12\x00\x00\x00\x00\t\x00\x04\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x019\x18'b'\x00\x05N\xb1|w\xedL\xfe\x16\x8c\x01\x01t\x85\xb1\x04\x00\n\x00\x06\x00.\xfc\x01\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02N\x16'b'\x00\x05N\xb1|w\xed\xa4\xfe\x16\x8d\x01\x01\x81\x85\xb1\x04\x00\x05\x00\x12\x00\x19\xfc\xfc\xff\x02\x00\xfc\xff\x82\x00\xbf\x00j\x02\x16\xdd'b'\x00\x05N\xb1|w\xed\xf0\xfe\x0e\x8e\x01\x01\x1d\x85\xb1\x04\x009\xa5iD\xcc\xcc|=\x80\x10\xd2K'b'\x00\x05N\xb1|w\xee<\xfe\x0e\x8f\x01\x01\x89\x85\xb1\x04\x00P\xe8iDR\xb8\xb7>\xda\x15\x9de'b'\x00\x05N\xb1|w\xee\x94\xfe\x1f\x90\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ne\xfc'b'\x00\x05N\xb1|w\xee\xe8\xfe\x06\x91\x01\x01}\xc5\x14\x00\x00\x03\x00B\t'b'\x00\x05N\xb1|w\xef4\xfe\x04\x92\x01\x01\x98\x00\x00\xa0\x8ad\\'b'\x00\x05N\xb1|w\xefx\xfe\x02\x93\x01\x01*\x00\x00&j'b'\x00\x05N\xb1|w\xef\xcc\xfe\x1e\x94\x01\x01\x18\x00bT\x12\x00\x00\x00\x00v\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\x92\xe8'b'\x00\x05N\xb1|w\xf0 \xfe\x1a\x95\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xdb\xae'b'\x00\x05N\xb1|w\xf0x\xfe\x08\x96\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xd0'b'\x00\x05N\xb1|w\xf0\xd8\xfe\x14\x97\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u=\n\xd7#=\xb4\x00\x00\x00\xef='b'\x00\x05N\xb1|yk \xfe\x03\x98\x01\x01Ms\x00\x04\x86g'b'\x00\x05N\xb1|yk\xcc\xfe\x1c\x99\x01\x01!@\xb1\x04\x00v\xa6\x02\x18\xb7\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe4\xff\xf6\xff\x04\x00lF^d'b'\x00\x05N\xb1|yl8\xfe\x1c\x9a\x01\x01\x1e\xd6\xb1\x04\x00\xd2\xe0;\xbc\xe89J\xbc\x84\xbfH\xc0\x8c\xe3\xb99\xd6r\x92\xba(\xd0\xd19Po'b'\x00\x05N\xb1|yl\x98\xfe\x18\x9b\x01\x01\xb2TM\xb9\xbcsXI\xbcb\xa4G\xc0\x14\x9e)Dv\xa6\x02\x18\xb7\xe7\xb8\xfd\xc9\xf5'b'\x00\x05N\xb1|yl\xf0\xfe\x1c\x9c\x01\x01\xa3H\x88+:\x19y\xf4\xba\xe8\xcb\x07:\x00\x00\x00\x00\x00\x00\x00\x00\x13N"<\xbf,@<\x00"'b'\x00\x05N\xb1|ym4\xfe\x03\x9d\x01\x01\xa5\xc5\x14\x00`\x11'b'\x00\x05N\xb1|ym\x88\xfe\x0c\x9e\x01\x01\x02\xd0\xcb\xbe|\xb1N\x05\x00\xea\xb1\x04\x00\xa74'b'\x00\x05N\xb1|ym\xe8\xfe\x16\x9f\x01\x01\x88v\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa1\xf2'b'\x00\x05N\xb1|yn4\xfe\x16\xa0\x01\x01\xc1\x8c\x03\x9b=\xce}\x05<\r\x0fA;\x9a\x17\x00>\x00\x00\x00\x00\xa5\x03\xff\x86'b'\x00\x05N\xb1|yn\xfb\xfe5\xc9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01OX'b'\x00\x05N\xb1|y\x84\xff\xfe!\xca\xff\x00L@\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x13\n'b'\x00\x05N\xb1|z\xd4\xfc\xfe\x03\xa1\x01\x01Ms\x00\x04\r&'b'\x00\x05N\xb1|z\xd5\xa8\xfe\x15\xa2\x01\x01$\xaf\xe5W\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x04'b'\x00\x05N\xb1|z\xd6\x0c\xfe\x16\xa3\x01\x01#&\xb2\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x98%'b'\x00\x05N\xb1|z\xd6d\xfe\t\x17\n\x00m5\x00\x00\x00\x00\xd4\x00\x00\x00\x98\xda'b'\x00\x05N\xb1|{K\x97\xfe5\xcb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xca\xba'b'\x00\x05N\xb1|{b;\xfe!\xcc\xff\x00L;\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xa6\x08'b'\x00\x05N\xb1||v\x98\xfe\x1a\xa4\x01\x01\x1bn\x1eY\x12\x00\x00\x00\x00\n\x00\x06\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x08\x00{\x01\t\xa8'b'\x00\x05N\xb1||w\x14\xfe\x16\xa5\x01\x01tv\xb2\x04\x00\r\x00\x0c\x00&\xfc\xfe\xff\x00\x00\xfe\xff\x00\xff\xb6\xff8\x02\x97H'b'\x00\x05N\xb1||wp\xfe\x16\xa6\x01\x01\x81v\xb2\x04\x00\x04\x00\x13\x00\x1e\xfc\xfc\xff\x01\x00\xfc\xff\x86\x00\xc0\x00a\x02\x9b\xb1'b'\x00\x05N\xb1||w\xc0\xfe\x0e\xa7\x01\x01\x1dv\xb2\x04\x00\xd5\xa3iD\n\xd7#=\x7f\x10\xa8\x92'b'\x00\x05N\xb1||x\x0c\xfe\x0e\xa8\x01\x01\x89v\xb2\x04\x009\xe8iD\x00\x00\xb7>\xda\x15\x13\r'b'\x00\x05N\xb1||xh\xfe\x1f\xa9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nv\x12'b'\x00\x05N\xb1||x\xb8\xfe\x06\xaa\x01\x01}\xc6\x14\x00\x00\x03\x00\xfap'b'\x00\x05N\xb1||y\x04\xfe\x04\xab\x01\x01\x98\x00\x00\xa0\x8a\xfef'b'\x00\x05N\xb1||yH\xfe\x02\xac\x01\x01*\x00\x00\x98\xa5'b'\x00\x05N\xb1||y\x9c\xfe\x1e\xad\x01\x01\x18(sW\x12\x00\x00\x00\x00v\xa6\x02\x18\xb6\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c#\xbe'b'\x00\x05N\xb1||y\xf8\xfe\x1a\xae\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xc4\xa4'b'\x00\x05N\xb1||zD\xfe\x08\xaf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00x\x17'b'\x00\x05N\xb1||z\x94\xfe\x14\xb0\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u=\x8f\xc2\xf5<\xb4\x00\x00\x00\xf53'b'\x00\x05N\xb1||z\xd8\xfe\x03\xb1\x01\x01Ms\x00\x04u}'b'\x00\x05N\xb1||{l\xfe\x1c\xb2\x01\x01!\t\xb2\x04\x00v\xa6\x02\x18\xb6\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe4\xff\xf6\xff\x03\x00oF\x8f\xf6'b"\x00\x05N\xb1|}'\xaf\xfe5\xcd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01T\x95"b"\x00\x05N\xb1|}e\x87\xfe!\xce\xff\x00L;\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00'U"b"\x00\x05N\xb1|}\xdeh\xfe\x1c\xb3\x01\x01\x1e\xc6\xb2\x04\x00f'?\xbct\xb9F\xbc\xa1\xb4H\xc0\x9e\xffv\xba\xda\x85\xdd\xba'L\xac94\x17"b'\x00\x05N\xb1|}\xde\xdc\xfe\x18\xb4\x01\x01\xb2\xe8\xbf\xb8\xbc\xf9HN\xbc\xeb\x9bG\xc0\x00\xa0)Dv\xa6\x02\x18\xb6\xe7\xb8\xfd\x94\xa4'b"\x00\x05N\xb1|}\xdfH\xfe\x1c\xb5\x01\x01\xa3z\xda*:(\xa0\xf3\xba>#\n:\x00\x00\x00\x00\x00\x00\x00\x00\xe5^+<'\x952<\x93\x1e"b'\x00\x05N\xb1|}\xdf\xa8\xfe\x03\xb6\x01\x01\xa5\xb8\x14\x006\xd1'b'\x00\x05N\xb1|}\xe0\x10\xfe\x0c\xb7\x01\x01\x02Pu\xc2|\xb1N\x05\x00\xda\xb2\x04\x00\x10\xa3'b'\x00\x05N\xb1|}\xe0\x80\xfe\x16\xb8\x01\x01\x88v\xa6\x02\x18\xb6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xab\xcf'b'\x00\x05N\xb1|}\xe0\xf0\xfe\x16\xb9\x01\x01\xc1\xa3\x96\x9b=n\xad\xfc;<\xef\xba:\xe7h\xf3=\x00\x00\x00\x00\xa5\x03\xa12'b'\x00\x05N\xb1|}\xe1`\xfe\x03\xba\x01\x01Ms\x00\x04\x19\xda'b'\x00\x05N\xb1|}\xe2 \xfe\x15\xbb\x01\x01$q\x91[\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\n'b'\x00\x05N\xb1|}\xe2\x98\xfe\x16\xbc\x01\x01#\x16\xb3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa2\xd9'b'\x00\x05N\xb1|}\xe3\x08\xfe\x12\xbd\x01\x01\xfc \xb3\x04\x004\x00\x01\x00ARMMASK\x00Wr5\x05'b'\x00\x05N\xb1|}\xe3h\xfe\t\xbe\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa3<'b"\x00\x05N\xb1|~q\xfb\xfe%\xcf\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\xb0\xca"b'\x00\x05N\xb1|\x7f$\x9b\xfe5\xd0\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01}\x13'b'\x00\x05N\xb1|\x7f:\xb3\xfe!\xd1\xff\x00L2\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00DT'b'\x00\x05N\xb1|\x7f\x89\xdc\xfe\x03\xbf\x01\x01/\xff\x00\x00\xceR'b'\x00\x05N\xb1|\x7f\x9e\xe4\xfe\x1a\xc0\x01\x01\x1bm\xcd\\\x12\x00\x00\x00\x00\t\x00\x07\x00 \xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01c\xe4'b'\x00\x05N\xb1|\x7f\x9fp\xfe\x16\xc1\x01\x01tg\xb3\x04\x00\x0e\x00\x03\x00+\xfc\x03\x00\xff\xff\xfd\xff\x00\xff\xb6\xff8\x02\xc8\xbe'b'\x00\x05N\xb1|\x7f\x9f\xe4\xfe\x16\xc2\x01\x01\x81g\xb3\x04\x00\x05\x00\x11\x00\x1d\xfc\xfd\xff\x00\x00\xfc\xff\x85\x00\xc1\x00f\x02\xe22'b'\x00\x05N\xb1|\x7f\xa0H\xfe\x0e\xc3\x01\x01\x1dg\xb3\x04\x00\x90\xa4iD\\\x8fR=\x7f\x10\x15\x0c'b'\x00\x05N\xb1|\x7f\xa0\xa8\xfe\x0e\xc4\x01\x01\x89g\xb3\x04\x009\xe8iD\x00\x00\xb7>\xdb\x15\xc6$'b'\x00\x05N\xb1|\x7f\xa1\x14\xfe\x1f\xc5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xeb\x00\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcf0'b'\x00\x05N\xb1|\x7f\xa1x\xfe\x06\xc6\x01\x01}\xc5\x14\x00\x00\x03\x00\xe4\x15'b'\x00\x05N\xb1|\x7f\xa1\xd4\xfe\x04\xc7\x01\x01\x98\x00\x00\xa0\x8a\x8b7'b'\x00\x05N\xb1|\x7f\xa2,\xfe\x02\xc8\x01\x01*\x00\x00kn'b'\x00\x05N\xb1|\x7f\xa2\x94\xfe\x1e\xc9\x01\x01\x18h\x80Z\x12\x00\x00\x00\x00v\xa6\x02\x18\xb6\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\x02\x0b'b'\x00\x05N\xb1|\x7f\xa2\xfc\xfe\x1a\xca\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x0f\x01'b'\x00\x05N\xb1|\x7f\xa3T\xfe\x08\xcb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00=\xd7'b'\x00\x05N\xb1|\x7f\xa3\xb0\xfe\x14\xcc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u=\n\xd7\xa3<\xb4\x00\x00\x00\x1aH'b'\x00\x05N\xb1|\x7f\xa4\x00\xfe\x03\xcd\x01\x01Ms\x00\x04n\xce'b'\x00\x05N\xb1|\x80\xec\xe4\xfe\x1c\xce\x01\x01!\xd1\xb2\x04\x00v\xa6\x02\x18\xb6\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe5\xff\xf6\xff\x02\x00sF{\xb3'b'\x00\x05N\xb1|\x80\xed\x88\xfe\x1c\xcf\x01\x01\x1e\xb7\xb3\x04\x00\x05 =\xbc\xec\xb8H\xbcd\xacH\xc0sq\x8990_\xc3\xba\x99\xf7\x0c:\x0e\xcc'b'\x00\x05N\xb1|\x80\xee\x04\xfe\x18\xd0\x01\x01\xb2+~\xb7\xbc6\x15T\xbc\xd4\x93G\xc0{\xa4)Dw\xa6\x02\x18\xb5\xe7\xb8\xfd\r\xfc'b"\x00\x05N\xb1|\x80\xee\x8c\xfe\x1c\xd1\x01\x01\xa3\x98\x18*:\xa5\xb6\xf2\xba\x0cw\x0c:\x00\x00\x00\x00\x00\x00\x00\x00\x10'1<\xf8h%<{3"b'\x00\x05N\xb1|\x80\xee\xf0\xfe\x03\xd2\x01\x01\xa5\xc5\x14\x00#\xc5'b'\x00\x05N\xb1|\x80\xefX\xfe\x0c\xd3\x01\x01\x02\xd0\x1e\xc6|\xb1N\x05\x00\xcb\xb3\x04\x00\xf0\x1b'b'\x00\x05N\xb1|\x80\xef\xc8\xfe\x16\xd4\x01\x01\x88w\xa6\x02\x18\xb5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x05\x12'b'\x00\x05N\xb1|\x80\xf0\x18\xfe\x16\xd5\x01\x01\xc1\x97\xce\x9b=\xa2\x86\xf3;\x9fA\x13;\x8c\x81\xf5=\x00\x00\x00\x00\xa5\x03\xd6C'b'\x00\x05N\xb1|\x81\x14\x03\xfe5\xd2\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf8\xf1'b'\x00\x05N\xb1|\x81?\x1b\xfe!\xd3\xff\x00L2\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xc5\t'b'\x00\x05N\xb1|\x82\x82\xcc\xfe\x03\xd6\x01\x01Ms\x00\x04z2'b'\x00\x05N\xb1|\x82\x83|\xfe\x15\xd7\x01\x01$\xdf>_\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9-'b'\x00\x05N\xb1|\x82\x83\xd8\xfe\x16\xd8\x01\x01#\x07\xb4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1c\xa1'b'\x00\x05N\xb1|\x83\x18\xdf\xfe5\xd4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01f\xde'b'\x00\x05N\xb1|\x83V\xe7\xfe!\xd5\xff\x00L)\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00n\xb6'b'\x00\x05N\xb1|\x83\xf7X\xfe\x1a\xd9\x01\x01\x1bex`\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x01H\x8c'b'\x00\x05N\xb1|\x83\xf7\xd8\xfe\x16\xda\x01\x01tX\xb4\x04\x00\x0f\x00\x02\x003\xfc\x01\x00\xff\xff\xfd\xff\x00\xff\xb5\xff6\x02#Q'b'\x00\x05N\xb1|\x83\xf84\xfe\x16\xdb\x01\x01\x81X\xb4\x04\x00\x04\x00\x11\x00\x1c\xfc\xfc\xff\x00\x00\xfc\xff\x87\x00\xbd\x00b\x02\x13\xe7'b'\x00\x05N\xb1|\x83\xf8\x84\xfe\x0e\xdc\x01\x01\x1dX\xb4\x04\x00I\xa3iD\xd7\xa3\x00=\x80\x10T\xf6'b'\x00\x05N\xb1|\x83\xf8\xd4\xfe\x0e\xdd\x01\x01\x89X\xb4\x04\x00\xdd\xe8iD\xb8\x1e\xbc>\xdc\x15\x04\x92'b'\x00\x05N\xb1|\x83\xf98\xfe\x1f\xde\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xbbD'b'\x00\x05N\xb1|\x83\xf9\x98\xfe\x06\xdf\x01\x01}\xc5\x14\x00\x00\x03\x00\x9a\x8d'b'\x00\x05N\xb1|\x83\xf9\xec\xfe\x04\xe0\x01\x01\x98\x00\x00\xa0\x8aP)'b'\x00\x05N\xb1|\x83\xfa8\xfe\x02\xe1\x01\x01*\x00\x00\xd1L'b'\x00\x05N\xb1|\x83\xfa\x98\xfe\x1e\xe2\x01\x01\x18\x90\x91]\x12\x00\x00\x00\x00w\xa6\x02\x18\xb5\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xf49'b'\x00\x05N\xb1|\x83\xfa\xfc\xfe\x1a\xe3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xe5\xba'b'\x00\x05N\xb1|\x83\xfbL\xfe\x08\xe4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb6W'b'\x00\x05N\xb1|\x83\xfb\xa8\xfe\x14\xe5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xcc\xccL=\n\xd7\xa3<\xb4\x00\x00\x00\xaa\xfa'b'\x00\x05N\xb1|\x83\xfc\x18\xfe\x1c\xe6\x01\x01!b\xb4\x04\x00w\xa6\x02\x18\xb5\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe4\xff\xf6\xff\x01\x00uFY\x03'b'\x00\x05N\xb1|\x83\xfcx\xfe\x03\xe7\x01\x01Ms\x00\x04M^'b'\x00\x05N\xb1|\x83\xfd,\xfe\x1c\xe8\x01\x01\x1e\xa8\xb4\x04\x00\x90L>\xbc\x9e\xe6I\xbc=\xa5H\xc0\xda;\xdb\xb9\x10\x05c\xba\xcb\t\xae\xb9\xa7\xa3'b'\x00\x05N\xb1|\x83\xfd\x84\xfe\x18\xe9\x01\x01\xb2\xfb1\xb7\xbc\x1bhY\xbc\xb4\x8cG\xc0\x00\xa0)Dw\xa6\x02\x18\xb5\xe7\xb8\xfd\xfb\r'b'\x00\x05N\xb1|\x84D\xeb\xfe\t\xd6\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xaa\xc2'b'\x00\x05N\xb1|\x85\x0e\xdf\xfe5\xd7\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xa9\xc9'b'\x00\x05N\xb1|\x859k\xfe!\xd8\xff\x00L\x1c\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x86\x99'b'\x00\x05N\xb1|\x85\x90\x98\xfe\x1c\xea\x01\x01\xa3\xc7C):B\xbd\xf1\xba\x84\xc7\x0e:\x00\x00\x00\x00\x00\x00\x00\x00(\xd76<\x1c\xfe%<\x03|'b'\x00\x05N\xb1|\x85\x91\x0c\xfe\x03\xeb\x01\x01\xa5\xc5\x14\x00\xa8\x84'b'\x00\x05N\xb1|\x85\x91`\xfe\x0c\xec\x01\x01\x028\xcc\xc9|\xb1N\x05\x00\xbc\xb4\x04\x00\x00\x00\x00\x00\xa5\x03\xe8\x1b'b'\x00\x05N\xb1|\x85\x92t\xfe\x15\xef\x01\x01$\x98\xe9b\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x02'b'\x00\x05N\xb1|\x85\x92\xc8\xfe\x16\xf0\x01\x01#\xf8\xb4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00X%'b'\x00\x05N\xb1|\x85\x93\x10\xfe\x03\xf1\x01\x01Ms\x00\x04\x84\x18'b'\x00\x05N\xb1|\x86\xf9k\xfe5\xd9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x10t'b'\x00\x05N\xb1|\x87\x1b\xd7\xfe!\xda\xff\x00L\x1c\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x07\xc4'b'\x00\x05N\xb1|\x87D\x10\xfe\x1a\xf2\x01\x01\x1b]"d\x12\x00\x00\x00\x00\x07\x00\x06\x00\x1a\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01\xbe1'b'\x00\x05N\xb1|\x87D\xa4\xfe\x16\xf3\x01\x01tH\xb5\x04\x00\n\x00\x08\x00\x18\xfc\x03\x00\x00\x00\x01\x00\xff\xfe\xb5\xff7\x02&\xf4'b'\x00\x05N\xb1|\x87E\x14\xfe\x16\xf4\x01\x01\x81H\xb5\x04\x00\x03\x00\x0f\x00\x1b\xfc\xfd\xff\x00\x00\xfc\xff\x8a\x00\xc2\x00`\x02\x92\xa7'b'\x00\x05N\xb1|\x87Ep\xfe\x0e\xf5\x01\x01\x1dH\xb5\x04\x00\x05\xa3iD)\\\xdf<\x7f\x10.w'b'\x00\x05N\xb1|\x87E\xc8\xfe\x0e\xf6\x01\x01\x89H\xb5\x04\x00\x00\xe8iD33\xb5>\xdc\x15\xaf9'b'\x00\x05N\xb1|\x87F,\xfe*\xf7\x01\x01\x96s\xe7f\xbc\x0em\x01\x00\x7f\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x9e\x0f'b'\x00\x05N\xb1|\x87F\x9c\xfe\x1f\xf8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nd\xfc'b'\x00\x05N\xb1|\x87F\xfc\xfe\x06\xf9\x01\x01}\xc8\x14\x00\x00\x03\x00(\xb4'b'\x00\x05N\xb1|\x87GT\xfe\x04\xfa\x01\x01\x98\x00\x00\xa0\x8a\xf42'b'\x00\x05N\xb1|\x87G\xa8\xfe\x02\xfb\x01\x01*\x00\x00O\x10'b'\x00\x05N\xb1|\x87H\x0c\xfe\x1e\xfc\x01\x01\x18\x10\xacc\x12\x00\x00\x00\x00x\xa6\x02\x18\xb4\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x03\x00-K\x03\x0cL\xb0'b'\x00\x05N\xb1|\x87Hl\xfe\x1a\xfd\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x005\x1e'b'\x00\x05N\xb1|\x87H\xbc\xfe\x08\xfe\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00T+'b'\x00\x05N\xb1|\x87I\x14\xfe\x14\xff\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xcc\xccL=\n\xd7#<\xb4\x00\x00\x00\x1d\xd4'b'\x00\x05N\xb1|\x87It\xfe\x1c\x00\x01\x01!*\xb5\x04\x00x\xa6\x02\x18\xb4\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe3\xff\xf6\xff\x01\x00yFq\xa9'b'\x00\x05N\xb1|\x88\x9d\x90\xfe\x03\x01\x01\x01Ms\x00\x04\x1f['b'\x00\x05N\xb1|\x88\x9eT\xfe\x1c\x02\x01\x01\x1e\x98\xb5\x04\x00\x9f\xae@\xbcNeF\xbc\x8f\x99H\xc0,qS:\xb3\x12~\xba\xf3\x0cB\xb9N\xdf'b'\x00\x05N\xb1|\x88\x9e\xc4\xfe\x18\x03\x01\x01\xb2\x00\xaf\xb6\xbcf\xd5^\xbcK\x83G\xc0\xd7\x93)Dx\xa6\x02\x18\xb4\xe7\xb8\xfd\xba\x1f'b'\x00\x05N\xb1|\x88\x9f$\xfe\x1c\x04\x01\x01\xa3\x88[(:\x9a\xb3\xf0\xba\xf4\x14\x11:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93;<\xdd\x1d\x15<\xe1\x16'b'\x00\x05N\xb1|\x88\x9f\x84\xfe\x03\x05\x01\x01\xa5\xc2\x14\x00g\xfb'b'\x00\x05N\xb1|\x88\x9f\xd4\xfe\x0c\x06\x01\x01\x02\xa0y\xcd|\xb1N\x05\x00\xad\xb5\x04\x00o\xc6'b'\x00\x05N\xb1|\x88\xa0,\xfe\x16\x07\x01\x01\x88x\xa6\x02\x18\xb4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfd\xe5'b'\x00\x05N\xb1|\x88\xa0\x80\xfe\x12\x08\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xe4\x04'b'\x00\x05N\xb1|\x88\xa0\xd4\xfe\x16\t\x01\x01\xc1F$\x9b=\x9a\xa0\xdd;G\x01#\xdc\x15\x8dT'b'\x00\x05N\xb1|\x8aMd\xfe\x1f\x13\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x19\x96'b'\x00\x05N\xb1|\x8aM\xbc\xfe\x06\x14\x01\x01}\xc8\x14\x00\x00\x03\x00\xd2\xbe'b'\x00\x05N\xb1|\x8aN\x0c\xfe\x04\x15\x01\x01\x98\x00\x00\xa0\x8aQq'b'\x00\x05N\xb1|\x8aNP\xfe\x02\x16\x01\x01*\x00\x00\x98\x1c'b'\x00\x05N\xb1|\x8aN\xa8\xfe\x1e\x17\x01\x01\x188\xbdf\x12\x00\x00\x00\x00x\xa6\x02\x18\xb4\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xd8\xa9'b'\x00\x05N\xb1|\x8aN\xfc\xfe\x1a\x18\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xbb\xea'b'\x00\x05N\xb1|\x8aOH\xfe\x08\x19\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00D#'b'\x00\x05N\xb1|\x8aO\x94\xfe\x14\x1a\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7#=\x00\x00\x00\x00\xb4\x00\x00\x005\x12'b'\x00\x05N\xb1|\x8a\xbd\xa3\xfe5\xdd\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x0b\xb9'b'\x00\x05N\xb1|\x8a\xd4/\xfe!\xde\xff\x00L\x10\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xaa\xae'b'\x00\x05N\xb1|\x8b\xbe@\xfe\x1c\x1b\x01\x01!\xf3\xb5\x04\x00x\xa6\x02\x18\xb4\xe7\xb8\xfd\xb8[\n\x00(\x00\x00\x00\xe4\xff\xf6\xff\x00\x00|F\x03R'b'\x00\x05N\xb1|\x8b\xbe\xdc\xfe\x03\x1c\x01\x01Ms\x00\x04\xba\xba'b'\x00\x05N\xb1|\x8b\xd3`\xfe\x1c\x1d\x01\x01\x1e\x89\xb6\x04\x00\xadN?\xbcw)E\xbcl\x91H\xc0.\xcf]9\xc8\x06\xa7\xbaA\xaa7:\t\x08'b'\x00\x05N\xb1|\x8b\xd3\xcc\xfe\x18\x1e\x01\x01\xb2(~\xb5\xbcz\x02c\xbc\x0f|G\xc0=\x9a)Dx\xa6\x02\x18\xb4\xe7\xb8\xfd\x01\xf3'b"\x00\x05N\xb1|\x8b\xd4(\xfe\x1c\x1f\x01\x01\xa3ma':o\x9b\xef\xba \\\x13:\x00\x00\x00\x00\x00\x00\x00\x00b1><\xe3>\t<\x8aV"b'\x00\x05N\xb1|\x8b\xd4t\xfe\x03 \x01\x01\xa5\xc5\x14\x00\xd7\x8d'b'\x00\x05N\xb1|\x8b\xd4\xc8\xfe\x0c!\x01\x01\x02P\x1b\xd1|\xb1N\x05\x00\x9d\xb6\x04\x00\xce\xf1'b'\x00\x05N\xb1|\x8b\xd5\x1c\xfe\x16"\x01\x01\x88x\xa6\x02\x18\xb4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00.\xef'b'\x00\x05N\xb1|\x8b\xd5t\xfe\x16#\x01\x01\xc1\x8dF\x9b=+\xbd\xd5;j|\xa3;\xd9J\xf3=\x00\x00\x00\x00\xa5\x03\xf4\x95'b'\x00\x05N\xb1|\x8c\xfc_\xfe5\xdf\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x8e['b'\x00\x05N\xb1|\x8d\x12\x97\xfe!\xe0\xff\x00L\x0b\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00{c'b'\x00\x05N\xb1|\x8dKt\xfe\x15$\x01\x01$YCj\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\\'b'\x00\x05N\xb1|\x8dK\xf4\xfe\x16%\x01\x01#\xd9\xb6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\x0c'b'\x00\x05N\xb1|\x8dL\\\xfe\x12&\x01\x01\xfc\x0b\xb7\x04\x004\x00\x01\x00ARMMASK\x00Wr\xb6\xf1'b"\x00\x05N\xb1|\x8dL\xb4\xfe\x03'\x01\x01Ms\x00\x04^\xf0"b'\x00\x05N\xb1|\x8da4\xfe\t(\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc7b'b'\x00\x05N\xb1|\x8e\xd0C\xfe5\xe1\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xd6\x92'b'\x00\x05N\xb1|\x8e\xe5\x90\xfe\x1a)\x01\x01\x1bb}k\x12\x00\x00\x00\x00\x07\x00\x07\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00{\x01\xd6\x1a'b'\x00\x05N\xb1|\x8e\xe6\x14\xfe\x16*\x01\x01t*\xb7\x04\x00\x10\x00\x0e\x00!\xfc\xff\xff\xfe\xff\xff\xff\x00\xff\xb5\xff6\x02P\xd2'b'\x00\x05N\xb1|\x8e\xe6\x90\xfe\x16+\x01\x01\x81*\xb7\x04\x00\x04\x00\x12\x00\x1b\xfc\xfb\xff\x01\x00\xfc\xff\x83\x00\xbe\x00]\x02Xx'b'\x00\x05N\xb1|\x8e\xe6\xe8\xfe\x0e,\x01\x01\x1d*\xb7\x04\x00\xa7\xa3iD\xebQ\x18=\x81\x104\xfa'b'\x00\x05N\xb1|\x8e\xe78\xfe\x0e-\x01\x01\x89*\xb7\x04\x00G\xe9iD\xa4p\xbf>\xde\x15q\xbb'b'\x00\x05N\xb1|\x8e\xe7\x94\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01)=:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc7,'b'\x00\x05N\xb1|\x8e\xe7\xec\xfe\x06/\x01\x01}\xbb\x14\x00\x00\x03\x00&\xd6'b'\x00\x05N\xb1|\x8e\xe8<\xfe\x040\x01\x01\x98\x00\x00\xa0\x8ap\xf4'b'\x00\x05N\xb1|\x8e\xe8\x80\xfe\x021\x01\x01*\x00\x00\x03\xb8'b'\x00\x05N\xb1|\x8e\xe8\xe8\xfe\x1e2\x01\x01\x18`\xcei\x12\x00\x00\x00\x00x\xa6\x02\x18\xb3\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x03\x00-K\x03\x0cv\x96'b'\x00\x05N\xb1|\x8e\xe9@\xfe\x1a3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00(\xd3'b'\x00\x05N\xb1|\x8e\xe9\x88\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8'b'\x00\x05N\xb1|\x8e\xe9\xd8\xfe\x145\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x8f\xc2\xf5<\x00\x00\x00\x00\xb4\x00\x00\x00\x93\xd0'b'\x00\x05N\xb1|\x8e\xea0\xfe\x1c6\x01\x01!\xbc\xb6\x04\x00x\xa6\x02\x18\xb3\xe7\xb8\xfd\xae[\n\x00\x1e\x00\x00\x00\xe4\xff\xf6\xff\x00\x00\x7fF\xe4V'b"\x00\x05N\xb1|\x8e\xeb/\xfe%\xe1\xff\x00'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x01\x00\x03\x02\x00\x8a\xd4"b'\x00\x05N\xb1|\x8f\rC\xfe!\xe2\xff\x00L\x0b\xfe3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xfa>'b'\x00\x05N\xb1|\x90S4\xfe\x1c7\x01\x01\x1e{\xb7\x04\x00\xc2\x8eC\xbc`\xaeB\xbc|\x88H\xc0hz\x879\x05\xc4\xad\xba\x86\x00S:6\xb6'b'\x00\x05N\xb1|\x90S\xb0\xfe\x188\x01\x01\xb2\xbe\x8c\xb5\xbc\xe8\xadg\xbcqrG\xc0{\x94)Dx\xa6\x02\x18\xb3\xe7\xb8\xfdA\x1c'b'\x00\x05N\xb1|\x90T\x08\xfe\x039\x01\x01/\xff\x00\x00\x9d\x84'b'\x00\x05N\xb1|\x90hl\xfe\x03:\x01\x01Ms\x00\x04\xfb\x11'b'\x00\x05N\xb1|\x90|\xe0\xfe\x1c;\x01\x01\xa3\xe3T&:\x1et\xee\xbaQ\x9e\x15:\x00\x00\x00\x00\x00\x00\x00\x00F0E<\xd3R\xdd;\x029'b'\x00\x05N\xb1|\x90}<\xfe\x03<\x01\x01\xa5\xc5\x14\x00\xcd\xed'b'\x00\x05N\xb1|\x90}\x98\xfe\x0c=\x01\x01\x02\xb8\xc8\xd4|\xb1N\x05\x00\x8f\xb7\x04\x00q\xda'b'\x00\x05N\xb1|\x90}\xfc\xfe\x16>\x01\x01\x88x\xa6\x02\x18\xb3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00d\xc0'b'\x00\x05N\xb1|\x90~t\xfe\x16?\x01\x01\xc1S\t\x9b=\xa2\x86\xca;\xf4\xba\t<(_\xf7=\x00\x00\x00\x00\xa5\x03\x9b\x11'b'\x00\x05N\xb1|\x90~\xf4\xfe\x15@\x01\x01$/\xf1m\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00H\xce'b'\x00\x05N\xb1|\x90\x7fX\xfe\x16A\x01\x01#\xcb\xb7\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00B\t'b'\x00\x05N\xb1|\x90\xe6\xc7\xfe5\xe4\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x87\xaa'b'\x00\x05N\xb1|\x90\xfd\x0b\xfe!\xe5\xff\x00L\xfb\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\xb6\x9e'b'\x00\x05N\xb1|\x91\xed\xfc\xfe\x03B\x01\x01Ms\x00\x04>\xb4'b'\x00\x05N\xb1|\x92\x02\xbc\xfe\x1aC\x01\x01\x1b\xa8)o\x12\x00\x00\x00\x00\x08\x00\x05\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf4\xfe\x08\x00|\x01\xfc\x16'b'\x00\x05N\xb1|\x92\x038\xfe\x16D\x01\x01t\x1b\xb8\x04\x00\x07\x00\n\x00\x1b\xfc\x03\x00\x00\x00\x00\x00\x01\xff\xb7\xff8\x02e\xe0'b'\x00\x05N\xb1|\x92\x03\xa8\xfe\x16E\x01\x01\x81\x1b\xb8\x04\x00\x05\x00\x11\x00\x1c\xfc\xfc\xff\x00\x00\xfc\xff\x80\x00\xbe\x00^\x02\xcf\xad'b'\x00\x05N\xb1|\x92\x04\x04\xfe\x0eF\x01\x01\x1d\x1b\xb8\x04\x00\xbe\xa3iD{\x14\x1e=\x80\x10\xd7\x8a'b'\x00\x05N\xb1|\x92\x04\\\xfe\x0eG\x01\x01\x89\x1b\xb8\x04\x00\xc6\xe8iDff\xbb>\xdd\x15\x19\x12'b'\x00\x05N\xb1|\x92\x04\xc0\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x00)=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nq5'b'\x00\x05N\xb1|\x92\x05\x18\xfe\x06I\x01\x01}\xca\x14\x00\x00\x03\x00G\x82'b'\x00\x05N\xb1|\x92\x05x\xfe\x04J\x01\x01\x98\x00\x00\xa0\x8a\x8e\xfe'b'\x00\x05N\xb1|\x92\x05\xdc\xfe\x02K\x01\x01*\x00\x00\x18@'b'\x00\x05N\xb1|\x92\x06<\xfe\x1eL\x01\x01\x18\x88\xdfl\x12\x00\x00\x00\x00x\xa6\x02\x18\xb3\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c;\xb1'b'\x00\x05N\xb1|\x92\x06\x94\xfe\x1aM\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xd0\xde'b'\x00\x05N\xb1|\x92\x06\xe0\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02'b'\x00\x05N\xb1|\x92\x070\xfe\x14O\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3<\x00\x00\x00\x00\xb4\x00\x00\x00\xf1/'b'\x00\x05N\xb1|\x92\xb3\xa3\xfe5\xe6\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\x02H'b'\x00\x05N\xb1|\x92\xf2+\xfe!\xe7\xff\x00L\xfb\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x007\xc3'b'\x00\x05N\xb1|\x93cx\xfe\x1cP\x01\x01!\x85\xb7\x04\x00x\xa6\x02\x18\xb3\xe7\xb8\xfd\xa4[\n\x00\x14\x00\x00\x00\xe5\xff\xf6\xff\x00\x00\x82F\x95@'b'\x00\x05N\xb1|\x93d\x0c\xfe\x1cQ\x01\x01\x1ek\xb8\x04\x00SrD\xbc?\xeaA\xbc0\x83H\xc0\xd4T\xb48\x04N\xc4\xba\x1e\x920\xb9z\xe1'b'\x00\x05N\xb1|\x93d|\xfe\x18R\x01\x01\xb2}\x89\xb5\xbc\x8aej\xbc\x90iG\xc0\xb8\x8e)Dy\xa6\x02\x18\xb4\xe7\xb8\xfd\xbc\xa6'b'\x00\x05N\xb1|\x93d\xdc\xfe\x1cS\x01\x01\xa3\x1c7%:T?\xed\xbaF\xda\x17:\x00\x00\x00\x00\x00\x00\x00\x00\x82QJ\x00\x00\x00\x00\xa5\x03\xc7Q'b'\x00\x05N\xb1|\x93fx\xfe\x03X\x01\x01Ms\x00\x04\x95\xc9'b'\x00\x05N\xb1|\x93\x90\x97\xfe\t\xe8\xff\x00\x00\x00\x00\x00\x00\x06\x08\x00\x00\x03\xccP'b'\x00\x05N\xb1|\x94\xb7\xb3\xfe5\xe9\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xf1\x00'b'\x00\x05N\xb1|\x95\x0b\x83\xfe!\xea\xff\x00L\xf3\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00"2'b'\x00\x05N\xb1|\x95!\xec\xfe\x15Y\x01\x01$O\x9eq\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x08'b'\x00\x05N\xb1|\x95"\xd0\xfe\x16Z\x01\x01#\xbb\xb8\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00ZQ'b"\x00\x05N\xb1|\x96\x80D\xfe\x1a[\x01\x01\x1b'\xd9r\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00{\x01\xe2Z"b"\x00\x05N\xb1|\x96\x80\xc8\xfe\x16\\\x01\x01t\x0c\xb9\x04\x00\x0c\x00\n\x00'\xfc\x05\x00\x00\x00\x02\x00\x00\xff\xb5\xff8\x02\xa2 "b'\x00\x05N\xb1|\x96\x814\xfe\x16]\x01\x01\x81\x0c\xb9\x04\x00\x05\x00\x11\x00\x1e\xfc\xfc\xff\x01\x00\xfc\xff\x84\x00\xbf\x00`\x023\xc4'b'\x00\x05N\xb1|\x96\x81\x8c\xfe\x0e^\x01\x01\x1d\x0c\xb9\x04\x00b\xa4iD=\nG=\x81\x10I\xf2'b'\x00\x05N\xb1|\x96\x81\xe4\xfe\x0e_\x01\x01\x89\x0c\xb9\x04\x00\xbe\xe8iD\xf5(\xbb>\xde\x15\x18U'b'\x00\x05N\xb1|\x96\x82H\xfe\x1f`\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf1\x00)=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xf9m'b'\x00\x05N\xb1|\x96\x82\xa4\xfe\x06a\x01\x01}\xe8\x14\x00\x00\x03\x00_\x88'b'\x00\x05N\xb1|\x96\x82\xfc\xfe\x04b\x01\x01\x98\x00\x00\xa0\x8a}v'b'\x00\x05N\xb1|\x96\x83H\xfe\x02c\x01\x01*\x00\x00w\xfd'b'\x00\x05N\xb1|\x96\x83\xa4\xfe\x1ed\x01\x01\x18\xc8\xeco\x12\x00\x00\x00\x00y\xa6\x02\x18\xb4\xe7\xb8\xfd\x80a\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x81`'b'\x00\x05N\xb1|\x96\x84\x04\xfe\x1ae\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x0e\xa0'b'\x00\x05N\xb1|\x96\x84T\xfe\x08f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00N\x9a'b'\x00\x05N\xb1|\x96\x84\xa8\xfe\x14g\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#<\x00\x00\x00\x00\xb4\x00\x00\x00R\x11'b'\x00\x05N\xb1|\x96\x84\xf8\xfe\x03h\x01\x01Ms\x00\x04\x1d$'b'\x00\x05N\xb1|\x96\x99d\xfe\x1ci\x01\x01!\x17\xb9\x04\x00y\xa6\x02\x18\xb4\xe7\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xe4\xff\xf6\xff\x00\x00\x84F\x13\xf5'b'\x00\x05N\xb1|\x96\x99\xcc\xfe\x1cj\x01\x01\x1e\\\xb9\x04\x00\xb03E\xbc\x86XD\xbc\x00{H\xc0\x14x\xfa8N\x9a\xb8\xba\xee\xc9\x81\xb9\xcf\x1b'b'\x00\x05N\xb1|\x96\x9a \xfe\x18k\x01\x01\xb2\x8b\x91\xb5\xbc\xa8\xdan\xbc\xcf^G\xc0\xc2\x95)Dy\xa6\x02\x18\xb4\xe7\xb8\xfd\xdb\xdc'b'\x00\x05N\xb1|\x96\xe5?\xfe5\xeb\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01t\xe2'b'\x00\x05N\xb1|\x97\x10\x87\xfe!\xec\xff\x00L\xdf\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x04n'b'\x00\x05N\xb1|\x98\x11T\xfe\x1cl\x01\x01\xa3j\t$:\xbe\xfd\xeb\xbaA\x13\x1a:\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xa4M<\x7f\xb8\xf2;\xbd\x91'b'\x00\x05N\xb1|\x98\x11\xbc\xfe\x03m\x01\x01\xa5\xc5\x14\x00\xfbR'b'\x00\x05N\xb1|\x98\x12\x14\xfe\x0cn\x01\x01\x02\xb8\x1b\xdc|\xb1N\x05\x00p\xb9\x04\x00!M'b'\x00\x05N\xb1|\x98\x12p\xfe\x16o\x01\x01\x88y\xa6\x02\x18\xb4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa8\xc4'b"\x00\x05N\xb1|\x98\x12\xc8\xfe\x16p\x01\x01\xc1}\n\x9a=\x08\xa4\xb8;1\x95\x97;'\x11\xfe=\x00\x00\x00\x00\xa5\x03a\x9d"b'\x00\x05N\xb1|\x98\x13\x10\xfe\x03q\x01\x01Ms\x00\x04f\xd3'b'\x00\x05N\xb1|\x98\x13\xac\xfe\x15r\x01\x01$\xf9Hu\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\xb9'b'\x00\x05N\xb1|\x98\x14\x04\xfe\x16s\x01\x01#\xac\xb9\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd3H'b'\x00\x05N\xb1|\x98\xd5\xa7\xfe5\xed\xff\x00T\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x0f\x00\x00\x01\xea\xcd'b'\x00\x05N\xb1|\x98\xff\x8f\xfe!\xee\xff\x00L\xdf\xfd3\xc3\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00\x01\xfa\x00\x853'b'\x00\x05N\xb1|\x99}\x84\xfe\t\x19\n\x00m$\x00\x00\x00\x00\xd3\x00\x00\x00?\xf5' \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/mav.tlog.raw b/src/drivers/MAVLinkServer/mav.tlog.raw deleted file mode 100644 index 24add7de6..000000000 --- a/src/drivers/MAVLinkServer/mav.tlog.raw +++ /dev/null @@ -1 +0,0 @@ -b'\xfe\x1c\x04\x01\x01!03\x03\x00\xed\xa5\x02\x18\xf3\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfe\xff\x02\x00\x00\x00\xa5\x04\x95\x05\xfe\t\xb5\n\x00mZ\x00\x00\x00\x00\xd6\x00\x00\x00\xb7B\xfe\x15\x05\x01\x01$\x11\xb1\x80\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xcd\xfe\x16\x06\x01\x01#`3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x17\x92\xfe\x1c\x07\x01\x01\x1et3\x03\x00\xa5\r|\xbdH\xb2r\xbay\x82T>\xd8\x9e$\xb9F\xfe\xc3\xb9\x8ce\x03:\x0e\xb6\xfe\x18\x08\x01\x01\xb2V\x94\x82\xbd\xb3c\x17\xbbf\xf6P>G\xb1)D\xed\xa5\x02\x18\xf3\xe7\xb8\xfdd\x86\xfe\x14\t\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\n\xd7#\xbc\x0b\x00\x00\x00G\x17'b'\xfe\x1c\n\x01\x01!03\x03\x00\xed\xa5\x02\x18\xf3\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfe\xff\x02\x00\xff\xff\xa5\x04\xadm\xfe\x1c\x0b\x01\x01\x1e\xd83\x03\x001\x16|\xbd\xd0\x9a~\xbax\x96T>\xaa\xcfq7\t\xd2$\xba2\x8d\x11:Gr\xfe\x18\x0c\x01\x01\xb2\x87\x8c\x82\xbd\xc3\x9d\x19\xbb\x0c\xffP>\n\xa7)D\xed\xa5\x02\x18\xf3\xe7\xb8\xfd\x10\x82\xfe\x1c\r\x01\x01\xa3\x8ei\xfd\xb3\x8c\xf7P\xb9\x8e\xf1\xea\xb8\x00\x00\x00\x00\x00\x00\x00\x006\x06\xe3:n\x06\xaa;\xf9\x92\xfe\x03\x0e\x01\x01\xa5\xc5\x14\x00*\x0b\xfe\x0c\x0f\x01\x01\x02\xe0\xc2\xeav\xb1N\x05\x00\xed3\x03\x00;p\xfe\x16\x10\x01\x01\x88\xed\xa5\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x07\xfe\x16\x11\x01\x01\xc1\xaa\xd0$<^/o7\xcf$\x8a;\xc0\xf1\xa6=\x00\x00\x00\x00\xa5\x03ND'b'\xfe\x03\x12\x01\x01Ms\x00\x00\xd7\xed\xfe\x1a\x13\x01\x01\x1bA\xc2\x83\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01{\x9e\xfe\x16\x14\x01\x01t)4\x03\x00\x03\x007\x00)\xfc\x02\x00\xff\xff\x00\x00\x07\x01\xa0\xff4\x02u~\xfe\x16\x15\x01\x01\x81)4\x03\x00\x01\x00@\x00\x1e\xfc\xfd\xff\x02\x00\xfe\xff+\x03\x88\x00n\x02f\x98\xfe\x0e\x16\x01\x01\x1d)4\x03\x00\xbe\xa3iD{\x14\x1e= \x10\x12\xfc\xfe\x0e\x17\x01\x01\x89)4\x03\x00}\xe6iD\xb8\x1e\xa9>\xe5\x14\xeb\xc4\xfe\x1f\x18\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00v\x00#?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T"]\xfe\x06\x19\x01\x01}\xc8\x14\x00\x00\x03\x00\xbc\t\xfe\x04\x1a\x01\x01\x98\x00\x00\xa0\x8ay\xe7\xfe\x02\x1b\x01\x01*\x00\x00\xd72\xfe\x1e\x1c\x01\x01\x18\xa8\x04\x83\x0c\x00\x00\x00\x00\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xfbd\xfe\x1a\x1d\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00M\x80\xfe\x08\x1e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x07;\xfe\x15\x1f\x01\x01$\x0b\xc5\x83\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e\xf9\xfe\x16 \x01\x01#*4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00`5'b'\xfe\x14!\x01\x01J\n\xd7#<\n\xd7#\x83\x1f\xd4\xb8\xc2\x136\xb91P1\xb83=\xfe\x18%\x01\x01\xb2\x87\x86\x82\xbdn\x8c\x1e\xbb\xd2\xe4P>\xcd\xac)D\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\xf0\xbc\xfe\x1c&\x01\x01\xa3B\x10\x1f\xb6\xda\xbfL\xb9\xfd\x8e\xe8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x14)\xdd:\x1e\x18\xbc;\x9e\xc7\xfe\x03'\x01\x01\xa5\xc8\x14\x00V\x9a\xfe\x0c(\x01\x01\x02`l\xeev\xb1N\x05\x00\xde4\x03\x00N\x9f\xfe\x16)\x01\x01\x88\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3Q\xfe\x16*\x01\x01\xc1\xfdX2\xe6\x14!\xdb\xfe\x1f0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc0\x8c\xfe\x061\x01\x01}\xc6\x14\x00\x00\x03\x00\xbd\xd1\xfe\x042\x01\x01\x98\x00\x00\xa0\x8a\x8ao\xfe\x023\x01\x01*\x00\x00\xb8\x8f\xfe\x1e4\x01\x01\x18\xd0\x15\x86\x0c\x00\x00\x00\x00\xed\xa5\x02\x18\xf2\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cG\x1b\xfe\x1a5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x93\xfe\xfe\x086\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xa3\xfe\x157\x01\x01$\x8dp\x87\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Hg\xfe\x168\x01\x01#\x1a5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb3~\xfe\x039\x01\x01Ms\x00\x00K\xfc"b'\xfe\x14:\x01\x01J\n\xd7#<\n\xd7#\xceT\xc0:\x19\r\x87\xba\xee$\x839i\xeb\xfe\x18>\x01\x01\xb2\x87Q\x82\xbd\x10\x8c\x1e\xbb\xf0\xefP>\x14\xae)D\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x9e\xf4\xfe\x1c?\x01\x01\xa3\xf2\r\x9b\xb6\xad\x8aH\xb9B%\xe6\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf29\xda:\xcf\x97\xbd;\x95,\xfe\x03@\x01\x01\xa5\xc8\x14\x00Y\xd5\xfe\x0cA\x01\x01\x02\xe0\x15\xf2v\xb1N\x05\x00\xce5\x03\x00-&\xfe\x16B\x01\x01\x88\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00g \xfe\x16C\x01\x01\xc1\xbfP7<\x1a\xc4q7}\xa8\xb0:\xed\xc1\xbc=\x00\x00\x00\x00\xa5\x03!/'b'\xfe\x1aD\x01\x01\x1b*\x1b\x8b\x0c\x00\x00\x00\x00\x03\x002\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01@\x08\xfe\x16E\x01\x01t\x0b6\x03\x00\r\x007\x00%\xfc\x00\x00\x02\x00\x04\x00\x07\x01\xa0\xff4\x02A=\xfe\x16F\x01\x01\x81\x0b6\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x8e\x00k\x02$\xca\xfe\x0eG\x01\x01\x1d\x0b6\x03\x00K\xa4iD\xaeGA=!\x10\xf1\xc5\xfe\x0eH\x01\x01\x89\x0b6\x03\x007\xe6iD\x85\xeb\xa6>\xe6\x14zI\xfe\x1fI\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x8a\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T|\x00\xfe\x06J\x01\x01}\xc5\x14\x00\x00\x03\x00\x00e\xfe\x04K\x01\x01\x98\x00\x00\xa0\x8as\xb3\xfe\x02L\x01\x01*\x00\x00\x00\x87\xfe\x1eM\x01\x01\x18\x10#\x89\x0c\x00\x00\x00\x00\xee\xa5\x02\x18\xf1\xe7\xb8\xfd\x12a\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf3\xcd\xfe\x1aN\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbc:\xfe\x08O\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00+\x07\xfe\x15P\x01\x01$\xe7\x1d\x8b\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x9e\xfe\x16Q\x01\x01#\x0b6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00@"\xfe\x03R\x01\x01Ms\x00\x00&\x88'b'\xfe\x14S\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x85\xe6\xfe\x1cT\x01\x01!S6\x03\x00\xee\xa5\x02\x18\xf0\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfe\xff\x03\x00\xff\xff\xa6\x04\x84\xb7\xfe\x1cU\x01\x01\x1e\xab6\x03\x00\x15\xac{\xbd\xf4\xc8\x83\xba\xbf\xadT>h\x875:y\xff\xa5\xba\x8d\xa5\x839\x7f\xbd\xfe\x18V\x01\x01\xb2]]\x82\xbd\xe0D\x1e\xbb\xe6\xeaP>p\xad)D\xee\xa5\x02\x18\xf0\xe7\xb8\xfd^\x19\xfe\x12W\x01\x01\xfc\xb76\x03\x004\x00\x01\x00ARMMASK\x00Wr\xba\xe3'b'\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae\xfe\tY\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03*,\xfe\x1cZ\x01\x01\xa3\xc3]\xe6\xb6\xc9WD\xb9\xc6\xc1\xe3\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf3/\xcd:d+\xb7;b\x96\xfe\x03[\x01\x01\xa5\xc5\x14\x00\xc2\xa2\xfe\x0c\\\x01\x01\x02`\xbf\xf5v\xb1N\x05\x00\xbf6\x03\x00\x9e.\xfe\x16]\x01\x01\x88\xee\xa5\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00p\x8a\xfe\x12^\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00*\x9c\xfe\x16_\x01\x01\xc1B\xf9:<\x80\xadt79x\x8b;\x1d\x81\xb0=\x00\x00\x00\x00\xa5\x03\x82\xbb\xfe\x16`\x01\x01\xe1\x88\x16\x19?\xcc\xccL>\xe6Vt<=\xec\x01=T\x98&?\x00\x1fs\xa3\xfe\x1aa\x01\x01\x1b8\xc6\x8e\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffl\x01\x9f\x00\xfe\x16b\x01\x01t\xfb6\x03\x00\x08\x00:\x002\xfc\x00\x00\x01\x00\x00\x00\x07\x01\xa0\xff3\x02\xbaF\xfe\x16c\x01\x01\x81\xfb6\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff*\x03\x86\x00i\x02\xcd\x17\xfe\x0ed\x01\x01\x1d\xfb6\x03\x00O\xa3iDp=\x02=!\x10a\x13\xfe\x0ee\x01\x01\x89\xfb6\x03\x00\x81\xe6iDp=\xa9>\xe7\x14\x99p\xfe\x1ff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00#?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc1\x96\xfe\x06g\x01\x01}\xc8\x14\x00\x00\x03\x00\xab\x1e\xfe\x04h\x01\x01\x98\x00\x00\xa0\x8aM\x92\xfe\x02i\x01\x01*\x00\x00 \x14\xfe\x1ej\x01\x01\x1884\x8c\x0c\x00\x00\x00\x00\xee\xa5\x02\x18\xf0\xe7\xb8\xfd\x1ca\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x06\x15\xfe\x1ak\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00s\x94\xfe\x08l\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00|\xbc\xfe\x15m\x01\x01$S\xc8\x8e\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xf9\xfe\x16n\x01\x01#\xfc6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x004s'b'\xfe3o\x01\x01\xfd\x01APM:Copter solo-1.3.1 (7e9206cc)\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80R\xfe3p\x01\x01\xfd\x01PX4: 5e693274 NuttX: d48fa307\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xd1\xfe3q\x01\x01\xfd\x01Frame: QUAD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P|\xfe3r\x01\x01\xfd\x01PX4v2 003E002D 33345115 32353634\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xad\xfe\t\xb6\n\x00m\x1f\x00\x00\x00\x00\xd3\x00\x00\x00\x1d*\xfe\x03s\x01\x01Ms\x00\x00i\xbf'b'\xfe\x19t\x01\x01\x16\x00\x00\xf0B\xf7\x01\x00\x00SYSID_SW_MREV\x00\x00\x00\x04\xb4\x84\xfe\x19u\x01\x01\x16\x00\x00 A\xf7\x01\x01\x00SYSID_SW_TYPE\x00\x00\x00\x02l\xe0\xfe\x19v\x01\x01\x16\x00\x00\x80?\xf7\x01\x02\x00SYSID_THISMAV\x00\x00\x00\x04\xf2\x1f\xfe\x19w\x01\x01\x16\x00\x00\x7fC\xf7\x01\x03\x00SYSID_MYGCS\x00\x00\x00\x00\x00\x04\xabX\xfe\x19x\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x04\x00CLI_ENABLED\x00\x00\x00\x00\x00\x02t\xab\xfe\x19y\x01\x01\x16\x00\x00\x00@\xf7\x01\x05\x00PILOT_THR_FILT\x00\x00\t\x01\xa0\xfe\x19z\x01\x01\x16\x00\x00\x96B\xf7\x01\x06\x00PILOT_TKOFF_ALT\x00\t\x9d\xb9\xfe\x19{\x01\x01\x16\x00\x00zC\xf7\x01\x07\x00PILOT_TKOFF_DZ\x00\x00\x04\x8e|\xfe\x19|\x01\x01\x16\x00\x00\x80?\xf7\x01\x08\x00PILOT_THR_BHV\x00\x00\x00\x04\xacv\xfe\x19}\x01\x01\x16\x00\x00\xe6B\xf7\x01\t\x00SERIAL0_BAUD\x00\x00\x00\x00\x06\x98&\xfe\x19~\x01\x01\x16\x00\x00\x80?\xf7\x01\n\x00SERIAL1_PROTOCOL\x02\xfe\x14\xfe\x19\x7f\x01\x01\x16\x00@fD\xf7\x01\x0b\x00SERIAL1_BAUD\x00\x00\x00\x00\x06.\xae\xfe\x19\x80\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x0c\x00SERIAL2_PROTOCOL\x02\x1eO\xfe\x19\x81\x01\x01\x16\x00\x00dB\xf7\x01\r\x00SERIAL2_BAUD\x00\x00\x00\x00\x06\x87\x1e\xfe\x19\x82\x01\x01\x16\x00\x00\xa0@\xf7\x01\x0e\x00SERIAL3_PROTOCOL\x02\x94\xa5\xfe\x19\x83\x01\x01\x16\x00\x00\x18B\xf7\x01\x0f\x00SERIAL3_BAUD\x00\x00\x00\x00\x06\xd2\x0f\xfe\x19\x84\x01\x01\x16\x00\x00\x80?\xf7\x01\x10\x00SERIAL4_PROTOCOL\x02\x8a\x9e\xfe\x19\x85\x01\x01\x16\x00\x00fC\xf7\x01\x11\x00SERIAL4_BAUD\x00\x00\x00\x00\x06\xc7\x97\xfe\x03\x86\x01\x01/\xff\x00\x00E\x13\xfe\x03\x87\x01\x01Ms\x00\x00,\xea'b'\xfe\x19\x88\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x12\x00TELEM_DELAY\x00\x00\x00\x00\x00\x02\xb5W\xfe\x19\x89\x01\x01\x16\x00@\x1cE\xf7\x01\x13\x00RTL_ALT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf9\\\xfe\x19\x8a\x01\x01\x16\x00\x00@@\xf7\x01\x14\x00RTL_CONE_SLOPE\x00\x00\tt\x94\xfe\x19\x8b\x01\x01\x16\x00\x00zD\xf7\x01\x15\x00RTL_SPEED\x00\x00\x00\x00\x00\x00\x00\x04\xb1/\xfe\x19\x8c\x01\x01\x16\xcd\xccL?\xf7\x01\x16\x00RNGFND_GAIN\x00\x00\x00\x00\x00\t6\xeb\xfe\x19\x8d\x01\x01\x16\x00\x00\x00@\xf7\x01\x17\x00FS_BATT_ENABLE\x00\x00\x02EG\xfe\x19\x8e\x01\x01\x16\x00\x00`A\xf7\x01\x18\x00FS_BATT_VOLTAGE\x00\t\x82:\xfe\x19\x8f\x01\x01\x16\x00\x00\x02D\xf7\x01\x19\x00FS_BATT_MAH\x00\x00\x00\x00\x00\ti\r\xfe\x19\x90\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1a\x00FS_BATT_CURR_RTL\te\x1c\xfe\x19\x91\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1b\x00FS_GCS_ENABLE\x00\x00\x00\x02\xab8\xfe\x19\x92\x01\x01\x16\x00\x00\x80?\xf7\x01\x1c\x00MAG_ENABLE\x00\x00\x00\x00\x00\x00\x02\xd5]\xfe\x19\x93\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1d\x00SUPER_SIMPLE\x00\x00\x00\x00\x02K\x92\xfe\x19\x94\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x1e\x00RTL_ALT_FINAL\x00\x00\x00\x04\x16\x9f\xfe\x19\x95\x01\x01\x16\x00\x00zD\xf7\x01\x1f\x00RTL_CLIMB_MIN\x00\x00\x00\x04\xed\x80\xfe\x19\x96\x01\x01\x16\x00\x00\x80\xbf\xf7\x01 \x00RSSI_PIN\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0f\x1d\xfe\x19\x97\x01\x01\x16\x00\x00\xa0@\xf7\x01!\x00RSSI_RANGE\x00\x00\x00\x00\x00\x00\t\xf6)\xfe\x19\x98\x01\x01\x16\x00\x00\x00@\xf7\x01"\x00WP_YAW_BEHAVIOR\x00\x02#u\xfe\x19\x99\x01\x01\x16\x00@\x9cE\xf7\x01#\x00RTL_LOIT_TIME\x00\x00\x00\x06\xae1'b"\xfe\x19\x9a\x01\x01\x16\x00\x00HB\xf7\x01$\x00LAND_SPEED\x00\x00\x00\x00\x00\x00\x04?I\xfe\x19\x9b\x01\x01\x16\x00\x00\x05C\xf7\x01%\x00PILOT_VELZ_MAX\x00\x00\x04\x81:\xfe\x19\x9c\x01\x01\x16\x00\x00\xc8B\xf7\x01&\x00PILOT_ACCEL_Z\x00\x00\x00\x04\xfd\xd9\xfe\x19\x9d\x01\x01\x16\x00\x00\x02C\xf7\x01'\x00THR_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd6\xa1\xfe\x19\x9e\x01\x01\x16\x00\x00\x80?\xf7\x01(\x00FS_THR_ENABLE\x00\x00\x00\x029f\xfe\x19\x9f\x01\x01\x16\x00\x80cD\xf7\x01)\x00FS_THR_VALUE\x00\x00\x00\x00\x04N\xda\xfe\x19\xa0\x01\x01\x16\x00\x00\xc8C\xf7\x01*\x00THR_MID\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xfa\x88\xfe\x19\xa1\x01\x01\x16\x00\x00 A\xf7\x01+\x00THR_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc7\xa1\xfe\x19\xa2\x01\x01\x16\x00\x00\xa0@\xf7\x01,\x00FLTMODE1\x00\x00\x00\x00\x00\x00\x00\x00\x02>\x87\xfe\x19\xa3\x01\x01\x16\x00\x00\xa0@\xf7\x01-\x00FLTMODE2\x00\x00\x00\x00\x00\x00\x00\x00\x02(\x86\xfe\x19\xa4\x01\x01\x16\x00\x00\xa0@\xf7\x01.\x00FLTMODE3\x00\x00\x00\x00\x00\x00\x00\x00\x02\x8bX\xfe\x19\xa5\x01\x01\x16\x00\x00\xa0@\xf7\x01/\x00FLTMODE4\x00\x00\x00\x00\x00\x00\x00\x00\x02\xc8\x07\xfe\x19\xa6\x01\x01\x16\x00\x00\xa0@\xf7\x010\x00FLTMODE5\x00\x00\x00\x00\x00\x00\x00\x00\x02\xa7h\xfe\x19\xa7\x01\x01\x16\x00\x00\xa0@\xf7\x011\x00FLTMODE6\x00\x00\x00\x00\x00\x00\x00\x00\x02\xb1i\xfe\x19\xa8\x01\x01\x16\x00\x00\x00\x00\xf7\x012\x00SIMPLE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02K\x0b\xfe\x19\xa9\x01\x01\x16\x00\xff\xffG\xf7\x013\x00LOG_BITMASK\x00\x00\x00\x00\x00\x06\x83<\xfe\x19\xaa\x01\x01\x16\x00\x00\x00\x00\xf7\x014\x00ESC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02?\xbf\xfe\x19\xab\x01\x01\x16\x00\x00\x00\x00\xf7\x015\x00TUNE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02G#\xfe\x03\xac\x01\x01Ms\x00\x00\xb0\xfb"b'\xfe\x19\xad\x01\x01\x16\x00\x00\x00\x00\xf7\x016\x00TUNE_LOW\x00\x00\x00\x00\x00\x00\x00\x00\x045M\xfe\x19\xae\x01\x01\x16\x00\x00zD\xf7\x017\x00TUNE_HIGH\x00\x00\x00\x00\x00\x00\x00\x04\x9fD\xfe\x19\xaf\x01\x01\x16\x00\x00\x80?\xf7\x018\x00FRAME\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02A\xb5\xfe\x19\xb0\x01\x01\x16\x00\x00\x00\x00\xf7\x019\x00CH7_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9fJ\xfe\x19\xb1\x01\x01\x16\x00\x00\x00\x00\xf7\x01:\x00CH8_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xe1\xfe\x19\xb2\x01\x01\x16\x00\x00\x00\x00\xf7\x01;\x00CH9_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02S\xd1\xfe\x19\xb3\x01\x01\x16\x00\x00\x00\x00\xf7\x01<\x00CH10_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02u\x84\xfe\x19\xb4\x01\x01\x16\x00\x00\x00\x00\xf7\x01=\x00CH11_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd0\xf1\xfe\x19\xb5\x01\x01\x16\x00\x00\x00\x00\xf7\x01>\x00CH12_OPT\x00\x00\x00\x00\x00\x00\x00\x00\x02\xb6`\xfe\x19\xb6\x01\x01\x16\x00\x00\xeeB\xf7\x01?\x00ARMING_CHECK\x00\x00\x00\x00\x02\xf7\xa2\xfe\x19\xb7\x01\x01\x16\x00\x00\xfaD\xf7\x01@\x00ANGLE_MAX\x00\x00\x00\x00\x00\x00\x00\x04\xf8^\xfe\x19\xb8\x01\x01\x16\x00\x00\xa0A\xf7\x01A\x00RC_FEEL_RP\x00\x00\x00\x00\x00\x00\x02!\xf8\xfe\x19\xb9\x01\x01\x16\x00\x00\x00A\xf7\x01B\x00PHLD_BRAKE_RATE\x00\x04\xc0\xfd\xfe\x19\xba\x01\x01\x16\x00\x80;E\xf7\x01C\x00PHLD_BRAKE_ANGLE\x04\xcd\x9d\xfe\x19\xbb\x01\x01\x16\x00\x00\x80?\xf7\x01D\x00LAND_REPOSITION\x00\x02\xb0\xc5\xfe\x19\xbc\x01\x01\x16\x00\x00\x00@\xf7\x01E\x00FS_EKF_ACTION\x00\x00\x00\x02\x93\x12\xfe\x19\xbd\x01\x01\x16\xcd\xccL?\xf7\x01F\x00FS_EKF_THRESH\x00\x00\x00\t\xcc\xa9\xfe\x19\xbe\x01\x01\x16\x00\x00zD\xf7\x01G\x00RC1_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04w\xfd\xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b'\xfe\x19\xc0\x01\x01\x16\x00\x80\xbbD\xf7\x01H\x00RC1_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04b\xbb\xfe\x19\xc1\x01\x01\x16\x00\x00\xfaD\xf7\x01I\x00RC1_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xc8\xab\xfe\x19\xc2\x01\x01\x16\x00\x00\x80?\xf7\x01J\x00RC1_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xbe\xed\xfe\x19\xc3\x01\x01\x16\x00\x00 A\xf7\x01K\x00RC1_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xcb\x02\xfe\x19\xc4\x01\x01\x16\x00\x00zD\xf7\x01L\x00RC2_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04z\xd7\xfe\x19\xc5\x01\x01\x16\x00\x80\xbbD\xf7\x01M\x00RC2_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04A8\xfe\x19\xc6\x01\x01\x16\x00\x00\xfaD\xf7\x01N\x00RC2_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0\xdf\xfe\x19\xc7\x01\x01\x16\x00\x00\x80?\xf7\x01O\x00RC2_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9dn\xfe\x19\xc8\x01\x01\x16\x00\x00 A\xf7\x01P\x00RC2_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf6\xc8\xfe\x19\xc9\x01\x01\x16\x00\x00zD\xf7\x01Q\x00RC3_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8a\x18\xfe\x19\xca\x01\x01\x16\x00\x80\xbbD\xf7\x01R\x00RC3_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xea\x00\xfe\x19\xcb\x01\x01\x16\x00\x80\xedD\xf7\x01S\x00RC3_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04:)\xfe\x19\xcc\x01\x01\x16\x00\x00\x80?\xf7\x01T\x00RC3_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x91\xb0\xfe\x19\xcd\x01\x01\x16\x00\x00\xf0A\xf7\x01U\x00RC3_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04kc\xfe\x19\xce\x01\x01\x16\x00\x00zD\xf7\x01V\x00RC4_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x90D\xfe\x19\xcf\x01\x01\x16\x00\x80\xbbD\xf7\x01W\x00RC4_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xab\xab\xfe\x19\xd0\x01\x01\x16\x00\x00\xfaD\xf7\x01X\x00RC4_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0p\xfe\x19\xd1\x01\x01\x16\x00\x00\x80?\xf7\x01Y\x00RC4_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9d\xc1\xfe\x19\xd2\x01\x01\x16\x00\x00 A\xf7\x01Z\x00RC4_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb3\xd9\xfe\x19\xd3\x01\x01\x16\x00\x80\x89D\xf7\x01[\x00RC5_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x15\xc5\xfe\x19\xd4\x01\x01\x16\x00\x80\xbbD\xf7\x01\\\x00RC5_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\x08\xf7\xfe\x19\xd5\x01\x01\x16\x00\x80\xedD\xf7\x01]\x00RC5_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd8\xde\xfe\x19\xd6\x01\x01\x16\x00\x00\x80?\xf7\x01^\x00RC5_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd4\xa1\xfe\x19\xd7\x01\x01\x16\x00\x00\x00\x00\xf7\x01_\x00RC5_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x9f\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\xfe\x19\xd9\x01\x01\x16\x00\x00\x00\x00\xf7\x01`\x00RC5_FUNCTION\x00\x00\x00\x00\x02~\xbd\xfe\x19\xda\x01\x01\x16\x00\x00zD\xf7\x01a\x00RC6_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04)n\xfe\x19\xdb\x01\x01\x16\x00\x00zD\xf7\x01b\x00RC6_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xd3\xe1\xfe\x19\xdc\x01\x01\x16\x00\x00\xbeD\xf7\x01c\x00RC6_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04X\xe0\xfe\x19\xdd\x01\x01\x16\x00\x00\x80?\xf7\x01d\x00RC6_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xd4\x87\xfe\x19\xde\x01\x01\x16\x00\x00\x00\x00\xf7\x01e\x00RC6_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xe6\xf8\xfe\x19\xdf\x01\x01\x16\x00\x00\x00\x00\xf7\x01f\x00RC6_FUNCTION\x00\x00\x00\x00\x02\xa36\xfe\x19\xe0\x01\x01\x16\x00\x80\x89D\xf7\x01g\x00RC7_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04l\x90\xfe\x19\xe1\x01\x01\x16\x00\x80\xbbD\xf7\x01h\x00RC7_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8d\xaa\xfe\x19\xe2\x01\x01\x16\x00\x80\xedD\xf7\x01i\x00RC7_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xbb\xc2\xfe\x19\xe3\x01\x01\x16\x00\x00\x80?\xf7\x01j\x00RC7_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02Q\xfc\xfe\x19\xe4\x01\x01\x16\x00\x00\x00\x00\xf7\x01k\x00RC7_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xaf\x00\xfe\x19\xe5\x01\x01\x16\x00\x00\x00\x00\xf7\x01l\x00RC7_FUNCTION\x00\x00\x00\x00\x02\x81\xab\xfe\x19\xe6\x01\x01\x16\x00\x80\x89D\xf7\x01m\x00RC8_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xaa\xcc\xfe\x19\xe7\x01\x01\x16\x00\x80\xbbD\xf7\x01n\x00RC8_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04\xf6Y\xfe\x19\xe8\x01\x01\x16\x00\x80\xedD\xf7\x01o\x00RC8_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x85\xbd\xfe\x19\xe9\x01\x01\x16\x00\x00\x80?\xf7\x01p\x00RC8_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02o\xb1\xfe\x19\xea\x01\x01\x16\x00\x00\x00\x00\xf7\x01q\x00RC8_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04]\xce'b'\xfe\x19\xeb\x01\x01\x16\x00\x00\x00\x00\xf7\x01r\x00RC8_FUNCTION\x00\x00\x00\x00\x02\x18\x00\xfe\x19\xec\x01\x01\x16\x00\x80\x89D\xf7\x01s\x00RC9_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04h\x88\xfe\x19\xed\x01\x01\x16\x00\x80\xbbD\xf7\x01t\x00RC9_TRIM\x00\x00\x00\x00\x00\x00\x00\x00\x04_x\xfe\x19\xee\x01\x01\x16\x00\x80\xedD\xf7\x01u\x00RC9_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04i\x10\xfe\x19\xef\x01\x01\x16\x00\x00\x80?\xf7\x01v\x00RC9_REV\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x83.\xfe\x19\xf0\x01\x01\x16\x00\x00\x00\x00\xf7\x01w\x00RC9_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xe6\xc2\xfe\x19\xf1\x01\x01\x16\x00\x00\x00\x00\xf7\x01x\x00RC9_FUNCTION\x00\x00\x00\x00\x02\x1e\xa3\xfe\x19\xf2\x01\x01\x16\x00\x80\x89D\xf7\x01y\x00RC10_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04_:\xfe\x19\xf3\x01\x01\x16\x00\x80\xbbD\xf7\x01z\x00RC10_TRIM\x00\x00\x00\x00\x00\x00\x00\x04!\x87\xfe\x19\xf4\x01\x01\x16\x00\x80\xedD\xf7\x01{\x00RC10_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04Z\xf5\xfe\x19\xf5\x01\x01\x16\x00\x00\x80?\xf7\x01|\x00RC10_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02-\xdf\xfe\x19\xf6\x01\x01\x16\x00\x00\x00\x00\xf7\x01}\x00RC10_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x8e\xc1\xfe\x19\xf7\x01\x01\x16\x00\x00\x00\x00\xf7\x01~\x00RC10_FUNCTION\x00\x00\x00\x02\xc3\xf4\xfe\x19\xf8\x01\x01\x16\x00\x80\x89D\xf7\x01\x7f\x00RC11_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\xcc\xef\xfe\x19\xf9\x01\x01\x16\x00\x80\xbbD\xf7\x01\x80\x00RC11_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xa3\xf8\xfe\x19\xfa\x01\x01\x16\x00\x80\xedD\xf7\x01\x81\x00RC11_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\x14\t\xfe\x19\xfb\x01\x01\x16\x00\x00\x80?\xf7\x01\x82\x00RC11_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x08F\xfe\x19\xfc\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x83\x00RC11_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04g\xdb\xfe\x19\xfd\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x84\x00RC11_FUNCTION\x00\x00\x00\x02A\x8b\xfe\x19\xfe\x01\x01\x16\x00\x80\x89D\xf7\x01\x85\x00RC12_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04_\x8c\xfe\x19\xff\x01\x01\x16\x00\x80\xbbD\xf7\x01\x86\x00RC12_TRIM\x00\x00\x00\x00\x00\x00\x00\x04!1\xfe\x19\x00\x01\x01\x16\x00\x80\xedD\xf7\x01\x87\x00RC12_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04=\xe9\xfe\x19\x01\x01\x01\x16\x00\x00\x80?\xf7\x01\x88\x00RC12_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x9c\t\xfe\x19\x02\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x89\x00RC12_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04?\x17\xfe\x03\x03\x01\x01Ms\x00\x00\x107'b'\xfe\x19\x04\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x8a\x00RC12_FUNCTION\x00\x00\x00\x02\xab\xc0\xfe\x19\x05\x01\x01\x16\x00\x80\x89D\xf7\x01\x8b\x00RC13_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\x07\x16\xfe\x19\x06\x01\x01\x16\x00\x80\xbbD\xf7\x01\x8c\x00RC13_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xf4\x8f\xfe\x19\x07\x01\x01\x16\x00\x80\xedD\xf7\x01\x8d\x00RC13_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\xa5?\xfe\x19\x08\x01\x01\x16\x00\x00\x80?\xf7\x01\x8e\x00RC13_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02\x1a\xbd\xfe\x19\t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x8f\x00RC13_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04_\xe2\xfe\x19\n\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x90\x00RC13_FUNCTION\x00\x00\x00\x02\xf4\xa4\xfe\x19\x0b\x01\x01\x16\x00\x80\x89D\xf7\x01\x91\x00RC14_MIN\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb5\xca\xfe\x19\x0c\x01\x01\x16\x00\x80\xbbD\xf7\x01\x92\x00RC14_TRIM\x00\x00\x00\x00\x00\x00\x00\x04\xe1\xb5\xfe\x19\r\x01\x01\x16\x00\x80\xedD\xf7\x01\x93\x00RC14_MAX\x00\x00\x00\x00\x00\x00\x00\x00\x04\xb0\x05\xfe\x19\x0e\x01\x01\x16\x00\x00\x80?\xf7\x01\x94\x00RC14_REV\x00\x00\x00\x00\x00\x00\x00\x00\x02!n\xfe\x19\x0f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x95\x00RC14_DZ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04d1\xfe\x19\x10\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x96\x00RC14_FUNCTION\x00\x00\x00\x02\x98\xd6\xfe\x19\x11\x01\x01\x16\x00\x00\xf5C\xf7\x01\x97\x00RC_SPEED\x00\x00\x00\x00\x00\x00\x00\x00\x04\r\x9e\xfe\x19\x12\x01\x01\x16\x00\x00\x80@\xf7\x01\x98\x00ACRO_RP_P\x00\x00\x00\x00\x00\x00\x00\t\xb6\xcb\xfe\x19\x13\x01\x01\x16\x00\x00\x80?\xf7\x01\x99\x00ACRO_YAW_P\x00\x00\x00\x00\x00\x00\t\xaa@\xfe\x19\x14\x01\x01\x16\x00\x00\x80?\xf7\x01\x9a\x00ACRO_BAL_ROLL\x00\x00\x00\t\x8b\x8b\xfe\x19\x15\x01\x01\x16\x00\x00\x80?\xf7\x01\x9b\x00ACRO_BAL_PITCH\x00\x00\t\xcb?\xfe\x03\x16\x01\x01Ms\x00\x00\t\xfb\xfe\x12\x17\x01\x01\xfc\xa2:\x03\x004\x00\x01\x00ARMMASK\x00WrO='b'\xfe\t\x18\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xaf\x11\xfe\x19\x19\x01\x01\x16\x00\x00\x00@\xf7\x01\x9c\x00ACRO_TRAINER\x00\x00\x00\x00\x02\xc6\xde\xfe\x19\x1a\x01\x01\x16\x9a\x99\x99>\xf7\x01\x9d\x00ACRO_EXPO\x00\x00\x00\x00\x00\x00\x00\t\x10\xa8\xfe\x19\x1b\x01\x01\x16h\x91\xed=\xf7\x01\x9e\x00RATE_RLL_P\x00\x00\x00\x00\x00\x00\t\xee\xdc\xfe\x19\x1c\x01\x01\x16h\x91\xed=\xf7\x01\x9f\x00RATE_RLL_I\x00\x00\x00\x00\x00\x00\t\xc2,\xfe\x19\x1d\x01\x01\x16\xfa\xed\xeb;\xf7\x01\xa0\x00RATE_RLL_D\x00\x00\x00\x00\x00\x00\t\x12\xdb\xfe\x19\x1e\x01\x01\x16\x00\x80;E\xf7\x01\xa1\x00RATE_RLL_IMAX\x00\x00\x00\t\xe2\x04\xfe\x19\x1f\x01\x01\x16\x00\x00 B\xf7\x01\xa2\x00RATE_RLL_FILT_HZ\t\xea\xfd\xfe\x19 \x01\x01\x161\x08,>\xf7\x01\xa3\x00RATE_PIT_P\x00\x00\x00\x00\x00\x00\t\xa2\xca\xfe\x19!\x01\x01\x161\x08,>\xf7\x01\xa4\x00RATE_PIT_I\x00\x00\x00\x00\x00\x00\tr+\xfe\x19"\x01\x01\x16o\x12\x03<\xf7\x01\xa5\x00RATE_PIT_D\x00\x00\x00\x00\x00\x00\t\xf0\n\xfe\x19#\x01\x01\x16\x00\x80;E\xf7\x01\xa6\x00RATE_PIT_IMAX\x00\x00\x00\tt\xc3\xfe\x19$\x01\x01\x16\x00\x00 B\xf7\x01\xa7\x00RATE_PIT_FILT_HZ\t\xebN\xfe\x19%\x01\x01\x16\xc3\xf5(?\xf7\x01\xa8\x00RATE_YAW_P\x00\x00\x00\x00\x00\x00\t\xcd:\xfe\x19&\x01\x01\x16\x02+\x87=\xf7\x01\xa9\x00RATE_YAW_I\x00\x00\x00\x00\x00\x00\t\xc0*\xfe\x19\'\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xaa\x00RATE_YAW_D\x00\x00\x00\x00\x00\x00\tU\xa8\xfe\x19(\x01\x01\x16\x00\x00zD\xf7\x01\xab\x00RATE_YAW_IMAX\x00\x00\x00\t\xc0\x9e\xfe\x19)\x01\x01\x1633\xf3@\xf7\x01\xac\x00RATE_YAW_FILT_HZ\t\xc3\x1a\xfe\x03*\x01\x01Ms\x00\x00\xe3-'b"\xfe\x19+\x01\x01\x1633\xb3?\xf7\x01\xad\x00VEL_XY_P\x00\x00\x00\x00\x00\x00\x00\x00\t\xe8U\xfe\x19,\x01\x01\x16\x00\x00\x00?\xf7\x01\xae\x00VEL_XY_I\x00\x00\x00\x00\x00\x00\x00\x00\tS\x8a\xfe\x19-\x01\x01\x16\x00\x00zD\xf7\x01\xaf\x00VEL_XY_IMAX\x00\x00\x00\x00\x00\tJ!\xfe\x19.\x01\x01\x16\x00\x00\xa0@\xf7\x01\xb0\x00VEL_XY_FILT_HZ\x00\x00\t\xaf\x87\xfe\x19/\x01\x01\x16\x00\x00\xa0@\xf7\x01\xb1\x00VEL_Z_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\t \xc3\xfe\x190\x01\x01\x16\x00\x00@?\xf7\x01\xb2\x00ACCEL_Z_P\x00\x00\x00\x00\x00\x00\x00\t\xb5\x19\xfe\x191\x01\x01\x16\x00\x00\xc0?\xf7\x01\xb3\x00ACCEL_Z_I\x00\x00\x00\x00\x00\x00\x00\t\xa0\xb1\xfe\x192\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xb4\x00ACCEL_Z_D\x00\x00\x00\x00\x00\x00\x00\tD.\xfe\x193\x01\x01\x16\x00\x00HD\xf7\x01\xb5\x00ACCEL_Z_IMAX\x00\x00\x00\x00\t\x8er\xfe\x194\x01\x01\x16\x00\x00\xa0A\xf7\x01\xb6\x00ACCEL_Z_FILT_HZ\x00\t\xfck\xfe\x195\x01\x01\x16\x00\x00\x18A\xf7\x01\xb7\x00STB_RLL_P\x00\x00\x00\x00\x00\x00\x00\t\x90\x9b\xfe\x196\x01\x01\x16\x00\x00\x00A\xf7\x01\xb8\x00STB_PIT_P\x00\x00\x00\x00\x00\x00\x00\t=\x9b\xfe\x197\x01\x01\x16\x00\x00\xe0@\xf7\x01\xb9\x00STB_YAW_P\x00\x00\x00\x00\x00\x00\x00\t\xffF\xfe\x198\x01\x01\x16\x00\x00\x80?\xf7\x01\xba\x00POS_Z_P\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\xde\x83\xfe\x199\x01\x01\x16333?\xf7\x01\xbb\x00POS_XY_P\x00\x00\x00\x00\x00\x00\x00\x00\t\x82d\xfe\x19:\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xbc\x00CAM_TRIGG_TYPE\x00\x00\x02;\xc6\xfe\x19;\x01\x01\x16\x00\x00 A\xf7\x01\xbd\x00CAM_DURATION\x00\x00\x00\x00\x02d\x9f\xfe\x19<\x01\x01\x16\x00\x80\xa2D\xf7\x01\xbe\x00CAM_SERVO_ON\x00\x00\x00\x00\x045\x1c\xfe\t\xb7\n\x00m\x0c\x00\x00\x00\x00\xcd\x00\x00\x004'"b'\xfe\x19=\x01\x01\x16\x00\x80\x89D\xf7\x01\xbf\x00CAM_SERVO_OFF\x00\x00\x00\x04\xa20\xfe\x19>\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc0\x00CAM_TRIGG_DIST\x00\x00\t*\x9b\xfe\x19?\x01\x01\x16\x00\x00XB\xf7\x01\xc1\x00RELAY_PIN\x00\x00\x00\x00\x00\x00\x00\x02\xfb\xea\xfe\x19@\x01\x01\x16\x00\x00\\B\xf7\x01\xc2\x00RELAY_PIN2\x00\x00\x00\x00\x00\x00\x02h\xc5\xfe\x19A\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xc3\x00RELAY_PIN3\x00\x00\x00\x00\x00\x00\x02\xb3\xe0\xfe\x19B\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xc4\x00RELAY_PIN4\x00\x00\x00\x00\x00\x00\x02\xc4d\xfe\x19C\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc5\x00RELAY_DEFAULT\x00\x00\x00\x02E\xa4\xfe\x19D\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xc6\x00EPM_ENABLE\x00\x00\x00\x00\x00\x00\x02X\x8a\xfe\x19E\x01\x01\x16\x00\x80\xedD\xf7\x01\xc7\x00EPM_GRAB\x00\x00\x00\x00\x00\x00\x00\x00\x04Q\xb7\xfe\x19F\x01\x01\x16\x00\x80\x89D\xf7\x01\xc8\x00EPM_RELEASE\x00\x00\x00\x00\x00\x04\\V\xfe\x19G\x01\x01\x16\x00\x80\xbbD\xf7\x01\xc9\x00EPM_NEUTRAL\x00\x00\x00\x00\x00\x04\xb1\xa9\xfe\x19H\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xca\x00EPM_REGRAB\x00\x00\x00\x00\x00\x00\x02\x97F\xfe\x19I\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xcb\x00CHUTE_ENABLED\x00\x00\x00\x02c{\xfe\x19J\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xcc\x00CHUTE_TYPE\x00\x00\x00\x00\x00\x00\x02\x04;\xfe\x19K\x01\x01\x16\x00\x80\xa2D\xf7\x01\xcd\x00CHUTE_SERVO_ON\x00\x00\x04\x9c\xe4\xfe\x19L\x01\x01\x16\x00\x80\x89D\xf7\x01\xce\x00CHUTE_SERVO_OFF\x00\x04V\x7f\xfe\x19M\x01\x01\x16\x00\x00 A\xf7\x01\xcf\x00CHUTE_ALT_MIN\x00\x00\x00\x04e\x13\xfe\x19N\x01\x01\x16\x00@\x9cD\xf7\x01\xd0\x00LGR_SERVO_RTRACT\x04\xa1\x08\xfe\x03O\x01\x01Ms\x00\x00\x83i'b'\xfe\x19P\x01\x01\x16\x00\xc0\xdaD\xf7\x01\xd1\x00LGR_SERVO_DEPLOY\x04\xa7\xeb\xfe\x19Q\x01\x01\x16\xe1\x06\xa7\xc2\xf7\x01\xd2\x00COMPASS_OFS_X\x00\x00\x00\t\x97\x06\xfe\x19R\x01\x01\x16\xe90\x05C\xf7\x01\xd3\x00COMPASS_OFS_Y\x00\x00\x00\t\xe3(\xfe\x19S\x01\x01\x16\x0eIyC\xf7\x01\xd4\x00COMPASS_OFS_Z\x00\x00\x00\t(\xc2\xfe\x19T\x01\x01\x16s\xe7f\xbc\xf7\x01\xd5\x00COMPASS_DEC\x00\x00\x00\x00\x00\t\x08\x9f\xfe\x19U\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd6\x00COMPASS_LEARN\x00\x00\x00\x02l\xaf\xfe\x19V\x01\x01\x16\x00\x00\x80?\xf7\x01\xd7\x00COMPASS_USE\x00\x00\x00\x00\x00\x02\xb4\xd2\xfe\x19W\x01\x01\x16\x00\x00\x80?\xf7\x01\xd8\x00COMPASS_AUTODEC\x00\x02\x840\xfe\x19X\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd9\x00COMPASS_MOTCT\x00\x00\x00\x02 \x80\xfe\x19Y\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xda\x00COMPASS_MOT_X\x00\x00\x00\t7\x18\xfe\x19Z\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdb\x00COMPASS_MOT_Y\x00\x00\x00\t_\xa2\xfe\x19[\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdc\x00COMPASS_MOT_Z\x00\x00\x00\tQ\x82\xfe\x19\\\x01\x01\x16\x00\x00\x18B\xf7\x01\xdd\x00COMPASS_ORIENT\x00\x00\x02\xecc\xfe\x19]\x01\x01\x16\x00\x00\x80?\xf7\x01\xde\x00COMPASS_EXTERNAL\x02!~\xfe\x19^\x01\x01\x16F\xd2v\xc3\xf7\x01\xdf\x00COMPASS_OFS2_X\x00\x00\tv6\xfe\x19_\x01\x01\x16?u\x14B\xf7\x01\xe0\x00COMPASS_OFS2_Y\x00\x00\t\xa9\xf3\xfe\x19`\x01\x01\x16$Jo\xc2\xf7\x01\xe1\x00COMPASS_OFS2_Z\x00\x00\t\xc7\x80\xfe\x19a\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe2\x00COMPASS_MOT2_X\x00\x00\t\xd1\xeb\xfe\x03b\x01\x01/\xff\x00\x00x\x1d\xfe\x03c\x01\x01Ms\x00\x00\x11\xe4'b'\xfe\x19d\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe3\x00COMPASS_MOT2_Y\x00\x00\t\xfc\x9c\xfe\x19e\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe4\x00COMPASS_MOT2_Z\x00\x00\tC\xad\xfe\x19f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe5\x00COMPASS_PRIMARY\x00\x02t\xc6\xfe\x19g\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe6\x00COMPASS_OFS3_X\x00\x00\t2%\xfe\x19h\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe7\x00COMPASS_OFS3_Y\x00\x00\tp\x1c\xfe\x19i\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe8\x00COMPASS_OFS3_Z\x00\x00\t\x19\xe7\xfe\x19j\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe9\x00COMPASS_MOT3_X\x00\x00\t\xa5\xb9\xfe\x19k\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xea\x00COMPASS_MOT3_Y\x00\x00\t\xf9\xfb\xfe\x19l\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xeb\x00COMPASS_MOT3_Z\x00\x00\t\xba\xdb\xfe\x19m\x01\x01\x16\x80\x04\x8fG\xf7\x01\xec\x00COMPASS_DEV_ID\x00\x00\x06\x18\x9c\xfe\x19n\x01\x01\x16\x80\xc8\x00H\xf7\x01\xed\x00COMPASS_DEV_ID2\x00\x06\xfb\x17\xfe\x19o\x01\x01\x16\x00\x85\x82G\xf7\x01\xee\x00COMPASS_DEV_ID3\x00\x06\xd7Y\xfe\x19p\x01\x01\x16\x00\x00\x80?\xf7\x01\xef\x00COMPASS_USE2\x00\x00\x00\x00\x02K\xab\xfe\x19q\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf0\x00COMPASS_ORIENT2\x00\x02\xbd\xe2\xfe\x19r\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf1\x00COMPASS_EXTERN2\x00\x02\xa0\xe3\xfe\x19s\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf2\x00COMPASS_USE3\x00\x00\x00\x00\x02H\xdf\xfe\x19t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf3\x00COMPASS_ORIENT3\x00\x02\xd24\xfe\x19u\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf4\x00COMPASS_EXTERN3\x00\x02\xff\xa7\xfe\x03v\x01\x01Ms\x00\x00\x08('b"\xfe\x19w\x01\x01\x16\x08\x95\x83?\xf7\x01\xf5\x00COMPASS_DIA_X\x00\x00\x00\t\xbf\x9c\xfe\x19x\x01\x01\x16\xba\x97\x82?\xf7\x01\xf6\x00COMPASS_DIA_Y\x00\x00\x00\t\\\x8d\xfe\x19y\x01\x01\x16\xab\xa7k?\xf7\x01\xf7\x00COMPASS_DIA_Z\x00\x00\x00\t/\xcf\xfe\x19z\x01\x01\x16f\xab\xda<\xf7\x01\xf8\x00COMPASS_ODI_X\x00\x00\x00\t\x0e1\xfe\x19{\x01\x01\x16(?O<\xf7\x01\xf9\x00COMPASS_ODI_Y\x00\x00\x00\t\xf4\xf1\xfe\x19|\x01\x01\x16\xe9p\x04\xbd\xf7\x01\xfa\x00COMPASS_ODI_Z\x00\x00\x00\ts\xcc\xfe\x19}\x01\x01\x16\xb1Ny?\xf7\x01\xfb\x00COMPASS_DIA2_X\x00\x00\t\xe7\x96\xfe\x19~\x01\x01\x16\x1c\xe5\x80?\xf7\x01\xfc\x00COMPASS_DIA2_Y\x00\x00\t*\xbf\xfe\x19\x7f\x01\x01\x16\t\x90\x85?\xf7\x01\xfd\x00COMPASS_DIA2_Z\x00\x00\t\x7f\xfd\xfe\x19\x80\x01\x01\x164G\xa0\xbd\xf7\x01\xfe\x00COMPASS_ODI2_X\x00\x00\t\xf5?\xfe\x19\x81\x01\x01\x16\xc6\xda\xa1<\xf7\x01\xff\x00COMPASS_ODI2_Y\x00\x00\t\xb1\x90\xfe\x19\x82\x01\x01\x16N|u\xbc\xf7\x01\x00\x01COMPASS_ODI2_Z\x00\x00\t\xf8R\xfe\x19\x83\x01\x01\x16\x00\x00\x80?\xf7\x01\x01\x01COMPASS_DIA3_X\x00\x00\t0\xa7\xfe\x19\x84\x01\x01\x16\x00\x00\x80?\xf7\x01\x02\x01COMPASS_DIA3_Y\x00\x00\tF'\xfe\x19\x85\x01\x01\x16\x00\x00\x80?\xf7\x01\x03\x01COMPASS_DIA3_Z\x00\x00\t/\xc5\xfe\x19\x86\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x04\x01COMPASS_ODI3_X\x00\x00\t\x89\xe4\xfe\x19\x87\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x05\x01COMPASS_ODI3_Y\x00\x00\th\x10\xfe\x19\x88\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x06\x01COMPASS_ODI3_Z\x00\x00\t\x1f\x89\xfe\x03\x89\x01\x01Ms\x00\x00!\xda"b'\xfe\x19\x8a\x01\x01\x16\x00\x00\xa0@\xf7\x01\x07\x01INS_PRODUCT_ID\x00\x00\x047\xb0\xfe\x19\x8b\x01\x01\x16\xa0\xca\xf3\xbc\xf7\x01\x08\x01INS_GYROFFS_X\x00\x00\x00\t\'5\xfe\x19\x8c\x01\x01\x16\xb6\xda(\xbd\xf7\x01\t\x01INS_GYROFFS_Y\x00\x00\x00\t\xb5\xd3\xfe\x19\x8d\x01\x01\x16\xcf\xa3\x80\xbc\xf7\x01\n\x01INS_GYROFFS_Z\x00\x00\x00\t\x8fZ\xfe\x19\x8e\x01\x01\x16"E\xab\xbc\xf7\x01\x0b\x01INS_GYR2OFFS_X\x00\x00\t\xb7,\xfe\x19\x8f\x01\x01\x16\xca\x8d\xaa;\xf7\x01\x0c\x01INS_GYR2OFFS_Y\x00\x00\t\xcdE\xfe\x19\x90\x01\x01\x16\x0f\x7f\x87\xbc\xf7\x01\r\x01INS_GYR2OFFS_Z\x00\x00\t\xd2\x9e\xfe\x19\x91\x01\x01\x16\xeaS1=\xf7\x01\x0e\x01INS_GYR3OFFS_X\x00\x00\t.\r\xfe\x19\x92\x01\x01\x16e\x05\xba\xbc\xf7\x01\x0f\x01INS_GYR3OFFS_Y\x00\x00\t^\xe0\xfe\x19\x93\x01\x01\x16\xf2WB>\xf7\x01\x10\x01INS_GYR3OFFS_Z\x00\x00\t\xe5\x93\xfe\x19\x94\x01\x01\x16\xc5K\x7f?\xf7\x01\x11\x01INS_ACCSCAL_X\x00\x00\x00\t\x11\xe1\xfe\x19\x95\x01\x01\x16\xbeW\x7f?\xf7\x01\x12\x01INS_ACCSCAL_Y\x00\x00\x00\t\xf6\xcd\xfe\x19\x96\x01\x01\x16\x9d\x97|?\xf7\x01\x13\x01INS_ACCSCAL_Z\x00\x00\x00\t\x1f\x95\xfe\x19\x97\x01\x01\x16p\x0c\x92=\xf7\x01\x14\x01INS_ACCOFFS_X\x00\x00\x00\t\x96\xf2\xfe\x19\x98\x01\x01\x16\xcb\x987\xbd\xf7\x01\x15\x01INS_ACCOFFS_Y\x00\x00\x00\t\x06\xf4\xfe\x19\x99\x01\x01\x16\xbb\x10H>\xf7\x01\x16\x01INS_ACCOFFS_Z\x00\x00\x00\t5b\xfe\x19\x9a\x01\x01\x16\xd2q\x82?\xf7\x01\x17\x01INS_ACC2SCAL_X\x00\x00\th\x84\xfe\x19\x9b\x01\x01\x16\xc6D}?\xf7\x01\x18\x01INS_ACC2SCAL_Y\x00\x00\t\nb'b'\xfe\x19\x9c\x01\x01\x16)[\x86?\xf7\x01\x19\x01INS_ACC2SCAL_Z\x00\x00\t\xe0\x1a\xfe\x19\x9d\x01\x01\x16\x8f\xa5\x8d9\xf7\x01\x1a\x01INS_ACC2OFFS_X\x00\x00\t\xe8\x94\xfe\x19\x9e\x01\x01\x16\xa6\x86\xec\xbb\xf7\x01\x1b\x01INS_ACC2OFFS_Y\x00\x00\t\x11\x96\xfe\x19\x9f\x01\x01\x16iM\xbe?\xf7\x01\x1c\x01INS_ACC2OFFS_Z\x00\x00\t\x90w\xfe\x19\xa0\x01\x01\x16kz\x80?\xf7\x01\x1d\x01INS_ACC3SCAL_X\x00\x00\t\xd0\x9c\xfe\x19\xa1\x01\x01\x16\x97\xe1~?\xf7\x01\x1e\x01INS_ACC3SCAL_Y\x00\x00\t\x03n\xfe\x19\xa2\x01\x01\x16t\x1a|?\xf7\x01\x1f\x01INS_ACC3SCAL_Z\x00\x00\t\xbd\xda\xfe\x19\xa3\x01\x01\x16\xa3\xc3*>\xf7\x01 \x01INS_ACC3OFFS_X\x00\x00\t\xb0\xb6\xfe\x19\xa4\x01\x01\x16*B\xa7<\xf7\x01!\x01INS_ACC3OFFS_Y\x00\x00\t\t\x97\xfe\x19\xa5\x01\x01\x16*\x9e3\xbf\xf7\x01"\x01INS_ACC3OFFS_Z\x00\x00\t>\xf6\xfe\x19\xa6\x01\x01\x16\x00\x00\xa0A\xf7\x01#\x01INS_GYRO_FILTER\x00\x02\xb8\xfe\xfe\x19\xa7\x01\x01\x16\x00\x00\xa0A\xf7\x01$\x01INS_ACCEL_FILTER\x02\xffs\xfe\x19\xa8\x01\x01\x16\x00\x80\x89D\xf7\x01%\x01WPNAV_SPEED\x00\x00\x00\x00\x00\t\x1c6\xfe\x19\xa9\x01\x01\x16\x00\x00HC\xf7\x01&\x01WPNAV_RADIUS\x00\x00\x00\x00\t\xdb\xc1\xfe\x19\xaa\x01\x01\x16\x00\x00\xa0C\xf7\x01\'\x01WPNAV_SPEED_UP\x00\x00\tk\xa2\xfe\x19\xab\x01\x01\x16\x00\x00pC\xf7\x01(\x01WPNAV_SPEED_DN\x00\x00\t"\xeb\xfe\x19\xac\x01\x01\x16\x00\x00\xfaC\xf7\x01)\x01WPNAV_LOIT_SPEED\t;\xb4\xfe\x19\xad\x01\x01\x16\x00\x00\xaaC\xf7\x01*\x01WPNAV_ACCEL\x00\x00\x00\x00\x00\t\x97[\xfe\x19\xae\x01\x01\x16\x00\x00 C\xf7\x01+\x01WPNAV_ACCEL_Z\x00\x00\x00\t\xe6[\xfe\x19\xaf\x01\x01\x16\x00\x00zD\xf7\x01,\x01WPNAV_LOIT_JERK\x00\t\xbd\xe7\xfe\x19\xb0\x01\x01\x16\x00\x00eC\xf7\x01-\x01WPNAV_LOIT_MAXA\x00\t\x8d\xf6\xfe\x19\xb1\x01\x01\x16\x00\x00\xd8B\xf7\x01.\x01WPNAV_LOIT_MINA\x00\tY\x00\xfe\x19\xb2\x01\x01\x16\x00\x00zD\xf7\x01/\x01CIRCLE_RADIUS\x00\x00\x00\t\xea\x9e\xfe\x19\xb3\x01\x01\x16\x00\x00\xa0A\xf7\x010\x01CIRCLE_RATE\x00\x00\x00\x00\x00\t\xbe\x11\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d'b'\xfe\x19\xb5\x01\x01\x16\x00\x00zD\xf7\x011\x01ATC_SLEW_YAW\x00\x00\x00\x00\t\x05\xad\xfe\x19\xb6\x01\x01\x16\x00\xc0\xdaE\xf7\x012\x01ATC_ACCEL_Y_MAX\x00\t\xbeC\xfe\x19\xb7\x01\x01\x16\x00\x00\x80?\xf7\x013\x01ATC_RATE_FF_ENAB\x02\xc5\x18\xfe\x19\xb8\x01\x01\x16\x00\xa0\x0cG\xf7\x014\x01ATC_ACCEL_R_MAX\x00\t\x93\x97\xfe\x19\xb9\x01\x01\x16\x00\xa0\x0cG\xf7\x015\x01ATC_ACCEL_P_MAX\x00\tYc\xfe\x19\xba\x01\x01\x16\x00\x00pA\xf7\x016\x01ATC_LEAD_RLL_W\x00\x00\t\xeb\x8d\xfe\x19\xbb\x01\x01\x16\x00\x00\x80@\xf7\x017\x01ATC_LEAD_RLL_R\x00\x00\tg\xd1\xfe\x19\xbc\x01\x01\x16\x00\x00\x00\x00\xf7\x018\x01ATC_LEAD_PIT_W\x00\x00\t\xbd\x1c\xfe\x19\xbd\x01\x01\x16\x00\x00\x80?\xf7\x019\x01ATC_LEAD_PIT_R\x00\x00\t\xd9\xa2\xfe\x19\xbe\x01\x01\x16\x00\x00\x00@\xf7\x01:\x01PSC_ACC_XY_FILT\x00\t\xac\x8f\xfe\x19\xbf\x01\x01\x16\x00\x00\xa0A\xf7\x01;\x01SR0_RAW_SENS\x00\x00\x00\x00\x04\xf3\x0b\xfe\x19\xc0\x01\x01\x16\x00\x00\x00\x00\xf7\x01<\x01SR0_EXT_STAT\x00\x00\x00\x00\x04x1\xfe\x19\xc1\x01\x01\x16\x00\x00\x00\x00\xf7\x01=\x01SR0_RC_CHAN\x00\x00\x00\x00\x00\x04\xef\xe1\xfe\x19\xc2\x01\x01\x16\x00\x00\x00\x00\xf7\x01>\x01SR0_RAW_CTRL\x00\x00\x00\x00\x04W\xfd\xfe\x19\xc3\x01\x01\x16\x00\x00\x00\x00\xf7\x01?\x01SR0_POSITION\x00\x00\x00\x00\x04\x1b|\xfe\x19\xc4\x01\x01\x16\x00\x00\x00\x00\xf7\x01@\x01SR0_EXTRA1\x00\x00\x00\x00\x00\x00\x04\xcer\xfe\x19\xc5\x01\x01\x16\x00\x00\x00\x00\xf7\x01A\x01SR0_EXTRA2\x00\x00\x00\x00\x00\x00\x04l[\xfe\x19\xc6\x01\x01\x16\x00\x00\x00\x00\xf7\x01B\x01SR0_EXTRA3\x00\x00\x00\x00\x00\x00\x04o\x1e\xfe\x19\xc7\x01\x01\x16\x00\x00\x00\x00\xf7\x01C\x01SR0_PARAMS\x00\x00\x00\x00\x00\x00\x04\x8f\x88\xfe\x19\xc8\x01\x01\x16\x00\x00\x80@\xf7\x01D\x01SR1_RAW_SENS\x00\x00\x00\x00\x04\xe0\x8d\xfe\x19\xc9\x01\x01\x16\x00\x00\x80@\xf7\x01E\x01SR1_EXT_STAT\x00\x00\x00\x00\x04-\xe5\xfe\x19\xca\x01\x01\x16\x00\x00\x80@\xf7\x01F\x01SR1_RC_CHAN\x00\x00\x00\x00\x00\x04\xe1\xc2\xfe\x19\xcb\x01\x01\x16\x00\x00\x80@\xf7\x01G\x01SR1_RAW_CTRL\x00\x00\x00\x00\x04\x02)\xfe\x19\xcc\x01\x01\x16\x00\x00\x80@\xf7\x01H\x01SR1_POSITION\x00\x00\x00\x00\x04ds\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\xfe\x19\xce\x01\x01\x16\x00\x00\x80@\xf7\x01I\x01SR1_EXTRA1\x00\x00\x00\x00\x00\x00\x04\x8e\x0f\xfe\x19\xcf\x01\x01\x16\x00\x00\x80@\xf7\x01J\x01SR1_EXTRA2\x00\x00\x00\x00\x00\x00\x04\x91\x90\xfe\x19\xd0\x01\x01\x16\x00\x00\x80@\xf7\x01K\x01SR1_EXTRA3\x00\x00\x00\x00\x00\x00\x04x\xf0\xfe\x19\xd1\x01\x01\x16\x00\x00 A\xf7\x01L\x01SR1_PARAMS\x00\x00\x00\x00\x00\x00\x04P\xcc\xfe\x19\xd2\x01\x01\x16\x00\x00\x00\x00\xf7\x01M\x01SR2_RAW_SENS\x00\x00\x00\x00\x04\x83\xfb\xfe\x19\xd3\x01\x01\x16\x00\x00\x00\x00\xf7\x01N\x01SR2_EXT_STAT\x00\x00\x00\x00\x04\xf3%\xfe\x19\xd4\x01\x01\x16\x00\x00\x00\x00\xf7\x01O\x01SR2_RC_CHAN\x00\x00\x00\x00\x00\x04N7\xfe\x19\xd5\x01\x01\x16\x00\x00\x00\x00\xf7\x01P\x01SR2_RAW_CTRL\x00\x00\x00\x00\x04\x10X\xfe\x19\xd6\x01\x01\x16\x00\x00\x00\x00\xf7\x01Q\x01SR2_POSITION\x00\x00\x00\x00\x04\xba\x98\xfe\x19\xd7\x01\x01\x16\x00\x00\x00\x00\xf7\x01R\x01SR2_EXTRA1\x00\x00\x00\x00\x00\x00\x04\xf83\xfe\x19\xd8\x01\x01\x16\x00\x00\x00\x00\xf7\x01S\x01SR2_EXTRA2\x00\x00\x00\x00\x00\x00\x04\xf9\xd7\xfe\x19\xd9\x01\x01\x16\x00\x00\x00\x00\xf7\x01T\x01SR2_EXTRA3\x00\x00\x00\x00\x00\x00\x04w\xb6\xfe\x19\xda\x01\x01\x16\x00\x00\x00\x00\xf7\x01U\x01SR2_PARAMS\x00\x00\x00\x00\x00\x00\x04qa\xfe\x19\xdb\x01\x01\x16\x00\x00\x80?\xf7\x01V\x01AHRS_GPS_GAIN\x00\x00\x00\t"\xb5\xfe\x19\xdc\x01\x01\x16\x00\x00\x80?\xf7\x01W\x01AHRS_GPS_USE\x00\x00\x00\x00\x02\x95\xd2\xfe\x19\xdd\x01\x01\x16\xcd\xcc\xcc=\xf7\x01X\x01AHRS_YAW_P\x00\x00\x00\x00\x00\x00\t\xa1\xa3\xfe\x19\xde\x01\x01\x16\xcd\xcc\xcc=\xf7\x01Y\x01AHRS_RP_P\x00\x00\x00\x00\x00\x00\x00\tq\xa6\xfe\x19\xdf\x01\x01\x16\x00\x00\x00\x00\xf7\x01Z\x01AHRS_WIND_MAX\x00\x00\x00\x02|\xec\xfe\x03\xe0\x01\x01Ms\x00\x00#\xa5\xfe\x12\xe1\x01\x01\xfc\x8c>\x03\x004\x00\x01\x00ARMMASK\x00Wr2\x0f'b'\xfe\t\xe2\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc1\xb5\xfe\x19\xe3\x01\x01\x16\xb3\xd7\x1f<\xf7\x01[\x01AHRS_TRIM_X\x00\x00\x00\x00\x00\t\x1dy\xfe\x19\xe4\x01\x01\x16\xc7\xb7\xe7;\xf7\x01\\\x01AHRS_TRIM_Y\x00\x00\x00\x00\x00\t\x94\xd0\xfe\x19\xe5\x01\x01\x16\x00\x00\x00\x00\xf7\x01]\x01AHRS_TRIM_Z\x00\x00\x00\x00\x00\tT\xe6\xfe\x19\xe6\x01\x01\x16\x00\x00@A\xf7\x01^\x01AHRS_ORIENTATION\x02\x973\xfe\x19\xe7\x01\x01\x16\xcd\xcc\xcc=\xf7\x01_\x01AHRS_COMP_BETA\x00\x00\t\x12/\xfe\x19\xe8\x01\x01\x16\x00\x00\xc0@\xf7\x01`\x01AHRS_GPS_MINSATS\x02\x15\xbb\xfe\x19\xe9\x01\x01\x16\x00\x00@@\xf7\x01a\x01MNT_DEFLT_MODE\x00\x00\x02\xe3#\xfe\x19\xea\x01\x01\x16\x00\x00\x00\x00\xf7\x01b\x01MNT_RETRACT_X\x00\x00\x00\t\x03\x17\xfe\x19\xeb\x01\x01\x16\x00\x00\x00\x00\xf7\x01c\x01MNT_RETRACT_Y\x00\x00\x00\t\x8d\xec\xfe\x19\xec\x01\x01\x16\x00\x00\x00\x00\xf7\x01d\x01MNT_RETRACT_Z\x00\x00\x00\t\xa9\x0e\xfe\x19\xed\x01\x01\x16\x00\x00\x00\x00\xf7\x01e\x01MNT_NEUTRAL_X\x00\x00\x00\tp\x08\xfe\x19\xee\x01\x01\x16\x00\x00\x00\x00\xf7\x01f\x01MNT_NEUTRAL_Y\x00\x00\x00\t\xa5\x04\xfe\x19\xef\x01\x01\x16\x00\x00\x00\x00\xf7\x01g\x01MNT_NEUTRAL_Z\x00\x00\x00\t}\xf7\xfe\x19\xf0\x01\x01\x16\x00\x00\x00\x00\xf7\x01h\x01MNT_STAB_ROLL\x00\x00\x00\x02\xfbI\xfe\x19\xf1\x01\x01\x16\x00\x00\x00\x00\xf7\x01i\x01MNT_STAB_TILT\x00\x00\x00\x02\x18l\xfe\x19\xf2\x01\x01\x16\x00\x00\x00\x00\xf7\x01j\x01MNT_STAB_PAN\x00\x00\x00\x00\x02\xc9\x11\xfe\x19\xf3\x01\x01\x16\x00\x00\x00\x00\xf7\x01k\x01MNT_RC_IN_ROLL\x00\x00\x02\xe2+\xfe\x19\xf4\x01\x01\x16\x00\xa0\x8c\xc5\xf7\x01l\x01MNT_ANGMIN_ROL\x00\x00\x04?+\xfe\x19\xf5\x01\x01\x16\x00\xa0\x8cE\xf7\x01m\x01MNT_ANGMAX_ROL\x00\x00\x04\x9e6\xfe\x19\xf6\x01\x01\x16\x00\x00\xc0@\xf7\x01n\x01MNT_RC_IN_TILT\x00\x00\x025Q\xfe\x19\xf7\x01\x01\x16\x00\xa0\x0c\xc6\xf7\x01o\x01MNT_ANGMIN_TIL\x00\x00\x04P1\xfe\x19\xf8\x01\x01\x16\x00\x00\x00\x00\xf7\x01p\x01MNT_ANGMAX_TIL\x00\x00\x04\xf8,\xfe\x19\xf9\x01\x01\x16\x00\x00\x00\x00\xf7\x01q\x01MNT_RC_IN_PAN\x00\x00\x00\x02Q\xb7\xfe\x19\xfa\x01\x01\x16\x00\xa0\x8c\xc5\xf7\x01r\x01MNT_ANGMIN_PAN\x00\x00\x04\xb0z\xfe\x03\xfb\x01\x01Ms\x00\x007Y'b'\xfe\x19\xfc\x01\x01\x16\x00\xa0\x8cE\xf7\x01s\x01MNT_ANGMAX_PAN\x00\x00\x04\xc8\x85\xfe\x19\xfd\x01\x01\x16\x00\x00\x00\x00\xf7\x01t\x01MNT_JSTICK_SPD\x00\x00\x02\xc5\xf1\xfe\x19\xfe\x01\x01\x16\x00\x00\x00\x00\xf7\x01u\x01MNT_LEAD_RLL\x00\x00\x00\x00\tj\xd7\xfe\x19\xff\x01\x01\x16\x00\x00\x00\x00\xf7\x01v\x01MNT_LEAD_PTCH\x00\x00\x00\t1I\xfe\x19\x00\x01\x01\x16\x00\x00\x00@\xf7\x01w\x01MNT_TYPE\x00\x00\x00\x00\x00\x00\x00\x00\x022\x9c\xfe\x19\x01\x01\x01\x16\x00\x00@@\xf7\x01x\x01LOG_BACKEND_TYPE\x02=\xcb\xfe\x19\x02\x01\x01\x16\x00\x00\xa0@\xf7\x01y\x01BATT_MONITOR\x00\x00\x00\x00\x02^\x14\xfe\x19\x03\x01\x01\x16\x00\x00\x00@\xf7\x01z\x01BATT_VOLT_PIN\x00\x00\x00\x02\x03\xe3\xfe\x19\x04\x01\x01\x16\x00\x00@@\xf7\x01{\x01BATT_CURR_PIN\x00\x00\x00\x02\xf6:\xfe\x19\x05\x01\x01\x16\x9a\x99!A\xf7\x01|\x01BATT_VOLT_MULT\x00\x00\t,\xf7\xfe\x19\x06\x01\x01\x16\x00\x00\x88A\xf7\x01}\x01BATT_AMP_PERVOLT\t\xac\xd5\xfe\x19\x07\x01\x01\x16\x00\x00\x00\x00\xf7\x01~\x01BATT_AMP_OFFSET\x00\t\xc7\xd0\xfe\x19\x08\x01\x01\x16\x00\x80\xa2E\xf7\x01\x7f\x01BATT_CAPACITY\x00\x00\x00\x06l\x91\xfe\x19\t\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x80\x01BATT2_MONITOR\x00\x00\x00\x02\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\xfe\x19!\x01\x01\x16\x00\x00\x80\xc3\xf7\x01\x97\x01GPS_SBP_LOGMASK\x00\x04\x8c\xaf\xfe\x19"\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x98\x01SCHED_DEBUG\x00\x00\x00\x00\x00\x02A\xf4\xfe\x19#\x01\x01\x16\x00\x00\x80?\xf7\x01\x99\x01FENCE_ENABLE\x00\x00\x00\x00\x02Z6\xfe\x19$\x01\x01\x16\x00\x00\x80?\xf7\x01\x9a\x01FENCE_TYPE\x00\x00\x00\x00\x00\x00\x02\xe7\x82\xfe\x19%\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9b\x01FENCE_ACTION\x00\x00\x00\x00\x026\x8c\xfe\x19&\x01\x01\x16H\xe16B\xf7\x01\x9c\x01FENCE_ALT_MAX\x00\x00\x00\t\x85\x10\xfe\x19\'\x01\x01\x16\x00\x00\x96C\xf7\x01\x9d\x01FENCE_RADIUS\x00\x00\x00\x00\t\xac\x82\xfe\x19(\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9e\x01FENCE_MARGIN\x00\x00\x00\x00\t\x1b\xf4\xfe\x19)\x01\x01\x16\x00\x00\x00\x00\xf7\x01\x9f\x01RALLY_TOTAL\x00\x00\x00\x00\x00\x02\xb4\x94\xfe\x19*\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xa0\x01RALLY_LIMIT_KM\x00\x00\t\x01\xf4\xfe\x19+\x01\x01\x16\x00\x00\x96B\xf7\x01\xa1\x01MOT_SPIN_ARMED\x00\x00\x04-\xda\xfe\x19,\x01\x01\x16\x00\x00HC\xf7\x01\xa2\x01MOT_YAW_HEADROOM\x04,q\xfe\x19-\x01\x01\x16\xcd\xccL?\xf7\x01\xa3\x01MOT_THST_EXPO\x00\x00\x00\t:C\xfe\x19.\x01\x01\x16\xd7\xa3p?\xf7\x01\xa4\x01MOT_THST_MAX\x00\x00\x00\x00\t\x14\x9e\xfe\x19/\x01\x01\x16ff\x86A\xf7\x01\xa5\x01MOT_THST_BAT_MAX\t\x8a\xe3\xfe\x190\x01\x01\x16\x00\x00@A\xf7\x01\xa6\x01MOT_THST_BAT_MIN\tV&\xfe\x191\x01\x01\x16\x00\x00(B\xf7\x01\xa7\x01MOT_CURR_MAX\x00\x00\x00\x00\t\x90}\xfe\x192\x01\x01\x16\x9a\x99\x19>\xf7\x01\xa8\x01MOT_THR_MIX_MIN\x00\t~)\xfe\x033\x01\x01Ms\x00\x00\x98\xda\xfe\x034\x01\x01/\xff\x00\x00@>'b'\xfe\x195\x01\x01\x16\x00\x00\x80?\xf7\x01\xa9\x01RCMAP_ROLL\x00\x00\x00\x00\x00\x00\x02\xe7\xfc\xfe\x196\x01\x01\x16\x00\x00\x00@\xf7\x01\xaa\x01RCMAP_PITCH\x00\x00\x00\x00\x00\x02\ri\xfe\x197\x01\x01\x16\x00\x00@@\xf7\x01\xab\x01RCMAP_THROTTLE\x00\x00\x024\xa7\xfe\x198\x01\x01\x16\x00\x00\x80@\xf7\x01\xac\x01RCMAP_YAW\x00\x00\x00\x00\x00\x00\x00\x02\xc7\x88\xfe\x199\x01\x01\x16\x00\x00\x00?\xf7\x01\xad\x01EKF_VELNE_NOISE\x00\t\xeb\xd3\xfe\x19:\x01\x01\x16333?\xf7\x01\xae\x01EKF_VELD_NOISE\x00\x00\t.\xd4\xfe\x19;\x01\x01\x16\x00\x00\x00?\xf7\x01\xaf\x01EKF_POSNE_NOISE\x00\tC\x91\xfe\x19<\x01\x01\x16\x00\x00\x00@\xf7\x01\xb0\x01EKF_ALT_NOISE\x00\x00\x00\t\xee\xbc\xfe\x19=\x01\x01\x16\xcd\xccL=\xf7\x01\xb1\x01EKF_MAG_NOISE\x00\x00\x00\t\xaf\x1a\xfe\x19>\x01\x01\x1633\xb3?\xf7\x01\xb2\x01EKF_EAS_NOISE\x00\x00\x00\t8\x07\xfe\x19?\x01\x01\x16\xcd\xcc\xcc=\xf7\x01\xb3\x01EKF_WIND_PNOISE\x00\t\xdbV\xfe\x19@\x01\x01\x16\x00\x00\x00?\xf7\x01\xb4\x01EKF_WIND_PSCALE\x00\t\x11\xa3\xfe\x19A\x01\x01\x16\x8f\xc2u<\xf7\x01\xb5\x01EKF_GYRO_PNOISE\x00\t\xa0\xda\xfe\x19B\x01\x01\x16\x00\x00\x80>\xf7\x01\xb6\x01EKF_ACC_PNOISE\x00\x00\t\xc69\xfe\x19C\x01\x01\x16\xbd7\x865\xf7\x01\xb7\x01EKF_GBIAS_PNOISE\t\x11\xcd\xfe\x19D\x01\x01\x16\x17\xb7Q8\xf7\x01\xb8\x01EKF_ABIAS_PNOISE\t;\x83\xfe\x19E\x01\x01\x16RI\x1d:\xf7\x01\xb9\x01EKF_MAGE_PNOISE\x00\t\xbe\xeb\xfe\x19F\x01\x01\x16RI\x1d:\xf7\x01\xba\x01EKF_MAGB_PNOISE\x00\t\xa6C\xfe\x03G\x01\x01Ms\x00\x00?D'b'\xfe\x19H\x01\x01\x16\x00\x00HC\xf7\x01\xbb\x01EKF_VEL_DELAY\x00\x00\x00\x04\x86k\xfe\x19I\x01\x01\x16\x00\x00HC\xf7\x01\xbc\x01EKF_POS_DELAY\x00\x00\x00\x04\x06\xf2\xfe\x19J\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xbd\x01EKF_GPS_TYPE\x00\x00\x00\x00\x02\xc4\x86\xfe\x19K\x01\x01\x16\x00\x00\x80@\xf7\x01\xbe\x01EKF_VEL_GATE\x00\x00\x00\x00\x02\x80+\xfe\x19L\x01\x01\x16\x00\x00\xa0@\xf7\x01\xbf\x01EKF_POS_GATE\x00\x00\x00\x00\x02\xc7\x93\xfe\x19M\x01\x01\x16\x00\x00 A\xf7\x01\xc0\x01EKF_HGT_GATE\x00\x00\x00\x00\x02\x03b\xfe\x19N\x01\x01\x16\x00\x00@@\xf7\x01\xc1\x01EKF_MAG_GATE\x00\x00\x00\x00\x02O\x07\xfe\x19O\x01\x01\x16\x00\x00 A\xf7\x01\xc2\x01EKF_EAS_GATE\x00\x00\x00\x00\x02\x1eh\xfe\x19P\x01\x01\x16\x00\x00@@\xf7\x01\xc3\x01EKF_MAG_CAL\x00\x00\x00\x00\x00\x02\xbe\x92\xfe\x19Q\x01\x01\x16\x00\x00\xc8B\xf7\x01\xc4\x01EKF_GLITCH_ACCEL\x04\xb5*\xfe\x19R\x01\x01\x16\x00\x00\xc8A\xf7\x01\xc5\x01EKF_GLITCH_RAD\x00\x00\x02t\xac\xfe\x19S\x01\x01\x16\x00\x00\x00@\xf7\x01\xc6\x01EKF_GND_GRADIENT\x02\x93\x9a\xfe\x19T\x01\x01\x16\x00\x00\x80>\xf7\x01\xc7\x01EKF_FLOW_NOISE\x00\x00\t\xe8\xa8\xfe\x19U\x01\x01\x16\x00\x00@@\xf7\x01\xc8\x01EKF_FLOW_GATE\x00\x00\x00\x02\x1ch\xfe\x19V\x01\x01\x16\x00\x00 A\xf7\x01\xc9\x01EKF_FLOW_DELAY\x00\x00\x02\x8d\x90\xfe\x19W\x01\x01\x16\x00\x00\xa0@\xf7\x01\xca\x01EKF_RNG_GATE\x00\x00\x00\x00\x02\xa3x\xfe\x19X\x01\x01\x16\x00\x00 @\xf7\x01\xcb\x01EKF_MAX_FLOW\x00\x00\x00\x00\t\xc6\xd0\xfe\x19Y\x01\x01\x16\x00\x00\x80?\xf7\x01\xcc\x01EKF_FALLBACK\x00\x00\x00\x00\x02\x9aV\xfe\x19Z\x01\x01\x16\x00\x00\x80?\xf7\x01\xcd\x01EKF_ALT_SOURCE\x00\x00\x02\xaeH\xfe\x19[\x01\x01\x16\x00\x00\xfeB\xf7\x01\xce\x01EKF_GPS_CHECK\x00\x00\x00\x02\xcfa\xfe\x19\\\x01\x01\x16\x00\x00\xc0@\xf7\x01\xcf\x01EKF_GPS_LIM_NSAT\x02\x0f\xad\xfe\x19]\x01\x01\x16\x00\x00pC\xf7\x01\xd0\x01EKF_GPS_LIM_HDOP\x04\n-\xfe\x19^\x01\x01\x16\x00\x00\x80?\xf7\x01\xd1\x01EKF_GPS_LIM_SERR\t\xa2\xeb\xfe\x19_\x01\x01\x16\x00\x00\xa0@\xf7\x01\xd2\x01EKF_GPS_LIM_HERR\t>2\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b'\xfe\x19a\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd3\x01EKF_GPS_LIM_HDFT\t\xb9\xa0\xfe\x19b\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd4\x01EKF_GPS_LIM_VSPD\t\x0c?\xfe\x19c\x01\x01\x16\x9a\x99\x99>\xf7\x01\xd5\x01EKF_GPS_LIM_HSPD\t\xbb\xbb\xfe\x19d\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd6\x01MIS_TOTAL\x00\x00\x00\x00\x00\x00\x00\x04=\x16\xfe\x19e\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd7\x01MIS_RESTART\x00\x00\x00\x00\x00\x02\xc62\xfe\x19f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xd8\x01RNGFND_TYPE\x00\x00\x00\x00\x00\x02\xd5\x1e\xfe\x19g\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xd9\x01RNGFND_PIN\x00\x00\x00\x00\x00\x00\x02\x95\x0c\xfe\x19h\x01\x01\x16\x00\x00@@\xf7\x01\xda\x01RNGFND_SCALING\x00\x00\tM\x98\xfe\x19i\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdb\x01RNGFND_OFFSET\x00\x00\x00\t>H\xfe\x19j\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xdc\x01RNGFND_FUNCTION\x00\x02\xe9\xe4\xfe\x19k\x01\x01\x16\x00\x00\xa0A\xf7\x01\xdd\x01RNGFND_MIN_CM\x00\x00\x00\x04c\x06\xfe\x19l\x01\x01\x16\x00\x00/D\xf7\x01\xde\x01RNGFND_MAX_CM\x00\x00\x00\x04\x1f\x83\xfe\x19m\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xdf\x01RNGFND_STOP_PIN\x00\x02\xc28\xfe\x19n\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe0\x01RNGFND_SETTLE\x00\x00\x00\x04e\x0f\xfe\x19o\x01\x01\x16\x00\x00\x80?\xf7\x01\xe1\x01RNGFND_RMETRIC\x00\x00\x02\xa6\x93\xfe\x19p\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe2\x01RNGFND_PWRRNG\x00\x00\x00\x04\x85\x99\xfe\x19q\x01\x01\x16\x00\x00 A\xf7\x01\xe3\x01RNGFND_GNDCLEAR\x00\x02\t=\xfe\x19r\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe4\x01RNGFND2_TYPE\x00\x00\x00\x00\x02\x7f\x0b'b"\xfe\x19s\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xe5\x01RNGFND2_PIN\x00\x00\x00\x00\x00\x021P\xfe\x19t\x01\x01\x16\x00\x00@@\xf7\x01\xe6\x01RNGFND2_SCALING\x00\td\x11\xfe\x19u\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe7\x01RNGFND2_OFFSET\x00\x00\t\xa2'\xfe\x19v\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xe8\x01RNGFND2_FUNCTION\x02-\xac\xfe\x19w\x01\x01\x16\x00\x00\xa0A\xf7\x01\xe9\x01RNGFND2_MIN_CM\x00\x00\x04\xefq\xfe\x19x\x01\x01\x16\x00\x00/D\xf7\x01\xea\x01RNGFND2_MAX_CM\x00\x00\x04\xbb\xf0\xfe\x19y\x01\x01\x16\x00\x00\x80\xbf\xf7\x01\xeb\x01RNGFND2_STOP_PIN\x022\x83\xfe\x19z\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xec\x01RNGFND2_SETTLE\x00\x00\x04/\t\xfe\x19{\x01\x01\x16\x00\x00\x80?\xf7\x01\xed\x01RNGFND2_RMETRIC\x00\x02\xbds\xfe\x19|\x01\x01\x16\x00\x00 A\xf7\x01\xee\x01RNGFND2_GNDCLEAR\x024&\xfe\x19}\x01\x01\x16\x00\x00\x80?\xf7\x01\xef\x01TERRAIN_ENABLE\x00\x00\x02\xb1\xfb\xfe\x19~\x01\x01\x16\x00\x00\xc8B\xf7\x01\xf0\x01TERRAIN_SPACING\x00\x04\xabx\xfe\x19\x7f\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf1\x01FLOW_ENABLE\x00\x00\x00\x00\x00\x02W\xa8\xfe\x19\x80\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf2\x01FLOW_FXSCALER\x00\x00\x00\x043\xe9\xfe\x19\x81\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf3\x01FLOW_FYSCALER\x00\x00\x00\x04\xc3\x93\xfe\x19\x82\x01\x01\x16\x00\x00\x00\x00\xf7\x01\xf4\x01FLOW_ORIENT_YAW\x00\x04\x88\x0c\xfe\x19\x83\x01\x01\x16\x00\x00\xe0@\xf7\x01\xf5\x01AUTOTUNE_AXES\x00\x00\x00\x02I>\xfe\x19\x84\x01\x01\x16\xcd\xcc\xcc=\xf7\x01\xf6\x01AUTOTUNE_AGGR\x00\x00\x00\t\xbd1\xfe\x03\x85\x01\x01Ms\x00\x00C\xe1\xfe\x14\x86\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00R\x1d\xfe\x1c\x87\x01\x01!8A\x03\x00\xf6\xa5\x02\x18\xe8\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x03\x00\x00\x00\xa4\x042W"b"\xfe\x1c\x88\x01\x01\x1e\xccA\x03\x00\xed\xc6|\xbd\xb8\x8d'\xba\xab|T>rtJ:z\x8209?\x02\xcf8\xba\x96\xfe\x18\x89\x01\x01\xb2F\x8c\x82\xbd\x8d\xcc\x15\xbbFUP>\x1e\xa5)D\xf6\xa5\x02\x18\xe8\xe7\xb8\xfd\x0b\xec\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P\xfe\x1c\x8b\x01\x01\xa38\xd7\r\xb8\xed\xb0\x13\xb9\xf2\x17\xc8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc9T\xc4:-\xac\xe5;:\xd9\xfe\x03\x8c\x01\x01\xa5\xc6\x14\x00j\xee\xfe\x0c\x8d\x01\x01\x02\x08\x19!w\xb1N\x05\x00\xe0A\x03\x00\x0be\xfe\x16\x8e\x01\x01\x88\xf6\xa5\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90Q\xfe\x12\x8f\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x0eq\xfe\x16\x90\x01\x01\xc1\x99\x1d@<\xc9 ~7\x16\xa8\x8a;_G\xb2=\x00\x00\x00\x00\xa5\x03\xda\xa2\xfe\x16\x91\x01\x01\xe1\xc7K\x17?\x1b\xbd:>#\x98\x88<\x0ey\x9a<\xdf\xcd\x19?\x00\x1fqR"b"\xfe\x1a\x92\x01\x01\x1b\xee@\xba\x0c\x00\x00\x00\x00\x04\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffn\x01\xae\xc4\xfe\x16\x93\x01\x01t\x1cB\x03\x00\x07\x004\x00&\xfc\x00\x00\x02\x00\x02\x00\x07\x01\xa0\xff3\x02uS\xfe\x16\x94\x01\x01\x81\x1dB\x03\x00\x03\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff+\x03\x88\x00q\x02\xa4\x02\xfe\x0e\x95\x01\x01\x1d\x1dB\x03\x00\xbe\xa3iD{\x14\x1e=$\x10,#\xfe\x0e\x96\x01\x01\x89\x1dB\x03\x00\xdd\xe7iD\xb8\x1e\xb4>\xf1\x14A$\xfe\x1f\x97\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x00'?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TW\x7f\xfe\x06\x98\x01\x01}\xc5\x14\x00\x00\x03\x00y\xe0\xfe\x04\x99\x01\x01\x98\x00\x00\xa0\x8a\xa9\xf5\xfe\x02\x9a\x01\x01*\x00\x00\x1f+\xfe\x1e\x9b\x01\x01\x18\x00\xd0\xb9\x0c\x00\x00\x00\x00\xf7\xa5\x02\x18\xe7\xe7\xb8\xfd\xd0a\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c \x96\xfe\x1a\x9c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x08\xd1\xfe\x08\x9d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00R\xf3\xfe\x15\x9e\x01\x01$\xa4C\xba\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdbh\xfe\x16\x9f\x01\x01#\x1dB\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf0\x1f\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0\xfe\x14\xa1\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x90\xc2\xfe\x12\xa2\x01\x01\xfcyB\x03\x004\x00\x01\x00ARMMASK\x00Wr^j"b'\xfe\t\xa3\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03D\x88\xfe\x1c\xa4\x01\x01!\x00B\x03\x00\xf7\xa5\x02\x18\xe7\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa5\x04\xcd&\xfe\x1c\xa5\x01\x01\x1e\xbdB\x03\x00W\xcd|\xbd\x00f"\xbae\x87T>\xa5.\x0e90%Y\xbaD\xf8 :~\t\xfe\x18\xa6\x01\x01\xb2\x96\x83\x82\xbd\x10"\x14\xbb8[P>\x99\xa9)D\xf7\xa5\x02\x18\xe7\xe7\xb8\xfd?\t\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\\xfe\x1c\xa8\x01\x01\xa3=\x81\x17\xb8\xcd\xb9\x0f\xb9@\xd7\xc5\xb8\x00\x00\x00\x00\x00\x00\x00\x002\xd2\xc8:\x02\x9a\xcc;\x18\xdb\xfe\x03\xa9\x01\x01\xa5\xc5\x14\x006\xea\xfe\x0c\xaa\x01\x01\x02\xb8\xba$w\xb1N\x05\x00\xd1B\x03\x004\xde\xfe\x16\xab\x01\x01\x88\xf7\xa5\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x03\x1b\xfe\x16\xac\x01\x01\xc1\xac\xd1;\xf1\x14z\xdf\xfe*\xb2\x01\x01\x96s\xe7f\xbc\x0em\x01\x00$\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00lO\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\\\xd6\xfe\x06\xb4\x01\x01}\xc8\x14\x00\x00\x03\x00C\xce\xfe\x04\xb5\x01\x01\x98\x00\x00\xa0\x8a\xbfB\xfe\x02\xb6\x01\x01*\x00\x00\x06\xf9\xfe\x1e\xb7\x01\x01\x18(\xe1\xbc\x0c\x00\x00\x00\x00\xf7\xa5\x02\x18\xe6\xe7\xb8\xfd\xeea\n\x00F\x00\xff\xff\x03\x00|J\x03\x0ce#\xfe\x1a\xb8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf3\xba\xfe\x08\xb9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00FP\xfe\x15\xba\x01\x01$R\xf0\xbd\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x11\xfe\x16\xbb\x01\x01#\x0eC\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00d\xa0"b'\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0\xfe\x14\xbd\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00\xcc\xec\xfe\x1c\xbe\x01\x01!\xc9B\x03\x00\xf7\xa5\x02\x18\xe6\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x03\x00\xff\xff\xa5\x04:\xd3'b'\xfe\x1c\xbf\x01\x01\x1e\xaeC\x03\x00c5}\xbd\x80\xd5\x1d\xba\xc0\xa9T>\x83\x81V:\xc5\x1f\xce\xb9\x11\xf98\xba\xbc\xac\xfe\x18\xc0\x01\x01\xb2\xc2\x9b\x82\xbd\xcd\x05\x16\xbb\xd7~P>\\\xaf)D\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd3\x9f\xfe\x1c\xc1\x01\x01\xa3B.!\xb8\xf1\xc7\x0b\xb9p\x94\xc3\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x91X\xd0:oy\xc3;\xe7\x8b\xfe\x03\xc2\x01\x01\xa5\xc5\x14\x00[\x9e\xfe\x0c\xc3\x01\x01\x02\x08l(w\xb1N\x05\x00\xc3C\x03\x00\xee\xe2\xfe\x16\xc4\x01\x01\x88\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x005\xfb\xfe\x16\xc5\x01\x01\xc1\xb8\x9e5<\r\xb5{7\xcc\xc2v;E\xe9\xaf=\x00\x00\x00\x00\xa5\x03#\x98\xfe\x03\xc6\x01\x01Ms\x00\x00b\x0e\xfe\x1a\xc7\x01\x01\x1b\x9f\x9b\xc1\x0c\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01\x0c\xef\xfe\x16\xc8\x01\x01t\xfeC\x03\x00\x03\x00:\x00/\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\x986\xfe\x16\xc9\x01\x01\x81\xfeC\x03\x00\x03\x00?\x00"\xfc\xfd\xff\x00\x00\xfd\xff*\x03\x89\x00r\x02\\t\xfe\x0e\xca\x01\x01\x1d\xfeC\x03\x00\x85\xa3iD\x14\xae\x0f=$\x10\x85\x8a\xfe\x0e\xcb\x01\x01\x89\xfeC\x03\x00\n\xe7iD\x1e\x85\xad>\xf1\x14I\'\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf1o\xfe\x06\xcd\x01\x01}\xc5\x14\x00\x00\x03\x00\xfdW\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05\xfe\x02\xcf\x01\x01*\x00\x00s\xa9\xfe\x1e\xd0\x01\x01\x18P\xf2\xbf\x0c\x00\x00\x00\x00\xf9\xa5\x02\x18\xe5\xe7\xb8\xfd\x02b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd2t\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5\xfe\x15\xd3\x01\x01$J\x9e\xc1\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x8c\xfe\x16\xd4\x01\x01#\xffC\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x14\xe2'b'\xfe\x03\xd5\x01\x01/\xff\x00\x00\x1c\xa7\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU\xfe\x14\xd7\x01\x01J\n\xd7\xa3<\n\xd7\xa3<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00g\x9a'b'\xfe\x1c\xd8\x01\x01!oD\x03\x00\xf9\xa5\x02\x18\xe4\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04\xb4N\xfe\x1c\xd9\x01\x01\x1e\x9fD\x03\x00v\x89}\xbd\xa8V\x1b\xba>\x9fT>\xf4\xb9\xda95\xeb?6\xc8\x9e\xe69\x94\x96\xfe\x18\xda\x01\x01\xb2\xd8\xae\x82\xbd\x92\x02\x14\xbb\xdd\x82P>\n\xa7)D\xf9\xa5\x02\x18\xe4\xe7\xb8\xfdd\xec\xfe\x1c\xdb\x01\x01\xa3i\xd9*\xb8\xb2\xdc\x07\xb9\xb6O\xc1\xb8\x00\x00\x00\x00\x00\x00\x00\x00BM\xd6:.\x1e\xd6;\x9e\xa0\xfe\x03\xdc\x01\x01\xa5\xc6\x14\x00\xe3\xd0\xfe\x0c\xdd\x01\x01\x02\xb8\r,w\xb1N\x05\x00\xb3D\x03\x00\x85\xc6\xfe\x16\xde\x01\x01\x88\xf9\xa5\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00[B\xfe\x16\xdf\x01\x01\xc1[\x9d:\xf2\x14\x92\xed\xfe\x1f\xe6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9d\x1b\xfe\x06\xe7\x01\x01}\xc5\x14\x00\x00\x03\x00\xff\xa2\xfe\x04\xe8\x01\x01\x98\x00\x00\xa0\x8a\x9aV\xfe\x02\xe9\x01\x01*\x00\x00=\x92\xfe\x1e\xea\x01\x01\x18\x98Q\xc3\x0c\x00\x00\x00\x00\xf9\xa5\x02\x18\xe4\xe7\xb8\xfd b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2\xf7\xfe\x1a\xeb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x02\x00\xfe\x08\xec\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdez\xfe\x15\xed\x01\x01$\xb6L\xc5\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x80\xfe\x16\xee\x01\x01#\xf0D\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00y\\'b'\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14\xfe\x14\xf0\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00Ml\xfe\x1c\xf1\x01\x01!$E\x03\x00\xfb\xa5\x02\x18\xe3\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04\xdbV\xfe\x1c\xf2\x01\x01\x1e\x90E\x03\x00\x88N}\xbd e$\xba\xfb\x9fT>R\xd9/:\x0c\x14\x9f\xbaF\xaf\x13\xba\xb0\xc9\xfe\x18\xf3\x01\x01\xb2h\x8d\x82\xbd\xa0U\x14\xbb \x89P>\\\x9f)D\xfb\xa5\x02\x18\xe3\xe7\xb8\xfd\n\xf5'b'\xfe\x1c\xf4\x01\x01\xa3\x86y4\xb8\xf0\xfa\x03\xb9\xf7\x0e\xbf\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xaff\xda:(\xaa\xc2;J\x8b\xfe\x03\xf5\x01\x01\xa5\xb8\x14\x00\x17>\xfe\x0c\xf6\x01\x01\x02 \xbb/w\xb1N\x05\x00\xa4E\x03\x00\xc5\'\xfe\x16\xf7\x01\x01\x88\xfb\xa5\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x94p\xfe\x16\xf8\x01\x01\xc1\xb0\x87:<\x9c\xcav7h^\xbe9\x95K\xaa=\x00\x00\x00\x00\xa5\x03+\xce\xfe\x03\xf9\x01\x01Ms\x00\x00XR\xfe\x1a\xfa\x01\x01\x1b\xea\xf4\xc8\x0c\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffl\x01\xbcP\xfe\x16\xfb\x01\x01t\xe0E\x03\x00\x08\x002\x00"\xfc\x03\x00\x02\x00\x00\x00\x07\x01\xa0\xff3\x02\xd9\xb7\xfe\x16\xfc\x01\x01\x81\xe0E\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x88\x00p\x02\x87X\xfe\x0e\xfd\x01\x01\x1d\xe0E\x03\x00\x05\xa4iD\x14\xae/=$\x10;\x9d\xfe\x0e\xfe\x01\x01\x89\xe0E\x03\x00!\xe7iDp=\xae>\xf3\x14b\xe1\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x18\xdf\xfe\x06\x00\x01\x01}\xd5\x14\x00\x00\x03\x00D\n\xfe\x04\x01\x01\x01\x98\x00\x00\xa0\x8a \xb1\xfe\x02\x02\x01\x01*\x00\x00\'\xc6\xfe\x1e\x03\x01\x01\x18\xa0\x14\xc6\x0c\x00\x00\x00\x00\xfb\xa5\x02\x18\xe1\xe7\xb8\xfdHb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x81\x03\xfe\x1a\x04\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x003o\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB\xfe\x15\x06\x01\x01$\xac\xf7\xc8\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x1c\xfe\x16\x07\x01\x01#\xe1E\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x89<'b'\xfe\x14\x08\x01\x01J\n\xd7#<\n\xd7#<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x13\x1f\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11\xfe\x1c\n\x01\x01!\xedE\x03\x00\xfb\xa5\x02\x18\xe1\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa5\x04/\xfb\xfe\x12\x0b\x01\x01\xfceF\x03\x004\x00\x01\x00ARMMASK\x00Wr\xb0\x8d'b'\xfe\t\x0c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc14\xfe\x1c\r\x01\x01\x1e\x81F\x03\x00\x18)}\xbdHL\x1c\xba\x9f\x80T>\x17\x97\xcc\xb8\xcbs\xa8\xb9\xbfQ!\xb9\xc6\xd1\xfe\x18\x0e\x01\x01\xb2\xfak\x82\xbd\xf0\xd4\x13\xbb\xb9~P>\\\xaf)D\xfb\xa5\x02\x18\xe1\xe7\xb8\xfd\xe4\xf6\xfe\x1c\x0f\x01\x01\xa3\xc8\t>\xb8\xd9\x1e\x00\xb9D\xd4\xbc\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xebV\xec:\x87s\xcc;-\xff\xfe\x03\x10\x01\x01\xa5\xbd\x14\x00\xc2\xdf\xfe\x0c\x11\x01\x01\x02\xc0\xb23w\xb1N\x05\x00\x95F\x03\x00\xae\xd4\xfe\x16\x12\x01\x01\x88\xfb\xa5\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x008\x01\xfe\x16\x13\x01\x01\xc1\xd4a8<\x08\xbdu7\xb4\xc3\x81;~ \xb7=\x00\x00\x00\x00\xa5\x03\x17\xb6\xfe\x16\x14\x01\x01\xe1\xb5\xc8\x16?\x89s=>s\xb7e<\xba\xbf\xe4;\x03\x1d\x1f?\x00\x1fqu\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q'b'\xfe\x1a\x16\x01\x01\x1b\x98\xa3\xcc\x0c\x00\x00\x00\x00\x05\x004\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\x04\xf5\xfe\x16\x17\x01\x01t\xd1F\x03\x00\r\x003\x00\'\xfc\x00\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x0296\xfe\x16\x18\x01\x01\x81\xd1F\x03\x00\x03\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x88\x00s\x02+\x88\xfe\x0e\x19\x01\x01\x1d\xd1F\x03\x00\xd7\xa3iD\xf6($=%\x10\x8fH\xfe\x0e\x1a\x01\x01\x89\xd1F\x03\x00\x9c\xe6iD{\x14\xaa>\xf4\x14\x08\x8d\xfe\x1f\x1b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96\xf4\xfe\x06\x1c\x01\x01}\xc5\x14\x00\x00\x03\x007,\xfe\x04\x1d\x01\x01\x98\x00\x00\xa0\x8a\x9b\x0e\xfe\x02\x1e\x01\x01*\x00\x00t\xc2\xfe\x1e\x1f\x01\x01\x18\x083\xcc\x0c\x00\x00\x00\x00\xfc\xa5\x02\x18\xe0\xe7\xb8\xfdRb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c$\xe5\xfe\x1a \x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc8\x04\xfe\x08!\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\\\xe1\xfe\t\xba\n\x00m\x14\x00\x00\x00\x00\xd5\x00\x00\x00\x1f\x10\xfe\x15"\x01\x01$\x19\xa7\xcc\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00W\xaa\xfe\x16#\x01\x01#\xd2F\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x97i\xfe\x14$\x01\x01J\n\xd7#<\n\xd7#<{\x14\xae\xbe\n\xd7#\xbc\x0b\x00\x00\x00G\xa2\xfe\x03%\x01\x01Ms\x00\x00Q\x9c'b'\xfe\x1c&\x01\x01!\xb5F\x03\x00\xfc\xa5\x02\x18\xe0\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x04\x1d*\xfe\x1c\'\x01\x01\x1eqG\x03\x00\xf1S}\xbd\x98#)\xba\xcaiT>"+\x8c:\xea\xd4\xf7\xb9\x06\xae\x1883\x11\xfe\x18(\x01\x01\xb2\x11r\x82\xbds\x84\x15\xbbKvP>\x1e\xb5)D\xfc\xa5\x02\x18\xe0\xe7\xb8\xfd\x1c\x9d\xfe\x1c)\x01\x01\xa3\x86\x87G\xb8\x96\x96\xf8\xb8\x96\x97\xba\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x81\xe5:%\xc6\xc4;\xd5\x08\xfe\x03*\x01\x01\xa5\xc5\x14\x00\x04\xab\xfe\x0c+\x01\x01\x02 \x0e7w\xb1N\x05\x00\x85G\x03\x00$\x14\xfe\x16,\x01\x01\x88\xfd\xa5\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\xcc\xfe\x16-\x01\x01\xc1\x80\xe58\xf5\x14\x19\x97\xfe\x1f4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\x03\xfe\x065\x01\x01}\xc2\x14\x00\x00\x03\x00\x9e\xe0\xfe\x046\x01\x01\x98\x00\x00\xa0\x8aoP\xfe\x027\x01\x01*\x00\x00\xce\xe0\xfe\x1e8\x01\x01\x180D\xcf\x0c\x00\x00\x00\x00\xfd\xa5\x02\x18\xe0\xe7\xb8\xfdRb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xaa\xb9\xfe\x1a9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb6\xeb\xfe\x08:\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x13\x98\xfe\x15;\x01\x01$tP\xd0\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xa0\xfe\x16<\x01\x01#\xc2G\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8c%'b'\xfe\x14=\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00\x7f\xa6\xfe\x03>\x01\x01Ms\x00\x00E`\xfe\x1c?\x01\x01!~G\x03\x00\xfd\xa5\x02\x18\xe0\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x041#'b"\xfe\x1c@\x01\x01\x1ebH\x03\x00\x00;}\xbd`\x8c\x0b\xba\xb8cT>bW\xa4:W\x84Z\xb9\x80\x82\xad9'\xb2\xfe\x18A\x01\x01\xb2\xafg\x82\xbd\xf2\xd3\x12\xbbTtP>\xc2\xb5)D\xfe\xa5\x02\x18\xdf\xe7\xb8\xfd?\xc2\xfe\x03B\x01\x01/\xff\x00\x00\x88\xab\xfe\x1cC\x01\x01\xa3\xab\xf9P\xb8\xa9\x00\xf1\xb8ZT\xb8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xd2\xee:\xb8\xc3\xbc;|\xc5\xfe\x03D\x01\x01\xa5\xc5\x14\x00\x08H\xfe\x0cE\x01\x01\x02\xa0\xb7:w\xb1N\x05\x00vH\x03\x00v\x98\xfe\x16F\x01\x01\x88\xfe\xa5\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd5\x8c\xfe\x16G\x01\x01\xc1Y\xf41<\xe9\x94p7[7\x05<\xf9\x91\xb7=\x00\x00\x00\x00\xa5\x03\x17\xca\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5\xfe\x1aI\x01\x01\x1b\x9a\xf7\xd3\x0c\x00\x00\x00\x00\x02\x004\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\x03\xc8\xfe\x16J\x01\x01t\xb2H\x03\x00\t\x00?\x00.\xfc\x00\x00\xfe\xff\xfe\xff\x07\x01\xa0\xff2\x02\xa7$\xfe\x16K\x01\x01\x81\xb2H\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff,\x03\x88\x00n\x02v`\xfe\x0eL\x01\x01\x1d\xb2H\x03\x00\xd5\xa2iD\x14\xae\xc7<%\x10\x08H\xfe\x0eM\x01\x01\x89\xb2H\x03\x00\t\xe7iD\xe1z\xad>\xf5\x14\xce\xcc\xfe\x1fN\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00&?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd7\x1e\xfe\x06O\x01\x01}\xc5\x14\x00\x00\x03\x00\xc4n\xfe\x04P\x01\x01\x98\x00\x00\xa0\x8a*\xe5\xfe\x02Q\x01\x01*\x00\x00\x86\x1c\xfe\x1eR\x01\x01\x18pQ\xd2\x0c\x00\x00\x00\x00\xfe\xa5\x02\x18\xdf\xe7\xb8\xfdfb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2}\xfe\x1aS\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00!\xd9\xfe\x08T\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00d~\xfe\x15U\x01\x01$7\xfa\xd3\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x19\xfe\x16V\x01\x01#\xb2H\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf7\t"b'\xfe\x14W\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\n\xd7#\xbc\x0b\x00\x00\x00\xee\xd3'b'\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae\xfe\x1cY\x01\x01!\x0fI\x03\x00\xfe\xa5\x02\x18\xde\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa4\x04\xbdN\xfe\x1cZ\x01\x01\x1eRI\x03\x00\xfc\xec|\xbdpc\x13\xba\xe6XT>pR\x1f:\xdad6\xba\xe1\x15\xec\xb8(\x9c\xfe\x18[\x01\x01\xb2\xceA\x82\xbd\xc26\x13\xbb\xc3uP>f\xb6)D\xfe\xa5\x02\x18\xde\xe7\xb8\xfd\x9c\x06\xfe\x1c\\\x01\x01\xa3\xacZZ\xb8\xc7{\xe9\xb8\t\x0e\xb6\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x92\xb2\xf8:\xe7J\xd5;n\xd4\xfe\x03]\x01\x01\xa5\xc5\x14\x00s\xbf\xfe\x0c^\x01\x01\x02X\xab>w\xb1N\x05\x00fI\x03\x00\xf9\xab\xfe\x16_\x01\x01\x88\xfe\xa5\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00c\xc3\xfe\x16`\x01\x01\xc1\xa3\xe94<\x10\xd5o7\xec>\x0c\xf6\x14:n\xfe\x1fg\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc6\t\xfe\x06h\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8,\xfe\x04i\x01\x01\x98\x00\x00\xa0\x8a\xb0\xdf\xfe\x02j\x01\x01*\x00\x00N\xbc\xfe\x1ek\x01\x01\x18\x98b\xd5\x0c\x00\x00\x00\x00\xfe\xa5\x02\x18\xde\xe7\xb8\xfdfb\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\'\xf2\xfe\x1al\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdd\xdf\xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9\xfe\x15n\x01\x01$x\xa8\xd7\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00F5\xfe\x16o\x01\x01#\xa3I\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00.0'b'\xfe\x14p\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7#\xbc\x0b\x00\x00\x00he\xfe\x1cq\x01\x01!\xd7I\x03\x00\xff\xa5\x02\x18\xdd\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x02\x00\xff\xff\xa3\x04\x9c;\xfe\x03r\x01\x01Ms\x00\x00\xd6>\xfe\x1cs\x01\x01\x1eCJ\x03\x00\xe2\xbf|\xbd\xc0!\x14\xbaRUT>}\x07-:X\xd0=8\xe8x\xcc\xb9\x15*\xfe\x18t\x01\x01\xb2B,\x82\xbdC\xf6\x15\xbb\xe1|P>\xd7\xb3)D\xff\xa5\x02\x18\xdd\xe7\xb8\xfd\xd8\xff\xfe\x12u\x01\x01\xfcOJ\x03\x004\x00\x01\x00ARMMASK\x00Wr.\xa3'b'\xfe\tv\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03q\x16\xfe\x1cw\x01\x01\xa3\x16\xa8c\xb8\x8d\x0c\xe2\xb8\r\xc5\xb3\xb8\x00\x00\x00\x00\x00\x00\x00\x00I\x8f\xf7:\r\xac\xdd;U\x0e\xfe\x03x\x01\x01\xa5\xc5\x14\x00\xe2\x9e\xfe\x0cy\x01\x01\x02\xc0XBw\xb1N\x05\x00XJ\x03\x00\xbb\x17\xfe\x16z\x01\x01\x88\xff\xa5\x02\x18\xdd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb3\xfd\xfe\x12{\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xc4\x92\xfe\x16|\x01\x01\xc18@4<\xcd\xabm7t\xd0\x04:\x94L\xb8=\x00\x00\x00\x00\xa5\x03-\xb6\xfe\x1a}\x01\x01\x1b\xc2R\xdb\x0c\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01I\xf1\xfe\x16~\x01\x01t\x94J\x03\x00\t\x003\x00(\xfc\x01\x00\x00\x00\xff\xff\x07\x01\xa0\xff3\x02yy\xfe\x16\x7f\x01\x01\x81\x94J\x03\x00\x04\x00@\x00\x1e\xfc\xfe\xff\x01\x00\xfd\xff\'\x03\x87\x00r\x02n,\xfe\x0e\x80\x01\x01\x1d\x94J\x03\x00\xd5\xa3iD\n\xd7#=%\x10\\B\xfe\x0e\x81\x01\x01\x89\x94J\x03\x00\x95\xe6iDG\xe1\xa9>\xf6\x14\xfc\x1b\xfe\x1f\x82\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x89}\xfe\x06\x83\x01\x01}\xc2\x14\x00\x00\x03\x00=\x14\xfe\x04\x84\x01\x01\x98\x00\x00\xa0\x8a\xef\x07\xfe\x02\x85\x01\x01*\x00\x00"\x87\xfe\x1e\x86\x01\x01\x18\xd8o\xd8\x0c\x00\x00\x00\x00\x00\xa6\x02\x18\xdc\xe7\xb8\xfdpb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xab\x07\xfe\x1a\x87\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0f\xbc\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba\xfe\x15\x89\x01\x01$=U\xdb\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xed\xfe\x16\x8a\x01\x01#\x94J\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x82U\xfe\x03\x8b\x01\x01Ms\x00\x00N\xd1'b'\xfe\t\xbb\n\x00m\x01\x00\x00\x00\x00\xd2\x00\x00\x00\xc0\x10\xfe\x14\x8c\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x006\x98\xfe\x1c\x8d\x01\x01!\xa0J\x03\x00\x00\xa6\x02\x18\xdc\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa3\x04\xdd\xe8'b'\xfe\x03\x8e\x01\x01Ms\x00\x00/F\xfe\x1c\x8f\x01\x01\x1e4K\x03\x00\x97\xcd|\xbd\xa0$\x07\xbaxNT>$\xc6\xa6\xb9.^[\xbad\x17h9\xad)\xfe\x18\x90\x01\x01\xb2\x0b\x19\x82\xbd$D\x14\xbb yP>f\xb6)D\x00\xa6\x02\x18\xdc\xe7\xb8\xfd\xc0@\xfe\x1c\x91\x01\x01\xa3\xf0\xebl\xb8\x9d\xa9\xda\xb8\x15m\xb1\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xba\xc3\xe8:\xfb\xcd\xe7;d\x8d\xfe\x03\x92\x01\x01\xa5\xc5\x14\x00\xd2\xa0\xfe\x0c\x93\x01\x01\x02X\xfeEw\xb1N\x05\x00HK\x03\x00)\xf9\xfe\x16\x94\x01\x01\x88\x00\xa6\x02\x18\xdc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15\xa9\xfe\x16\x95\x01\x01\xc1\x03\x1f.<\x1bTm7\x1dT\x02\xc1t4<\xc3\xfd4:\x01\xf6\x1e?\x00\x1f\xe1z'b'\xfe\x1a\x97\x01\x01\x1b\xdf\xff\xde\x0c\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffn\x01U\x7f\xfe\x16\x98\x01\x01t\x85K\x03\x00\x01\x00:\x00$\xfc\x01\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\xaa1\xfe\x16\x99\x01\x01\x81\x85K\x03\x00\x02\x00@\x00\x1f\xfc\xfe\xff\x01\x00\xfd\xff*\x03\x8e\x00v\x02\xf0^\xfe\x0e\x9a\x01\x01\x1d\x85K\x03\x00\x92\xa4iDG\xe1R=&\x10XP\xfe\x0e\x9b\x01\x01\x89\x85K\x03\x00\x94\xe6iD\n\xd7\xa9>\xf7\x14p^\xfe\x1f\x9c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd2\xe4\xfe\x06\x9d\x01\x01}\xc5\x14\x00\x00\x03\x00\xbd\xeb\xfe\x04\x9e\x01\x01\x98\x00\x00\xa0\x8aK\x1c\xfe\x02\x9f\x01\x01*\x00\x00\xbc\xdb\xfe\x1e\xa0\x01\x01\x18(\x92\xde\x0c\x00\x00\x00\x00\x00\xa6\x02\x18\xdb\xe7\xb8\xfdpb\n\x00F\x00\xff\xff\x00\x00|J\x03\x0crP\xfe\x1a\xa1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8dU\xfe\x08\xa2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\t)\xfe\x15\xa3\x01\x01$\xe0\x02\xdf\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xd7\xfe\x16\xa4\x01\x01#\x85K\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00g\xd7\xfe\x03\xa5\x01\x01Ms\x00\x00\xb3W\xfe\x14\xa6\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00x<'b'\xfe\x1c\xa7\x01\x01!iK\x03\x00\x00\xa6\x02\x18\xdb\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\xabv\xfe\x03\xa8\x01\x01Ms\x00\x00n\xed\xfe\x1c\xa9\x01\x01\x1e%L\x03\x00R\x8b|\xbdH\xde.\xba\xcb_T>H\xf0\xa5\xb9^z\x81\xbaj\xf9\x867\xf4\xc3\xfe\x18\xaa\x01\x01\xb2X\x00\x82\xbdz\xe6\x1b\xbb\x93\x8fP>f\xb6)D\x00\xa6\x02\x18\xdb\xe7\xb8\xfdu\xda\xfe\x1c\xab\x01\x01\xa3\xb6\x1ev\xb8jZ\xd3\xb8\xb0\x0e\xaf\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe55\xdb:\xd9s\xdc;\x887\xfe\x03\xac\x01\x01\xa5\xc5\x14\x00W}\xfe\x0c\xad\x01\x01\x02\xd8\xa7Iw\xb1N\x05\x009L\x03\x00\x9a\xa0\xfe\x16\xae\x01\x01\x88\x01\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1e\xdd\xfe\x16\xaf\x01\x01\xc1j\xe94<\xcf\xfbl7\xfe\xb3\x05<\x91\x82\xb4=\x00\x00\x00\x00\xa5\x03\xebN'b'\xfe\x1a\xb0\x01\x01\x1b\x06\xac\xe2\x0c\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01&\x02\xfe\x16\xb1\x01\x01tuL\x03\x00\x06\x00:\x004\xfc\x01\x00\xfe\xff\x02\x00\x07\x01\x9f\xff3\x02\x03\xa8\xfe\x16\xb2\x01\x01\x81uL\x03\x00\x03\x00@\x00"\xfc\xfd\xff\x01\x00\xfd\xff-\x03\x8c\x00o\x02\xf5*\xfe\x0e\xb3\x01\x01\x1duL\x03\x00\xd7\xa3iD\xf6($=&\x10\xaf{\xfe\x0e\xb4\x01\x01\x89uL\x03\x00\x81\xe6iDp=\xa9>\xf7\x14X\xee\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95.\xfe\x06\xb6\x01\x01}\xc5\x14\x00\x00\x03\x00.K\xfe\x04\xb7\x01\x01\x98\x00\x00\xa0\x8aE\xd9\xfe\x02\xb8\x01\x01*\x00\x00\'\x7f\xfe\x1e\xb9\x01\x01\x18P\xa3\xe1\x0c\x00\x00\x00\x00\x01\xa6\x02\x18\xd9\xe7\xb8\xfd\x84b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x02\x04\xfe\x1a\xba\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8a8\xfe\x08\xbb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1c[\xfe\x15\xbc\x01\x01$a\xae\xe2\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xfa\xfe\x16\xbd\x01\x01#vL\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xbe\x0b\xfe\x03\xbe\x01\x01/\xff\x00\x00q\xd3\xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b'\xfe\x14\xc0\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa9\xbe\xfe\x1c\xc1\x01\x01!2L\x03\x00\x01\xa6\x02\x18\xd9\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa3\x04\x1a\xda'b"\xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18\xfe\x1c\xc3\x01\x01\x1e\x16M\x03\x00}\xba|\xbd\xc8\xd8&\xba\xb9RT>#\x1a!8mC\x0e\xba\x0e\x95\xe5\xb9y\xc3\xfe\x18\xc4\x01\x01\xb2\xd1\xfb\x81\xbd\xf7\xfb\x1a\xbb\xb7\x8cP>{\xa4)D\x02\xa6\x02\x18\xd9\xe7\xb8\xfd\t\x8b\xfe\x1c\xc5\x01\x01\xa3\x8eI\x7f\xb8n\x1d\xcc\xb8{\xad\xac\xb8\x00\x00\x00\x00\x00\x00\x00\x00W\x93\xcc:\xb5\x96\xe5;\xa4#\xfe\x03\xc6\x01\x01\xa5\xc5\x14\x00\x85\x88\xfe\x0c\xc7\x01\x01\x02(YMw\xb1N\x05\x00*M\x03\x00\xb2Y\xfe\x16\xc8\x01\x01\x88\x02\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0b\x80\xfe\x16\xc9\x01\x01\xc1J\x17;<\x96\xfbl7*v\xd5;\x04\xbb\xa8=\x00\x00\x00\x00\xa5\x03 \x00\xfe\x1a\xca\x01\x01\x1bMW\xe6\x0c\x00\x00\x00\x00\x02\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xcf\x0e\xfe\x16\xcb\x01\x01tfM\x03\x00\n\x00:\x00,\xfc\x01\x00\x00\x00\x00\x00\x08\x01\xa0\xff3\x02\xd0\xc2\xfe\x16\xcc\x01\x01\x81fM\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x89\x00r\x02c-\xfe\x0e\xcd\x01\x01\x1dfM\x03\x00\xb0\xa4iD\\\x8fZ='\x10\xa9?\xfe\x0e\xce\x01\x01\x89fM\x03\x00\xec\xe6iD\x99\x99\xac>\xf9\x14\xe8_\xfe*\xcf\x01\x01\x96s\xe7f\xbc\x11m\x01\x00'\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x000_\xfe\x1f\xd0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T+i\xfe\x06\xd1\x01\x01}\xc5\x14\x00\x00\x03\x00G\xc4\xfe\x04\xd2\x01\x01\x98\x00\x00\xa0\x8a\x07\xba\xfe\x02\xd3\x01\x01*\x00\x00 \xad\xfe\x1e\xd4\x01\x01\x18\x90\xb0\xe4\x0c\x00\x00\x00\x00\x02\xa6\x02\x18\xd9\xe7\xb8\xfdzb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x94\x14\xfe\x1a\xd5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xca\xc3\xfe\x08\xd6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xb3\xfe\x15\xd7\x01\x01$\xd9Y\xe6\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xeb\xfe\x16\xd8\x01\x01#fM\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00|G"b'\xfe\x03\xd9\x01\x01Ms\x00\x00\xa8\xe4\xfe\x14\xda\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x009\x15'b'\xfe\x1c\xdb\x01\x01!\xc3M\x03\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\x8c<\xfe\x1c\xdc\x01\x01\x1e\x07N\x03\x00\xf8q|\xbdp\xad$\xba\xa1rT>\xf0\x11\xcc:Ya\xf2\xb9\xa2\xaf:9\xc5\xf2\xfe\x18\xdd\x01\x01\xb2\x1b\xe8\x81\xbd\x94\xa2\x1b\xbb\x19\xb0P>G\xb1)D\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\xd1G\xfe\x1c\xde\x01\x01\xa3\x13:\x84\xb8^\xf4\xc4\xb8\xacG\xaa\xb8\x00\x00\x00\x00\x00\x00\x00\x00?\xff\xcf:\x99\xf4\xe1;\xe1\xa3\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f\xfe\x0c\xe0\x01\x01\x02\xc0\xfePw\xb1N\x05\x00\x1bN\x03\x00\xfd>\xfe\x16\xe1\x01\x01\x88\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x02\x80\xfe\x16\xe2\x01\x01\xc1\xcd\xefA<\x91\x1bn7W\x92a;%\xa9\xb4=\x00\x00\x00\x00\xa5\x03*\xf6\xfe\x03\xe3\x01\x01Ms\x00\x00\xf3/\xfe\x12\xe4\x01\x01\xfc;N\x03\x004\x00\x01\x00ARMMASK\x00Wr\xde\xfc'b'\xfe\t\xe5\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03F\xc5\xfe\x1a\xe6\x01\x01\x1b_\x05\xea\x0c\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01!\x07\xfe\x16\xe7\x01\x01tWN\x03\x00\x02\x00=\x00$\xfc\x02\x00\xfe\xff\xfd\xff\x07\x01\xa0\xff4\x02"~\xfe\x16\xe8\x01\x01\x81WN\x03\x00\x02\x00A\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00k\x02U\x08\xfe\x0e\xe9\x01\x01\x1dWN\x03\x00\x05\xa3iD)\\\xdf<&\x10F2\xfe\x0e\xea\x01\x01\x89WN\x03\x00e\xe6iD)\\\xa8>\xf9\x14F\xcb\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb9g\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce\xfe\x04\xed\x01\x01\x98\x00\x00\xa0\x8a\x82$\xfe\x02\xee\x01\x01*\x00\x00%U\xfe\x1e\xef\x01\x01\x18\xb8\xc1\xe7\x0c\x00\x00\x00\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x84b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cK}\xfe\x1a\xf0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x05m\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e\xfe\x15\xf2\x01\x01$\xcc\x07\xea\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xc3\xfe\x16\xf3\x01\x01#XN\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00*\xf7'b'\xfe\x03\xf4\x01\x01Ms\x00\x00\x85\xe8\xfe\x14\xf5\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\r#\xfe\t\xbc\n\x00m\r\x00\x00\x00\x00\xd4\x00\x00\x00j\x82\xfe\x1c\xf6\x01\x01!\x8bN\x03\x00\x02\xa6\x02\x18\xd7\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa4\x04\x8b\xf0\xfe\x1c\xf7\x01\x01\x1e\xf7N\x03\x00\x16\xbc|\xbd\xa0\xb8;\xbaOfT>\xc2\x83\x1e:\x94\x86~\xba\x98`<:EY\xfe\x18\xf8\x01\x01\xb2\x92\xf1\x81\xbd\xbe\x93\x1d\xbb\xa0\xb4P>\x14\xae)D\x02\xa6\x02\x18\xd7\xe7\xb8\xfd$\xd4'b'\xfe\x1c\xf9\x01\x01\xa3\x06\xd2\x88\xb8\x00\xd5\xbd\xb8\x1b\xcf\xa7\xb8\x00\x00\x00\x00\x00\x00\x00\x00t\xe3\xce:\xe2\t\x01<\xa1\xee\xfe\x03\xfa\x01\x01\xa5\xc5\x14\x00o^\xfe\x0c\xfb\x01\x01\x02(\xacTw\xb1N\x05\x00\x0cO\x03\x00?=\xfe\x16\xfc\x01\x01\x88\x02\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcc\x1d\xfe\x16\xfd\x01\x01\xc1!\xbaG<\xaa\x19q7\x0b\x95\x82;\xa2)\xa8=\x00\x00\x00\x00\xa5\x03\xd0z\xfe\x03\xfe\x01\x01Ms\x00\x00V\xce\xfe\x1a\xff\x01\x01\x1b\xdb\xaf\xed\x0c\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\x9c\xfd\xfe\x16\x00\x01\x01tGO\x03\x00\n\x00=\x00#\xfc\x00\x00\x02\x00\xff\xff\x07\x01\xa0\xff2\x02\xf2\xf2\xfe\x16\x01\x01\x01\x81GO\x03\x00\x02\x00@\x00!\xfc\xfe\xff\x00\x00\xfc\xff&\x03\x87\x00q\x02\xfa\xd2\xfe\x0e\x02\x01\x01\x1dGO\x03\x00C\xa4iD)\\?=&\x10\x08\xda\xfe\x0e\x03\x01\x01\x89GO\x03\x00\x95\xe7iDG\xe1\xb1>\xf8\x14VL\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x00)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TZ\xef\xfe\x06\x05\x01\x01}\xc5\x14\x00\x00\x03\x00I\xb4\xfe\x04\x06\x01\x01\x98\x00\x00\xa0\x8a\xc2X\xfe\x02\x07\x01\x01*\x00\x00\x846\xfe\x1e\x08\x01\x01\x18\xf8\xce\xea\x0c\x00\x00\x00\x00\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x98b\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cc\x82\xfe\x1a\t\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00"\xbf\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw\xfe\x15\x0b\x01\x01$Z\xb2\xed\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00W\xc8\xfe\x16\x0c\x01\x01#HO\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00g\xf7'b'\xfe\x14\r\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xde\x87\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d\xfe\x1c\x0f\x01\x01!TO\x03\x00\x03\xa6\x02\x18\xd6\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x03\x00\x01\x00\xa4\x04\x927'b'\xfe\x1c\x10\x01\x01\x1e\xe7O\x03\x00\x853|\xbd\xf0j"\xba\xc2PT>\xc09C:\xaa\xbf\x9a\xba\x8dI5\xb90o\xfe\x18\x11\x01\x01\xb2\xa0\xb9\x81\xbd\x91[\x1a\xbb\xa0\xb2P>\n\xa7)D\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x01M\xfe\x1c\x12\x01\x01\xa3\xb4n\x8d\xb8*\xc5\xb6\xb8vN\xa5\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xe8\xc4:\x06\xfd\xcb;\rc\xfe\x03\x13\x01\x01\xa5\xc5\x14\x00\x8f\xea\xfe\x0c\x14\x01\x01\x02\xd8MXw\xb1N\x05\x00\xfbO\x03\x00g\xe8\xfe\x16\x15\x01\x01\x88\x03\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x000\x9b\xfe\x16\x16\x01\x01\xc1:\xf6M<\x9f\x92q7@\xcc\x97;Od\xa8=\x00\x00\x00\x00\xa5\x03\x82\xac\xfe\x16\x17\x01\x01\xe1\xb5\xc8\x16?P\xb4<>\x0e\x17j<\xcf\xc7\x8a<\x80\x9c\x1d?\x00\x1f_]\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\xfe\x1a\x19\x01\x01\x1b\x85Z\xf1\x0c\x00\x00\x00\x00\x04\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xae\xffl\x01W\xc7\xfe\x16\x1a\x01\x01t7P\x03\x00\t\x005\x00*\xfc\x01\x00\xff\xff\xff\xff\x07\x01\xa1\xff4\x02\x0b\x9a\xfe\x16\x1b\x01\x01\x817P\x03\x00\x05\x00>\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x8a\x00t\x02\x8b\xc3\xfe\x0e\x1c\x01\x01\x1d7P\x03\x00a\xa3iDR\xb8\x06=&\x10\xad\xaf\xfe\x0e\x1d\x01\x01\x897P\x03\x00b\xe5iD\xaeG\xa0>\xf9\x14R\xee\xfe\x1f\x1e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01)?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tz\x7f\xfe\x06\x1f\x01\x01}\xc5\x14\x00\x00\x03\x00\x84\xd2\xfe\x04 \x01\x01\x98\x00\x00\xa0\x8a\xe4\x0b\xfe\x02!\x01\x01*\x00\x00\xca\r\xfe\x1e"\x01\x01\x18`\xed\xf0\x0c\x00\x00\x00\x00\x04\xa6\x02\x18\xd6\xe7\xb8\xfd\xa2b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x03K\xfe\x1a#\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x85C\xfe\x08$\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00E\xf2\xfe\x15%\x01\x01$f]\xf1\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k\xda\xfe\x16&\x01\x01#8P\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x002-\xfe\x14\'\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\x90#'b'\xfe\x03(\x01\x01Ms\x00\x00\x8c&\xfe\x1c)\x01\x01!\x1cP\x03\x00\x04\xa6\x02\x18\xd6\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x03\x00\x01\x00\xa3\x04\xf7\x9e\xfe\x03*\x01\x01/\xff\x00\x005U\xfe\x1c+\x01\x01\x1e\xd7P\x03\x00\t\x14|\xbdHj \xba\x176T>@\x1a\xf5\xb8\x1a~\xc9\xb7\xf5m\x10\xb7F\x18\xfe\x18,\x01\x01\xb2\x9b\xa0\x81\xbd\x01\x96\x19\xbbh\xa0P>f\xb6)D\x04\xa6\x02\x18\xd6\xe7\xb8\xfd\xc2\xc5\xfe\x1c-\x01\x01\xa3\x11\r\x92\xb8I\xca\xaf\xb8\xe2\xce\xa2\xb8\x00\x00\x00\x00\x00\x00\x00\x00f\x9f\xc2:)\x87\xf5;qB\xfe\x03.\x01\x01\xa5\xc8\x14\x00U6\xfe\x0c/\x01\x01\x02X\xf7[w\xb1N\x05\x00\xebP\x03\x00\xdb$\xfe\x160\x01\x01\x88\x05\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00f\xbd\xfe\x161\x01\x01\xc1\x96CN<\xff\x9er7\x00\x1a\xe0;\xfc\xe8\xb7=\x00\x00\x00\x00\xa5\x03O\xe9'b"\xfe\x032\x01\x01Ms\x00\x00'[\xfe\x1a3\x01\x01\x1ba\x03\xf5\x0c\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffl\x01\xd6\xc6\xfe\x164\x01\x01t'Q\x03\x00\x03\x004\x00'\xfc\x00\x00\x00\x00\x00\x00\x08\x01\xa0\xff4\x02h\x8d\xfe\x165\x01\x01\x81'Q\x03\x00\x01\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff'\x03\x89\x00k\x02\xc4d\xfe\x0e6\x01\x01\x1d'Q\x03\x00G\xa2iD\xd7\xa3\x80<%\x10\xdd\x7f\xfe\x0e7\x01\x01\x89'Q\x03\x00p\xe5iDR\xb8\xa0>\xf9\x14G_\xfe\x1f8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00)?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd0\xca\xfe\x069\x01\x01}\xc8\x14\x00\x00\x03\x006\xeb\xfe\x04:\x01\x01\x98\x00\x00\xa0\x8a@\x10\xfe\x02;\x01\x01*\x00\x00TQ\xfe\x1e<\x01\x01\x18\xa0\xfa\xf3\x0c\x00\x00\x00\x00\x05\xa6\x02\x18\xd6\xe7\xb8\xfd\xacb\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cS\x1b\xfe\x1a=\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00U\xe7\xfe\x08>\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x8e\xfe\x15?\x01\x01$\xfe\x05\xf5\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x10\xfe\x16@\x01\x01#(Q\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00(\x97"b'\xfe\x14A\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xe2\xe2\x989E\x0e\x87\xb9$\x87\xf5\xb9\xf3u\xfe\x18E\x01\x01\xb2\xbd\x98\x81\xbd\x97P\x1a\xbb\xab\xc8P>G\xb1)D\x06\xa6\x02\x18\xd6\xe7\xb8\xfdyR\xfe\x1cF\x01\x01\xa3\xe3\xb4\x96\xb8\x14\xdc\xa8\xb8\xbb=\xa0\xb8\x00\x00\x00\x00\x00\x00\x00\x00:\xda\xbe:\xae\xc2\xd5;8k\xfe\x03G\x01\x01\xa5\xdb\x14\x00;\xaf\xfe\x0cH\x01\x01\x02\xc0\xa4_w\xb1N\x05\x00\xdcQ\x03\x00\x1f\xb4\xfe\x16I\x01\x01\x88\x06\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00-\xd9\xfe\x16J\x01\x01\xc1/\x1dY<\xfc>t7\xf0\x8f\xdd:F-\xa9=\x00\x00\x00\x00\xa5\x03\xa5d\xfe\x1aK\x01\x01\x1bM\xaf\xf8\x0c\x00\x00\x00\x00\x02\x003\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb1\xffl\x01\xfcb\xfe\x16L\x01\x01t\x18R\x03\x00\x01\x00/\x00*\xfc\xff\xff\x00\x00\x01\x00\x07\x01\xa0\xff2\x02\x80h\xfe\x16M\x01\x01\x81\x18R\x03\x00\x03\x00?\x00\x1f\xfc\xfe\xff\x01\x00\xfd\xff,\x03\x90\x00r\x02\xe0#\xfe\x0eN\x01\x01\x1d\x18R\x03\x00L\xa3iD\x99\x99\x01=%\x10$(\xfe\x0eO\x01\x01\x89\x18R\x03\x00\n\xe7iD\x1e\x85\xad>\xfb\x14\x80\x08\xfe\x1fP\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f)?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa18\xfe\x06Q\x01\x01}\xc8\x14\x00\x00\x03\x00\x13x\xfe\x04R\x01\x01\x98\x00\x00\xa0\x8a\xd0~\xfe\x02S\x01\x01*\x00\x00=+\xfe\x1eT\x01\x01\x18\xe0\x07\xf7\x0c\x00\x00\x00\x00\x06\xa6\x02\x18\xd6\xe7\xb8\xfd\xb6b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa0\xe9\xfe\x1aU\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbbW\xfe\x08V\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00>u\xfe\x15W\x01\x01$\xe9\xb1\xf8\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x1c\xfe\x16X\x01\x01#\x19R\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x99\x0f\xfe\x03Y\x01\x01Ms\x00\x00J/\xfe\x12Z\x01\x01\xfc$R\x03\x004\x00\x01\x00ARMMASK\x00Wrn\xd6'b'\xfe\t[\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xfe\xd1\xfe\x14\\\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xe1\xdf'b'\xfe\t\xbd\n\x00m\x11\x00\x00\x00\x00\xd3\x00\x00\x00\xbb\xc7\xfe\x1c]\x01\x01!uR\x03\x00\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\x829\xfe\x03^\x01\x01Ms\x00\x00D\xb3\xfe\x1c_\x01\x01\x1e\xb9R\x03\x00V\x89|\xbdx\xba\x1d\xba\\\\T>F\x99\xad::\x01\xcc9e\x7fK\xb9"i\xfe\x18`\x01\x01\xb2\xba\xb3\x81\xbdYe\x18\xbb)\xcbP>\xd7\xb3)D\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\xe0J\xfe\x1ca\x01\x01\xa3\x1fV\x9b\xb8\x06\xfa\xa1\xb8+\xca\x9d\xb8\x00\x00\x00\x00\x00\x00\x00\x00T\xf4\xbc:\xa9]\xbd;8R\xfe\x03b\x01\x01\xa5\xc5\x14\x00I\xe3\xfe\x0cc\x01\x01\x02@Ncw\xb1N\x05\x00\xcdR\x03\x00\xa8\xe2\xfe\x16d\x01\x01\x88\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00U\xd8\xfe\x12e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00U\x0c\xfe\x16f\x01\x01\xc1\x08H\\<\x16\xf8t7\x82\xe0i;il\xae=\x00\x00\x00\x00\xa5\x03@\xf8'b"\xfe\x1ag\x01\x01\x1bc_\xfc\x0c\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01\x8e\xca\xfe\x16h\x01\x01t\nS\x03\x00\x04\x003\x002\xfc\xfd\xff\xfe\xff\x02\x00\x07\x01\xa1\xff3\x02\xde\x82\xfe\x16i\x01\x01\x81\nS\x03\x00\x03\x00@\x00 \xfc\xfd\xff\x01\x00\xfe\xff*\x03\x87\x00q\x02\x02z\xfe\x0ej\x01\x01\x1d\nS\x03\x00\xee\xa3iD\x85\xeb)='\x10\xd4\\\xfe\x0ek\x01\x01\x89\nS\x03\x00\xa6\xe5iDff\xa2>\xfc\x14\xd9\x8c\xfe\x1fl\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9dT\xfe\x06m\x01\x01}\xc5\x14\x00\x00\x03\x00l'\xfe\x04n\x01\x01\x98\x00\x00\xa0\x8aR6\xfe\x02o\x01\x01*\x00\x00\xedL\xfe\x1ep\x01\x01\x18\x08\x19\xfa\x0c\x00\x00\x00\x00\x07\xa6\x02\x18\xd6\xe7\xb8\xfd\xc0b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xc95\xfe\x1aq\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00@<\xfe\x08r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00*\xd6\xfe\x15s\x01\x01$/b\xfc\x0c\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7%\xfe\x16t\x01\x01#\nS\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o2\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2"b'\xfe\x14v\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\n\xd7\xa3<\x0b\x00\x00\x00(l\xfe\x1cw\x01\x01!>S\x03\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04B\x19\xfe\x03x\x01\x01Ms\x00\x00\x05\x18\xfe\x1cy\x01\x01\x1e\xaaS\x03\x00T\x8d|\xbdXvH\xba\xe0\x87T>\xfd\xa3,:Nb\xaf\xb9P\x00\x0c\xb9\x93\xd9\xfe\x18z\x01\x01\xb2V\xa0\x81\xbd\xb8\x8d\x1d\xbb\x84\xefP>\n\xb7)D\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xe7@'b"\xfe\x1c{\x01\x01\xa3c\xf8\x9f\xb8O'\x9b\xb8\x01Y\x9b\xb8\x00\x00\x00\x00\x00\x00\x00\x00J\xc2\xb9:\xdf\xf5\xee;Ut\xfe\x03|\x01\x01\xa5\xc5\x14\x00<\x88\xfe\x0c}\x01\x01\x02\xc0\xf7fw\xb1N\x05\x00\xbeS\x03\x00\xe0\xcc\xfe\x16~\x01\x01\x88\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x0029\xfe\x16\x7f\x01\x01\xc1\x9eaY<-\xafs7\xb1\x8b\xd1;\xeb\xa6\xa6=\x00\x00\x00\x00\xa5\x03\xd7\xa7\xfe\x1a\x80\x01\x01\x1bV\t\x00\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xfb\x99\xfe\x16\x81\x01\x01t\xfaS\x03\x00\n\x00/\x001\xfc\x00\x00\x00\x00\xfb\xff\x07\x01\xa0\xff3\x02\x8bl\xfe\x16\x82\x01\x01\x81\xfaS\x03\x00\x01\x00?\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00j\x02:\xf3\xfe\x0e\x83\x01\x01\x1d\xfaS\x03\x00K\xa4iD\xaeGA=(\x10\xf4l\xfe\x0e\x84\x01\x01\x89\xfaS\x03\x00O\xe6iD\x14\xae\xa7>\xfd\x14-9\xfe\x1f\x85\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00*?9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x98h\xfe\x06\x86\x01\x01}\xc5\x14\x00\x00\x03\x00\xe1\xd8\xfe\x04\x87\x01\x01\x98\x00\x00\xa0\x8a\xe8\xd1\xfe\x02\x88\x01\x01*\x00\x00m\xa9\xfe\x1e\x89\x01\x01\x180*\xfd\x0c\x00\x00\x00\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xdeb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf3\xa5\xfe\x1a\x8a\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1el\xfe\x08\x8b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00l\xb4\xfe\x15\x8c\x01\x01$\xeb\x0b\x00\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\xea\xfe\x16\x8d\x01\x01#\xfaS\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\nv\xfe\x03\x8e\x01\x01Ms\x00\x00/F"b'\xfe\x14\x8f\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xd1\xf6\xfe\x1c\x90\x01\x01!\x06T\x03\x00\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04T\x81'b'\xfe\x03\x91\x01\x01Ms\x00\x00\xe5\xac\xfe\x1c\x92\x01\x01\x1e\x9aT\x03\x00\xbd\xb4|\xbd\xd8\xf58\xba\x83\x85T>\xc4S\x1f:\x97\x99\x89\xbaP\xcdo9\xc0"\xfe\x18\x93\x01\x01\xb2\x8f\xa2\x81\xbdP~\x1b\xbb/\xf0P>\xe1\xaa)D\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\xda\x0e\xfe\x1c\x94\x01\x01\xa3\xf8\xa3\xa4\xb8D^\x94\xb8\xed\xd2\x98\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x12J\xb2:\xe7\r\xed;\xdb\xd0\xfe\x03\x95\x01\x01\xa5\xc5\x14\x00\xdc<\xfe\x0c\x96\x01\x01\x02@\xa1jw\xb1N\x05\x00\xaeT\x03\x00\x8e\x8b\xfe\x16\x97\x01\x01\x88\x08\xa6\x02\x18\xd6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00N\xa5\xfe\x16\x98\x01\x01\xc1\x804L<^\x8bq7E\xb2\x8a;\xb9R\xb0=\x00\x00\x00\x00\xa5\x03\x85\x87\xfe\x16\x99\x01\x01\xe1\xa2E\x16?{\xf20>\xbc\x9d[<\\T.\xfd\x14\xca\xab\xfe\x1f\xa0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95\xf3\xfe\x06\xa1\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\xb4\xfe\x04\xa2\x01\x01\x98\x00\x00\xa0\x8a\xc9T\xfe\x02\xa3\x01\x01*\x00\x00l\xbc\xfe\x1e\xa4\x01\x01\x18\xb0D\x03\r\x00\x00\x00\x00\t\xa6\x02\x18\xd6\xe7\xb8\xfd\xe8b\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb5B\xfe\x1a\xa5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00nY\xfe\x08\xa6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbd?\xfe\x15\xa7\x01\x01$\x8e\xb8\x03\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xf3\xfe\x16\xa8\x01\x01#\xebT\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa8o\xfe\x03\xa9\x01\x01Ms\x00\x00\xd1l\xfe\x14\xaa\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00X\xed'b'\xfe\x1c\xab\x01\x01!\xceT\x03\x00\t\xa6\x02\x18\xd6\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04\x0b\xfa\xfe\x1c\xac\x01\x01\x1e\x8bU\x03\x00\x18\xc1|\xbd\xe0eJ\xba\x86wT>\xe8r\x91\xb9\xb7\x19l9q\x99\x1f9\xf9\xd3\xfe\x18\xad\x01\x01\xb2\x80\xa1\x81\xbd\xb2\xc6\x1e\xbb\x1e\xf3P>\xd7\xb3)D\t\xa6\x02\x18\xd7\xe7\xb8\xfd\x14\xab\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0\xfe\x1c\xaf\x01\x01\xa3\x05K\xa9\xb8d\x9d\x8d\xb8\xdaL\x96\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0cO\xa9:\xc8\xc0\xe6;\xa72\xfe\x03\xb0\x01\x01\xa5\xc8\x14\x00\xc2\x96\xfe\x0c\xb1\x01\x01\x02\xc0Jnw\xb1N\x05\x00\x9fU\x03\x00\xaa\xee\xfe\x16\xb2\x01\x01\x88\t\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1d\xb5\xfe\x16\xb3\x01\x01\xc1t\xfcF<\xf5\xd5n7r/;;\xd6\xd2\xaa=\x00\x00\x00\x00\xa5\x03\xaf\x1d'b'\xfe\x1a\xb4\x01\x01\x1b\x12`\x07\r\x00\x00\x00\x00\x02\x004\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffn\x01\xff\x14z\x8e\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T#k\xfe\x06\xba\x01\x01}\xc5\x14\x00\x00\x03\x00\xd1\xa9\xfe\x04\xbb\x01\x01\x98\x00\x00\xa0\x8aj\x99\xfe\x02\xbc\x01\x01*\x00\x00Q\x10\xfe\x1e\xbd\x01\x01\x18\xb8\x07\x06\r\x00\x00\x00\x00\t\xa6\x02\x18\xd7\xe7\xb8\xfd\xf2b\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cl\xac\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M\xfe\x15\xc0\x01\x01$\xd3b\x07\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x99\xfe\x16\xc1\x01\x01#\xdbU\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18P\xfe\x12\xc2\x01\x01\xfc\x0fV\x03\x004\x00\x01\x00ARMMASK\x00Wr\xa7\xb0\xfe\x03\xc3\x01\x01Ms\x00\x00\x03\x99\xfe\t\xc4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x13\x1e'b'\xfe\x14\xc5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00^\x8d\xfe\x1c\xc6\x01\x01!\x83U\x03\x00\t\xa6\x02\x18\xd7\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xef\x95'b'\xfe\t\xbe\n\x00m\x01\x00\x00\x00\x00\xd3\x00\x00\x00\xd7\x96\xfe\x1c\xc7\x01\x01\x1e{V\x03\x00b\xa4|\xbd(\x11K\xba\xb8jT>gI\xa2:\xea\xf1-\xba\xff\x82\x03\xba5\xea\xfe\x18\xc8\x01\x01\xb2\x92\x85\x81\xbd-\xa4 \xbb\xae\xecP>R\xa8)D\n\xa6\x02\x18\xd8\xe7\xb8\xfd\xef\xa8\xfe\x1c\xc9\x01\x01\xa3?\xed\xad\xb86\xdf\x86\xb8\x17\xca\x93\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xa6\xa0:au\xd4;\xd4b\xfe\x03\xca\x01\x01\xa5\xc5\x14\x00\xe7\xb3\xfe\x0c\xcb\x01\x01\x02@\xf4qw\xb1N\x05\x00\x8fV\x03\x00\xc4\xd3\xfe\x16\xcc\x01\x01\x88\n\xa6\x02\x18\xd8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7f<\xfe\x16\xcd\x01\x01\xc12\tC<;\xa2j7(\x84\xda;\xf1\xdc\xa6=\x00\x00\x00\x00\xa5\x03]<\xfe\x03\xce\x01\x01Ms\x00\x00\xde#\xfe\x1a\xcf\x01\x01\x1b\xec\x08\x0b\r\x00\x00\x00\x00\x05\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01x\x19\xfe\x16\xd0\x01\x01t\xcaV\x03\x00\x01\x003\x00+\xfc\x02\x00\xfd\xff\x00\x00\x07\x01\xa0\xff2\x02\xa3\xa6\xfe\x16\xd1\x01\x01\x81\xcbV\x03\x00\x01\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfe\xff)\x03\x87\x00m\x02\x04\xdc\xfe\x0e\xd2\x01\x01\x1d\xcbV\x03\x00B\xa4iD=\n?=(\x10\x01`\xfe\x0e\xd3\x01\x01\x89\xcbV\x03\x00[\xe7iD=\n\xb0>\xff\x14^\xf7\xfe\x1f\xd4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8d\xc5\xfe\x06\xd5\x01\x01}\xc5\x14\x00\x00\x03\x00\x12\x9a\xfe\x04\xd6\x01\x01\x98\x00\x00\xa0\x8a\xe2\x85\xfe\x02\xd7\x01\x01*\x00\x00V\xc2\xfe\x1e\xd8\x01\x01\x18\x18c\t\r\x00\x00\x00\x00\n\xa6\x02\x18\xd8\xe7\xb8\xfd\xfcb\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x0b\xd9\xfe\x1a\xd9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xef\xd6\xfe\x08\xda\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00@\x88\xfe\x15\xdb\x01\x01$\t\x0c\x0b\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x03\xfe\x16\xdc\x01\x01#\xcbV\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x008\xe2'b'\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2\xfe\x14\xde\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\nV'b'\xfe\x1c\xdf\x01\x01!\'W\x03\x00\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xc6v\xfe\x1c\xe0\x01\x01\x1ekW\x03\x00\x1f\x9b|\xbd@XV\xba\\YT>T\xb1o7\xd8\x93{\xba\x90\xeb\xe79\xe1\x98\xfe\x18\xe1\x01\x01\xb2\x02\x86\x81\xbd\xdf\xa4"\xbb\xf5\x04Q>\n\xa7)D\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\xd8w\xfe\x1c\xe2\x01\x01\xa3\xd5\x8c\xb2\xb8\xa3-\x80\xb8.C\x91\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xba\x93:\xd87\xd9;d\xc9\xfe\x03\xe3\x01\x01\xa5\xc5\x14\x00\x14\xa9\xfe\x0c\xe4\x01\x01\x02\xc0\x9duw\xb1N\x05\x00\x7fW\x03\x00\xd0\xda\xfe\x16\xe5\x01\x01\x88\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7f\xef\xfe\x16\xe6\x01\x01\xc1\xef\x10I<\xaa\x00g7"\x88\xf7;\xc7\x05\xac=\x00\x00\x00\x00\xa5\x03\x8b\xd1\xfe\x03\xe7\x01\x01Ms\x00\x00-9'b'\xfe\x1a\xe8\x01\x01\x1b\xf9\xb4\x0e\r\x00\x00\x00\x00\x03\x003\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\xb5\x90\xfe\x16\xe9\x01\x01t\xbbW\x03\x00\t\x007\x00(\xfc\x01\x00\x01\x00\x00\x00\x06\x01\xa0\xff3\x02 \xa0\xfe\x16\xea\x01\x01\x81\xbbW\x03\x00\x01\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff,\x03\x8e\x00v\x029\x88\xfe\x0e\xeb\x01\x01\x1d\xbbW\x03\x00\x06\xa4iD\x00\x000=)\x10A\xb5\xfe\x0e\xec\x01\x01\x89\xbbW\x03\x00O\xe7iD\x14\xae\xaf>\x00\x15\xb3\xbf\xfe*\xed\x01\x01\x96s\xe7f\xbc\x10m\x01\x00)\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x1e\x88\xfe\x1f\xee\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tc\x10\xfe\x06\xef\x01\x01}\xc8\x14\x00\x00\x03\x00\x1a0\xfe\x04\xf0\x01\x01\x98\x00\x00\xa0\x8a\xc4\xd6\xfe\x02\xf1\x01\x01*\x00\x00\x18\xf9\xfe\x1e\xf2\x01\x01\x18Xp\x0c\r\x00\x00\x00\x00\x0b\xa6\x02\x18\xd9\xe7\xb8\xfd\x06c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xc7^\xfe\x1a\xf3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00H*\xfe\x08\xf4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00f\r\xfe\x15\xf5\x01\x01$\xfd\xb7\x0e\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xed\xfe\x16\xf6\x01\x01#\xbcW\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1b\xd5'b'\xfe\x14\xf7\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00v\x8a\xfe\x03\xf8\x01\x01Ms\x00\x00\xe7\xd3\xfe\x1c\xf9\x01\x01!\xefW\x03\x00\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04.\x98\xfe\x1c\xfa\x01\x01\x1e[X\x03\x00m\x03}\xbd\xb0\xb8`\xba4rT>Q\x12$:=r\x94\xb9\xde!\x8b\xba"\xfa\xfe\x18\xfb\x01\x01\xb2\xba\xa4\x81\xbdQH!\xbb\xd60Q>\x14\xae)D\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\x8f\xc0'b'\xfe\x1c\xfc\x01\x01\xa3\x0c)\xb7\xb8\x95\ns\xb8\xbc\xb6\x8e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x06\x8e:\xc7\xdc\xdc;\xe3T\xfe\x03\xfd\x01\x01\xa5\xc5\x14\x00a\xc2\xfe\x0c\xfe\x01\x01\x02@Gyw\xb1N\x05\x00pX\x03\x00 j\xfe\x16\xff\x01\x01\x88\x0c\xa6\x02\x18\xda\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xde\xdd\xfe\x16\x00\x01\x01\xc1\xaa\x8fI<\xc7\x16c7)\xff\xd4;\x84/\xb0=\x00\x00\x00\x00\xa5\x03\x92\xf7\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<\xfe\x1a\x02\x01\x01\x1b\x9f`\x12\r\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01/J\xfe\x16\x03\x01\x01t\xacX\x03\x00\x0f\x007\x00-\xfc\x02\x00\x01\x00\x00\x00\x07\x01\xa0\xff3\x02\xf9\x15\xfe\x16\x04\x01\x01\x81\xacX\x03\x00\x00\x00A\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff-\x03\x88\x00u\x02\xda\xfa\xfe\x0e\x05\x01\x01\x1d\xacX\x03\x00C\xa4iD)\\?=)\x10A\xb6\xfe\x0e\x06\x01\x01\x89\xacX\x03\x00\xb9\xe6iD\x00\x00\xab>\x01\x155\x1f\xfe\x1f\x07\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa29\xfe\x06\x08\x01\x01}\xc8\x14\x00\x00\x03\x00h-\xfe\x04\t\x01\x01\x98\x00\x00\xa0\x8a\xea\xce\xfe\x02\n\x01\x01*\x00\x00\xcb\x18\xfe\x1e\x0b\x01\x01\x18\xa0@\x12\r\x00\x00\x00\x00\r\xa6\x02\x18\xdb\xe7\xb8\xfd$c\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cV\xe1\xfe\x1a\x0c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf5v\xfe\x08\r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00 o\xfe\x15\x0e\x01\x01$?c\x12\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1bn\xfe\x16\x0f\x01\x01#\xacX\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb7\xbd'b'\xfe\x14\x10\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00\n\xe4\xfe\x03\x11\x01\x01/\xff\x00\x00\xd1\x1f\xfe\x03\x12\x01\x01Ms\x00\x00\xd7\xed\xfe\x1c\x13\x01\x01!\xa4X\x03\x00\r\xa6\x02\x18\xdb\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa5\x04L\xf3'b"\xfe\x1c\x14\x01\x01\x1eLY\x03\x00\x0f\xa7|\xbd\x88Lg\xbav\x7fT>'+\x84\xb9\xa5\x18\xcb\xba\xa9\xcb\x858\xf4\x1e\xfe\x18\x15\x01\x01\xb2@r\x81\xbd\xa6]%\xbb\xb5TQ>=\xaa)D\r\xa6\x02\x18\xdb\xe7\xb8\xfdM\xb7\xfe\x1c\x16\x01\x01\xa3\xd5\xc1\xbb\xb8T\xc2e\xb8\x11,\x8c\xb8\x00\x00\x00\x00\x00\x00\x00\x00*L\xa0:\x92\xfb\xbf;U\xf7\xfe\x03\x17\x01\x01\xa5\xbb\x14\x00V\x08\xfe\x0c\x18\x01\x01\x02\xd8\xec|w\xb1N\x05\x00`Y\x03\x00\x1be\xfe\x16\x19\x01\x01\x88\r\xa6\x02\x18\xdb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa9n\xfe\x16\x1a\x01\x01\xc1\xd6AE<+\xf3`7\x13\xda\x9f;u\xb5\xb0=\x00\x00\x00\x00\xa5\x03\x83l\xfe\x16\x1b\x01\x01\xe1\x19\x04\x16?\xcc\xccL>+ne<\x8fyN<2\xb3\x19?\x00\x1f\\\xd7\xfe\x03\x1c\x01\x01Ms\x00\x00\xda\xdd"b'\xfe\x1a\x1d\x01\x01\x1b\xdf\r\x16\r\x00\x00\x00\x00\x03\x005\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffn\x01\xed\xaf\xfe\x16\x1e\x01\x01t\x9dY\x03\x00\x0f\x00;\x000\xfc\xff\xff\x00\x00\xfd\xff\x08\x01\xa0\xff3\x02\x125\xfe\x16\x1f\x01\x01\x81\x9dY\x03\x00\x03\x00C\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff4\x03\x89\x00w\x02\xeaQ\xfe\x0e \x01\x01\x1d\x9dY\x03\x00\xbe\xa3iD{\x14\x1e=)\x10\x83\xeb\xfe\x0e!\x01\x01\x89\x9dY\x03\x00\xab\xe6iD\\\x8f\xaa>\x01\x15K\xf4\xfe\x1f"\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xeb\xa2\xfe\x06#\x01\x01}\xcb\x14\x00\x00\x03\x00\x95%\xfe\x04$\x01\x01\x98\x00\x00\xa0\x8a\x014\xfe\x02%\x01\x01*\x00\x00\xbcb\xfe\x1e&\x01\x01\x18\xc8Q\x15\r\x00\x00\x00\x00\r\xa6\x02\x18\xdc\xe7\xb8\xfd8c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x90b\xfe\x1a\'\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00fO\xfe\x08(\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x99\xc9\xfe\x15)\x01\x01$\xa7\x10\x16\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xff\xfe\x16*\x01\x01#\x9dY\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc9\xfb\xfe\x14+\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00x\x8a\xfe\x12,\x01\x01\xfc\xf9Y\x03\x004\x00\x01\x00ARMMASK\x00Wr\xf2\x08'b'\xfe\t-\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x94\xef\xfe\x03.\x01\x01Ms\x00\x00=;\xfe\x1c/\x01\x01!mY\x03\x00\r\xa6\x02\x18\xdc\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfe\xff\x02\x00\x02\x00\xa4\x04\xf8\x9d\xfe\x1c0\x01\x01\x1e=Z\x03\x00\xd4N}\xbd@kS\xba\xa0]T>b\xf8\xd29K\xe1x\xba\xac\xf0M9\xcf\xec\xfe\x181\x01\x01\xb2\x89\xab\x81\xbd\xdb\x01"\xbb\x99TQ>\xa4\xb0)D\x0e\xa6\x02\x18\xdd\xe7\xb8\xfd2]\xfe\x1c2\x01\x01\xa3}O\xc0\xb8tzX\xb8q\xb2\x89\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x18\xfc\x90:\xb3n\xaa;w<\xfe\x033\x01\x01\xa5\xca\x14\x00\x86\xee\xfe\x0c4\x01\x01\x02X\x96\x80w\xb1N\x05\x00QZ\x03\x00\x16\xc7\xfe\x165\x01\x01\x88\x0e\xa6\x02\x18\xdd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9fU\xfe\x166\x01\x01\xc1\xcc\xdc>\x03\x15\xc6\xb8\xfe\x1f<\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00l\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf7\xb4\xfe\x06=\x01\x01}\xc5\x14\x00\x00\x03\x00,\x9b\xfe\x04>\x01\x01\x98\x00\x00\xa0\x8a\xa5/\xfe\x02?\x01\x01*\x00\x00">\xfe\x1e@\x01\x01\x18\xf0b\x18\r\x00\x00\x00\x00\x0e\xa6\x02\x18\xdd\xe7\xb8\xfdBc\n\x00F\x00\xff\xff\x01\x00|J\x03\x0csg\xfe\x1aA\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd4h\xfe\x08B\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Z9\xfe\x15C\x01\x01$Y\xbc\x19\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc2U\xfe\x16D\x01\x01#\x8eZ\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00P\x0b\xfe\x03E\x01\x01Ms\x00\x00PO'b'\xfe\x14F\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7\xa3<\x0b\x00\x00\x00\x7fk\xfe\x1cG\x01\x01!\xfeZ\x03\x00\x0e\xa6\x02\x18\xde\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x049:\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5'b'\xfe\x1cI\x01\x01\x1e.[\x03\x00\x9f=}\xbd\x90XE\xba\xb7oT>p\xe8\x879\x08\xb58\xba\x1c:v9!\xb4\xfe\x18J\x01\x01\xb2\r\x94\x81\xbd#\x0e"\xbbowQ>\x1e\xb5)D\x0e\xa6\x02\x18\xde\xe7\xb8\xfdi\xba\xfe\x1cK\x01\x01\xa3\xe1\xda\xc4\xb8\xac)K\xb8\xd63\x87\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x12h\x99:\xcbX\xcd;\x84\x15\xfe\x03L\x01\x01\xa5\xc5\x14\x00\xb4e\xfe\x0cM\x01\x01\x02\xe0\x91\x84w\xb1N\x05\x00B[\x03\x00\x86\x00\xfe\x16N\x01\x01\x88\x0e\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\xba\xfe\x12O\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xfb\xc9\xfe\x16P\x01\x01\xc1n\x8b6\x03\x15\x98\xc9\xfe\x1fV\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdd\x00*?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96s\xfe\x06W\x01\x01}\xc2\x14\x00\x00\x03\x003d\xfe\x04X\x01\x01\x98\x00\x00\xa0\x8a\xe0\x9a\xfe\x02Y\x01\x01*\x00\x00j\xc2\xfe\x1eZ\x01\x01\x180p\x1b\r\x00\x00\x00\x00\x0e\xa6\x02\x18\xde\xe7\xb8\xfdVc\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cW_\xfe\x1a[\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe7\xc0\xfe\x08\\\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0cS\xfe\x15]\x01\x01$\xfbe\x1d\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00!\x95\xfe\x16^\x01\x01#~[\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe6\\'b'\xfe\x03_\x01\x01Ms\x00\x00\xfb2\xfe\x14`\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\xb4N'b'\xfe\x1ca\x01\x01!\xda[\x03\x00\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfe\xff\x02\x00\x02\x00\xa4\x04M\xb9\xfe\x03b\x01\x01Ms\x00\x00\xaee\xfe\x1cc\x01\x01\x1e\x1e\\\x03\x00\x19\xf8|\xbd\xa0\x1a\x1f\xbaqyT>C\x18\x19:}ma\xba\x9e\xf3\xf9\xb9\xa9\xf7\xfe\x18d\x01\x01\xb2Vv\x81\xbdV\\\x1b\xbbq\x9dQ>\xcd\xac)D\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\x08\xb8\xfe\x1ce\x01\x01\xa3\xcbe\xc9\xb8]\xce=\xb8\xe6\xa3\x84\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xaf\x99:<\xda\xe2;~6\xfe\x03f\x01\x01\xa5\xc3\x14\x00\r\xbe\xfe\x0cg\x01\x01\x02@\xed\x87w\xb1N\x05\x002\\\x03\x00\xd3\x18\xfe\x16h\x01\x01\x88\x0f\xa6\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00O\\\xfe\x16i\x01\x01\xc1p\x9d;\x00#\xfc\x02\x00\xfe\xff\xff\xff\x07\x01\xa1\xff4\x02\xd3Q\xfe\x16l\x01\x01\x81n\\\x03\x00\x02\x00A\x00"\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00o\x02v\x0f\xfe\x0em\x01\x01\x1dn\\\x03\x00\xec\xa2iD33\xd3<*\x10\xe0\x06\xfe\x0en\x01\x01\x89n\\\x03\x00\xd4\xe6iD\n\xd7\xab>\x04\x15-s\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01*?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc3\xcc\xfe\x06p\x01\x01}\xc5\x14\x02\x00\x03\x00\xcf\xf7\xfe\x04q\x01\x01\x98\x00\x00\xa0\x8a\xee_\xfe\x02r\x01\x01*\x00\x00k\xd7\xfe\x1es\x01\x01\x18\x90\xcb\x1e\r\x00\x00\x00\x00\x0f\xa6\x02\x18\xdf\xe7\xb8\xfdjc\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1a\xf1\xfe\x1at\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x97\xf5\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce\xfe\x15v\x01\x01$\xbd\x11!\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xcd\xfe\x16w\x01\x01#o\\\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x17\x86\xfe\x03x\x01\x01Ms\x00\x00\x05\x18'b'\xfe\x14y\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00P\xa7\xfe\x1cz\x01\x01!\xa2\\\x03\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04\xe9\x16\xfe\x1c{\x01\x01\x1e\x0e]\x03\x00\x006}\xbd\xc0\x9c$\xba|hT>}D\x84:"\xa9\xb0\xba\xf2\xe5\x05:\xe8\xf0\xfe\x18|\x01\x01\xb2\xb4\x84\x81\xbd\xaa\x88\x1e\xbb\xd2\xabQ>p\xad)D\x0f\xa6\x02\x18\xe0\xe7\xb8\xfdZ\xa4\xfe\x03}\x01\x01Ms\x00\x00d\x8f'b'\xfe\x1c~\x01\x01\xa3\xbc\xe8\xcd\xb8\xa3g0\xb8J\x11\x82\xb8\x00\x00\x00\x00\x00\x00\x00\x0010\x9a:F\xf6\xba;S\xa6\xfe\x03\x7f\x01\x01\xa5\xc5\x14\x00\xec\x02\xfe\x0c\x80\x01\x01\x02\xc0\x96\x8bw\xb1N\x05\x00#]\x03\x00X~\xfe\x16\x81\x01\x01\x88\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe8\x1e\xfe\x16\x82\x01\x01\xc1\xc0\xb4=<;\x12T7\x1b3Q:1 \xbc=\x00\x00\x00\x00\xa5\x03\ns\xfe\x03\x83\x01\x01/\xff\x00\x00$\x84\xfe\x1a\x84\x01\x01\x1b\xea\xba$\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x014\xaf\xfe\x16\x85\x01\x01t^]\x03\x00\x0e\x006\x003\xfc\x02\x00\xff\xff\xfd\xff\x07\x01\xa0\xff4\x02\xd4q\xfe\x16\x86\x01\x01\x81^]\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff,\x03\x88\x00p\x02\xbb\x9d\xfe\x0e\x87\x01\x01\x1d_]\x03\x002\xa3iD\x8f\xc2\xf5<)\x10Gi\xfe\x0e\x88\x01\x01\x89_]\x03\x00O\xe7iD\x14\xae\xaf>\x05\x15?\x08\xfe\x1f\x89\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb2\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xedX\xfe\x06\x8a\x01\x01}\xc8\x14\x00\x00\x03\x00Q\x14\xfe\x04\x8b\x01\x01\x98\x00\x00\xa0\x8a\xc7\x91\xfe\x02\x8c\x01\x01*\x00\x00\x1b\xc6\xfe\x1e\x8d\x01\x01\x18\xd0\xd8!\r\x00\x00\x00\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x88c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0ci\x82\xfe\x1a\x8e\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xfd`\xfe\x08\x8f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xa2\xfe\x15\x90\x01\x01$\xb6\xbd$\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\xa7\xfe\x16\x91\x01\x01#_]\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x84\xea'b'\xfe\x03\x92\x01\x01Ms\x00\x005&\xfe\x14\x93\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe\n\xd7\xa3<\x0b\x00\x00\x00\x94v\xfe\x1c\x94\x01\x01!k]\x03\x00\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\xb8[\n\x00\x1a\xff\xff\xff\xfd\xff\x02\x00\x02\x00\xa4\x04Qt\xfe\x12\x95\x01\x01\xfc\xe3]\x03\x004\x00\x01\x00ARMMASK\x00Wr\x81@'b'\xfe\t\x96\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x7fv\xfe\x1c\x97\x01\x01\x1e\xff]\x03\x00\xa9_}\xbd\xc8\xa6\x13\xbaHwT>\x9f\xf0\xb49G\xb1)D\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd/\xca\xfe\x1c\x99\x01\x01\xa3\x9bb\xd2\xb8\x01\xf0"\xb8G\x0f\x7f\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x7f7\x97:A\x13\xa9;\xc3\xfe\xfe\x03\x9a\x01\x01\xa5\xc6\x14\x00\xa3\xa8\xfe\x0c\x9b\x01\x01\x02@@\x8fw\xb1N\x05\x00\x13^\x03\x00\x8eD\xfe\x16\x9c\x01\x01\x88\x0f\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00&\x83\xfe\x16\x9d\x01\x01\xc1\x15\xf4;\x00SI<\xa3}9<\x80q\x14?\x00\x1f\xfcD\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\t\xc0\n\x00m\x04\x00\x00\x00\x00\xd3\x00\x00\x00e\xdb'b"\xfe\x1a\xa0\x01\x01\x1b\xaeg(\r\x00\x00\x00\x00\x03\x005\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0c\x01\xb1\xffm\x01I\xe9\xfe\x16\xa1\x01\x01tO^\x03\x00\x06\x00;\x00/\xfc\xff\xff\x00\x00\x01\x00\x07\x01\xa1\xff3\x02;\xea\xfe\x16\xa2\x01\x01\x81O^\x03\x00\x02\x00@\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff%\x03\x88\x00n\x02_A\xfe\x0e\xa3\x01\x01\x1dO^\x03\x00K\xa4iD\xaeGA=+\x10i\xa9\xfe\x0e\xa4\x01\x01\x89O^\x03\x00\t\xe7iD\xe1z\xad>\x06\x15\xfe\xc5\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{?\xfe\x06\xa6\x01\x01}\xc8\x14\x00\x00\x03\x00$\x14\xfe\x04\xa7\x01\x01\x98\x00\x00\xa0\x8a\xd1&\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca\xfe\x1e\xa9\x01\x01\x188\xf7'\r\x00\x00\x00\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x9cc\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x9f\xe6\xfe\x1a\xaa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x06\x0b\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xfe\x15\xac\x01\x01$:j(\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbdS\xfe\x16\xad\x01\x01#P^\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1e\x04\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0\xfe\x14\xaf\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x85k\xbe\n\xd7#<\x0b\x00\x00\x00\x94D"b'\xfe\x1c\xb0\x01\x01!3^\x03\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x0c\x81\xfe\x1c\xb1\x01\x01\x1e\xef^\x03\x00\xdc*~\xbdpu\x1a\xba\xcd\x82T>Ub\x8c:\xb7\xc4\xdc\xb9\xb9^\xe0\xb5LD\xfe\x18\xb2\x01\x01\xb2>\xca\x81\xbd\xce\x9b\x1d\xbb}\xe0Q>\\\xaf)D\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x80\x12\xfe\x1c\xb3\x01\x01\xa3d\xce\xd6\xb8\x05\x86\x15\xb8g=z\xb8\x00\x00\x00\x00\x00\x00\x00\x00D8\x88:\xc5\xde~;\xc0\xad\xfe\x03\xb4\x01\x01\xa5\xc8\x14\x00\x1c\x80\xfe\x0c\xb5\x01\x01\x02\xc0\xe9\x92w\xb1N\x05\x00\x03_\x03\x00\xad\x17\xfe\x16\xb6\x01\x01\x88\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00o8\xfe\x16\xb7\x01\x01\xc1\xce\x15;<9:Q7b\x88\xb2:\x1a\xc5\xad=\x00\x00\x00\x00\xa5\x03\xf2\xeb\xfe\x03\xb8\x01\x01Ms\x00\x00\x16\xb6'b'\xfe\x1a\xb9\x01\x01\x1b&\x11,\r\x00\x00\x00\x00\x02\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffl\x01\xff.\xfe\x16\xba\x01\x01t?_\x03\x00\x08\x001\x00)\xfc\x00\x00\xff\xff\x00\x00\x07\x01\xa1\xff3\x02\xa3c\xfe\x16\xbb\x01\x01\x81?_\x03\x00\x04\x00@\x00\x1d\xfc\xfc\xff\x01\x00\xfd\xff(\x03\x88\x00n\x02\t\xfd\xfe\x0e\xbc\x01\x01\x1d?_\x03\x00\xfc\xa2iDG\xe1\xda<*\x10"\x08\xfe\x0e\xbd\x01\x01\x89?_\x03\x00\x0b\xe7iD\\\x8f\xad>\x06\x15\xc9\x9b\xfe\x1f\xbe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf4\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc\x04\xfe\x06\xbf\x01\x01}\xc5\x14\x00\x00\x03\x00\x15\xa2\xfe\x04\xc0\x01\x01\x98\x00\x00\xa0\x8ai\xde\xfe\x02\xc1\x01\x01*\x00\x00R/\xfe\x1e\xc2\x01\x01\x18@\xba*\r\x00\x00\x00\x00\x10\xa6\x02\x18\xe1\xe7\xb8\xfd\xa6c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c5w\xfe\x1a\xc3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdc~\xfe\x08\xc4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x16\xe2\xfe\x15\xc5\x01\x01$\x9e\x13,\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00+\xad\xfe\x16\xc6\x01\x01#@_\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1f/'b'\xfe\x14\xc7\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\xbb\xc4\xfe\x03\xc8\x01\x01Ms\x00\x00o>\xfe\x1c\xc9\x01\x01!\xb0_\x03\x00\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x041\x8f'b"\xfe\x1c\xca\x01\x01\x1e\xe0_\x03\x00\xe3c~\xbd\xe8\x93$\xba\x17\x97T>\xeb^?:\xc9\x19\x98\xba\x12\xa159Z.\xfe\x18\xcb\x01\x01\xb2\x9d\xc7\x81\xbd\x17p!\xbb`\xfdQ>\n\xb7)D\x11\xa6\x02\x18\xe1\xe7\xb8\xfd~T\xfe\x1c\xcc\x01\x01\xa3l3\xdb\xb8\x14#\x08\xb8\xed\x84u\xb8\x00\x00\x00\x00\x00\x00\x00\x002\xad\x94:\x94\xea\xa1;I/\xfe\x03\xcd\x01\x01\xa5\xc5\x14\x00\xe9/\xfe\x0c\xce\x01\x01\x02@\x93\x96w\xb1N\x05\x00\xf4_\x03\x00\xb1\xcb\xfe\x16\xcf\x01\x01\x88\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa7G\xfe\x16\xd0\x01\x01\xc1\x83A2\x07\x15k\xde\xfe\x1f\xd7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TA\xb1\xfe\x06\xd8\x01\x01}\xc2\x14\x00\x00\x03\x00d\xea\xfe\x04\xd9\x01\x01\x98\x00\x00\xa0\x8a\xca\x13\xfe\x02\xda\x01\x01*\x00\x00\x19\xec\xfe\x1e\xdb\x01\x01\x18\x80\xc7-\r\x00\x00\x00\x00\x11\xa6\x02\x18\xe1\xe7\xb8\xfd\xb0c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa8\x07\xfe\x1a\xdc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x008\x1f\xfe\x08\xdd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x03\x90\xfe\x15\xde\x01\x01$\xc8\xbd/\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xe1\xfe\x16\xdf\x01\x01#0`\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x08\x94"b'\xfe\x14\xe0\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\x80U\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$'b'\xfe\x1c\xe2\x01\x01!y`\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x0eu\xfe\x1c\xe3\x01\x01\x1e\xd1`\x03\x00Mh~\xbd(\xec\x1c\xba\xe8\xb3T>[\xc3\xcb7-\xb5\xc66\xfb\xa8C\xb9\x8e\xba\xfe\x18\xe4\x01\x01\xb26\xc4\x81\xbd\x15\x96 \xbb`/R>3\xb3)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xe2\x98\xfe\x1c\xe5\x01\x01\xa3\x9a\x91\xdf\xb8\xfa\x87\xf5\xb7"\xcap\xb8\x00\x00\x00\x00\x00\x00\x00\x00%\xab\x89:\xec\x16\xa0;s \xfe\x03\xe6\x01\x01\xa5\xc5\x14\x00u>\xfe\x0c\xe7\x01\x01\x02\xe0\x8a\x9aw\xb1N\x05\x00\xe5`\x03\x00\x97\x00\xfe\x16\xe8\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xae{\xfe\x16\xe9\x01\x01\xc1\n\x1c1\x07\x15/@\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x89\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd1F\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&\xfe\x04\xf2\x01\x01\x98\x00\x00\xa0\x8a>M\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce\xfe\x1e\xf4\x01\x01\x18\xa8\xd80\r\x00\x00\x00\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xc4c\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cs\x88\xfe\x1a\xf5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd2\xa4\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06\xfe\x15\xf7\x01\x01$\x17o3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k\x0c\xfe\x16\xf8\x01\x01#"a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8dT\xfe\x03\xf9\x01\x01/\xff\x00\x00\x8e*'b'\xfe\x14\xfa\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00$:\xfe\x1c\xfb\x01\x01!Ba\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\xc4\xe7\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5\xfe\x1c\xfd\x01\x01\x1e\xc1a\x03\x00\xd5\x1b~\xbd\xb0P\xec\xb9\xd6\xb9T>fK\xf39W)<\xb9}\x9bE:,\x99\xfe\x18\xfe\x01\x01\xb2R\xaf\x81\xbd\xc7\xeb\x1a\xbb[FR>\xa4\xb0)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd?Z\xfe\x12\xff\x01\x01\xfc\xcea\x03\x004\x00\x01\x00ARMMASK\x00WrMv'b"\xfe\t\x00\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1b(\xfe\x1c\x01\x01\x01\xa3\x86\xe5\xe3\xb8\x19\xd0\xda\xb7\xe8\x1el\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xaa\x94:\x14%\x8a;z\xf3\xfe\x03\x02\x01\x01\xa5\xc5\x14\x00H0\xfe\x0c\x03\x01\x01\x02X\xe2\x9dw\xb1N\x05\x00\xd6a\x03\x00#2\xfe\x16\x04\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xab\xf4\xfe\x16\x05\x01\x01\xc1~\xf44<\x91\x93O7`\x0c\xff9\x92J\xb8=\x00\x00\x00\x00\xa5\x03\x16%\xfe\x1a\x06\x01\x01\x1b\xae\x187\r\x00\x00\x00\x00\x04\x005\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffn\x01x\x9e\xfe\x16\x07\x01\x01t\x12b\x03\x00\x05\x002\x00)\xfc\x00\x00\xfd\xff\x02\x00\x07\x01\xa1\xff4\x02+ \xfe\x16\x08\x01\x01\x81\x12b\x03\x00\x02\x00@\x00\x1e\xfc\xfc\xff\x01\x00\xfe\xff)\x03\x88\x00q\x02\xb6\x0c\xfe\x0e\t\x01\x01\x1d\x12b\x03\x00O\xa3iDp=\x02=+\x108\x82\xfe\x0e\n\x01\x01\x89\x12b\x03\x00\\\xe7iD{\x14\xb0>\x08\x15 `\xfe*\x0b\x01\x01\x96s\xe7f\xbc\x0fm\x01\x00+\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x01\x87\xfe\x1f\x0c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\x83\xfe\x06\r\x01\x01}\xc8\x14\x00\x00\x03\x00\xac&\xfe\x04\x0e\x01\x01\x98\x00\x00\xa0\x8a\x08'\xfe\x02\x0f\x01\x01*\x00\x00h\xe8\xfe\x1e\x10\x01\x01\x18\x10\xf76\r\x00\x00\x00\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xd8c\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xa1\x96\xfe\x1a\x11\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00h\x95\xfe\x08\x12\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\xfe\x15\x13\x01\x01$!\x1b7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x13\xfe\x16\x14\x01\x01#\x13b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8e\xcd\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q\xfe\t\xc1\n\x00m\x00\x00\x00\x00\x00\xd3\x00\x00\x00\x13\x15"b'\xfe\x14\x16\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u\xbe\n\xd7#<\x0b\x00\x00\x00\xfa\xf2\xfe\x1c\x17\x01\x01!\nb\x03\x00\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\xae[\n\x00\x10\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\xa9\x0f\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\xfe\x1c\x19\x01\x01\x1e\xb2b\x03\x00\xf95~\xbd\x80o\x00\xba\t\xbaT>]-\xd19\xf3\xfa\xc7\xb9n\x83M\xba"Z\xfe\x18\x1a\x01\x01\xb2\x80\xb9\x81\xbd\n\x89\x1d\xbb\xd9`R>G\xb1)D\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x8c\x9f\xfe\x1c\x1b\x01\x01\xa3}0\xe8\xb8H\x0c\xc0\xb7\x93\x8eg\xb8\x00\x00\x00\x00\x00\x00\x00\x00cz\x97:\x9d\xc2\x91;\x1b,\xfe\x03\x1c\x01\x01\xa5\xc5\x14\x00=[\xfe\x0c\x1d\x01\x01\x02\xd8\x8b\xa1w\xb1N\x05\x00\xc6b\x03\x00\xee\x0f\xfe\x16\x1e\x01\x01\x88\x12\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8c\xde\xfe\x16\x1f\x01\x01\xc1\xbc\xaa6<\xe7\xcbN7\x01\r.:\xd8C\xb0=\x00\x00\x00\x00\xa5\x03\x97.\xfe\x16 \x01\x01\xe1Y9\x14?\xebQ8>~>8<\xbf\x06G<;7\x0c?\x00\x1f\xefC'b'\xfe\x1a!\x01\x01\x1br\xc4:\r\x00\x00\x00\x00\x05\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\xd1O\xfe\x16"\x01\x01t\x03c\x03\x00\x08\x00=\x00$\xfc\x02\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x02\x8e,\xfe\x16#\x01\x01\x81\x03c\x03\x00\x02\x00?\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x84\x00k\x02\xc3\xad\xfe\x0e$\x01\x01\x1d\x03c\x03\x00{\xa4iD\xb8\x1eM=,\x10\x13\xa2\xfe\x0e%\x01\x01\x89\x03c\x03\x008\xe6iD\xc2\xf5\xa6>\x08\x15\xa5\x13\xfe\x1f&\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfb\x00+?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ty\x9e\xfe\x06\'\x01\x01}\xcb\x14\x00\x00\x03\x00\xc0{\xfe\x04(\x01\x01\x98\x00\x00\xa0\x8a.t\xfe\x02)\x01\x01*\x00\x00&\xd3\xfe\x1e*\x01\x01\x188\x08:\r\x00\x00\x00\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xd8c\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x04\t\xfe\x1a+\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00CZ\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf\xfe\x15-\x01\x01$+\xc7:\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xb4\xfe\x16.\x01\x01#\x03c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00F\x8b\xfe\x03/\x01\x01Ms\x00\x00\x82\xba\xfe\x140\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xfe\xe5'b"\xfe\x1c1\x01\x01!\xd3b\x03\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04,C\xfe\x032\x01\x01Ms\x00\x00'[\xfe\x1c3\x01\x01\x1e\xa3c\x03\x00\x80V~\xbd\x009\x04\xbag\xb0T>/\x83H:\xc3\xc2\x1a\xba\xa9\xd8k\xb9Qo\xfe\x184\x01\x01\xb2\xdd\xb7\x81\xbd\xd2\x9a\x1f\xbb\x19tR>)\xac)D\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\x8b\xd6\xfe\x1c5\x01\x01\xa3Hq\xec\xb8\x94V\xa5\xb7a\x06c\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xca0\xa1:\xaa\xad\x9b;\xbb\xd3\xfe\x036\x01\x01\xa5\xc8\x14\x00\x91@\xfe\x0c7\x01\x01\x02`\x87\xa5w\xb1N\x05\x00\xb7c\x03\x003\xe9\xfe\x168\x01\x01\x88\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x84\x16\xfe\x129\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x14\xe1\xfe\x16:\x01\x01\xc1Fo1<\xff\x1eO7\xa2w?;\x1cq\xac=\x00\x00\x00\x00\xa5\x03\xbb\xac"b"\xfe\x1a;\x01\x01\x1b\\n>\r\x00\x00\x00\x00\x04\x002\x00\x1f\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xb0\xffm\x01\x8da\xfe\x16<\x01\x01t\xf3c\x03\x00\x02\x009\x00,\xfc\xfe\xff\xfe\xff\x00\x00\x07\x01\xa0\xff2\x02\xf5\xd4\xfe\x16=\x01\x01\x81\xf3c\x03\x00\x03\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x89\x00n\x02\xc4\x15\xfe\x0e>\x01\x01\x1d\xf3c\x03\x003\xa4iD33;=,\x10\x8b\x1e\xfe\x0e?\x01\x01\x89\xf3c\x03\x00\\\xe7iD{\x14\xb0>\t\x15v\xaf\xfe\x1f@\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T-[\xfe\x06A\x01\x01}\xc5\x14\x00\x00\x03\x00\x19'\xfe\x04B\x01\x01\x98\x00\x00\xa0\x8aD\x81\xfe\x02C\x01\x01*\x00\x00\xf4\x9e\xfe\x1eD\x01\x01\x18x\x15=\r\x00\x00\x00\x00\x13\xa6\x02\x18\xe2\xe7\xb8\xfd\xe2c\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cL\xb3\xfe\x1aE\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x007d\xfe\x08F\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xee/\xfe\x15G\x01\x01$\xc7q>\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\r\x91\xfe\x16H\x01\x01#\xf4c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x995\xfe\x03I\x01\x01Ms\x00\x002t"b'\xfe\x14J\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xdf\xd7\xfe\x1cK\x01\x01!dd\x03\x00\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04\x01&\xfe\x03L\x01\x01Ms\x00\x00S\xe3'b'\xfe\x1cM\x01\x01\x1e\x93d\x03\x00\xe4\x96~\xbd0\xb1\xec\xb9\x16\xb6T>~\xe4V\xba\xff\xe7\xf2\xb9H\x07B:\xad\x13\xfe\x18N\x01\x01\xb2D\xb9\x81\xbd\x14\x05\x1f\xbb\x92\x87R>)\xac)D\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xf7/\xfe\x1cO\x01\x01\xa3\xcd\xa7\xf0\xb8\x8d\xb3\x8a\xb7\x00\x7f^\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc2\x11\xac:\xd0\xd9\x96;\xe6?\xfe\x03P\x01\x01\xa5\xc5\x14\x00\xae\x05\xfe\x0cQ\x01\x01\x02\xe00\xa9w\xb1N\x05\x00\xa7d\x03\x00[n\xfe\x16R\x01\x01\x88\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\xbf\xfe\x16S\x01\x01\xc1\xb4\x064<\xa4\x9cK7\xa1L6;\xb4\x8c\xb7=\x00\x00\x00\x00\xa5\x03 \x8c\xfe\x1aT\x01\x01\x1b\x15\x18B\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\xb6\xd4\xfe\x16U\x01\x01t\xe3d\x03\x00\x08\x00=\x00#\xfc\x03\x00\xff\xff\x00\x00\x07\x01\xa0\xff3\x02\x9c\xf5\xfe\x16V\x01\x01\x81\xe3d\x03\x00\x01\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x87\x00o\x02\xe1\xa0\xfe\x0eW\x01\x01\x1d\xe3d\x03\x00\xd7\xa3iD\xf6($=,\x10/\xc2\xfe\x0eX\x01\x01\x89\xe3d\x03\x008\xe6iD\xc2\xf5\xa6>\t\x15\x8d\xd8\xfe\x1fY\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe1\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T~g\xfe\x06Z\x01\x01}\xc5\x14\x00\x00\x03\x00E\x14\xfe\x04[\x01\x01\x98\x00\x00\xa0\x8a\xe7L\xfe\x02\\\x01\x01*\x00\x00\xc92\xfe\x1e]\x01\x01\x18\xa0&@\r\x00\x00\x00\x00\x14\xa6\x02\x18\xe2\xe7\xb8\xfd\xecc\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c@\x0f\xfe\x1a^\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x000\t\xfe\x08_\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfb]\xfe\x15`\x01\x01$\x8d\x1bB\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4a\xfe\x16a\x01\x01#\xe4d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa1f'b'\xfe\x03b\x01\x01Ms\x00\x00\xaee\xfe\x14c\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xeb\xf6'b'\xfe\x1cd\x01\x01!,e\x03\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x9a\xd3\xfe\x03e\x01\x01Ms\x00\x00\xa0\xf9\xfe\x1cf\x01\x01\x1e\x83e\x03\x00,y~\xbd\xa0\x9d\xdb\xb9\x99\x90T>\xe7\x87H9)|\x0f\xba\xf2\x84i8>\x03\xfe\x18g\x01\x01\xb2X\xa6\x81\xbdl?\x1f\xbb\x03\x8aR>\xe1\xaa)D\x15\xa6\x02\x18\xe2\xe7\xb8\xfdWY\xfe\x1ch\x01\x01\xa3w\xd2\xf4\xb8"\x08`\xb7\x19\xf4Y\xb8\x00\x00\x00\x00\x00\x00\x00\x00}K\xab:\x1a\x90\xa9;\xeb\xbd\xfe\x03i\x01\x01\xa5\xc6\x14\x00\xe8a\xfe\x0cj\x01\x01\x02x\xd6\xacw\xb1N\x05\x00\x97e\x03\x00x`\xfe\x16k\x01\x01\x88\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00X\xf3\xfe\x16l\x01\x01\xc1\xb2<5<\x0frJ7U\xee\x83;O\x82\xc5=\x00\x00\x00\x00\xa5\x03\x1et\xfe\x03m\x01\x01/\xff\x00\x00\xca\xac\xfe\x12n\x01\x01\xfc\xb8e\x03\x004\x00\x01\x00ARMMASK\x00Wr>\x07'b'\xfe\to\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03/Q\xfe\x1ap\x01\x01\x1b\xb0\xc3E\r\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01\x96O\xfe\x16q\x01\x01t\xd3e\x03\x00\x08\x00:\x002\xfc\x03\x00\x00\x00\x01\x00\x06\x01\xa0\xff2\x02_\x8a\xfe\x16r\x01\x01\x81\xd3e\x03\x00\x01\x00?\x00\x1e\xfc\xfe\xff\x01\x00\xfe\xff,\x03\x86\x00o\x02\x04\x03\xfe\x0es\x01\x01\x1d\xd3e\x03\x00K\xa4iD\xaeGA=,\x10D\xa2\xfe\x0et\x01\x01\x89\xd3e\x03\x00\x9d\xe6iD\xb8\x1e\xaa>\x0b\x15\xb2\xb8\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0e\x01,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe6a\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14\xfe\x04w\x01\x01\x98\x00\x00\xa0\x8a\xf1\xfb\xfe\x02x\x01\x01*\x00\x00<>\xfe\x1ey\x01\x01\x18\xe03C\r\x00\x00\x00\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xecc\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xb8[\xfe\x1az\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcbb\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe\xfe\x15|\x01\x01$\x9a\xc6E\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xc7\xfe\x16}\x01\x01#\xd4e\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00Cl\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05\xfe\t\xc2\n\x00m\x17\x00\x00\x00\x00\xd5\x00\x00\x00\x12\xbb'b'\xfe\x14\x7f\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x11\xda\xfe\x1c\x80\x01\x01!\xf4e\x03\x00\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04\x1e\xfe\xfe\x1c\x81\x01\x01\x1esf\x03\x00\xe1d~\xbd\x10/\xd8\xb9&\xadT>|\xc5Q:\x08\x19;\xba\xa5\xfdB\xb9(\xe1\xfe\x18\x82\x01\x01\xb2k\x9b\x81\xbd\x8e\xf0\x1f\xbb*\xacR>G\xb1)D\x15\xa6\x02\x18\xe2\xe7\xb8\xfd_\xcd\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc'b'\xfe\x1c\x84\x01\x01\xa3\x85\xf1\xf8\xb8E~*\xb7zvU\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x87\xfd\xa2:%\x16\x86;\x98\xcc\xfe\x03\x85\x01\x01\xa5\xc6\x14\x00iB\xfe\x0c\x86\x01\x01\x02\xe0\x83\xb0w\xb1N\x05\x00\x88f\x03\x008\xce\xfe\x16\x87\x01\x01\x88\x15\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00]|\xfe\x16\x88\x01\x01\xc1l\x13;<\xad\x02I7\xde\x91 <}X\xab=\x00\x00\x00\x00\xa5\x03\xa52\xfe\x1a\x89\x01\x01\x1bYnI\r\x00\x00\x00\x00\x05\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01\xedJ\xfe\x16\x8a\x01\x01t\xc4f\x03\x00\t\x00:\x00!\xfc\xff\xff\x00\x00\x03\x00\x07\x01\xa0\xff3\x02\x07\xbd\xfe\x16\x8b\x01\x01\x81\xc4f\x03\x00\x03\x00A\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff$\x03\x88\x00i\x02\xb7A\xfe\x0e\x8c\x01\x01\x1d\xc4f\x03\x00\xd8\xa4iD\xe1zd=,\x10\x19\xda\xfe\x0e\x8d\x01\x01\x89\xc4f\x03\x00\x94\xe6iD\n\xd7\xa9>\x0b\x15\xa4u\xfe\x1f\x8e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf4\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa4J\xfe\x06\x8f\x01\x01}\xc8\x14\x00\x00\x03\x00\x95\x1f\xfe\x04\x90\x01\x01\x98\x00\x00\xa0\x8a\x9e\xc7\xfe\x02\x91\x01\x01*\x00\x00\x9d]\xfe\x1e\x92\x01\x01\x18`NI\r\x00\x00\x00\x00\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x00d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cg\xf3\xfe\x1a\x93\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00`\x83\xfe\x08\x94\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x97\xdb\xfe\x15\x95\x01\x01$\xc2pI\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x18\xfe\x16\x96\x01\x01#\xc4f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00A{'b'\xfe\x03\x97\x01\x01Ms\x00\x00T\xb1\xfe\x14\x98\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00cs\xfe\x1c\x99\x01\x01!\xbcf\x03\x00\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa5\x04`\x8b'b'\xfe\x1c\x9a\x01\x01\x1eeg\x03\x00~=~\xbd@\x1dH\xb9\xea\xa4T>\xa8f\r:2\xf9\xa0\xba>\xf0t\xba\xe4\xb9\xfe\x18\x9b\x01\x01\xb2N\x84\x81\xbd\x88B\x1b\xbb\r\xbfR>{\xa4)D\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\xec\x9c\xfe\x03\x9c\x01\x01Ms\x00\x008\x16\xfe\x1c\x9d\x01\x01\xa3\xf6\n\xfd\xb8R!\xe9\xb6\x88\x0eQ\xb8\x00\x00\x00\x00\x00\x00\x00\x00*\xaa\x9a:4\xad|;}\xca\xfe\x03\x9e\x01\x01\xa5\xc8\x14\x00?\x10\xfe\x0c\x9f\x01\x01\x02`-\xb4w\xb1N\x05\x00yg\x03\x00Q\xce\xfe\x16\xa0\x01\x01\x88\x16\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00T@\xfe\x16\xa1\x01\x01\xc1\x87X3<\xf2\xafH7\xcb}\r\x95v=\x0c\x15Sx\xfe\x1f\xa8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01,?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd85\xfe\x06\xa9\x01\x01}\xc8\x14\x00\x00\x03\x00h\x08\xfe\x04\xaa\x01\x01\x98\x00\x00\xa0\x8a\x03+\xfe\x02\xab\x01\x01*\x00\x00\x80b\xfe\x1e\xac\x01\x01\x18\x88_L\r\x00\x00\x00\x00\x18\xa6\x02\x18\xe2\xe7\xb8\xfd\nd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x8fU\xfe\x1a\xad\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa8@\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12\xfe\x15\xaf\x01\x01$\xb5\x1fM\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c6\xfe\x16\xb0\x01\x01#\xb6g\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfe1\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a\xfe\x14\xb2\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00-\xd7"b'\xfe\x1c\xb3\x01\x01!\x85g\x03\x00\x18\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04"s\xfe\x1c\xb4\x01\x01\x1eUh\x03\x00\xea\xd8~\xbd\xe0\xb2)\xb9:\xbcT>\x89\x02/:e\xe5\xa9\xb8\x8a\xae\x8b9\xde\x01\xfe\x18\xb5\x01\x01\xb2)\xaf\x81\xbd\xcfS\x19\xbb\xbe\xdeR>\xc2\xa5)D\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x8fS\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86\xfe\x1c\xb7\x01\x01\xa3\xf8\x8d\x00\xb9>by\xb6\x8c\xb9L\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x91q\x9f:\xa8\xdc\x82;\xe0i\xfe\x03\xb8\x01\x01\xa5\xc5\x14\x00\xf10\xfe\x0c\xb9\x01\x01\x02\xe0\xd6\xb7w\xb1N\x05\x00ih\x03\x00\xd3\xcb\xfe\x16\xba\x01\x01\x88\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003\xa1\xfe\x16\xbb\x01\x01\xc1lg8<\x19aG7\x92\xce\xea;\xc4/\xc3=\x00\x00\x00\x00\xa5\x03\xca\x14'b'\xfe\x1a\xbc\x01\x01\x1b\x96\xc6P\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffm\x01@(\xfe\x16\xbd\x01\x01t\xa5h\x03\x00\x08\x00>\x005\xfc\x02\x00\xff\xff\x03\x00\x07\x01\xa0\xff2\x02\xfb\x0b\xfe\x16\xbe\x01\x01\x81\xa5h\x03\x00\x02\x00?\x00\x1e\xfc\xfe\xff\x00\x00\xfc\xff1\x03\x8a\x00o\x02\xe5\\\xfe\x0e\xbf\x01\x01\x1d\xa5h\x03\x00\xd7\xa3iD\xf6($=,\x10\xfa\xbf\xfe\x0e\xc0\x01\x01\x89\xa5h\x03\x00O\xe7iD\x14\xae\xaf>\x0c\x15\xff\xa2\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TvK\xfe\x06\xc2\x01\x01}\xc5\x14\x00\x00\x03\x00\xb1K\xfe\x04\xc3\x01\x01\x98\x00\x00\xa0\x8an\x08\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf\xfe\x1e\xc5\x01\x01\x18\xc8lO\r\x00\x00\x00\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x14d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xdf\x87\xfe\x1a\xc6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0b\xb7\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec\xfe\x15\xc8\x01\x01$0\xc9P\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00l\x0b\xfe\x16\xc9\x01\x01#\xa6h\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfa?'b'\xfe\x03\xca\x01\x01Ms\x00\x00\x005\xfe\x14\xcb\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x8f.\xfe\x1c\xcc\x01\x01!\x16i\x03\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa6\x04E%'b"\xfe\x1c\xcd\x01\x01\x1eFi\x03\x00\xdaw~\xbd \xfa\x07\xb9V\xd1T>\x91\xc3\xb0:q\x1d\xb1\xbav:\x11\xba\x82t\xfe\x18\xce\x01\x01\xb2\xfd\x86\x81\xbd/\x93\x1a\xbb\xc0\xfdR>\x1e\xa5)D\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\xcd6\xfe\x1c\xcf\x01\x01\xa3\x01\x96\x02\xb9\x11\xf9\x02\xb55zH\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x14\xa0\x95:!\xa5i;\xbd/\xfe\x03\xd0\x01\x01\xa5\xc5\x14\x00L\xce\xfe\x0c\xd1\x01\x01\x02`\x80\xbbw\xb1N\x05\x00Zi\x03\x00c\xcd\xfe\x16\xd2\x01\x01\x88\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaf\t\xfe\x16\xd3\x01\x01\xc1\x8eW;<\x0emF7>\xd8\xf7;W\x1f\xad=\x00\x00\x00\x00\xa5\x03\xf9'\xfe\x03\xd4\x01\x01Ms\x00\x00u^\xfe\x1a\xd5\x01\x01\x1b9rT\r\x00\x00\x00\x00\x04\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01v*\xfe\x16\xd6\x01\x01t\x96i\x03\x00\x06\x00:\x00.\xfc\x00\x00\xff\xff\xff\xff\x07\x01\xa0\xff3\x02Ui\xfe\x16\xd7\x01\x01\x81\x96i\x03\x00\x03\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x86\x00l\x02\x1a\xf7\xfe\x0e\xd8\x01\x01\x1d\x96i\x03\x00\x90\xa4iD\\\x8fR=-\x10\xc3[\xfe\x0e\xd9\x01\x01\x89\x96i\x03\x007\xe6iD\x85\xeb\xa6>\r\x15\xb2\xc1\xfe\x1f\xda\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa9\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T*\xb5\xfe\x06\xdb\x01\x01}\xc5\x14\x00\x00\x03\x00\xcf\xd3\xfe\x04\xdc\x01\x01\x98\x00\x00\xa0\x8a\xd2a\xfe\x02\xdd\x01\x01*\x00\x00\x01+\xfe\x1e\xde\x01\x01\x18\xf0}R\r\x00\x00\x00\x00\x19\xa6\x02\x18\xe2\xe7\xb8\xfd\x1ed\n\x00F\x00\xff\xff\x00\x00|J\x03\x0cZ\x19\xfe\x1a\xdf\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00uX\xfe\x08\xe0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x02A\xfe\x15\xe1\x01\x01$\xebtT\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00w]\xfe\x16\xe2\x01\x01#\x96i\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8e\x97\xfe\x12\xe3\x01\x01\xfc\xa2i\x03\x004\x00\x01\x00ARMMASK\x00Wr=\xeb\xfe\t\xe4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xac\xbb"b"\xfe\x03\xe5\x01\x01/\xff\x00\x00\x94J\xfe\x14\xe6\x01\x01J\n\xd7\xa3<\n\xd7\xa3fd\x95\xb9\x15\x846\xb84\xe5\xe08u\x06\xfe\x18\xea\x01\x01\xb2j`\x81\xbd[\xfb\x17\xbb\xbe\x15S>3\xa3)D\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\xe0v\xfe\x1c\xeb\x01\x01\xa3g\x9c\x04\xb9\xa6\xf166\xa0bD\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xa5\x97:\xf2IR;\xc8\x15\xfe\x03\xec\x01\x01\xa5\xc5\x14\x00\xa6\x18\xfe\x0c\xed\x01\x01\x02\xe0)\xbfw\xb1N\x05\x00Kj\x03\x00\xf3\x1c\xfe\x16\xee\x01\x01\x88\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc9M\xfe\x16\xef\x01\x01\xc1\xf2\xda><\xd4\xfbE7pz\x11<\x11\xf9\xa8=\x00\x00\x00\x00\xa5\x03}]\xfe\x03\xf0\x01\x01Ms\x00\x00[\xfe'b"\xfe\x1a\xf1\x01\x01\x1b\xda!X\r\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffm\x01\xfcm\xfe\x16\xf2\x01\x01t\x87j\x03\x00\x0f\x000\x00$\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff4\x02\xda\xed\xfe\x16\xf3\x01\x01\x81\x87j\x03\x00\x02\x00B\x00\x1e\xfc\xfd\xff\x00\x00\xfe\xff%\x03\x89\x00j\x02\x8c\x8e\xfe\x0e\xf4\x01\x01\x1d\x87j\x03\x00\xd5\xa3iD\n\xd7#=,\x10O \xfe\x0e\xf5\x01\x01\x89\x87j\x03\x00\xae\xe7iD\xd7\xa3\xb2>\x0e\x15\xd1\x81\xfe\x1f\xf6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x8c\x00-?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x1d\x81\xfe\x06\xf7\x01\x01}\xc8\x14\x00\x00\x03\x00\xf5\xfd\xfe\x04\xf8\x01\x01\x98\x00\x00\xa0\x8a\x0e\xa9\xfe\x02\xf9\x01\x01*\x00\x00\xf4'\xfe\x1e\xfa\x01\x01\x18\x18\x8fU\r\x00\x00\x00\x00\x1a\xa6\x02\x18\xe2\xe7\xb8\xfd\x1ed\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\\\x18\xfe\x1a\xfb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8e3\xfe\x08\xfc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0e \xfe\x15\xfd\x01\x01$\x89$X\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00(8\xfe\x16\xfe\x01\x01#\x88j\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o5"b"\xfe\x14\xff\x01\x01J\n\xd7#<\n\xd7#\x9d\xe0g:\x1f*\xb9\xba. \xbe\xb7Xw\xfe\x18\x03\x01\x01\xb2\tm\x81\xbd1\xfd\x18\xbb\xe4AS>\xf6\xa8)D\x1b\xa6\x02\x18\xe2\xe7\xb8\xfd`\xc8"b'\xfe\x1c\x04\x01\x01\xa3\xa6\xa2\x06\xb9\xffY\xc66\xf2[@\xb8\x00\x00\x00\x00\x00\x00\x00\x00C\x0e\x9b:^\xf0w;4\x8e\xfe\x03\x05\x01\x01\xa5\xc5\x14\x00F\xac\xfe\x0c\x06\x01\x01\x02H\xd7\xc2w\xb1N\x05\x00\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff&\x03\x8a\x00k\x02\x17H\xfe\x0e\r\x01\x01\x1dxk\x03\x00w\xa2iD\xebQ\x98<-\x10t\x11\xfe\x0e\x0e\x01\x01\x89xk\x03\x00w\xe7iD\x85\xeb\xb0>\x0f\x15.{\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x00-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf3\xf9\xfe\x06\x10\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xce\xfe\x04\x11\x01\x01\x98\x00\x00\xa0\x8a\xb4N\xfe\x02\x12\x01\x01*\x00\x00\xees\xfe\x1e\x13\x01\x01\x18\x80\xad[\r\x00\x00\x00\x00\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cw\x99\xfe\x1a\x14\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbf\\\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18\xfe\x15\x16\x01\x01$\xf6\xcf[\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xf3\xfe\x16\x17\x01\x01#xk\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x82\xd4'b'\xfe\x14\x18\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00M\x85\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ\xfe\x1c\x1a\x01\x01!pk\x03\x00\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04\x83m'b'\xfe\x1c\x1b\x01\x01\x1e\x18l\x03\x00%r~\xbd\x00\x00\xbd\xb3W\x16U>s\x95\xcb\xb9>\xa1\xd8\xb9V\x9e\xc5\xb9\x06\xbb\xfe\x18\x1c\x01\x01\xb2Wm\x81\xbd\xd7\xf8\x18\xbbs\x85S>\xc2\xa5)D\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd]\x93\xfe\x1c\x1d\x01\x01\xa3k\xa7\x08\xb9\xa5\xa1\x187\xd0R<\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x81\xd2\xab:\xc7\xb0\x85;+\xb9\xfe\x03\x1e\x01\x01\xa5\xc5\x14\x00RP\xfe\x0c\x1f\x01\x01\x02\xf8x\xc6w\xb1N\x05\x00,l\x03\x00\x13\x9c\xfe\x16 \x01\x01\x88\x1b\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00ve\xfe\x12!\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x00S\xfe\x16"\x01\x01\xc15\xe51<\xcckD7\xa3=\xd0;\xf11\xb8=\x00\x00\x00\x00\xa5\x03\x89k\xfe\x16#\x01\x01\xe1\xbdt\x13?\xebQ8>\xae\xec9<\x15k#<*\x10\xdf\xa3\xfe\x0e)\x01\x01\x89il\x03\x00e\xe5iD)\\\xa0>\x0c\x15\x13\xaa\xfe**\x01\x01\x96s\xe7f\xbc\rm\x01\x00*\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xbb\xce\xfe\x1f+\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x10X\xfe\x06,\x01\x01}\xc5\x14\x00\x00\x03\x00\xf8\xbf\xfe\x04-\x01\x01\x98\x00\x00\xa0\x8a6\x06\xfe\x02.\x01\x01*\x00\x00>\x14\xfe\x1e/\x01\x01\x18\xa8\xbe^\r\x00\x00\x00\x00\x1c\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c|\x87\xfe\x1a0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00D7\xfe\x081\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8c\xbb\xfe\x152\x01\x01$\x0e~_\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x00\xfe\x163\x01\x01#jl\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00"\r\xfe\x144\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00p=\x8a\xbe\n\xd7#<\x0b\x00\x00\x00\xe5\x95'b'\xfe\x035\x01\x01Ms\x00\x00)\xc7\xfe\x1c6\x01\x01!9l\x03\x00\x1c\xa6\x02\x18\xe3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04\x94\xe3\xfe\x1c7\x01\x01\x1e\tm\x03\x00h\x91~\xbd\x00\xa4\xe4\xb7\xa77U>\x7f\xb1q:\xf6e\x9c\xb8dbW:\xac=\xfe\x188\x01\x01\xb2Am\x81\xbds\x87\x19\xbbi\xb9S>\xd7\xa3)D\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd\x9e\xcc\xfe\x1c9\x01\x01\xa3$\xa8\n\xb9\xfe\xd4M7\xabX8\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xfa\xa6:U`z;\xfeY\xfe\x03:\x01\x01\xa5\xc8\x14\x00\xf3{\xfe\x0c;\x01\x01\x02x"\xcaw\xb1N\x05\x00\x1dm\x03\x00q`\xfe\x16<\x01\x01\x88\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00u\x86\xfe\x16=\x01\x01\xc1B\xc8<\x01\x01\x1bg'c\r\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffl\x01\x8cc\xfe\x16?\x01\x01tYm\x03\x00\x0b\x005\x00/\xfc\x01\x00\x00\x00\x00\x00\x07\x01\xa1\xff3\x02,O\xfe\x16@\x01\x01\x81Ym\x03\x00\x02\x00?\x00 \xfc\xfd\xff\x00\x00\xfc\xff+\x03\x85\x00m\x02\xe7a\xfe\x0eA\x01\x01\x1dYm\x03\x003\xa3iDff\xf6<,\x10&S\xfe\x0eB\x01\x01\x89Ym\x03\x00\t\xe6iD\xe1z\xa5>\x0e\x15\xbd\x14\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tm\x99\xfe\x06D\x01\x01}\xc6\x14\x00\x00\x03\x00\xb3\x84\xfe\x04E\x01\x01\x98\x00\x00\xa0\x8a\xa6h\xfe\x02F\x01\x01*\x00\x00Wn\xfe\x1eG\x01\x01\x18\xe8\xcba\r\x00\x00\x00\x00\x1d\xa6\x02\x18\xe3\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cJ<\xfe\x1aH\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00&\xb4\xfe\x08I\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x1a\xfe\x15J\x01\x01$0*c\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x80\xfe\x16K\x01\x01#Zm\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x0fl\xfe\x03L\x01\x01Ms\x00\x00S\xe3\xfe\x12M\x01\x01\xfc\x8em\x03\x004\x00\x01\x00ARMMASK\x00Wr\x84-"b'\xfe\tN\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03z\x8a\xfe\x14O\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\x17\x9e\xa6:\x04)\xc4\xb9\x99\xe7*\xb9\xa9\x9a\xfe\x18T\x01\x01\xb2\nU\x81\xbd\x15,\x18\xbb\x13\xd7S>\x00\xb0)D\x1e\xa6\x02\x18\xe4\xe7\xb8\xfdF]\xfe\x1cU\x01\x01\xa3\x13\xa8\x0c\xb9,Q\x817\xf8f4\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xf8'\xa3:\xd4#\x83;\x1e\xaa\xfe\x03V\x01\x01\xa5\xc5\x14\x00\x1f\x18\xfe\x0cW\x01\x01\x02\xe0\xcf\xcdw\xb1N\x05\x00\x0en\x03\x00\x11W\xfe\x16X\x01\x01\x88\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00<\x9f\xfe\x16Y\x01\x01\xc1kKH<\xa0\xc6D7t\xd6\xb3:\x12\xc8\xab=\x00\x00\x00\x00\xa5\x03\x02(\xfe\x1aZ\x01\x01\x1b\x10\xd1f\r\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01W\xaf\xfe\x16[\x01\x01tJn\x03\x00\x0f\x00;\x00+\xfc\x02\x00\x02\x00\xff\xff\x07\x01\xa0\xff4\x02.`\xfe\x16\\\x01\x01\x81Jn\x03\x00\x02\x00>\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff%\x03\x89\x00o\x02\x16D\xfe\x0e]\x01\x01\x1dJn\x03\x00i\xa3iD\xd7\xa3\x08=-\x10F\xfe\xfe\x0e^\x01\x01\x89Jn\x03\x00/\xe6iD\x14\xae\xa6>\x10\x158\xdb\xfe\x1f_\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd9\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xef\xf2\xfe\x06`\x01\x01}\xc5\x14\x00\x00\x03\x00\x02\x90\xfe\x04a\x01\x01\x98\x00\x00\xa0\x8az\xa0\xfe\x02b\x01\x01*\x00\x00\xa2b\xfe\x1ec\x01\x01\x18\x10\xddd\r\x00\x00\x00\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1b\xc6\xfe\x08e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x94\xfe\x15f\x01\x01$\xe0\xd3f\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x16\xfe\x16g\x01\x01#Jn\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18\x99"b'\xfe\x03h\x01\x01Ms\x00\x00}C\xfe\x14i\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xab\xef'b'\xfe\x1cj\x01\x01!\x93n\x03\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa7\x04\xe2\xb3\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9\xfe\x1cl\x01\x01\x1e\xebn\x03\x00\x94\x08\x7f\xbd\x00\xab\x0b8q\xf2T>\xec\x19\x01:\x80\xe4_\xbag@0\xb9\x1d\xe0\xfe\x18m\x01\x01\xb2\xe9s\x81\xbd\xf3\x14\x19\xbb7\xd1S>\x85\xab)D\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\xf9_\xfe\x1cn\x01\x01\xa3\x8b\xa7\x0e\xb9\x8e\x8c\x9b7\tz0\xb8\x00\x00\x00\x00\x00\x00\x00\x00""\xa9:[\xf1c;>c\xfe\x03o\x01\x01\xa5\xc5\x14\x00\x94Y\xfe\x0cp\x01\x01\x02`y\xd1w\xb1N\x05\x00\xffn\x03\x00a`\xfe\x16q\x01\x01\x88\x1e\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbcV\xfe\x16r\x01\x01\xc1=\xedB\x11\x15\x04\x02\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T)]\xfe\x06y\x01\x01}\xc8\x14\x00\x00\x03\x003&\xfe\x04z\x01\x01\x98\x00\x00\xa0\x8a#\xf6\xfe\x02{\x01\x01*\x00\x00R\x96\xfe\x1e|\x01\x01\x188\xeeg\r\x00\x00\x00\x00\x1e\xa6\x02\x18\xe4\xe7\xb8\xfdFd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c1\xd5\xfe\x1a}\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00e)\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed\xfe\x15\x7f\x01\x01$w\x82j\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xe9\xfe\x16\x80\x01\x01#\xf9%0:Yh\xa6\xb7\x13Z3\xb9\xa3t\xfe\x18\x86\x01\x01\xb2\xb6`\x81\xbd\xf8U\x1c\xbbd\xefS>G\xb1)D\x1f\xa6\x02\x18\xe4\xe7\xb8\xfd\xb1B'b'\xfe\x1c\x87\x01\x01\xa3]\xa5\x10\xb9\x18\xa9\xb57\xc1\xa9,\xb8\x00\x00\x00\x00\x00\x00\x00\x00>\xc3\x9b:J\xd9@;\x0e\xc6\xfe\x03\x88\x01\x01\xa5\xc5\x14\x00y\xdd\xfe\x0c\x89\x01\x01\x02\xc8&\xd5w\xb1N\x05\x00\xf0o\x03\x00\r1\xfe\x16\x8a\x01\x01\x88\x1f\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00L\xeb\xfe\x16\x8b\x01\x01\xc15\xf1:<\x02\xd4F7\x0b}\xad9\xae\xc4\xaf=\x00\x00\x00\x00\xa5\x037Z\xfe\x1a\x8c\x01\x01\x1b\xb9,n\r\x00\x00\x00\x00\x04\x003\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x9c1\xfe\x16\x8d\x01\x01t,p\x03\x00\x0c\x00A\x00*\xfc\xff\xff\xfd\xff\xff\xff\x07\x01\xa1\xff4\x02k\xcf\xfe\x16\x8e\x01\x01\x81,p\x03\x00\x01\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfe\xff&\x03\x85\x00q\x02\xc49\xfe\x0e\x8f\x01\x01\x1d,p\x03\x00\x8f\xa3iDp=\x12=-\x10\xe0\x19\xfe\x0e\x90\x01\x01\x89,p\x03\x00\x14\xe6iD\n\xd7\xa5>\x11\x15\xfc\x0e\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00,?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe6\xa0\xfe\x06\x92\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xd9\xfe\x04\x93\x01\x01\x98\x00\x00\xa0\x8a\x99\x11\xfe\x02\x94\x01\x01*\x00\x00>\xad\xfe\x1e\x95\x01\x01\x18\xa0\x0cn\r\x00\x00\x00\x00 \xa6\x02\x18\xe4\xe7\xb8\xfddd\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd8\xf2\xfe\x1a\x96\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb7J\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5\xfe\x15\x98\x01\x01$\x990n\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9w\xfe\x16\x99\x01\x01#-p\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\\\x8b'b'\xfe\x03\x9a\x01\x01Ms\x00\x00\x89\x0b\xfe\x14\x9b\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf0\xd3\xfe\x1c\x9c\x01\x01!$p\x03\x00 \xa6\x02\x18\xe4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa7\x04T\xd2'b'\xfe\x1c\x9d\x01\x01\x1e\xccp\x03\x00U\x8d\x7f\xbd\x80\xdc\x1e\xb8|\xf8T>\xb31-6\xd5Y\x1a\xba\x90\xef\xd68A<\xfe\x18\x9e\x01\x01\xb2\xb8\x80\x81\xbdK\xad \xbb\x98\x12T>)\xac)D \xa6\x02\x18\xe4\xe7\xb8\xfdB\xdf\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\x1c\xa0\x01\x01\xa3\xa9\xa3\x12\xb9.\xb4\xcf7\x18\xf3(\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x0b\xf9\x95:P\x7f7;\xc1E\xfe\x03\xa1\x01\x01\xa5\xca\x14\x00su\xfe\x0c\xa2\x01\x01\x02x\xc8\xd8w\xb1N\x05\x00\xe0p\x03\x003\x14\xfe\x16\xa3\x01\x01\x88 \xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb5\x85\xfe\x16\xa4\x01\x01\xc1_\xb89<>\xeaF7F\xea\xbe:T\xfb\xb4=\x00\x00\x00\x00\xa5\x03\xe5\xce\xfe\x16\xa5\x01\x01\xe1\xbdt\x13?)\x91D>:\xeah\x13\x15~\x98\xfe\x1f\xab\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe8s\xfe\x06\xac\x01\x01}\xc5\x14\x00\x00\x03\x00\xe3-\xfe\x04\xad\x01\x01\x98\x00\x00\xa0\x8a\xe1\xc2\xfe\x02\xae\x01\x01*\x00\x00#\x92\xfe\x1e\xaf\x01\x01\x18\xc8\x1dq\r\x00\x00\x00\x00 \xa6\x02\x18\xe4\xe7\xb8\xfdnd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c!\xfe\xfe\x1a\xb0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x005\xa3\xfe\x08\xb1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00.}\xfe\x15\xb2\x01\x01$\xb4\xdeq\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Fz\xfe\x16\xb3\x01\x01#\x1eq\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00*\xe3\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d\xfe\x14\xb5\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe66\xfe\x12\xb6\x01\x01\xfcyq\x03\x004\x00\x01\x00ARMMASK\x00Wr\xf8\x93'b'\xfe\t\xb7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03*\xad\xfe\x1c\xb8\x01\x01!\xedp\x03\x00 \xa6\x02\x18\xe4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\xff*\xfe\x1c\xb9\x01\x01\x1e\xbdq\x03\x00/\xaa\x7f\xbd@\x8d\x96\xb8\x13$U>\xad\xc3\x9b:0\x10\x99\xbaz\xfc\xaa9\xf7\xa4\xfe\x18\xba\x01\x01\xb2\xbcq\x81\xbd[X$\xbb\xa9GT>)\xac)D!\xa6\x02\x18\xe4\xe7\xb8\xfd+\xe3\xfe\x03\xbb\x01\x01Ms\x00\x00\xc6<\xfe\x1c\xbc\x01\x01\xa3%\x9f\x14\xb9\x03\xab\xe97\xd1b%\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe2 \x95:m\x98F;\xeaj\xfe\x03\xbd\x01\x01\xa5\xc5\x14\x00\x90\xa7\xfe\x0c\xbe\x01\x01\x02\xe0u\xdcw\xb1N\x05\x00\xd1q\x03\x00\x90\xea\xfe\x16\xbf\x01\x01\x88!\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xc3\xfe\x16\xc0\x01\x01\xc1MN9\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff%\x03\x86\x00l\x023\x84\xfe\x0e\xc4\x01\x01\x1d\rr\x03\x00^\xa4iD{\x14F=.\x10\x8c\xc0\xfe\x0e\xc5\x01\x01\x89\rr\x03\x00O\xe6iD\x14\xae\xa7>\x13\x15[2\xfe\x1f\xc6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc6\xc8\xfe\x06\xc7\x01\x01}\xc8\x14\x00\x00\x03\x00:n\xfe\x04\xc8\x01\x01\x98\x00\x00\xa0\x8a\xa3\xa1\xfe\x02\xc9\x01\x01*\x00\x00\xbe\xf1\xfe\x1e\xca\x01\x01\x18\x08+t\r\x00\x00\x00\x00!\xa6\x02\x18\xe4\xe7\xb8\xfdxd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe5\x11\xfe\x1a\xcb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x1ag\xfe\x08\xcc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00~\xcf\xfe\x15\xcd\x01\x01$\xdd\x86u\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x0c\xfe\x16\xce\x01\x01#\x0er\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf4{\xfe\x03\xcf\x01\x01/\xff\x00\x00\xb7\xda"b'\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH\xfe\x14\xd1\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xbb\xbe\xfe\x1c\xd2\x01\x01!}r\x03\x00!\xa6\x02\x18\xe4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\x8dp'b'\xfe\x1c\xd3\x01\x01\x1e\xadr\x03\x00\x98\xc6\x7f\xbd\x00m@8C\x1eU>\xf1]\xa0\xb9\xedL\xee\xb9\x9c\x08Z\xb9\xf6\xd0\xfe\x18\xd4\x01\x01\xb2\xe5b\x81\xbd\n%\x1f\xbbclT>\xb8\xae)D!\xa6\x02\x18\xe4\xe7\xb8\xfd\x15t\xfe\x1c\xd5\x01\x01\xa3\x8a\x9b\x16\xb9)\xc2\x018Y\xd7!\xb8\x00\x00\x00\x00\x00\x00\x00\x00\\\xa3\x8c:\xdd\xb8D;\xc3g\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3\xfe\x0c\xd7\x01\x01\x02`\x1f\xe0w\xb1N\x05\x00\xc1r\x03\x009\x1a\xfe\x16\xd8\x01\x01\x88!\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xed^\xfe\x16\xd9\x01\x01\xc11\xcd9\x14\x15\x01\xd2\xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x99\x01\xfe\x06\xe1\x01\x01}\xc2\x14\x00\x00\x03\x00\x90\x90\xfe\x04\xe2\x01\x01\x98\x00\x00\xa0\x8a\xaa\xb2\xfe\x02\xe3\x01\x01*\x00\x00j{\xfe\x1e\xe4\x01\x01\x18H8w\r\x00\x00\x00\x00!\xa6\x02\x18\xe4\xe7\xb8\xfd\x82d\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c#\xc0\xfe\x1a\xe5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00^\x97\xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\\xfe\x15\xe7\x01\x01$K2y\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd38\xfe\x16\xe8\x01\x01#\xfer\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x003S'b'\xfe\x03\xe9\x01\x01Ms\x00\x00 \t\xfe\x14\xea\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00um'b'\xfe\x1c\xeb\x01\x01!Fs\x03\x00"\xa6\x02\x18\xe5\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa8\x04nq\xfe\x1c\xec\x01\x01\x1e\x9es\x03\x00\xc1\xc2\x7f\xbd\x00{z\xb8\x81\x13U>\rj`:\x1b*\xc9\xb9}\xea\x02:\xdb\x04\xfe\x18\xed\x01\x01\xb2\x14P\x81\xbd-\xf4#\xbb\x87\x85T>\x14\xae)D"\xa6\x02\x18\xe5\xe7\xb8\xfd\xca\xf1\xfe\x1c\xee\x01\x01\xa3\xc2\x96\x18\xb9\xc6\xa1\x0e8\x81[\x1e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x17\xfc\x80:\xbb\x15@;\x12\xb1\xfe\x03\xef\x01\x01\xa5\xc8\x14\x00\xf9\x19\xfe\x0c\xf0\x01\x01\x02\xe0\xc8\xe3w\xb1N\x05\x00\xb2s\x03\x00\xa39\xfe\x16\xf1\x01\x01\x88"\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00n\x96\xfe\x16\xf2\x01\x01\xc1\xe1\x8b@<\x0e\x82E7\xbb_\x06:\xbc\x89\xb6=\x00\x00\x00\x00\xa5\x03x]\xfe\x03\xf3\x01\x01Ms\x00\x00\x8bt'b'\xfe\x1a\xf4\x01\x01\x1bM\xdf|\r\x00\x00\x00\x00\x05\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffn\x01|G\xfe\x16\xf5\x01\x01t\xefs\x03\x00\x00\x006\x004\xfc\x00\x00\x00\x00\x00\x00\x06\x01\x9f\xff4\x02)[\xfe\x16\xf6\x01\x01\x81\xefs\x03\x00\x04\x00?\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x86\x00l\x02ba\xfe\x0e\xf7\x01\x01\x1d\xefs\x03\x00T\xa5iD\x8f\xc2\x81=0\x10i\x8e\xfe\x0e\xf8\x01\x01\x89\xefs\x03\x00\xae\xe7iD\xd7\xa3\xb2>\x15\x15\xe6\x99\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa6\xe9\xfe\x06\xfa\x01\x01}\xc8\x14\x00\x00\x03\x00\x9bJ\xfe\x04\xfb\x01\x01\x98\x00\x00\xa0\x8a\t\x7f\xfe\x02\xfc\x01\x01*\x00\x00W\xd7\xfe\x1e\xfd\x01\x01\x18pIz\r\x00\x00\x00\x00"\xa6\x02\x18\xe5\xe7\xb8\xfd\x8cd\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cV\xf3\xfe\x1a\xfe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00Y\xfa\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\xfe\x15\x00\x01\x01$X\xe2|\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdbV\xfe\x16\x01\x01\x01#\xf0s\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x9b$'b'\xfe\x14\x02\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00\xbe\xfa\xfe\x03\x03\x01\x01Ms\x00\x00\x107\xfe\x1c\x04\x01\x01!\x0ft\x03\x00"\xa6\x02\x18\xe5\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa8\x04\xf0M\xfe\x1c\x05\x01\x01\x1e\x8ft\x03\x00\x86\x14\x80\xbd\x00\xa4\x0c\xb8\x04&U>\x95\xa2\x839\xe2\xb8#\xb9\xb7\x18\x81\xb9\xcf\xbf\xfe\x18\x06\x01\x01\xb2*o\x81\xbd\xdd\x05"\xbb\xe7\xabT>)\xac)D"\xa6\x02\x18\xe5\xe7\xb8\xfdq\xf0'b'\xfe\x1c\x07\x01\x01\xa3s\x8d\x1a\xb9\x9dp\x1b8\x93\x0f\x1b\xb8\x00\x00\x00\x00\x00\x00\x00\x00,1\x7f:\x04\xd9\xf3:\xe9m\xfe\x03\x08\x01\x01\xa5\xc6\x14\x00V3\xfe\x0c\t\x01\x01\x02((\xe7w\xb1N\x05\x00\xa4t\x03\x00\\\x08\xfe\x16\n\x01\x01\x88"\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00W\xa2\xfe\x12\x0b\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xae\x96\xfe\x16\x0c\x01\x01\xc1\x93\x9e><\x17\xb2E7\xe8\xe5\x1b;\xc5\xea\xa2=\x00\x00\x00\x00\xa5\x03G\xe3\xfe\x03\r\x01\x01Ms\x00\x00\x1d\x07\xfe\x1a\x0e\x01\x01\x1b\xa2\x8a\x80\r\x00\x00\x00\x00\x02\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01\xe7"\xfe\x16\x0f\x01\x01t\xdft\x03\x00\x07\x001\x00)\xfc\x01\x00\x00\x00\x04\x00\x07\x01\xa0\xff4\x02\x95\x0f\xfe\x16\x10\x01\x01\x81\xdft\x03\x00\x02\x00@\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x87\x00o\x02\x9f\x8c\xfe\x0e\x11\x01\x01\x1d\xdft\x03\x00\x1d\xa4iD\x8f\xc25=0\x10\x87\xe1\xfe\x0e\x12\x01\x01\x89\xdft\x03\x00\n\xe7iD\x1e\x85\xad>\x16\x15+\xe8\xfe\x1f\x13\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00-?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf1\xd1\xfe\x06\x14\x01\x01}\xc5\x14\x00\x00\x03\x00\x9d\x90\xfe\x04\x15\x01\x01\x98\x00\x00\xa0\x8aQq\xfe\x02\x16\x01\x01*\x00\x00\x98\x1c\xfe\x1e\x17\x01\x01\x18\xc0k\x80\r\x00\x00\x00\x00#\xa6\x02\x18\xe6\xe7\xb8\xfd\xa0d\n\x00F\x00\xff\xff\x04\x00|J\x03\x0c\x9f\xdd\xfe\x1a\x18\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x9aI\xfe\x08\x19\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00D#\xfe\x15\x1a\x01\x01$\xd1\x8c\x80\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00%?\xfe\x16\x1b\x01\x01#\xe0t\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x04\x94'b'\xfe\x14\x1c\x01\x01J\n\xd7#=\n\xd7#=\x99\x99\x99\xbe\n\xd7#<\x0b\x00\x00\x00\xcf\xc6\xfe\x03\x1d\x01\x01Ms\x00\x00e\\\xfe\x1c\x1e\x01\x01!\xd8t\x03\x00#\xa6\x02\x18\xe6\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfd\xff\x02\x00\x01\x00\xa9\x04\xf50\xfe\x12\x1f\x01\x01\xfcdu\x03\x004\x00\x01\x00ARMMASK\x00Wr_\xe7\xfe\t \x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa4\x8d'b'\xfe\x1c!\x01\x01\x1e\x80u\x03\x00\xb4)\x80\xbd\x00F\xfe7\xa6AU>\x9c\xed\xa0\xb7x.\x93\xb9\x13\x96\x10\xbaG\xc1\xfe\x18"\x01\x01\xb2\xe3m\x81\xbd\xa3`"\xbb\xbe\xdbT>\\\x9f)D#\xa6\x02\x18\xe6\xe7\xb8\xfdV\'\xfe\x1c#\x01\x01\xa3T\x80\x1c\xb9h-(8\x96\xff\x17\xb8\x00\x00\x00\x00\x00\x00\x00\x00O\xd1\x80:\x10\x83\xb9:b\xef\xfe\x03$\x01\x01\xa5\xc5\x14\x00\t\x9b\xfe\x0c%\x01\x01\x02\xe0\x1b\xebw\xb1N\x05\x00\x94u\x03\x00R\xc2\xfe\x16&\x01\x01\x88#\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xadL\xfe\x16\'\x01\x01\xc1\r\xd1<<\xd5\x19E7\x10\x15$<(\xb0\xb0=\x00\x00\x00\x00\xa5\x03\x8c\x16\xfe\x16(\x01\x01\xe1\xbdt\x13?\x0b\xe90>ed\x90<\xb4\xbfx\x00\x1f+4\xfe\t\xc6\n\x00m\x04\x00\x00\x00\x00\xd5\x00\x00\x00\x90\xee\xfe\x03)\x01\x01Ms\x00\x003\xa7'b'\xfe\x1a*\x01\x01\x1bP8\x84\r\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01\x90Q\xfe\x16+\x01\x01t\xd0u\x03\x00\x01\x00@\x004\xfc\x00\x00\xff\xff\x00\x00\x07\x01\xa2\xff4\x02\xd0#\xfe\x16,\x01\x01\x81\xd0u\x03\x00\x00\x00@\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x88\x00o\x02\x15O\xfe\x0e-\x01\x01\x1d\xd1u\x03\x00\x0c\xa4iD\x99\x991=/\x105S\xfe\x0e.\x01\x01\x89\xd1u\x03\x00\xd9\xe6iD\x00\x00\xac>\x16\x15\t\xc9\xfe\x1f/\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d-?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcb\x0f\xfe\x060\x01\x01}\xc8\x14\x00\x00\x03\x00\r\x02\xfe\x041\x01\x01\x98\x00\x00\xa0\x8a\x8d\xb9\xfe\x022\x01\x01*\x00\x00m\x10\xfe\x1e3\x01\x01\x18\x00y\x83\r\x00\x00\x00\x00$\xa6\x02\x18\xe7\xe7\xb8\xfd\xaad\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cS\xee\xfe\x1a4\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa7;\xfe\x085\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x008\xad\xfe\x156\x01\x01$\xf2:\x84\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97P\xfe\x167\x01\x01#\xd1u\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00P\x02\xfe\x148\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x18S\x9d\xb9v\xb23\xb9\x97\x87\xe35\x18l\xfe\x18=\x01\x01\xb2\xf1s\x81\xbdT\xf9\x1e\xbb+\nU>\x99\xa9)D%\xa6\x02\x18\xe7\xe7\xb8\xfd\xa7/\xfe\x1c>\x01\x01\xa3\xdeo\x1e\xb9\xf9\xda48\xc5\x00\x15\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x8f~:\xc4\xf8\x1a;\xcb\xd8\xfe\x03?\x01\x01\xa5\xc5\x14\x00\x1dg\xfe\x0c@\x01\x01\x02`\xc5\xeew\xb1N\x05\x00\x85v\x03\x00\xd1\x16\xfe\x16A\x01\x01\x88%\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00vn\xfe\x16B\x01\x01\xc1\xfe\xc6=<\x9f\xc2E7\x90\xc7\xf4:\xc4\x11\xb0=\x00\x00\x00\x00\xa5\x03_\xa3'b'\xfe\x03C\x01\x01Ms\x00\x00\xe1R\xfe\x1aD\x01\x01\x1b\xe7\xe2\x87\r\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffn\x01\xc1\xd3\xfe\x16E\x01\x01t\xc1v\x03\x00\x00\x006\x001\xfc\x03\x00\xff\xff\x01\x00\x07\x01\xa0\xff3\x02\x12\xb8\xfe\x16F\x01\x01\x81\xc1v\x03\x00\x03\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfe\xff(\x03\x89\x00l\x02\x8e\xbb\xfe\x0eG\x01\x01\x1d\xc1v\x03\x00y\xa4iD\xcc\xccL=0\x10\x16\xc3\xfe\x0eH\x01\x01\x89\xc1v\x03\x00O\xe6iD\x14\xae\xa7>\x17\x15\xb7\xf3\xfe*I\x01\x01\x96s\xe7f\xbc\x10m\x01\x000\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd0\xb5\xfe\x1fJ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tm0\xfe\x06K\x01\x01}\xc8\x14\x00\x00\x03\x00\xde\x1e\xfe\x04L\x01\x01\x98\x00\x00\xa0\x8a\x91Z\xfe\x02M\x01\x01*\x00\x00\xd5\x18\xfe\x1eN\x01\x01\x18\x08<\x86\r\x00\x00\x00\x00%\xa6\x02\x18\xe7\xe7\xb8\xfd\xbed\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x19\xfc\xfe\x1aO\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x88\xff\xfe\x08P\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd0h\xfe\x15Q\x01\x01$d\xe5\x87\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4[\xfe\x16R\x01\x01#\xc1v\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x009\x14'b'\xfe\x14S\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb5\x94\xfe\x1cT\x01\x01!2w\x03\x00&\xa6\x02\x18\xe8\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x04\xf6\xed\xfe\x03U\x01\x01Ms\x00\x00(\x14'b'\xfe\x1cV\x01\x01\x1eaw\x03\x00=E\x80\xbd@\xe1<90\x88U>x1\x05\xb8\xf6\xf1K\xba\xda \xa4\xb9\x05\x00\xfe\x18W\x01\x01\xb2\xbeZ\x81\xbd\xa8\xa0\x1e\xbbc@U>G\xa1)D&\xa6\x02\x18\xe8\xe7\xb8\xfd\x8e"\xfe\x1cX\x01\x01\xa3B^ \xb9\xcd\x8aA8\x8f\xe7\x11\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x89\xff\x8a:\x15\t\x7f;jy\xfe\x03Y\x01\x01\xa5\xbd\x14\x000\x16\xfe\x0cZ\x01\x01\x02\xc8r\xf2w\xb1N\x05\x00vw\x03\x00g\xff\xfe\x16[\x01\x01\x88&\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\x8c\xfe\x16\\\x01\x01\xc1\x9f\x8f8<\xe6.F7\xab0\x03\x17\x15\x98\x94\xfe\x1fb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe5\x00.?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc8w\xfe\x06c\x01\x01}\xc5\x14\x00\x00\x03\x00\xb1n\xfe\x04d\x01\x01\x98\x00\x00\xa0\x8ab\xd2\xfe\x02e\x01\x01*\x00\x00\xba\xa5\xfe\x1ef\x01\x01\x18P\x9b\x89\r\x00\x00\x00\x00&\xa6\x02\x18\xe8\xe7\xb8\xfd\xbed\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c7<\xfe\x1ag\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00V\x81\xfe\x08h\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xaa\xfe\x15i\x01\x01$w\x91\x8b\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00^\x93\xfe\x16j\x01\x01#\xb2w\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00Y\xbc'b'\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9\xfe\x14l\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xdcb'b'\xfe\x1cm\x01\x01!\xfaw\x03\x00\'\xa6\x02\x18\xe8\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x047\xf1\xfe\x03n\x01\x01Ms\x00\x00\xcc^\xfe\x1co\x01\x01\x1eRx\x03\x00\x12T\x80\xbd\x00\xdd\x089\xdc\x82U> \x88\x989\x7fH\xaf\xba\xc7Z\x809\xa7\x9a\xfe\x18p\x01\x01\xb2\xe6[\x81\xbd\x8bp!\xbb>cU>\x14\xbe)D\'\xa6\x02\x18\xe8\xe7\xb8\xfdn\x8a\xfe\x1cq\x01\x01\xa3\xa4I"\xb9\xf0%N8\xc0\xbb\x0e\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe3\x89:\x1e\x1fK;\x1e?\xfe\x03r\x01\x01\xa5\xc5\x14\x001\xb8\xfe\x0cs\x01\x01\x02`\x18\xf6w\xb1N\x05\x00fx\x03\x00\xd3\x0c\xfe\x16t\x01\x01\x88\'\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003)\xfe\x16u\x01\x01\xc1\xb3\xba@<\xa2\x85F7%\x9em<4\xef\xb9=\x00\x00\x00\x00\xa5\x03\xa5p'b"\xfe\x1av\x01\x01\x1b\x1a=\x8f\r\x00\x00\x00\x00\x03\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01&\x8a\xfe\x16w\x01\x01t\xa3x\x03\x00\x01\x008\x00.\xfc\x00\x00\x00\x00\xff\xff\x08\x01\xa0\xff4\x02\xc6_\xfe\x16x\x01\x01\x81\xa3x\x03\x00\x01\x00@\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x87\x00\x80\x02\xe0I\xfe\x0ey\x01\x01\x1d\xa3x\x03\x00\x1b\xa3iDp=\xea\x17\x15\x8cC\xfe\x1f{\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xed\xf4\xfe\x06|\x01\x01}\xc8\x14\x00\x00\x03\x00\xf7-\xfe\x04}\x01\x01\x98\x00\x00\xa0\x8a\xc1\x1f\xfe\x02~\x01\x01*\x00\x00\xf1f\xfe\x1e\x7f\x01\x01\x18\x90\xa8\x8c\r\x00\x00\x00\x00'\xa6\x02\x18\xe9\xe7\xb8\xfd\xdcd\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cM\xc8\xfe\x1a\x80\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa1\xf7\xfe\x08\x81\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00^\x92\xfe\x15\x82\x01\x01$5@\x8f\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x03\xfe\x16\x83\x01\x01#\xa3x\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe9Q\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`"b"\xfe\x14\x85\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xef\xbd\xfe\x1c\x86\x01\x01!\xafx\x03\x00'\xa6\x02\x18\xe9\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xa3\x0e\xfe\x03\x87\x01\x01Ms\x00\x00,\xea\xfe\x1c\x88\x01\x01\x1eBy\x03\x00C@\x80\xbd@1\xb48\xdazU>h\x1d :R\xcc\xf2\xb9\xf1\xd6w9p%\xfe\x18\x89\x01\x01\xb2\xf6Q\x81\xbd\xd1\x05#\xbb[|U>=\xba)D'\xa6\x02\x18\xe9\xe7\xb8\xfd.\xb3\xfe\x12\x8a\x01\x01\xfcOy\x03\x004\x00\x01\x00ARMMASK\x00Wr\x1a\xae"b"\xfe\t\x8b\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x98\xc2\xfe\x1c\x8c\x01\x01\xa3\x85,$\xb9u\xa3Z8\xce\xba\x0b\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xe6$\x84:\xc6\xee9;\xa9\xb3\xfe\x03\x8d\x01\x01\xa5\xc5\x14\x00\x18J\xfe\x0c\x8e\x01\x01\x02\xe0\xc1\xf9w\xb1N\x05\x00Wy\x03\x006\xdb\xfe\x16\x8f\x01\x01\x88'\xa6\x02\x18\xe9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\x8e\xfe\x16\x90\x01\x01\xc1\xa3\x90K<&iH7\xbd\x97\xab:~\xb4\xbe=\x00\x00\x00\x00\xa5\x03\xd0\x06\xfe\x1a\x91\x01\x01\x1bD\xe6\x92\r\x00\x00\x00\x00\x03\x006\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\n\x01\xaf\xffn\x01`U\xfe\x16\x92\x01\x01t\x93y\x03\x00\x03\x00/\x00 \xfc\x02\x00\x00\x00\xfe\xff\x07\x01\xa1\xff4\x02J.\xfe\x16\x93\x01\x01\x81\x93y\x03\x00\x04\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x88\x00k\x02K\x1e\xfe\x0e\x94\x01\x01\x1d\x93y\x03\x00\x8f\xa3iDp=\x12=0\x10\xb1\xf8\xfe\x0e\x95\x01\x01\x89\x93y\x03\x00\x0b\xe7iD\\\x8f\xad>\x19\x150\xb6\xfe\x1f\x96\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TgG\xfe\x06\x97\x01\x01}\xc5\x14\x00\x00\x03\x005\xfc\xfe\x04\x98\x01\x01\x98\x00\x00\xa0\x8aT\xb8\xfe\x02\x99\x01\x01*\x00\x00q\x83\xfe\x1e\x9a\x01\x01\x18\xd8x\x92\r\x00\x00\x00\x00)\xa6\x02\x18\xe9\xe7\xb8\xfd\xf0d\n\x00F\x00\xff\xff\x02\x00|J\x03\x0ci*\xfe\x1a\x9b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa6\x9a\xfe\x08\x9c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6\xfe\x15\x9d\x01\x01$4\xe9\x92\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xec\xfe\x16\x9e\x01\x01#\x93y\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00C\t\xfe\t\xc7\n\x00m(\x00\x00\x00\x00\xd5\x00\x00\x00z\xe5"b'\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\x14\xa0\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00S\x13\xfe\x1c\xa1\x01\x01!wy\x03\x00)\xa6\x02\x18\xe9\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04Ws'b"\xfe\x03\xa2\x01\x01Ms\x00\x00\xbd\xcb\xfe\x1c\xa3\x01\x01\x1e4z\x03\x00\xe3D\x80\xbd\x80\xa6\x898\x18\x80U>\xee\xb6\xd86=\xaaK\xba\x98X\x03\xba]\x92\xfe\x18\xa4\x01\x01\xb2\x12C\x81\xbd\x8ey%\xbb\xe0\x9bU>f\xb6)D)\xa6\x02\x18\xe9\xe7\xb8\xfd\x9f\x82\xfe\x1c\xa5\x01\x01\xa3'\t&\xb9\xe7\x0eg8?\xbf\x08\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xe3t:4\xca\x06;|K\xfe\x03\xa6\x01\x01\xa5\xca\x14\x00}\xe9\xfe\x0c\xa7\x01\x01\x02xg\xfdw\xb1N\x05\x00Gz\x03\x00\xfc\xa6\xfe\x16\xa8\x01\x01\x88)\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\xdf\xfe\x16\xa9\x01\x01\xc1\xaf4W<\x98dJ7\xe4\xf2\xd8;\xcc\xa6\xb3=\x00\x00\x00\x00\xa5\x03~\xbe\xfe\x16\xaa\x01\x01\xe143\x13?\xebQ8>F\xa8\x85\x1a\x15\xf4\xb6\xfe\x1f\xb1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80c.?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xe1\x8e\xfe\x06\xb2\x01\x01}\xc3\x14\x00\x00\x03\x00\xb6M\xfe\x04\xb3\x01\x01\x98\x00\x00\xa0\x8a\xa0\xe6\xfe\x02\xb4\x01\x01*\x00\x00\xbd\xce\xfe\x1e\xb5\x01\x01\x18\x00\x8a\x95\r\x00\x00\x00\x00)\xa6\x02\x18\xea\xe7\xb8\xfd\xfad\n\x00F\x00\xff\xff\x02\x00|J\x03\x0ce\xd8\xfe\x1a\xb6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xaf-\xfe\x08\xb7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc0`\xfe\x15\xb8\x01\x01$\x9a\x98\x96\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90)\xfe\x16\xb9\x01\x01#\x85z\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00k\xa4\xfe\x03\xba\x01\x01Ms\x00\x00y\xbd\xfe\x14\xbb\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xb6{'b'\xfe\x1c\xbc\x01\x01!@z\x03\x00)\xa6\x02\x18\xea\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xf5\xc7\xfe\x1c\xbd\x01\x01\x1e${\x03\x00\x83h\x80\xbd\x00 y7&\x9dU>>\x7f\xc49\x80\x11<\xbal\xdd\x86\xb9;\x9c\xfe\x18\xbe\x01\x01\xb2\x8df\x81\xbdd\xc5\'\xbb\xa6\xc6U>\\\xaf)D*\xa6\x02\x18\xeb\xe7\xb8\xfdb\x17\xfe\x1c\xbf\x01\x01\xa3d\xdd\'\xb9kTs8B\xe0\x05\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xac\x96w:\xa2\x1b\t;\xef\x83\xfe\x03\xc0\x01\x01\xa5\xcb\x14\x00v;\xfe\x0c\xc1\x01\x01\x02\xe0\x14\x01x\xb1N\x05\x008{\x03\x00"K\xfe\x16\xc2\x01\x01\x88*\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00L\xd2\xfe\x16\xc3\x01\x01\xc1\xaf\x06V<\xfd\x04M7\x96l\x9a:\x07\xd0\xbd=\x00\x00\x00\x00\xa5\x03q\xb8\xfe\x03\xc4\x01\x01Ms\x00\x00\r\x05'b"\xfe\x1a\xc5\x01\x01\x1b\xd8A\x9a\r\x00\x00\x00\x00\x03\x004\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffl\x01\x13\x06\xfe\x16\xc6\x01\x01tu{\x03\x00\r\x007\x00'\xfc\xfe\xff\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\x90%\xfe\x16\xc7\x01\x01\x81u{\x03\x00\x02\x00>\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x86\x00k\x02e\xab\xfe\x0e\xc8\x01\x01\x1du{\x03\x00b\xa4iD=\nG=1\x10\r\xc2\xfe\x0e\xc9\x01\x01\x89u{\x03\x00%\xe7iD)\\\xae>\x1a\x15\x8f\x88\xfe\x1f\xca\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe8\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T/a\xfe\x06\xcb\x01\x01}\xc5\x14\x00\x00\x03\x00\x8a\xa2\xfe\x04\xcc\x01\x01\x98\x00\x00\xa0\x8aF\x9e\xfe\x02\xcd\x01\x01*\x00\x00\xc8\x9e\xfe\x1e\xce\x01\x01\x18(\x9b\x98\r\x00\x00\x00\x00*\xa6\x02\x18\xeb\xe7\xb8\xfd\x04e\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd0L\xfe\x1a\xcf\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf9k\xfe\x08\xd0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00r\xae\xfe\x15\xd1\x01\x01$\xceD\x9a\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x14\xfe\x16\xd2\x01\x01#u{\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xbe\x87"b'\xfe\x14\xd3\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\n\xd7#<\x0b\x00\x00\x00\xd1\x06\xfe\x03\xd4\x01\x01Ms\x00\x00u^\xfe\x1c\xd5\x01\x01!\xd1{\x03\x00+\xa6\x02\x18\xeb\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\xc1\xc5'b'\xfe\x1c\xd6\x01\x01\x1e\x15|\x03\x000\xa2\x80\xbd\x00\x94/\xb8\xdc\x8eU>?\x19\x159\xf7(W\xbahx\x83:\xbci\xfe\x18\xd7\x01\x01\xb2\x88|\x81\xbd\xe3:+\xbb\xa9\xcbU>\xae\xa7)D+\xa6\x02\x18\xeb\xe7\xb8\xfd\x90M\xfe\x1c\xd8\x01\x01\xa3\xca\xa9)\xb9Fh\x7f8\xaf,\x03\xb8\x00\x00\x00\x00\x00\x00\x00\x00\xcdl\x7f:\x93\xa6];[\xf6\xfe\x03\xd9\x01\x01\xa5\xc6\x14\x00\x82G\xfe\x0c\xda\x01\x01\x02\x80\x0c\x05x\xb1N\x05\x00)|\x03\x00\x1f\x8c\xfe\x16\xdb\x01\x01\x88+\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00z\x87\xfe\x16\xdc\x01\x01\xc1\x9e\xb1P\x1b\x15\xc1\xeb\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x83\xbf\xfe\x06\xe4\x01\x01}\xc6\x14\x00\x00\x03\x00"\xf4\xfe\x04\xe5\x01\x01\x98\x00\x00\xa0\x8aH[\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b\xfe\x1e\xe7\x01\x01\x18h\xa8\x9b\r\x00\x00\x00\x00+\xa6\x02\x18\xeb\xe7\xb8\xfd\x0ee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xaeB\xfe\x1a\xe8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00OG\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i\xfe\x15\xea\x01\x01$#\xee\x9d\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xabN\xfe\x16\xeb\x01\x01#e|\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00S\xd8'b'\xfe\x14\xec\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00\x02g'b'\xfe\x1c\xed\x01\x01!\x9a|\x03\x00,\xa6\x02\x18\xec\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xaa\x04\x1f5\xfe\x03\xee\x01\x01Ms\x00\x00.\x95\xfe\x1c\xef\x01\x01\x1e\x05}\x03\x00\xf3|\x80\xbd\x00\x98\xea\xb8\x92\x93U>5\x17h80\xf5\n\xba\xa3\xe3\xe09\xdeF\xfe\x18\xf0\x01\x01\xb2\xd1h\x81\xbd\xdc\xab.\xbb\xd5\xf1U>\\\xaf)D,\xa6\x02\x18\xec\xe7\xb8\xfd\xc0\xe1\xfe\x1c\xf1\x01\x01\xa3\x89q+\xb9\xd4\xab\x858-i\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00jA\x83:\xdd\xe73;2\xa4\xfe\x03\xf2\x01\x01\xa5\xc2\x14\x00\xf2$\xfe\x0c\xf3\x01\x01\x02\xe0g\x08x\xb1N\x05\x00\x1a}\x03\x00AH\xfe\x16\xf4\x01\x01\x88,\xa6\x02\x18\xec\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\xee\xfe\x12\xf5\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xeb\x00\xfe\x16\xf6\x01\x01\xc1\x05\xb0Z\x1b\x15k9\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T=p\xfe\x06\x00\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\x91\xfe\x04\x01\x01\x01\x98\x00\x00\xa0\x8a \xb1\xfe\x02\x02\x01\x01*\x00\x00'\xc6\xfe\x1e\x03\x01\x01\x18\x90\xb9\x9e\r\x00\x00\x00\x00.\xa6\x02\x18\xed\xe7\xb8\xfd,e\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1d\x1e\xfe\x1a\x04\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x003o\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB\xfe\x15\x06\x01\x01$\x85\x9a\xa1\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00-\xb1\xfe\x16\x07\x01\x01#V}\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00x\x00\xfe\t\xc8\n\x00m\x11\x00\x00\x00\x00\xd0\x00\x00\x00#g"b'\xfe\x14\x08\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\n\xd7#<\x0b\x00\x00\x00\xf3\x05\xfe\x1c\t\x01\x01!b}\x03\x00.\xa6\x02\x18\xed\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xab\x04-x\xfe\x1c\n\x01\x01\x1e\xf5}\x03\x00\xc8H\x80\xbd\x80\xa1T\xb8\x84\x9fU>\xd4\xe44:\xc06\x80\xba\xcf\x00\x959\xca\x96\xfe\x18\x0b\x01\x01\xb2\xe9N\x81\xbd7\xdd*\xbb\xdd\x1aV>G\xb1)D.\xa6\x02\x18\xed\xe7\xb8\xfd\x1f\xc8'b'\xfe\x1c\x0c\x01\x01\xa3\xd13-\xb9\xdf\x80\x8b8L}\xfb\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x83\x81:\xc5\xd7\x0b;\xd3\xc3\xfe\x03\r\x01\x01\xa5\xc8\x14\x00u\n\xfe\x0c\x0e\x01\x01\x02\x80_\x0cx\xb1N\x05\x00\n~\x03\x00\x08\xc8\xfe\x16\x0f\x01\x01\x88.\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00(R\xfe\x16\x10\x01\x01\xc1!\x98N<}\xffL7\xdd\x9a\t:\xe5O\xbc=\x00\x00\x00\x00\xa5\x03\x9e\xfe\xfe\x1a\x11\x01\x01\x1b\xa8B\xa5\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\t\x01\xb0\xffm\x01\x08\x8a\xfe\x16\x12\x01\x01tF~\x03\x00\n\x006\x008\xfc\x02\x00\x01\x00\x02\x00\x07\x01\xa0\xff3\x02\xea\xdc\xfe\x16\x13\x01\x01\x81F~\x03\x00\x02\x00@\x00 \xfc\xfe\xff\x01\x00\xfd\xff+\x03\x87\x00o\x023\xf6\xfe\x0e\x14\x01\x01\x1dF~\x03\x00\xa7\xa3iD\xebQ\x18=1\x10\xba\xad\xfe\x0e\x15\x01\x01\x89F~\x03\x00\xf3\xe6iD\xcd\xcc\xac>\x1c\x15t\x94\xfe\x1f\x16\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T$u\xfe\x06\x17\x01\x01}\xc6\x14\x00\x00\x03\x00@\xc6\xfe\x04\x18\x01\x01\x98\x00\x00\xa0\x8a\x83|\xfe\x02\x19\x01\x01*\x00\x00l\x05\xfe\x1e\x1a\x01\x01\x18\x10\xd4\xa4\r\x00\x00\x00\x00/\xa6\x02\x18\xee\xe7\xb8\xfd@e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xb6\xdf\xfe\x1a\x1b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd7\x0e\xfe\x08\x1c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00]0\xfe\x15\x1d\x01\x01$\x84E\xa5\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00 H\xfe\x16\x1e\x01\x01#G~\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa0z\xfe\x03\x1f\x01\x01Ms\x00\x00\nW\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\xfe\x14!\x01\x01J\n\xd7\xa3<\n\xd7\xa3v\x9f\xfd\xb8[\x81s\xba:\x15K\xb9:A\xfe\x18&\x01\x01\xb2\xc5F\x81\xbdH\xd60\xbb\x97JV>p\xad)D/\xa6\x02\x18\xee\xe7\xb8\xfd\x91\xe1\xfe\x1c'\x01\x01\xa3\x81\xef.\xb9\xe3K\x918NI\xf6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x8a4{:\xb4N\xe3:\x96\xf1\xfe\x03(\x01\x01\xa5\xbd\x14\x00\xf6\x1f\xfe\x0c)\x01\x01\x02\xf8\xb6\x0fx\xb1N\x05\x00\xfa~\x03\x00\x124\xfe\x16*\x01\x01\x88/\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb1\xff\xfe\x16+\x01\x01\xc1\xdc7U<\x06\x9fM7\x0e\xc9\x87:\x12\x82\xbb=\x00\x00\x00\x00\xa5\x03\xfeS\xfe\x16,\x01\x01\xe1\xaa\xf1\x12?\x1b\xbd:>>M\x88<\xff\xa6j\x1e\x15\x1c)\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa2W\xfe\x063\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xfc\xfe\x044\x01\x01\x98\x00\x00\xa0\x8a\x95\xcb\xfe\x025\x01\x01*\x00\x00u\xd7\xfe\x1e6\x01\x01\x188\xe5\xa7\r\x00\x00\x00\x00/\xa6\x02\x18\xef\xe7\xb8\xfdJe\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cH\x9c\xfe\x1a7\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xea|\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93\xfe\x159\x01\x01$"\xf2\xa8\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00%X\xfe\x16:\x01\x01#7\x7f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x0c\x8f\xfe\x14;\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\x01\x01!\xf3~\x03\x00/\xa6\x02\x18\xef\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xab\x04\xc8\x9e\xfe\x1c?\x01\x01\x1e\xd7\x7f\x03\x00e]\x80\xbd\xc0\x96\x96\xb8W\xb8U>\xaf\x8d\xb98\xb9h\x83\xba\x17l):-]\xfe\x18@\x01\x01\xb2UG\x81\xbdb*/\xbbd\\V>\x1e\xa5)D1\xa6\x02\x18\xf0\xe7\xb8\xfd\xd3\xff\xfe\x1cA\x01\x01\xa3\xaa\xa60\xb9\t\x05\x978E\x1d\xf1\xb7\x00\x00\x00\x00\x00\x00\x00\x000,p:{G\x11;w\xff\xfe\x03B\x01\x01\xa5\xc5\x14\x00\xb9U\xfe\x0cC\x01\x01\x02`d\x13x\xb1N\x05\x00\xeb\x7f\x03\x00\xee\xc9\xfe\x16D\x01\x01\x881\xa6\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\n\xfe\x16E\x01\x01\xc1~4N<\x9f\x98M7\x7f\xb6\xec;\xc4c\xba=\x00\x00\x00\x00\xa5\x03\x14C'b"\xfe\x1aF\x01\x01\x1b\xb8\x9a\xac\r\x00\x00\x00\x00\x03\x004\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffm\x01\xb8\xe5\xfe\x16G\x01\x01t'\x80\x03\x00\x01\x00<\x00-\xfc\x01\x00\x00\x00\xfd\xff\x07\x01\xa0\xff3\x02\xb2\r\xfe\x16H\x01\x01\x81'\x80\x03\x00\x02\x00A\x00\x1f\xfc\xfe\xff\x01\x00\xfd\xff%\x03\x87\x00k\x02\xc6\x8b\xfe\x0eI\x01\x01\x1d'\x80\x03\x00\xa7\xa3iD\xebQ\x18=2\x107{\xfe\x0eJ\x01\x01\x89'\x80\x03\x00~\xe7iD\xf6(\xb1>\x1e\x15\xb7\xc5\xfe\x1fK\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xc8\xeb\xfe\x06L\x01\x01}\xc5\x14\x04\x00\x03\x00g\xbd\xfe\x04M\x01\x01\x98\x00\x00\xa0\x8al\x17\xfe\x02N\x01\x01*\x00\x00\xbb\xb0\xfe\x1eO\x01\x01\x18x\xf2\xaa\r\x00\x00\x00\x001\xa6\x02\x18\xf0\xe7\xb8\xfd^e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cy\xb8\xfe\x1aP\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00l\x9e\xfe\x08Q\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00}m\xfe\x15R\x01\x01$O\x9d\xac\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x144\xfe\x16S\x01\x01#(\x80\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00o\x17\xfe\x03T\x01\x01Ms\x00\x00\x97\x95"b'\xfe\x14U\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xd1!Q:F\x13\xb8\xb9Z\x9d\x8f9\x9a\xbe\xfe\x18X\x01\x01\xb2?A\x81\xbd2i(\xbb\x16tV>\x85\xab)D2\xa6\x02\x18\xf0\xe7\xb8\xfd\xbd\xd3\xfe\x1cY\x01\x01\xa3tW2\xb9\xd4\xaf\x9c8e<\xec\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xc1~:2\x88\xfa:\x9a\xf5\xfe\x03Z\x01\x01\xa5\xc5\x14\x00}#\xfe\x0c[\x01\x01\x02\xd0c\x17x\xb1N\x05\x00\xdd\x80\x03\x00\xf3\x9e\xfe\x16\\\x01\x01\x882\xa6\x02\x18\xf0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00)\x16\xfe\x16]\x01\x01\xc1s\x0eG<\xe4\tM7\x87:0;\xd3\x95\xb7=\x00\x00\x00\x00\xa5\x03\xc1\xe2\xfe\x03^\x01\x01Ms\x00\x00D\xb3\xfe\x1a_\x01\x01\x1bkI\xb0\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffn\x01\xa0\x00\xfe\x16`\x01\x01t\x18\x81\x03\x00\x0c\x002\x00+\xfc\xfe\xff\x01\x00\x02\x00\x07\x01\xa0\xff3\x02\xbc\xaa\xfe\x16a\x01\x01\x81\x18\x81\x03\x00\x04\x00A\x00 \xfc\xfd\xff\x01\x00\xfd\xff-\x03\x88\x00n\x025\xf2\xfe\x0eb\x01\x01\x1d\x19\x81\x03\x00\xee\xa3iD\x85\xeb)=2\x10\xd8\xce\xfe\x0ec\x01\x01\x89\x19\x81\x03\x00O\xe6iD\x14\xae\xa7>\x1e\x15r\x01\xfe*d\x01\x01\x96s\xe7f\xbc\x10m\x01\x002\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xf9Q\xfe\x1fe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x88\xf5\xfe\x06f\x01\x01}\xc5\x14\x00\x00\x03\x00ue\xfe\x04g\x01\x01\x98\x00\x00\xa0\x8ae\x04\xfe\x02h\x01\x01*\x00\x00\xf5\x8b\xfe\x1ei\x01\x01\x18\xa0\x03\xae\r\x00\x00\x00\x002\xa6\x02\x18\xf0\xe7\xb8\xfdhe\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xcb]\xfe\x1aj\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00GQ\xfe\x08k\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00?\xa4\xfe\x15l\x01\x01$,L\xb0\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc\xfe\x16m\x01\x01#\x19\x81\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00~)\xfe\x03n\x01\x01Ms\x00\x00\xcc^\xfe\x12o\x01\x01\xfc%\x81\x03\x004\x00\x01\x00ARMMASK\x00Wrf.'b'\xfe\tp\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1c\x18\xfe\x14q\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xf6\x92\xfc9\x14\x10\x85\xba\xac\x92\xd29\xa2\x1a\xfe\x18u\x01\x01\xb21D\x81\xbd\xcf\x04+\xbb\xc6\x8cV>R\xa8)D3\xa6\x02\x18\xf1\xe7\xb8\xfd\x9e\x10\xfe\x1cv\x01\x01\xa3\x1a\x014\xb9\xd6L\xa28u\xaa\xe7\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xbfG~:\x92}\x11;j\xef\xfe\x03w\x01\x01\xa5\xc5\x14\x00P/\xfe\x0cx\x01\x01\x02\x80\x05\x1bx\xb1N\x05\x00\xcd\x81\x03\x00\xb8\xb7\xfe\x16y\x01\x01\x883\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00z\x06\xfe\x16z\x01\x01\xc1.\xfe=<\x15\xcfK7\xba\xdf\xaa;\xaf\x84\xb3=\x00\x00\x00\x00\xa5\x03\xb3k'b'\xfe\x1a{\x01\x01\x1b^\xf7\xb3\r\x00\x00\x00\x00\x03\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\r\x01\xae\xffn\x01jn\xfe\x16|\x01\x01t\n\x82\x03\x00\x08\x00=\x00$\xfc\x03\x00\xfe\xff\x00\x00\x07\x01\xa0\xff5\x02\xf7\xdb\xfe\x16}\x01\x01\x81\n\x82\x03\x00\x01\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x8a\x00t\x02\xc2\xd3\xfe\x0e~\x01\x01\x1d\n\x82\x03\x00x\xa3iD\xe1z\x0c=2\x10Yt\xfe\x0e\x7f\x01\x01\x89\n\x82\x03\x00\xf2\xe6iD\x8f\xc2\xac>\x1f\x15L;\xfe\x1f\x80\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf6\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tz\xbe\xfe\x06\x81\x01\x01}\xc8\x14\t\x00\x03\x00,\x07\xfe\x04\x82\x01\x01\x98\x00\x00\xa0\x8a\xf0\xa3\xfe\x02\x83\x01\x01*\x00\x00\xef\xdf\xfe\x1e\x84\x01\x01\x18\xc8\x14\xb1\r\x00\x00\x00\x004\xa6\x02\x18\xf1\xe7\xb8\xfd\x90e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd0\xfd\xfe\x1a\x85\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00v>\xfe\x08\x86\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8a\xfe\x15\x87\x01\x01$\xf6\xf9\xb3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00u_\xfe\x16\x88\x01\x01#\n\x82\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xf5\xcb'b'\xfe\x14\x89\x01\x01J\n\xd7#<\n\xd7#i;H\xb98\x80}\xba\x932\x01\xba\x80U\xfe\x18\x8e\x01\x01\xb2\xa5C\x81\xbd[n.\xbbJ\x95V>\x14\x9e)D4\xa6\x02\x18\xf1\xe7\xb8\xfd)\x98'b'\xfe\x1c\x8f\x01\x01\xa3\xe9\xa65\xb9m\xd8\xa78\xc9\x1b\xe3\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x97\x98\x84:\x05\x86\x1e;(\xc7\xfe\x03\x90\x01\x01\xa5\xc5\x14\x00\xbd\xab\xfe\x0c\x91\x01\x01\x02\x00\xaf\x1ex\xb1N\x05\x00\xbe\x82\x03\x002?\xfe\x16\x92\x01\x01\x884\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xda\x9b\xfe\x16\x93\x01\x01\xc1\xe2zE\xcc=\x00\x00\x00\x00\xa5\x03-[\xfe\x03\x94\x01\x01/\xff\x00\x00RC\xfe\x1a\x95\x01\x01\x1b\x94\xa0\xb7\r\x00\x00\x00\x00\x02\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffp\x01+\xea\xfe\x16\x96\x01\x01t\xfa\x82\x03\x00\x05\x000\x003\xfc\x00\x00\x02\x00\x01\x00\x07\x01\xa0\xff5\x02&\xde\xfe\x16\x97\x01\x01\x81\xfa\x82\x03\x00\x02\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00k\x02B\xfe\xfe\x0e\x98\x01\x01\x1d\xfa\x82\x03\x00\xd5\xa3iD\n\xd7#=1\x10\x8bw\xfe\x0e\x99\x01\x01\x89\xfa\x82\x03\x00e\xe5iD)\\\xa0>\x1d\x15\xd5\xcd\xfe\x1f\x9a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfb\x00.?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti@\xfe\x06\x9b\x01\x01}\xc8\x14\x00\x00\x03\x00\x850\xfe\x04\x9c\x01\x01\x98\x00\x00\xa0\x8a\xb1\x87\xfe\x02\x9d\x01\x01*\x00\x00\x07\xec\xfe\x1e\x9e\x01\x01\x1803\xb7\r\x00\x00\x00\x005\xa6\x02\x18\xf1\xe7\xb8\xfd\xa4e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xdd\xde\xfe\x1a\x9f\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00E\x96\xfe\x08\xa0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00S"\xfe\x15\xa1\x01\x01$\x9a\xa3\xb7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xbe\xfe\x16\xa2\x01\x01#\xfa\x82\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00a \xfe\x03\xa3\x01\x01Ms\x00\x00\x02J'b'\xfe\x14\xa4\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x99%\xfe\x1c\xa5\x01\x01!\xde\x82\x03\x005\xa6\x02\x18\xf1\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xaa\x04\xa7\xea'b'\xfe\x1c\xa6\x01\x01\x1e\x9a\x83\x03\x00yt\x80\xbd\x00\xe8\xb48\x98aU>\x81\x8cd:X\xd0(\xba\x9f\xc4\xc59\xc2\x8c\xfe\x18\xa7\x01\x01\xb2\x14?\x81\xbd\xe1s*\xbbF\x98V>=\xaa)D5\xa6\x02\x18\xf1\xe7\xb8\xfdI\xa1\xfe\x1c\xa8\x01\x01\xa3\x19E7\xb9\xcb\\\xad8b\t\xdf\xb7\x00\x00\x00\x00\x00\x00\x00\x00N\xe8{:\xad\xf0$;\x03\xa9\xfe\x03\xa9\x01\x01\xa5\xc8\x14\x00\xb9a\xfe\x0c\xaa\x01\x01\x02\x80X"x\xb1N\x05\x00\xae\x83\x03\x00A\xcc\xfe\x16\xab\x01\x01\x887\xa6\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0fq\xfe\x16\xac\x01\x01\xc1J\xecC\xb0\xf7\x83<\r\xf8v<\xeem\x10?\x00\x1f\xb2\x07\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0'b"\xfe\x1a\xaf\x01\x01\x1b\xd2L\xbb\r\x00\x00\x00\x00\x03\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffn\x01\x8e\\\xfe\x16\xb0\x01\x01t\xea\x83\x03\x00\x04\x008\x00-\xfc\xfb\xff\xfd\xff\x01\x00\x08\x01\xa0\xff3\x02\x84\x16\xfe\x16\xb1\x01\x01\x81\xea\x83\x03\x00\x04\x00A\x00\x1f\xfc\xfd\xff\x02\x00\xfd\xff*\x03\x8c\x00v\x02\x9c'\xfe\x0e\xb2\x01\x01\x1d\xea\x83\x03\x00\xe0\xa2iD\xcc\xcc\xcc<2\x10\xb2\xb7\xfe\x0e\xb3\x01\x01\x89\xea\x83\x03\x00\xdd\xe6iD\xb8\x1e\xac>\x1f\x15_\xd0\xfe\x1f\xb4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x97:\xfe\x06\xb5\x01\x01}\xc5\x14\x00\x00\x03\x00\x9d\xb5\xfe\x04\xb6\x01\x01\x98\x00\x00\xa0\x8a\xb8\x94\xfe\x02\xb7\x01\x01*\x00\x00\xd3f\xfe\x1e\xb8\x01\x01\x18p@\xba\r\x00\x00\x00\x007\xa6\x02\x18\xf2\xe7\xb8\xfd\xaee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x19\x96\xfe\x1a\xb9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc7\x7f\xfe\x08\xba\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb1^\xfe\x15\xbb\x01\x01$\\O\xbb\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xfa\xfe\x16\xbc\x01\x01#\xeb\x83\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfb\xb7\xfe\x03\xbd\x01\x01Ms\x00\x00w!\xfe\x14\xbe\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\t\x8e"b"\xfe\x1c\xbf\x01\x01!\xa6\x83\x03\x007\xa6\x02\x18\xf2\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xaa\x04\x1a5\xfe\x1c\xc0\x01\x01\x1e\x8a\x84\x03\x00V\xdd\x80\xbd\x00u\xd58\xa1hU>\xfd\x88\x08\xb9\xb6\r\xd1\xb9\xa9\xdd\xb4\xb9\xb6\xc4\xfe\x18\xc1\x01\x01\xb2q~\x81\xbd\xa8k'\xbb\xf3\xbaV>\xb8\x9e)D8\xa6\x02\x18\xf2\xe7\xb8\xfd\xe2\xc3\xfe\x1c\xc2\x01\x01\xa3/\xe28\xb9\x02\xcc\xb28\x90\xfb\xda\xb7\x00\x00\x00\x00\x00\x00\x00\x00x3\x80:\xd9\x03H;\xe4O\xfe\x03\xc3\x01\x01\xa5\xc5\x14\x00\xe4\x1f\xfe\x0c\xc4\x01\x01\x02\x00\x02&x\xb1N\x05\x00\x9f\x84\x03\x00\xf1D\xfe\x16\xc5\x01\x01\x888\xa6\x02\x18\xf2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00r\xf7\xfe\x16\xc6\x01\x01\xc1\xf7\x97D<\xdf\xc5F7O&B<\x07\xc7\xbb=\x00\x00\x00\x00\xa5\x03w\xff"b'\xfe\x1a\xc7\x01\x01\x1b\xb3\xf9\xbe\r\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\x9bX\xfe\x16\xc8\x01\x01t\xdb\x84\x03\x00\x0c\x009\x00)\xfc\x00\x00\x00\x00\x02\x00\x07\x01\xa0\xff3\x02}!\xfe\x16\xc9\x01\x01\x81\xdb\x84\x03\x00\x02\x00?\x00\x1d\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x8c\x00o\x02\x9a\x1a\xfe\x0e\xca\x01\x01\x1d\xdb\x84\x03\x00\xee\xa3iD\x85\xeb)=3\x10\xa1\x97\xfe\x0e\xcb\x01\x01\x89\xdb\x84\x03\x00{\xe5iD=\n\xa1> \x15\xdd\xa4\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb23\xfe\x06\xcd\x01\x01}\xca\x14\x00\x00\x03\x00\tN\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05\xfe\x02\xcf\x01\x01*\x00\x00s\xa9\xfe\x1e\xd0\x01\x01\x18\x98Q\xbd\r\x00\x00\x00\x008\xa6\x02\x18\xf2\xe7\xb8\xfd\xc2e\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd6.\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5\xfe\x15\xd3\x01\x01$P\xfc\xbe\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00A\xec\xfe\x16\xd4\x01\x01#\xdc\x84\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb2\x90\xfe\x12\xd5\x01\x01\xfc\x10\x85\x03\x004\x00\x01\x00ARMMASK\x00Wr\x8dV\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU'b'\xfe\t\xd7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xfaK\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e\xfe\x14\xd9\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00mZ\xfe\x1c\xda\x01\x01!8\x85\x03\x009\xa6\x02\x18\xf3\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xaa\x04\x8fk\xfe\t\xca\n\x00m\x04\x00\x00\x00\x00\xd1\x00\x00\x00Z\xdf'b'\xfe\x1c\xdb\x01\x01\x1e|\x85\x03\x00%\xe9\x80\xbd\x80\xa2\t8\x02wU>\xec\rn:a?\xba8%E\x89\xb9@\x1e\xfe\x18\xdc\x01\x01\xb2Bw\x81\xbd\xb3b,\xbb$\xdfV>\x85\xab)D9\xa6\x02\x18\xf3\xe7\xb8\xfd\x9dQ\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2\xfe\x1c\xde\x01\x01\xa3A\x80:\xb9M6\xb88}\xc8\xd6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xca\x85:g\xfd.;\xf0I\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f\xfe\x0c\xe0\x01\x01\x02xY)x\xb1N\x05\x00\x8f\x85\x03\x00K\xcf\xfe\x16\xe1\x01\x01\x889\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00i\xb5\xfe\x12\xe2\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xbfy\xfe\x16\xe3\x01\x01\xc1\x1aH:!\x15f\xf8\xfe\x1f\xe9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe9\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfb\x9a\xfe\x06\xea\x01\x01}\xc5\x14\x04\x00\x03\x00\x818\xfe\x04\xeb\x01\x01\x98\x00\x00\xa0\x8a\x9d\x80\xfe\x02\xec\x01\x01*\x00\x00\x9eb\xfe\x1e\xed\x01\x01\x18\xc0b\xc0\r\x00\x00\x00\x009\xa6\x02\x18\xf3\xe7\xb8\xfd\xcce\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xb2"\xfe\x1a\xee\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd5\xc9\xfe\x08\xef\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00)t\xfe\x15\xf0\x01\x01$\x98\xa6\xc2\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\xfe\x16\xf1\x01\x01#\xcc\x85\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00$\xef'b'\xfe\x14\xf2\x01\x01J\n\xd7#<\n\xd7#<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x8f~'b'\xfe\x1c\xf3\x01\x01!\x00\x86\x03\x00:\xa6\x02\x18\xf3\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa9\x04S\xce\xfe\x1c\xf4\x01\x01\x1el\x86\x03\x006\x10\x81\xbd\x80Ae8:aU>@\xfa%9\xb2t\x15\xba\x94\xa8O:\xda\xaa\xfe\x18\xf5\x01\x01\xb2\x05\x89\x81\xbd\x7fs,\xbbW\xf4V>\x85\xab)D:\xa6\x02\x18\xf3\xe7\xb8\xfd\x1a5\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3\xfe\x03\xf7\x01\x01Ms\x00\x00Ub\xfe\x1c\xf8\x01\x01\xa3I\x1e<\xb9\xe3\x9b\xbd80y\xd2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x15\x90:\x1e\xde*;\x10\xb0\xfe\x03\xf9\x01\x01\xa5\xc5\x14\x00\xbf\xd4\xfe\x0c\xfa\x01\x01\x02\x00U-x\xb1N\x05\x00\x80\x86\x03\x00{\xd8\xfe\x16\xfb\x01\x01\x88:\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x04\r\xfe\x16\xfc\x01\x01\xc1\xc9S;"\x15d\x18\xfe\x1f\x02\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00/?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd0R\xfe\x06\x03\x01\x01}\xc8\x14\x00\x00\x03\x00qo\xfe\x04\x04\x01\x01\x98\x00\x00\xa0\x8a8\xc3\xfe\x02\x05\x01\x01*\x00\x00?\x01\xfe\x1e\x06\x01\x01\x18\x00p\xc3\r\x00\x00\x00\x00<\xa6\x02\x18\xf4\xe7\xb8\xfd\xeae\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c;\r\xfe\x1a\x07\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00~(\xfe\x08\x08\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x009|\xfe\x15\t\x01\x01$~T\xc6\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xdc\xfe\x16\n\x01\x01#\xbd\x86\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00H\xa5\xfe\x03\x0b\x01\x01Ms\x00\x00\xac\x1a\xfe\x03\x0c\x01\x01/\xff\x00\x00t\xfe'b'\xfe\x1c\x11\x01\x01\xa3\x87\xb7=\xb9t\x04\xc38\x06\\\xce\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xdah\x92:\x0e 1;\x91\xa1\xfe\x03\x12\x01\x01\xa5\xc8\x14\x00\xbf\xe0\xfe\x0c\x13\x01\x01\x02\x80\xfe0x\xb1N\x05\x00q\x87\x03\x00\xe0\xbd\xfe\x16\x14\x01\x01\x88<\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90\xb8\xfe\x16\x15\x01\x01\xc1\xd1X,<\x90\x9f?7\xde\x907;\xb6\xb5\xb8=\x00\x00\x00\x00\xa5\x03}\xdf\xfe\x1a\x16\x01\x01\x1b\xbb\xfd\xc9\r\x00\x00\x00\x00\x05\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffn\x01\x07E\xfe\x16\x17\x01\x01t\xad\x87\x03\x00\x0e\x008\x00-\xfc\xff\xff\xfd\xff\x00\x00\x07\x01\xa0\xff3\x02\x14p\xfe\x16\x18\x01\x01\x81\xad\x87\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff+\x03\x88\x00n\x025\x03\xfe\x0e\x19\x01\x01\x1d\xad\x87\x03\x00i\xa3iD\xd7\xa3\x08=3\x10\xa5&\xfe\x0e\x1a\x01\x01\x89\xad\x87\x03\x00p\xe5iDR\xb8\xa0>"\x15?\x8f\xfe\x1f\x1b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf1\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti\x19\xfe\x06\x1c\x01\x01}\xc8\x14\x00\x00\x03\x00x\x02\xfe\x04\x1d\x01\x01\x98\x00\x00\xa0\x8a\x9b\x0e\xfe\x02\x1e\x01\x01*\x00\x00t\xc2\xfe\x1e\x1f\x01\x01\x18h\x8e\xc9\r\x00\x00\x00\x00>\xa6\x02\x18\xf5\xe7\xb8\xfd\xfee\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xe2k\xfe\x1a \x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc8\x04\xfe\x08!\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\\\xe1\xfe\x15"\x01\x01$\xee\x01\xca\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xfc\xfe\x16#\x01\x01#\xae\x87\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc7\x8b\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b"\xfe\x03%\x01\x01Ms\x00\x00Q\x9c\xfe\x14&\x01\x01J\n\xd7#<\n\xd7#\xa6\x02\x18\xf5\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfd\xff\x01\x00\x00\x00\xaa\x04\xb6\x92"b'\xfe\x1c(\x01\x01\x1eN\x88\x03\x00\xc7\x82\x81\xbd\xc0\x02!92\x90U>\xb8\xcd\x0e:O6p\xbazNJ:.\xd1\xfe\x18)\x01\x01\xb2\x14\xb6\x81\xbd\x1dL,\xbb\xdaSW>\xe1\xaa)D>\xa6\x02\x18\xf5\xe7\xb8\xfdg\x85\xfe\x1c*\x01\x01\xa3\x05P?\xb9\xffl\xc88\xce\x0c\xca\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x07\x03\x94:\xe5\xb0\x16;\xc40\xfe\x03+\x01\x01\xa5\xc8\x14\x004\xa1\xfe\x0c,\x01\x01\x02\x00\xa84x\xb1N\x05\x00b\x88\x03\x00a\x92\xfe\x16-\x01\x01\x88?\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6|\xfe\x16.\x01\x01\xc1\x97\x98$<\xc9\xf1;7Q\x87\x90:RO\xb6=\x00\x00\x00\x00\xa5\x03\x95:\xfe\x16/\x01\x01\xe1\x0f-\x12?)\x91D>\x9d\xb0t<)8x<\x9f\xab\x16?\x00\x1f\xab\xca\xfe\x030\x01\x01Ms\x00\x00HP'b'\xfe\x1a1\x01\x01\x1b|\xaa\xcd\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffl\x01Ib\xfe\x162\x01\x01t\x9e\x88\x03\x00\x06\x007\x005\xfc\xff\xff\xfe\xff\x02\x00\x07\x01\xa0\xff3\x02/|\xfe\x163\x01\x01\x81\x9e\x88\x03\x00\x02\x00A\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff(\x03\x8a\x00x\x02Z\xd3\xfe\x0e4\x01\x01\x1d\x9e\x88\x03\x00\x1e\xa5iD{\x14v=4\x10Df\xfe\x0e5\x01\x01\x89\x9e\x88\x03\x00\xb7\xe6iD\x85\xeb\xaa>$\x15|\xeb\xfe\x1f6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\r\xfa\xfe\x067\x01\x01}\xc8\x14\x00\x00\x03\x00\xeb\xa2\xfe\x048\x01\x01\x98\x00\x00\xa0\x8a\xba\x8b\xfe\x029\x01\x01*\x00\x00\xeff\xfe\x1e:\x01\x01\x18\x90\x9f\xcc\r\x00\x00\x00\x00?\xa6\x02\x18\xf5\xe7\xb8\xfd\x12f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x18J\xfe\x1a;\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcfi\xfe\x08<\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x85\xfe\x15=\x01\x01$2\xad\xcd\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xb5\xfe\x16>\x01\x01#\x9f\x88\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe4\xd7\xfe\x14?\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x000?\xfe\x12@\x01\x01\xfc\xfa\x88\x03\x004\x00\x01\x00ARMMASK\x00Wr(t\xfe\tA\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9e\x15'b'\xfe\x1cB\x01\x01!Z\x88\x03\x00?\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfd\xff\x01\x00\x00\x00\xaa\x04B|\xfe\x03C\x01\x01Ms\x00\x00\xe1R\xfe\x1cD\x01\x01\x1e>\x89\x03\x00<\xc1\x81\xbd\xb0\xcb\x8897\x8eU>\x9a\x8e\xe07\xd4D\xcf\xba\xaf\xdb\xa97\xac0\xfe\x18E\x01\x01\xb2\xc7\xe4\x81\xbd\xdc\xd0(\xbb\x19fW>\x1e\xa5)D@\xa6\x02\x18\xf6\xe7\xb8\xfdWT\xfe\t\xcb\n\x00m\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xe0\x0c\xfe\x1cF\x01\x01\xa3\x9d\xe1@\xb9:\xd0\xcd8-\xec\xc5\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xda\x8a:\x0e\xca\x1a;\x8c\xb3\xfe\x03G\x01\x01\xa5\xc8\x14\x00WI\xfe\x0cH\x01\x01\x02\x80Q8x\xb1N\x05\x00R\x89\x03\x00]D\xfe\x16I\x01\x01\x88@\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe9e\xfe\x16J\x01\x01\xc1\xda\xc4#\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00k\x02\xe1J\xfe\x0eO\x01\x01\x1d\x8e\x89\x03\x00\x02\xa3iD{\x14\xde<2\x10L\xc0\xfe\x0eP\x01\x01\x89\x8e\x89\x03\x00x\xe7iD\xc2\xf5\xb0>#\x15\x8e\x99\xfe\x1fQ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TW\x88\xfe\x06R\x01\x01}\xc2\x14\x00\x00\x03\x00\xf7o\xfe\x04S\x01\x01\x98\x00\x00\xa0\x8a-3\xfe\x02T\x01\x01*\x00\x00%\xec\xfe\x1eU\x01\x01\x18\xb8\xb0\xcf\r\x00\x00\x00\x00@\xa6\x02\x18\xf6\xe7\xb8\xfd\x12f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c5%\xfe\x1aV\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf6\x10\xfe\x08W\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x93p\xfe\x15X\x01\x01$RX\xd1\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\xc9\xfe\x16Y\x01\x01#\x8f\x89\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xb6?'b'\xfe\x14Z\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x16\xb3\xfe\x03[\x01\x01Ms\x00\x00%$\xfe\x1c\\\x01\x01!\xeb\x89\x03\x00A\xa6\x02\x18\xf6\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfd\xff\x00\x00\x00\x00\xaa\x04\\\xb7'b"\xfe\x1c]\x01\x01\x1e/\x8a\x03\x00\x8a\xc2\x81\xbd \xbe\xb59MpU>\x84vg:\x85\xe5D\xbaw\xd9\t\xb9r\x8c\xfe\x18^\x01\x01\xb2\xda\xdf\x81\xbdp\x82'\xbb\xbfrW>\x8f\xb2)DA\xa6\x02\x18\xf6\xe7\xb8\xfd\xe0\x80\xfe\x1c_\x01\x01\xa3OhB\xb9\xa2:\xd38\xbe\x08\xc2\xb7\x00\x00\x00\x00\x00\x00\x00\x00X\xdf\x8f:\x15\n\xf7:/\x17\xfe\x03`\x01\x01\xa5\xc5\x14\x00&\xe8\xfe\x0ca\x01\x01\x02\x00\xfb;x\xb1N\x05\x00C\x8a\x03\x00\x17\xea\xfe\x16b\x01\x01\x88A\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x000\x81\xfe\x16c\x01\x01\xc1J\xdf\x1a<\x13l47\xa12\xa7;4\x14\xb2=\x00\x00\x00\x00\xa5\x03\x94p\xfe\x1ad\x01\x01\x1b\xbf\x01\xd5\r\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffn\x01\xc9\xdd\xfe\x16e\x01\x01t\x7f\x8a\x03\x00\x05\x009\x00.\xfc\xfd\xff\xfd\xff\xff\xff\x07\x01\xa1\xff4\x02\xc3\xfe\xfe\x16f\x01\x01\x81\x7f\x8a\x03\x00\x02\x00@\x00 \xfc\xfd\xff\x00\x00\xfd\xff)\x03\x8d\x00p\x02\x1eC\xfe\x0eg\x01\x01\x1d\x7f\x8a\x03\x003\xa3iDff\xf6<3\x10^\xf2\xfe\x0eh\x01\x01\x89\x7f\x8a\x03\x00\xb8\xe6iD\xc2\xf5\xaa>#\x15\xa6\xac\xfe\x1fi\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xce\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T4,\xfe\x06j\x01\x01}\xc5\x14\x00\x00\x03\x00\x8a\x87\xfe\x04k\x01\x01\x98\x00\x00\xa0\x8aJD\xfe\x02l\x01\x01*\x00\x00\x83\xe4\xfe\x1em\x01\x01\x18\xf8\xbd\xd2\r\x00\x00\x00\x00A\xa6\x02\x18\xf6\xe7\xb8\xfd\x1cf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cZ-\xfe\x1an\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xa4]\xfe\x08o\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xb2\xfe\x15p\x01\x01$\xc5\x04\xd5\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00I\xbe\xfe\x16q\x01\x01#\x80\x8a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc8\x9c\xfe\x03r\x01\x01Ms\x00\x00\xd6>"b'\xfe\x14s\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\xdb\x98O:\r\xa9p\xba\xc1\x9f#\xba\xa8}\xfe\x18w\x01\x01\xb2\xaa\xd9\x81\xbdv.)\xbb\x7f\x90W>\xf6\xa8)DC\xa6\x02\x18\xf6\xe7\xb8\xfd\xc8\xda\xfe\x03x\x01\x01/\xff\x00\x00\xd3`\xfe\x1cy\x01\x01\xa3\xf9\xe4C\xb9\xff\x9d\xd88\xcb,\xbe\xb7\x00\x00\x00\x00\x00\x00\x00\x00*\xa4\x8a:\xf1\xb0\xcd:V\xbc\xfe\x03z\x01\x01\xa5\xc5\x14\x00\x8d\x95\xfe\x0c{\x01\x01\x02`V?x\xb1N\x05\x004\x8b\x03\x00\x1f\xfc\xfe\x16|\x01\x01\x88C\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5\xf1\xfe\x16}\x01\x01\xc1\x10J%<5927\x05\r%;\xc1\xd0\xb7=\x00\x00\x00\x00\xa5\x03\xe1\xcd'b'\xfe\x1a~\x01\x01\x1b@\xb1\xd8\r\x00\x00\x00\x00\x04\x005\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01fo\xfe\x16\x7f\x01\x01tq\x8b\x03\x00\x06\x00.\x00-\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02V\x8b\xfe\x16\x80\x01\x01\x81q\x8b\x03\x00\x04\x00A\x00"\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x88\x00o\x02tN\xfe\x0e\x81\x01\x01\x1dq\x8b\x03\x00a\xa3iDR\xb8\x06=4\x10\xd53\xfe\x0e\x82\x01\x01\x89q\x8b\x03\x00\x93\xe7iD\xcd\xcc\xb1>%\x15\x96\x05\xfe*\x83\x01\x01\x96s\xe7f\xbc\x0fm\x01\x004\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xbdl\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TX\xa2\xfe\x06\x85\x01\x01}\xc5\x14\x00\x00\x03\x00R&\xfe\x04\x86\x01\x01\x98\x00\x00\xa0\x8a\x15\x9c\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0\xfe\x1e\x88\x01\x01\x18(\x92\xd8\r\x00\x00\x00\x00D\xa6\x02\x18\xf6\xe7\xb8\xfd0f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xa5\xd2\xfe\x1a\x89\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00S+\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1\xfe\x15\x8b\x01\x01$\x89\xb4\xd8\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00IZ\xfe\x16\x8c\x01\x01#q\x8b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x08\xb9\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc'b'\xfe\x14\x8e\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x01\xa5e9\xa0\x1c@\xbaX\xa58:\x11p\xfe\x18\x92\x01\x01\xb2\xaf\xd7\x81\xbd{K+\xbb\xa4\x93W>\x00\xa0)DD\xa6\x02\x18\xf6\xe7\xb8\xfd\xb5\xb6'b'\xfe\x1c\x93\x01\x01\xa33TE\xb9\xf4\xf9\xdd8\x99z\xba\xb7\x00\x00\x00\x00\x00\x00\x00\x00`\x0e\x8f:"S\x04;\x85j\xfe\x03\x94\x01\x01\xa5\xc5\x14\x00c\xbd\xfe\x0c\x95\x01\x01\x02\xe8QCx\xb1N\x05\x00&\x8c\x03\x00\x85I\xfe\x16\x96\x01\x01\x88D\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00M>\xfe\x16\x97\x01\x01\xc1\xedN\x1f$\x15\xa3z\xfe\x1f\x9d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdd\x7f\xfe\x06\x9e\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e\x15\xfe\x04\x9f\x01\x01\x98\x00\x00\xa0\x8a\xb6Q\xfe\x02\xa0\x01\x01*\x00\x00\x02\x14\xfe\x1e\xa1\x01\x01\x18p\xf1\xdb\r\x00\x00\x00\x00D\xa6\x02\x18\xf6\xe7\xb8\xfd:f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cl\xb4\xfe\x1a\xa2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc0\x12\xfe\x08\xa3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa4,\xfe\x15\xa4\x01\x01$\xe3a\xdc\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x9b\xfe\x16\xa5\x01\x01#b\x8c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00zx\xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd'b'\xfe\x14\xa7\x01\x01J\n\xd7#<\n\xd7#\xdc!F9\xd6\xb9\xa3\xbaP_\x02\xb7\xbd:\xfe\x18\xad\x01\x01\xb2*\xf6\x81\xbd\x9f',\xbb\xe6\xaaW>\xa4\xb0)DD\xa6\x02\x18\xf6\xe7\xb8\xfd\xd0^\xfe\x1c\xae\x01\x01\xa3\xf8\xb7F\xb9\xccR\xe38M\x9f\xb6\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86\xef\x84:S\xc8\n;|\xe5\xfe\x03\xaf\x01\x01\xa5\xc8\x14\x00\x08|\xfe\x0c\xb0\x01\x01\x02h\xfbFx\xb1N\x05\x00\x17\x8d\x03\x00\x1b\x8b\xfe\x16\xb1\x01\x01\x88E\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc7\x19\xfe\x16\xb2\x01\x01\xc1`{\x1f<\xd5@.7\xaa\xe1g;\x97;\xbd=\x00\x00\x00\x00\xa5\x03\xe5\xe7\xfe\x16\xb3\x01\x01\xe1\xfc\xa9\x11?\xebQ8>\xdf$\x83'\x15Zs\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x001?9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd6\xe9\xfe\x06\xba\x01\x01}\xc8\x14\x00\x00\x03\x00\x9e\x87\xfe\x04\xbb\x01\x01\x98\x00\x00\xa0\x8aj\x99\xfe\x02\xbc\x01\x01*\x00\x00Q\x10\xfe\x1e\xbd\x01\x01\x18\x98\x02\xdf\r\x00\x00\x00\x00E\xa6\x02\x18\xf6\xe7\xb8\xfdDf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf4\x9a\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M\xfe\x15\xc0\x01\x01$t\x0f\xe0\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c\xe5\xfe\x16\xc1\x01\x01#S\x8d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x18_\xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18\xfe\x14\xc3\x01\x01J\n\xd7\xa3<\n\xd7\xa3*\x8d\x9c9\x91\xe2\x99\xba\xad\xe6w:B^\xfe\x18\xc6\x01\x01\xb2\x8e\xf4\x81\xbd\xfdR-\xbb\xc9\xabW>)\xac)DF\xa6\x02\x18\xf6\xe7\xb8\xfd\xf06\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f\xfe\x1c\xc8\x01\x01\xa38\x0fH\xb9\xc4\xa2\xe88\xa0\xab\xb2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xfa\x85:\x93\x1e\x05;1\x0c\xfe\x03\xc9\x01\x01\xa5\xc5\x14\x0079\xfe\x0c\xca\x01\x01\x02\x00\xa1Jx\xb1N\x05\x00\x07\x8e\x03\x00\xde\xd3\xfe\x16\xcb\x01\x01\x88F\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00T\x8b\xfe\x12\xcc\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x17\x8b\xfe\x16\xcd\x01\x01\xc1\xb3\x85$'\x15\x9b\xac\xfe\x1f\xd3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00h\x001?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfc\xa3\xfe\x06\xd4\x01\x01}\xc5\x14\x00\x00\x03\x00\x83\xcf\xfe\x04\xd5\x01\x01\x98\x00\x00\xa0\x8a\xe5S\xfe\x02\xd6\x01\x01*\x00\x00\x83]\xfe\x1e\xd7\x01\x01\x18\xd8\x0f\xe2\r\x00\x00\x00\x00F\xa6\x02\x18\xf6\xe7\xb8\xfdNf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xff\xe1\xfe\x1a\xd8\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdb\x13\xfe\x08\xd9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x86\xfe\x15\xda\x01\x01$t\xbc\xe3\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19t\xfe\x16\xdb\x01\x01#D\x8e\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x9d\xff\xfe\x03\xdc\x01\x01Ms\x00\x00\xc9s"b'\xfe\x14\xdd\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xdbD\xfe\x1c\xde\x01\x01!\xa0\x8e\x03\x00G\xa6\x02\x18\xf6\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04>\xd2'b'\xfe\x1c\xdf\x01\x01\x1e\xe4\x8e\x03\x00\xde\xbd\x81\xbd\x00\xd5\xad9\xfc\nU>\xb0\x17\xef7\xcdg\xe7\xb8\xb2\xf3t9\x05j\xfe\x18\xe0\x01\x01\xb2C\xe3\x81\xbdE\xe1+\xbb\x8d\xaeW>\xae\xa7)DG\xa6\x02\x18\xf6\xe7\xb8\xfdP;\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$\xfe\x1c\xe2\x01\x01\xa3\xceWI\xb9\xf7\xf2\xed8I\x97\xae\xb7\x00\x00\x00\x00\x00\x00\x00\x00l?\x98:\r\x15\x03;\xd5\xe9\xfe\x03\xe3\x01\x01\xa5\xbd\x14\x00\x89\x16\xfe\x0c\xe4\x01\x01\x02hNNx\xb1N\x05\x00\xf9\x8e\x03\x00\xf0#\xfe\x16\xe5\x01\x01\x88G\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf4|\xfe\x16\xe6\x01\x01\xc1\x88Q <]\xf5*7\xdf@5;\xd0\x0f\xcc=\x00\x00\x00\x00\xa5\x03u$\xfe\x1a\xe7\x01\x01\x1b\xcag\xe7\r\x00\x00\x00\x00\x04\x005\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffo\x01\xbd\xdc\xfe\x16\xe8\x01\x01t5\x8f\x03\x00\n\x005\x00(\xfc\x00\x00\x02\x00\x05\x00\x07\x01\xa0\xff3\x02\xeaZ\xfe\x16\xe9\x01\x01\x815\x8f\x03\x00\x01\x00?\x00 \xfc\xfd\xff\x01\x00\xfd\xff*\x03\x85\x00k\x02>m\xfe\x0e\xea\x01\x01\x1d5\x8f\x03\x00L\xa4iD\x99\x99A=5\x10g\xf8\xfe\x0e\xeb\x01\x01\x895\x8f\x03\x00\x07\xe6iD\xa4p\xa5>(\x15\x7f\x8d\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x001?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Taw\xfe\x06\xed\x01\x01}\xc2\x14\x00\x00\x03\x00or\xfe\x04\xee\x01\x01\x98\x00\x00\xa0\x8a\x85\xf2\xfe\x02\xef\x01\x01*\x00\x00\xf0\xca\xfe\x1e\xf0\x01\x01\x18\x00!\xe5\r\x00\x00\x00\x00G\xa6\x02\x18\xf6\xe7\xb8\xfdbf\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cV3\xfe\x1a\xf1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x001\xa8\xfe\x08\xf2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x88\x10\xfe\x15\xf3\x01\x01$/j\xe7\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00J\xbd\xfe\x16\xf4\x01\x01#5\x8f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00B\xf7'b'\xfe\x03\xf5\x01\x01/\xff\x00\x00\xec\x11\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3\xfe\x14\xf7\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xeb\x8a'b'\xfe\x1c\xf8\x01\x01!i\x8f\x03\x00G\xa6\x02\x18\xf6\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\xb3z\xfe\x1c\xf9\x01\x01\x1e\xd4\x8f\x03\x00"\x8d\x81\xbd0\xd4\xe09[\nU>\xe8c\x0e\xba\x0fv\xa5\xb9y\xe5Y\xb9"Z\xfe\x18\xfa\x01\x01\xb2\x03\xba\x81\xbd\x84\xca%\xbb\x11\xc4W>\x00\xb0)DG\xa6\x02\x18\xf6\xe7\xb8\xfd\x9d\xd0\xfe\x1c\xfb\x01\x01\xa3Q\x8eJ\xb9L?\xf38\xf4\x86\xaa\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xbb\x92:di\xdd:/U\xfe\x03\xfc\x01\x01\xa5\xc5\x14\x00\xdeC\xfe\x0c\xfd\x01\x01\x02\x00\xf4Qx\xb1N\x05\x00\xe9\x8f\x03\x00\xf2\x1d\xfe\x16\xfe\x01\x01\x88G\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9b\x04\xfe\x16\xff\x01\x01\xc1\xac\xd2%<\r\t*7\xc1\xb6\x84;\x85\xd1\xb2=\x00\x00\x00\x00\xa5\x03f]\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd'b'\xfe\x1a\x01\x01\x01\x1b\xa7\x12\xeb\r\x00\x00\x00\x00\x04\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01*M\xfe\x16\x02\x01\x01t%\x90\x03\x00\x07\x00:\x001\xfc\x02\x00\xff\xff\xfc\xff\x07\x01\xa1\xff3\x02\x8b\x83\xfe\x16\x03\x01\x01\x81%\x90\x03\x00\x01\x00@\x00!\xfc\xfc\xff\x00\x00\xfd\xff*\x03\x8f\x00p\x02\x9a\x08\xfe\x0e\x04\x01\x01\x1d%\x90\x03\x00B\xa4iD=\n?=6\x10\x101\xfe\x0e\x05\x01\x01\x89%\x90\x03\x00\xb8\xe6iD\xc2\xf5\xaa>)\x15\xa8\x97\xfe\x1f\x06\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tp\x07\xfe\x06\x07\x01\x01}\xc5\x14\x00\x00\x03\x00k\x1f\xfe\x04\x08\x01\x01\x98\x00\x00\xa0\x8a\x17\x83\xfe\x02\t\x01\x01*\x00\x00\xa5\xb0\xfe\x1e\n\x01\x01\x180\xf5\xea\r\x00\x00\x00\x00H\xa6\x02\x18\xf6\xe7\xb8\xfd\x80f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xdf\xa9\xfe\x1a\x0b\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00[=\xfe\x08\x0c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8dj\xfe\x15\r\x01\x01$o\x15\xeb\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7Z\xfe\x16\x0e\x01\x01#&\x90\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x06>'b'\xfe\x14\x0f\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00g\xd3\xfe\x03\x10\x01\x01Ms\x00\x00\xb8\xe6\xfe\x1c\x11\x01\x01!\x1e\x90\x03\x00H\xa6\x02\x18\xf6\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\x02>\xfe\x1c\x12\x01\x01\x1e\xc6\x90\x03\x00\x11\x9f\x81\xbd@c\xa29\x18\xe9T>\x97\xc2\x04:\x93\x85\x95\xba\x8e\x0f\xe1\xb8\xe1T\xfe\x18\x13\x01\x01\xb2\xab\xd7\x81\xbd\xd8\xe1)\xbb \xc9W>f\xa6)DH\xa6\x02\x18\xf6\xe7\xb8\xfd\x07\x86\xfe\x12\x14\x01\x01\xfc\xd2\x90\x03\x004\x00\x01\x00ARMMASK\x00Wr\xbb\xbc'b'\xfe\t\x15\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9fs\xfe\x1c\x16\x01\x01\xa3\xb2\xb4K\xb9\xbcx\xf88)d\xa6\xb7\x00\x00\x00\x00\x00\x00\x00\x00:\x0f\x8e:\x96K";%\xd6\xfe\x03\x17\x01\x01\xa5\xc5\x14\x00Q\xfc\xfe\x0c\x18\x01\x01\x02\x80\x9dUx\xb1N\x05\x00\xda\x90\x03\x00T\xeb\xfe\x16\x19\x01\x01\x88H\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00d4\xfe\x16\x1a\x01\x01\xc1i\x98,<\x97z)7)T\x9e:,\r\xb1=\x00\x00\x00\x00\xa5\x03>.\xfe\x03\x1b\x01\x01Ms\x00\x00\xd4A\xfe\t\xcd\n\x00m\x01\x00\x00\x00\x00\xd2\x00\x00\x00\xaa.\xfe\x1a\x1c\x01\x01\x1bN\xc0\xee\r\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x99\t\xfe\x16\x1d\x01\x01t\x16\x91\x03\x00\x0b\x009\x00.\xfc\xff\xff\xfe\xff\xfe\xff\x07\x01\xa0\xff4\x02\xd5K\xfe\x16\x1e\x01\x01\x81\x16\x91\x03\x00\x01\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x87\x00p\x02\x9fN\xfe\x0e\x1f\x01\x01\x1d\x16\x91\x03\x00\xd8\xa3iD\xe1z$=6\x10\xb0@\xfe\x0e \x01\x01\x89\x16\x91\x03\x00\xd9\xe6iD\x00\x00\xac>)\x15^\x0b\xfe\x1f!\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x893\xfe\x06"\x01\x01}\xc8\x14\x00\x00\x03\x00j\xd8\xfe\x04#\x01\x01\x98\x00\x00\xa0\x8a\xe3\xdd\xfe\x02$\x01\x01*\x00\x00i\xfd\xfe\x1e%\x01\x01\x18X\x06\xee\r\x00\x00\x00\x00I\xa6\x02\x18\xf5\xe7\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cN1\xfe\x1a&\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00R\x8a\xfe\x08\'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc\xfe\x15(\x01\x01$\xcf\xc2\xee\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\xcc\xfe\x16)\x01\x01#\x17\x91\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe8\xdc'b'\xfe\x14*\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x90I\xfe\x1c+\x01\x01!\xe7\x90\x03\x00I\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\x1f,\xfe\x03,\x01\x01Ms\x00\x00R0'b'\xfe\x1c-\x01\x01\x1e\xb6\x91\x03\x00C\x80\x81\xbd\xb0\x03\x8b9_\xbbT>\x0b\xe4G:\xff1\xf2\xb9\xd7lR\xba\xe5\xcd\xfe\x18.\x01\x01\xb2\xbf\xd6\x81\xbd\\\x92.\xbb\x1d\xc4W>\\\xaf)DI\xa6\x02\x18\xf5\xe7\xb8\xfd.\x91\xfe\x1c/\x01\x01\xa3+\xcbL\xb9\x01\xa6\xfd8\xe9%\xa2\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86\xc4\x83:\xb3\xe3!;\x19L\xfe\x030\x01\x01\xa5\xc5\x14\x00\xaf\xd6\xfe\x0c1\x01\x01\x02\x18CYx\xb1N\x05\x00\xca\x91\x03\x00\xa6p\xfe\x162\x01\x01\x88J\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00=\xff\xfe\x163\x01\x01\xc1\xbc\x162\xa1\x05\x8a<\xad\x9b\xa7+\x15\x05\xb2\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x03\x80\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n\xfe\x04<\x01\x01\x98\x00\x00\xa0\x8a_\xb4\xfe\x02=\x01\x01*\x00\x00\x99\t\xfe\x1e>\x01\x01\x18\xb8a\xf1\r\x00\x00\x00\x00J\xa6\x02\x18\xf5\xe7\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c^v\xfe\x1a?\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00,e\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002\xfe\x15A\x01\x01$po\xf2\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00k^\xfe\x16B\x01\x01#\x08\x92\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x02f\xfe\x03C\x01\x01Ms\x00\x00\xe1R\xfe\x14D\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe3\xea'b"\xfe\x1cE\x01\x01!w\x92\x03\x00K\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04}s\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5\xfe\x1cG\x01\x01\x1e\xa7\x92\x03\x00\x98\x91\x81\xbd`\x9d\xd49\xdc\xceT>|\xc1J9\xc1\xban\xbaAU\xfc8\x1c\x02\xfe\x18H\x01\x01\xb2~\xeb\x81\xbd\xae\xaa'\xbb\x9b\xebW>\xb8\xae)DK\xa6\x02\x18\xf5\xe7\xb8\xfd\x91B\xfe\x1cI\x01\x01\xa3\xf1\xd4M\xb9\xb9a\x019\xf7\x93\x9d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xd5\x83:O\x07+;\x9b\xa5\xfe\x03J\x01\x01\xa5\xc8\x14\x00\x8a\xf3\xfe\x0cK\x01\x01\x02\x80\xf0\\x\xb1N\x05\x00\xbb\x92\x03\x00\x85|\xfe\x16L\x01\x01\x88K\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1c7\xfe\x16M\x01\x01\xc1*\xeb4<\xdf\xba)7w\x14N;\xa8\xbb\xbc=\x00\x00\x00\x00\xa5\x03\xc9("b"\xfe\x1aN\x01\x01\x1bA\x18\xf6\r\x00\x00\x00\x00\x03\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xae\xffn\x01z#\xfe\x16O\x01\x01t\xf7\x92\x03\x00\x0e\x007\x00'\xfc\x00\x00\x01\x00\x01\x00\x07\x01\xa1\xff4\x02\x01\x10\xfe\x16P\x01\x01\x81\xf7\x92\x03\x00\x03\x00B\x00\x1b\xfc\xfd\xff\x01\x00\xfd\xff'\x03\x85\x00r\x02\xe3C\xfe\x0eQ\x01\x01\x1d\xf7\x92\x03\x00\xb0\xa4iD\\\x8fZ=7\x10}\x80\xfe\x0eR\x01\x01\x89\xf7\x92\x03\x00\x87\xe8iD\xa4p\xb9>+\x15\xdag\xfe\x1fS\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e0?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0\xcb\xfe\x06T\x01\x01}\xc5\x14\x00\x00\x03\x00\x98]\xfe\x04U\x01\x01\x98\x00\x00\xa0\x8a2\x97\xfe\x02V\x01\x01*\x00\x00\x9e\xdb\xfe\x1eW\x01\x01\x18\xd8 \xf4\r\x00\x00\x00\x00K\xa6\x02\x18\xf5\xe7\xb8\xfd\x94f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\n\xd9\xfe\x1aX\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xaa\x87\xfe\x08Y\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x15@\xfe\x15Z\x01\x01$\x12\x1b\xf6\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&\x83\xfe\x16[\x01\x01#\xf8\x92\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x001n\xfe\x03\\\x01\x01Ms\x00\x00+\xb8"b'\xfe\x14]\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf0\x8a\xfe\x1c^\x01\x01!T\x93\x03\x00K\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04i\xa3\xfe\x03_\x01\x01Ms\x00\x00\xfb2\xfe\x03`\x01\x01/\xff\x00\x00\x17\x16'b'\xfe\x1ca\x01\x01\x1e\x99\x93\x03\x00:h\x81\xbd\x00\x94\x01:\xe6\xdfT>f\x9d\x0b:\x8e\xc5\x1a\xbai\xe2\n:\xac,\xfe\x18b\x01\x01\xb2\x87\xc6\x81\xbd\x0f\x0f%\xbb&\x06X>R\xa8)DK\xa6\x02\x18\xf4\xe7\xb8\xfdks\xfe\x1cc\x01\x01\xa3\xab\xd2N\xb9d\xeb\x039!\x9d\x98\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xe2\x89:\xff\xc9\x03;\x91q\xfe\x03d\x01\x01\xa5\xc5\x14\x00\xf8\xfe\xfe\x0ce\x01\x01\x02\xe8\x9d`x\xb1N\x05\x00\xad\x93\x03\x00\xc8b\xfe\x16f\x01\x01\x88K\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\r\x9b\xfe\x16g\x01\x01\xc12\x00+<>F*7\xde(\t;A_\xb1=\x00\x00\x00\x00\xa5\x03)2\xfe\x1ah\x01\x01\x1b\xa0\xc6\xf9\r\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01b\xb8\xfe\x16i\x01\x01t\xe9\x93\x03\x00\x0b\x008\x00!\xfc\x00\x00\xfe\xff\xfe\xff\x07\x01\xa1\xff4\x02\x02\xe3\xfe\x16j\x01\x01\x81\xe9\x93\x03\x00\x03\x00@\x00\x1b\xfc\xfc\xff\x00\x00\xfc\xff,\x03\x87\x00o\x02\x9d`\xfe\x0ek\x01\x01\x1d\xe9\x93\x03\x00C\xa4iD)\\?=8\x10k\xf2\xfe\x0el\x01\x01\x89\xe9\x93\x03\x00"\xe8iD\xaeG\xb6>,\x15#\xb0\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f0?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x15\xb4\xfe\x06n\x01\x01}\xc2\x14\x00\x00\x03\x00\xc7\x1e\xfe\x04o\x01\x01\x98\x00\x00\xa0\x8a\xaf{\xfe\x02p\x01\x01*\x00\x00\xd0\xe0\xfe\x1eq\x01\x01\x18 \x80\xf7\r\x00\x00\x00\x00K\xa6\x02\x18\xf4\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x9c\xef\xfe\x1ar\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\r{\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3\xfe\x15t\x01\x01$\x11\xc9\xf9\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00v\xec\xfe\x16u\x01\x01#\xe9\x93\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xd4\xec'b'\xfe\x03v\x01\x01Ms\x00\x00\x08(\xfe\x14w\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb0\xe9'b"\xfe\x1cx\x01\x01!\t\x94\x03\x00L\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04F\xf3\xfe\x03y\x01\x01Ms\x00\x00\xba\x99\xfe\x1cz\x01\x01\x1e\x89\x94\x03\x00\x1f\x1b\x81\xbd \x96\xc49\x04\xe8T>JSw:\x90\x84L\xb8\x14K\xc5\xb9\xf8\xaa\xfe\x18{\x01\x01\xb29\x8b\x81\xbd\x85\xe8*\xbb\xa9'X>\x1e\xa5)DL\xa6\x02\x18\xf4\xe7\xb8\xfdt\xee\xfe\x1c|\x01\x01\xa3.\xc6O\xb9\x81q\x069\x93/\x93\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xca\xf5\x93:\xe9\x00&;\x90\x9b\xfe\x03}\x01\x01\xa5\xc5\x14\x00\x83\t\xfe\x0c~\x01\x01\x02\x80Cdx\xb1N\x05\x00\x9d\x94\x03\x00%\x1d\xfe\x16\x7f\x01\x01\x88L\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbe\xe2\xfe\x16\x80\x01\x01\xc1[\xe1%<\xed\x98)7\x90\x14\x87;\xe0P\xc3=\x00\x00\x00\x00\xa5\x03\x92i\xfe\x12\x81\x01\x01\xfc\xbd\x94\x03\x004\x00\x01\x00ARMMASK\x00Wr\x82\xaf"b"\xfe\t\x82\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x11S\xfe\x1a\x83\x01\x01\x1b\xd4q\xfd\r\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\xeeX\xfe\x16\x84\x01\x01t\xd9\x94\x03\x00\x0b\x00;\x007\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff4\x02\xd5\x93\xfe\x16\x85\x01\x01\x81\xd9\x94\x03\x00\x02\x00?\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x84\x00n\x02\xa9\xe8\xfe\x0e\x86\x01\x01\x1d\xd9\x94\x03\x00\xbb\xa3iD\xb8\x1e\x1d=8\x10\xdf\x85\xfe\x0e\x87\x01\x01\x89\xd9\x94\x03\x00\x81\xe6iDp=\xa9>,\x15\x9a\x9f\xfe\x1f\x88\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8e\xed\xfe\x06\x89\x01\x01}\xc5\x14\x00\x00\x03\x00\xad\xc4\xfe\x04\x8a\x01\x01\x98\x00\x00\xa0\x8a:\xdc\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01\xfe\x1e\x8c\x01\x01\x18PT\xfd\r\x00\x00\x00\x00L\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0ca\xea\xfe\x1a\x8d\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb0'\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7\xfe\x15\x8f\x01\x01$mt\xfd\r\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x03\xfe\x16\x90\x01\x01#\xda\x94\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00(\x0b\xfe\t\xce\n\x00m\x1b\x00\x00\x00\x00\xca\x00\x00\x00\xc1\xa0\xfe\x03\x91\x01\x01Ms\x00\x00\xe5\xac"b"\xfe\x14\x92\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x0eK\xfe\x1c\x93\x01\x01!\xd2\x94\x03\x00L\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04\x82\x07\xfe\x1c\x94\x01\x01\x1ey\x95\x03\x00\x1d\x05\x81\xbdPu\xd69)\xf2T>\x98\x0f\xb6\xb9\x08\x061\xba\xfe\xb1\x92:\x19M\xfe\x18\x95\x01\x01\xb2\xdcu\x81\xbdP\xf8'\xbb\xd5IX>\xb8\xae)DL\xa6\x02\x18\xf4\xe7\xb8\xfd\xc5\xbb\xfe\x03\x96\x01\x01Ms\x00\x00\xeb0"b"\xfe\x1c\x97\x01\x01\xa3\x88\xb1P\xb9\xf2\xf2\x089\xea6\x8d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xcb\xa0:\xd7P\xe4:\xed\x1d\xfe\x03\x98\x01\x01\xa5\xc5\x14\x00\x01\x86\xfe\x0c\x99\x01\x01\x02\x00\xedgx\xb1N\x05\x00\x8d\x95\x03\x00\xfd\x00\xfe\x16\x9a\x01\x01\x88L\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x91\xbd\xfe\x16\x9b\x01\x01\xc1\xad\xd1)-\x154\xf4\xfe*\xa1\x01\x01\x96s\xe7f\xbc\x0fm\x01\x007\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00h\xa1\xfe\x1f\xa2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TQ\xe2\xfe\x06\xa3\x01\x01}\xc8\x14\x00\x00\x03\x00\xe0\x1f\xfe\x04\xa4\x01\x01\x98\x00\x00\xa0\x8a\xd6\xf0\xfe\x02\xa5\x01\x01*\x00\x00\xa1\xe4\xfe\x1e\xa6\x01\x01\x18\x90a\x00\x0e\x00\x00\x00\x00M\xa6\x02\x18\xf4\xe7\xb8\xfd\xb2f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb8y\xfe\x1a\xa7\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x17\xdb\xfe\x08\xa8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00;\x0f\xfe\x15\xa9\x01\x01$u\x1f\x01\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00m\xeb\xfe\x16\xaa\x01\x01#\xca\x95\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe0M"b'\xfe\x03\xab\x01\x01Ms\x00\x00\xbeg\xfe\x14\xac\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00&\xba\xfe\x1c\xad\x01\x01!\x9a\x95\x03\x00M\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xad1'b'\xfe\x1c\xae\x01\x01\x1ej\x96\x03\x00\xc1(\x81\xbd`\x15\xab9\x1a\x12U>\xbcc\xcb9\xfchd\xba\xb3T\xeb8\xca]\xfe\x18\xaf\x01\x01\xb2\xe4\x86\x81\xbd\x9b\xcc,\xbb,kX>\n\xa7)DN\xa6\x02\x18\xf5\xe7\xb8\xfd\xb6\xfb\xfe\x1c\xb0\x01\x01\xa3_\x93Q\xb9Xp\x0b9"\xe5\x86\xb7\x00\x00\x00\x00\x00\x00\x00\x00Bt\x8d:w\x0b\xf2:\xf1\xbf\xfe\x03\xb1\x01\x01\xa5\xc5\x14\x00\xf2\x9c\xfe\x0c\xb2\x01\x01\x02h\x9akx\xb1N\x05\x00\x7f\x96\x03\x00C\xff\xfe\x16\xb3\x01\x01\x88N\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdb\xfc\xfe\x12\xb4\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00q\xe1\xfe\x16\xb5\x01\x01\xc1\xe5K%Q#\x83<\x82\xd7t<\xc8\x8d\x0f?\x00\x1f,\xc5\xfe\x03\xb7\x01\x01Ms\x00\x00\xa4\x07'b'\xfe\x1a\xb8\x01\x01\x1b\xc6\xc9\x04\x0e\x00\x00\x00\x00\x05\x004\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xaf\xffm\x01\xc6}\xfe\x16\xb9\x01\x01t\xba\x96\x03\x00\x08\x009\x00.\xfc\x00\x00\x00\x00\x00\x00\x07\x01\xa0\xff4\x02J!\xfe\x16\xba\x01\x01\x81\xba\x96\x03\x00\x00\x00>\x00\x1f\xfc\xfd\xff\x01\x00\xfe\xff+\x03\x87\x00l\x02\x8a\xaf\xfe\x0e\xbb\x01\x01\x1d\xba\x96\x03\x00\xa6\xa3iD\x00\x00\x18=7\x10W\xd9\xfe\x0e\xbc\x01\x01\x89\xba\x96\x03\x00K\xe6iD\\\x8f\xa7>-\x15I\x84\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T M\xfe\x06\xbe\x01\x01}\xc8\x14\x00\x00\x03\x00\xcb\xd9\xfe\x04\xbf\x01\x01\x98\x00\x00\xa0\x8a\x8f\xa6\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0\xfe\x1e\xc1\x01\x01\x18\xb8r\x03\x0e\x00\x00\x00\x00N\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cRH\xfe\x1a\xc2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe8\xbb\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa\xfe\x15\xc4\x01\x01$\x8a\xcc\x04\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xd1\xfe\x16\xc5\x01\x01#\xbb\x96\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc0,\xfe\x14\xc6\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xb9\x08\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f'b'\xfe\x1c\xc8\x01\x01!+\x97\x03\x00N\xa6\x02\x18\xf4\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xd5\x9f\xfe\x1c\xc9\x01\x01\x1eZ\x97\x03\x00\xd5U\x81\xbd\xb02\x809\xa7\x0eU>\x1f\x1e69*G\n\xba\xe5Rc8Y\x86\xfe\x18\xca\x01\x01\xb2\x95\xa6\x81\xbd\xb8V0\xbbq\x89X>)\xac)DN\xa6\x02\x18\xf4\xe7\xb8\xfdBd\xfe\x1c\xcb\x01\x01\xa3\x1fmR\xb9\xc4\xe6\r9PG\x80\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x14\x86:;\xb0\xaf:\xc3\xa3\xfe\x03\xcc\x01\x01\xa5\xc5\x14\x00V\xae\xfe\x0c\xcd\x01\x01\x02\x18.\x15\x12\x8b\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x91\xd3\xfe\x06\xd7\x01\x01}\xc5\x14\x00\x00\x03\x0001\xfe\x04\xd8\x01\x01\x98\x00\x00\xa0\x8a7^\xfe\x02\xd9\x01\x01*\x00\x00wD\xfe\x1e\xda\x01\x01\x18\xf8\x7f\x06\x0e\x00\x00\x00\x00N\xa6\x02\x18\xf4\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x9d\x8e\xfe\x1a\xdb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x96T\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95\xfe\x15\xdd\x01\x01$\ry\x08\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00c7\xfe\x16\xde\x01\x01#\xac\x97\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xa6\x84\xfe\x03\xdf\x01\x01/\xff\x00\x00\xcf\x81'b'\xfe\x14\xe0\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00J}\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$\xfe\x1c\xe2\x01\x01!\xf3\x97\x03\x00O\xa6\x02\x18\xf5\xe7\xb8\xfd^[\n\x00\xc0\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa7\x04(\xc2'b"\xfe\x1c\xe3\x01\x01\x1eK\x98\x03\x00\xccq\x81\xbdP\x87\xac9{\xf5T>Z\x9f\x8a:\x93\xdd\xfe7\xc9X?:\xddg\xfe\x18\xe4\x01\x01\xb2\xab\xc4\x81\xbd\x81\xb9-\xbb\xdd\x8eX>{\xa4)DO\xa6\x02\x18\xf5\xe7\xb8\xfdgc\xfe\x1c\xe5\x01\x01\xa3-@S\xb9\x12W\x109%\xc0r\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x86Z\x87:\x81|\x05;P\xc1\xfe\x03\xe6\x01\x01\xa5\xc8\x14\x00\xfa\xb5\xfe\x0c\xe7\x01\x01\x02\x80\xe9rx\xb1N\x05\x00_\x98\x03\x00e\x01\xfe\x16\xe8\x01\x01\x88O\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00)>\xfe\x16\xe9\x01\x01\xc1Sz#<\xa9\xa3#7'\xf3\xa3;\xbb1\xb2=\x00\x00\x00\x00\xa5\x03\x96\xf6\xfe\x03\xea\x01\x01Ms\x00\x00\xf0\x83\xfe\x1a\xeb\x01\x01\x1b\xda\x1e\x0c\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xaf\xffm\x01\xdf\t\xfe\x16\xec\x01\x01t\x9b\x98\x03\x00\x05\x004\x00.\xfc\x01\x00\xff\xff\xfd\xff\x07\x01\xa0\xff3\x02s\xb1\xfe\x16\xed\x01\x01\x81\x9b\x98\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x90\x00s\x02\xea-\xfe\x0e\xee\x01\x01\x1d\x9b\x98\x03\x00\xa9\xa4iD\xd7\xa3X=8\x10\xf0\x9b\xfe\x0e\xef\x01\x01\x89\x9b\x98\x03\x00\xc5\xe6iD)\\\xab>/\x15]\xe8\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ts\x9e\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&\xfe\x04\xf2\x01\x01\x98\x00\x00\xa0\x8a>M\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce\xfe\x1e\xf4\x01\x01\x188\x8d\t\x0e\x00\x00\x00\x00O\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa4S\xfe\x1a\xf5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd2\xa4\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06\xfe\x15\xf7\x01\x01$i!\x0c\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xad\xfe\x16\xf8\x01\x01#\x9c\x98\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x890\xfe\x12\xf9\x01\x01\xfc\xa7\x98\x03\x004\x00\x01\x00ARMMASK\x00Wr\x82)"b'\xfe\t\xfa\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03u\x8c\xfe\t\xcf\n\x00m\x05\x00\x00\x00\x00\xd3\x00\x00\x00\xa6h\xfe\x14\xfb\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00(1'b'\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5\xfe\x1c\xfd\x01\x01!\xbc\x98\x03\x00P\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\t\xaf\xfe\x1c\xfe\x01\x01\x1e<\x99\x03\x00\xeeG\x81\xbdp\xfd\x869x\xd0T>D\xe8\xab9rId\xb9]zT9\x8a\x90\xfe\x18\xff\x01\x01\xb2\xea\xad\x81\xbdt>/\xbbD\x8cX>\\\x9f)DP\xa6\x02\x18\xf5\xe7\xb8\xfd\x1e\x7f\xfe\x1c\x00\x01\x01\xa3\xf9\nT\xb9\x89\xc2\x129\x8f\xb3d\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xa1\x88:`:\x10;\x13\xb4\xfe\x03\x01\x01\x01\xa5\xc5\x14\x00\x98\xba\xfe\x0c\x02\x01\x01\x02\xe8\x96vx\xb1N\x05\x00P\x99\x03\x00\xef\x16\xfe\x16\x03\x01\x01\x88P\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9d\x11\xfe\x16\x04\x01\x01\xc1w5%<\x14\xde"7\x05x\x10< \xb1\xb4=\x00\x00\x00\x00\xa5\x03\xeb6'b"\xfe\x03\x05\x01\x01Ms\x00\x00\xa1*\xfe\x1a\x06\x01\x01\x1b<\xce\x0f\x0e\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffo\x01j'\xfe\x16\x07\x01\x01t\x8c\x99\x03\x00\t\x00:\x00,\xfc\x01\x00\x00\x00\xfb\xff\x07\x01\xa0\xff4\x02\xa3\x16\xfe\x16\x08\x01\x01\x81\x8c\x99\x03\x00\x04\x00?\x00!\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x88\x00q\x02\xd6\x91\xfe\x0e\t\x01\x01\x1d\x8c\x99\x03\x00x\xa3iD\xe1z\x0c=8\x10\xd3\xa6\xfe\x0e\n\x01\x01\x89\x8c\x99\x03\x00\xab\xe6iD\\\x8f\xaa>0\x15\x92\xf8\xfe\x1f\x0b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x011?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xda\xa1\xfe\x06\x0c\x01\x01}\xc2\x14\x00\x00\x03\x00j\x9a\xfe\x04\r\x01\x01\x98\x00\x00\xa0\x8a\x0f\xf1\xfe\x02\x0e\x01\x01*\x00\x00\xbdw\xfe\x1e\x0f\x01\x01\x18\x88\xaf\x0f\x0e\x00\x00\x00\x00Q\xa6\x02\x18\xf5\xe7\xb8\xfd\xc6f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xe6\x91\xfe\x1a\x10\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\\P\xfe\x08\x11\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00,\x0e\xfe\x15\x12\x01\x01$`\xd1\x0f\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xa2\xfe\x16\x13\x01\x01#\x8d\x99\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe9\xf4"b'\xfe\x14\x14\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x82\xbb\xfe\x03\x15\x01\x01Ms\x00\x00\xd9q\xfe\x1c\x16\x01\x01!\x85\x99\x03\x00Q\xa6\x02\x18\xf5\xe7\xb8\xfdJ[\n\x00\xac\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xcd\xf0\xfe\x1c\x17\x01\x01\x1e,\x9a\x03\x00K\x0b\x81\xbd\xa0\xd0V9]\xbcT>J!]:\xf6\x10\x8f\xb9\xdf\xe5\xe69SD\xfe\x18\x18\x01\x01\xb2|~\x81\xbd\n\x142\xbbr\x98X>\x00\xa0)DQ\xa6\x02\x18\xf5\xe7\xb8\xfdcc'b'\xfe\x1c\x19\x01\x01\xa3\xe6\xceT\xb9p.\x159\xf8\xdfU\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x9e\x88:7n(;\x1c\x92\xfe\x03\x1a\x01\x01\xa5\xc5\x14\x00\x8cF\xfe\x0c\x1b\x01\x01\x02\x80\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff&\x03\x87\x00l\x02\xaau\xfe\x0e"\x01\x01\x1d}\x9a\x03\x00\x9e\xa3iD{\x14\x16=9\x10\xaeW\xfe\x0e#\x01\x01\x89}\x9a\x03\x00@\xe7iD33\xaf>0\x15"\x12\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xeb\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TT\xa3\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V\xfe\x04&\x01\x01\x98\x00\x00\xa0\x8a\xfb\xaf\xfe\x02\'\x01\x01*\x00\x00\x07U\xfe\x1e(\x01\x01\x18\xc8\xbc\x12\x0e\x00\x00\x00\x00R\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cz\x95\xfe\x1a)\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00:\xd8\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2\xfe\x15+\x01\x01$v{\x13\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x94\xfe\x16,\x01\x01#}\x9a\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\'\xf3'b'\xfe\x14-\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xc2\xf5\xa8\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf1T\xfe\x1c.\x01\x01!M\x9a\x03\x00R\xa6\x02\x18\xf5\xe7\xb8\xfdT[\n\x00\xb6\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xf3j\xfe\x03/\x01\x01Ms\x00\x00\x82\xba'b'\xfe\x1c0\x01\x01\x1e\x1d\x9b\x03\x00\xb9\xe3\x80\xbd\xd0\xd0\x929\x7f\xcbT>i\x1bB:\xe4%)\xba\xef\xaf\xdd9/\xb6\xfe\x181\x01\x01\xb2@e\x81\xbd\xd810\xbb\xbf\xb9X>\x8f\xb2)DS\xa6\x02\x18\xf5\xe7\xb8\xfd\x13\x80\xfe\x1c2\x01\x01\xa3\xeb\x85U\xb9\x0b\x99\x179\xf6\x87G\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xd2m\x81:\xe0li;\xa7\x1d\xfe\x033\x01\x01\xa5\xc8\x14\x00\xf0\xd7\xfe\x0c4\x01\x01\x02 4~x\xb1N\x05\x002\x9b\x03\x00YR\xfe\x165\x01\x01\x88S\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\ts\xfe\x166\x01\x01\xc1\xa8_3<&\xe4!7\xad/\xba;\xe6\x0b\xba=\x00\x00\x00\x00\xa5\x03\x00@\xfe\x167\x01\x01\xe1!\xb0\x12?{\x14.>\n\x0ef<\xb5\x989<:!\x0f?\x00\x1f\xbb\xf1'b'\xfe\x1a8\x01\x01\x1b\x83&\x17\x0e\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01i\x97\xfe\x169\x01\x01tn\x9b\x03\x00\x04\x005\x00(\xfc\x02\x00\x00\x00\x01\x00\x07\x01\xa0\xff3\x02\xbe?\xfe\x16:\x01\x01\x81n\x9b\x03\x00\x03\x00B\x00\x1e\xfc\xfd\xff\x00\x00\xfc\xff)\x03\x85\x00o\x02@\xeb\xfe\x0e;\x01\x01\x1dn\x9b\x03\x00\xfc\xa2iDG\xe1\xda<7\x10\x0b-\xfe\x0e<\x01\x01\x89n\x9b\x03\x008\xe6iD\xc2\xf5\xa6>0\x15\xb5\xb8\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb6\xb8\xfe\x06>\x01\x01}\xc5\x14\x00\x00\x03\x00\x9fe\xfe\x04?\x01\x01\x98\x00\x00\xa0\x8aXb\xfe\x02@\x01\x01*\x00\x00\x9a6\xfe\x1eA\x01\x01\x18\xf0\xcd\x15\x0e\x00\x00\x00\x00S\xa6\x02\x18\xf5\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xd1y\xfe\x1aB\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x99/\xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<\xfe\x15D\x01\x01$\x1e)\x17\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e#\xfe\x16E\x01\x01#n\x9b\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfc\xee\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5\xfe\x14G\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x10\x8c'b'\xfe\x1cH\x01\x01!\xde\x9b\x03\x00T\xa6\x02\x18\xf4\xe7\xb8\xfdh[\n\x00\xca\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa6\x04\xc07\xfe\x03I\x01\x01/\xff\x00\x00\xe4\x0c\xfe\x03J\x01\x01Ms\x00\x00\xe2\xfe\xfe\x1cK\x01\x01\x1e\x0e\x9c\x03\x00a\xc8\x80\xbd\xe0W\xea9\x9b\xd9T>\x8f\xda\x9e8Q\x16\xa3\xba\x89\x07\x11\xb9\xfe\xd5\xfe\x18L\x01\x01\xb2\x0f\\\x81\xbd\x04\xc3\'\xbb\xba\xc9X>\xd7\xb3)DT\xa6\x02\x18\xf4\xe7\xb8\xfd\xb7N\xfe\x1cM\x01\x01\xa3\xbd1V\xb9s\xff\x199\x18\x869\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x99o\x7f:\x93\xe1\x8e;\xf83\xfe\x03N\x01\x01\xa5\xc5\x14\x00\xdbn\xfe\x0cO\x01\x01\x02\xa0\xdd\x81x\xb1N\x05\x00"\x9c\x03\x00`p\xfe\x16P\x01\x01\x88T\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8b|\xfe\x16Q\x01\x01\xc1\xcdf<<\xde\x90#7\x0b\x07\xd3;I\xe4\xb0=\x00\x00\x00\x00\xa5\x03g0'b'\xfe\x1aR\x01\x01\x1bi\xd0\x1a\x0e\x00\x00\x00\x00\x03\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xd3\x0c\xfe\x16S\x01\x01t^\x9c\x03\x00\t\x007\x00-\xfc\x02\x00\x00\x00\x04\x00\x07\x01\xa1\xff3\x02\xb9T\xfe\x16T\x01\x01\x81^\x9c\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x86\x00p\x02\xbe"\xfe\x0eU\x01\x01\x1d^\x9c\x03\x00\xfe\xa3iD{\x14.=9\x10\xf8\xf1\xfe\x0eV\x01\x01\x89^\x9c\x03\x00\xf4\xe6iD\n\xd7\xac>1\x15\xf3\n\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T-\x10\xfe\x06X\x01\x01}\xc5\x14\x00\x00\x03\x00g\xbf\xfe\x04Y\x01\x01\x98\x00\x00\xa0\x8a\x1d\xd7\xfe\x02Z\x01\x01*\x00\x00\x04j\xfe\x1e[\x01\x01\x180\xdb\x18\x0e\x00\x00\x00\x00T\xa6\x02\x18\xf4\xe7\xb8\xfd\xbcf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x05\xab\xfe\x1a\\\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00I\x8b\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V\xfe\x15^\x01\x01$x\xd3\x1a\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\xfc\xfe\x16_\x01\x01#_\x9c\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x8bg\xfe\x03`\x01\x01Ms\x00\x00\xc1n\xfe\x12a\x01\x01\xfc\x92\x9c\x03\x004\x00\x01\x00ARMMASK\x00Wr\xcb\xfa'b'\xfe\tb\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1f3\xfe\x14c\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xb7K2:<\xcd\x96\xba\xd0nS\xba\x17\xbc\xfe\x18g\x01\x01\xb2ZD\x81\xbd\xbb\xe3+\xbb\x8a\xfaX>{\xa4)DU\xa6\x02\x18\xf4\xe7\xb8\xfdf\xb5\xfe\x1ch\x01\x01\xa3n\xd8V\xb9(]\x1c9\x8f\xca*\xb7\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x89\x92:\xea\xb40;\xa5\xa0\xfe\x03i\x01\x01\xa5\xc2\x14\x00\x04\x13\xfe\x0cj\x01\x01\x02 \x87\x85x\xb1N\x05\x00\x12\x9d\x03\x00\xe3+\xfe\x16k\x01\x01\x88U\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x87\x94\xfe\x16l\x01\x01\xc1\x068E<\xc5\xf8$7'\xc0\xca;\x83#\xa7=\x00\x00\x00\x00\xa5\x03\x80x\xfe\x1am\x01\x01\x1b\x0fz\x1e\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01a\x1a\xfe\x16n\x01\x01tN\x9d\x03\x00\x05\x004\x00&\xfc\x03\x00\xff\xff\xff\xff\x07\x01\xa0\xff3\x02\xb0t\xfe\x16o\x01\x01\x81N\x9d\x03\x00\x02\x00@\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x86\x00j\x02\x8d\xe7\xfe\x0ep\x01\x01\x1dN\x9d\x03\x00\xb0\xa4iD\\\x8fZ=9\x10\xc9\xad\xfe\x0eq\x01\x01\x89N\x9d\x03\x00e\xe6iD)\\\xa8>2\x15\xf2Y\xfe\x1fr\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdc\x000?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Td\xdd\xfe\x06s\x01\x01}\xc2\x14\x00\x00\x03\x00\xec\xd8\xfe\x04t\x01\x01\x98\x00\x00\xa0\x8a\xf6-\xfe\x02u\x01\x01*\x00\x00s\x10\xfe\x1ev\x01\x01\x18p\xe8\x1b\x0e\x00\x00\x00\x00U\xa6\x02\x18\xf4\xe7\xb8\xfd\xb2f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c&\xb9\xfe\x1aw\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xda\xb2\xfe\x08x\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf0\xfe\x15y\x01\x01$\xee|\x1e\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e<\xfe\x16z\x01\x01#O\x9d\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x1d\x18"b'\xfe\x03{\x01\x01Ms\x00\x00\xd5\x92\xfe\x14|\x01\x01J\n\xd7#<\n\xd7# \x1d\xfd7\x89\\i\xba\xc4\xebe9\xe0\xc6\xfe\x18\x7f\x01\x01\xb2X\x1e\x81\xbd\x8a\xe6/\xbb\xfa\x10Y>\x14\xae)DV\xa6\x02\x18\xf4\xe7\xb8\xfd\xcf\xb6\xfe\x1c\x80\x01\x01\xa3,yW\xb9\xc1\xb1\x1e9\xd9\x9a\x1b\xb7\x00\x00\x00\x00\x00\x00\x00\x00\x18\xcd\x87:\xac\x1f\x01;\xfb\x11\xfe\x03\x81\x01\x01\xa5\xc8\x14\x00\xf5\xfa\xfe\x0c\x82\x01\x01\x02\x884\x89x\xb1N\x05\x00\x03\x9e\x03\x00\xcf\xef\xfe\x16\x83\x01\x01\x88V\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\xc8\xfe\x16\x84\x01\x01\xc1\xa2\tI<\xe7\xb4&7Ny\x84:\xb6\xd8\xbc=\x00\x00\x00\x00\xa5\x03\xa0r\xfe\x03\x85\x01\x01Ms\x00\x00C\xe1'b'\xfe\x1a\x86\x01\x01\x1b\xaa\'"\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffl\x01\x93\xe7\xfe\x16\x87\x01\x01t?\x9e\x03\x00\x03\x00=\x006\xfc\x00\x00\xff\xff\xff\xff\x07\x01\xa0\xff4\x02}U\xfe\x16\x88\x01\x01\x81?\x9e\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x01\x00\xfd\xff+\x03\x87\x00n\x02\x7f\x95\xfe\x0e\x89\x01\x01\x1d?\x9e\x03\x00\xbd\xa2iD\x1e\x85\xbb<9\x10T\x05\xfe\x0e\x8a\x01\x01\x89?\x9e\x03\x00g\xe7iD\xa4p\xb0>3\x15\x85J\xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T}\x02\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf\xfe\x04\x8d\x01\x01\x98\x00\x00\xa0\x8a\xd85\xfe\x02\x8e\x01\x01*\x00\x00\xa0\xf1\xfe\x1e\x8f\x01\x01\x18\xc0\n"\x0e\x00\x00\x00\x00V\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cz\xad\xfe\x1a\x90\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00-\xc4\xfe\x08\x91\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xc8\xfe\x15\x92\x01\x01$\x1e*"\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13%\xfe\x16\x93\x01\x01#@\x9e\x03\x00\xdc\x05\xdc\x05\xa9\x05\x96\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xca!\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b'\xfe\x14\x95\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\x99\xbe\x00\x00\x00\x00\x0b\x00\x00\x00Q=\xfe\x1c\x96\x01\x01!8\x9e\x03\x00V\xa6\x02\x18\xf4\xe7\xb8\xfdr[\n\x00\xd4\xfe\xff\xff\xfb\xff\x00\x00\x00\x00\xa7\x043\xb7\xfe\x1c\x97\x01\x01\x1e\xdf\x9e\x03\x00f\x12\x80\xbd ,:9\x0c\xebT>\x04\x88\x11\xb9\xffBr\xba[\x17\x86:>\xcd\xfe\x18\x98\x01\x01\xb2\xcc\xf7\x80\xbda\xf64\xbb\xb4\x10Y>=\xaa)DV\xa6\x02\x18\xf4\xe7\xb8\xfd\x0f\xe3'b'\xfe\x1c\x99\x01\x01\xa3\xab\x12X\xb9\xce\xfe 9^9\x0c\xb7\x00\x00\x00\x00\x00\x00\x00\x00~\x1f\x90:=\x16\xf1:!\x7f\xfe\x03\x9a\x01\x01\xa5\xc2\x14\x00O\xda\xfe\x0c\x9b\x01\x01\x02\x08\xde\x8cx\xb1N\x05\x00\xf5\x9e\x03\x00F\xc4\xfe\x16\x9c\x01\x01\x88V\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa7\xf1\xfe\x12\x9d\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x95\xb6\xfe\x16\x9e\x01\x01\xc1NcS<\x98c)7\xb3\x87\xa4:hx\xc5=\x00\x00\x00\x00\xa5\x03\xd8\xb4\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\x1a\xa0\x01\x01\x1b\xa0\xd6%\x0e\x00\x00\x00\x00\x05\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffo\x01\xc0]\xfe\x16\xa1\x01\x01t0\x9f\x03\x00\x08\x007\x001\xfc\x02\x00\x00\x00\x00\x00\x07\x01\xa1\xff4\x02!"\xfe\x16\xa2\x01\x01\x810\x9f\x03\x00\x03\x00@\x00\x1f\xfc\xfc\xff\x00\x00\xfc\xff*\x03\x87\x00l\x02\xd0|\xfe\x0e\xa3\x01\x01\x1d0\x9f\x03\x00\xee\xa3iD\x85\xeb)=9\x10!\x17\xfe\x0e\xa4\x01\x01\x890\x9f\x03\x00\xb8\xe6iD\xc2\xf5\xaa>3\x15\xf4\xaf\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb27\xfe\x06\xa6\x01\x01}\xc5\x14\x00\x00\x03\x00k:\xfe\x04\xa7\x01\x01\x98\x00\x00\xa0\x8a\xd1&\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca\xfe\x1e\xa9\x01\x01\x18\xe8\x1b%\x0e\x00\x00\x00\x00W\xa6\x02\x18\xf4\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c \xe4\xfe\x1a\xaa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x06\x0b\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xfe\x15\xac\x01\x01$\xbc\xd9%\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xef\xfe\x16\xad\x01\x01#1\x9f\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\x95\xea'b'\xfe\x03\xae\x01\x01Ms\x00\x00\xdf\xf0\xfe\x14\xaf\x01\x01J\n\xd7#<\n\xd7#<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00xZ\xfe\x1c\xb0\x01\x01!\x01\x9f\x03\x00W\xa6\x02\x18\xf4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfb\xff\x00\x00\x00\x00\xa7\x04cB'b'\xfe\x1c\xb1\x01\x01\x1e\xd1\x9f\x03\x00\xa7\xc8\x7f\xbd\xa0\x96Y9K\x01U>\x8bc\xfc9]\x14\x92\xbad\xa7\xf0\xb8\xb1\xa1\xfe\x18\xb2\x01\x01\xb2"\xdd\x80\xbd\xda\xe66\xbbp2Y>\xae\xa7)DX\xa6\x02\x18\xf3\xe7\xb8\xfd\xaa\xf8\xfe\x1c\xb3\x01\x01\xa3J\xa6X\xb9*G#93"\xf9\xb6\x00\x00\x00\x00\x00\x00\x00\x00l\x97w:\xa0@\xb7:i\xce\xfe\x03\xb4\x01\x01\xa5\xc5\x14\x00\x93\x0b\xfe\x0c\xb5\x01\x01\x02\x805\x90x\xb1N\x05\x00\xe5\x9f\x03\x00G\xba\xfe\x16\xb6\x01\x01\x88X\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbal\xfe\x16\xb7\x01\x01\xc1C\xc6R+y[<\xd8\xe1\x02<\x11]\r?\x00\x1f\xf1/\xfe\x03\xb9\x01\x01Ms\x00\x00\xa97\xfe\x03\xba\x01\x01/\xff\x00\x00\xaf\xc5'b'\xfe\x1a\xbb\x01\x01\x1b\xb0\x86)\x0e\x00\x00\x00\x00\x04\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xae\xffm\x01\xa5\x1f\xfe\x16\xbc\x01\x01t"\xa0\x03\x00\r\x004\x00+\xfc\x01\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02\xdc\x0f\xfe\x16\xbd\x01\x01\x81"\xa0\x03\x00\x00\x00@\x00\x1d\xfc\xfc\xff\x01\x00\xfc\xff(\x03\x87\x00m\x02\xff\xf4\xfe\x0e\xbe\x01\x01\x1d"\xa0\x03\x00\xa6\xa2iD\x00\x00\xb0<9\x10\x9d6\xfe\x0e\xbf\x01\x01\x89"\xa0\x03\x00\xdd\xe7iD\xb8\x1e\xb4>5\x15gV\xfe*\xc0\x01\x01\x96s\xe7f\xbc\x0em\x01\x009\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00V\xda\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe2\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfeX\xfe\x06\xc2\x01\x01}\xc2\x14\x00\x00\x03\x00\xa9\x8c\xfe\x04\xc3\x01\x01\x98\x00\x00\xa0\x8an\x08\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf\xfe\x1e\xc5\x01\x01\x18\x10-(\x0e\x00\x00\x00\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c!\xf4\xfe\x1a\xc6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x0b\xb7\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec\xfe\x15\xc8\x01\x01$\x89\x89)\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x002O\xfe\x16\xc9\x01\x01##\xa0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00C%\xfe\x14\xca\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa7\x98\xfe\x03\xcb\x01\x01Ms\x00\x00\xbf\xb4\xfe\x12\xcc\x01\x01\xfc~\xa0\x03\x004\x00\x01\x00ARMMASK\x00Wr\xb9B'b'\xfe\t\xcd\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9a\x8f\xfe\x1c\xce\x01\x01!\x93\xa0\x03\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04\xce\xf5\xfe\t\xd1\n\x00m\x0e\x00\x00\x00\x00\xd2\x00\x00\x00{I\xfe\x1c\xcf\x01\x01\x1e\xc2\xa0\x03\x00R\x9c\x7f\xbd`2;9\xf9\x1cU>\xdd\x00\xc2\xb8\xd1\x10c\xba\xdc\x17\xde9\xa5\\\xfe\x18\xd0\x01\x01\xb2C\xd9\x80\xbd\x93\xe45\xbb\x01ZY>\x14\xae)DX\xa6\x02\x18\xf3\xe7\xb8\xfd\xd3\x89\xfe\x1c\xd1\x01\x01\xa3\x1f:Y\xb9y\x86%9\xad\x01\xd8\xb6\x00\x00\x00\x00\x00\x00\x00\x00x\nr:\x95\x8c(;\x1a|\xfe\x03\xd2\x01\x01\xa5\xc6\x14\x00\xee\xe0\xfe\x0c\xd3\x01\x01\x028)\x94x\xb1N\x05\x00\xd6\xa0\x03\x00\x98\x9f\xfe\x16\xd4\x01\x01\x88X\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\xe2\xfe\x16\xd5\x01\x01\xc1\xc7\x1fF<\x0fA,7\xe7\x13\xdf8IZ\xb6=\x00\x00\x00\x00\xa5\x03\xfb\x91'b'\xfe\x03\xd6\x01\x01Ms\x00\x00\x1aU\xfe\x1a\xd7\x01\x01\x1b\xa10-\x0e\x00\x00\x00\x00\x04\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\x8cg\xfe\x16\xd8\x01\x01t\x12\xa1\x03\x00\x05\x004\x00$\xfc\x02\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x029\xb4\xfe\x16\xd9\x01\x01\x81\x12\xa1\x03\x00\x02\x00>\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff*\x03\x86\x00q\x020o\xfe\x0e\xda\x01\x01\x1d\x12\xa1\x03\x003\xa3iDff\xf6<9\x10o\xa7\xfe\x0e\xdb\x01\x01\x89\x12\xa1\x03\x00\x80\xe8iD33\xb9>6\x15S\xef\xfe\x1f\xdc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x001?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8ef\xfe\x06\xdd\x01\x01}\xc5\x14\x00\x00\x03\x00\xb8&\xfe\x04\xde\x01\x01\x98\x00\x00\xa0\x8a(\xfa\xfe\x02\xdf\x01\x01*\x00\x00\xba\x1c\xfe\x1e\xe0\x01\x01\x188>+\x0e\x00\x00\x00\x00X\xa6\x02\x18\xf3\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x83\xfe\xfe\x1a\xe1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xbd\x9b\xfe\x08\xe2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00XJ\xfe\x15\xe3\x01\x01$\xf02-\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xfb\xfe\x16\xe4\x01\x01#\x13\xa1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xda\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00xu'b'\xfe\x14\xe5\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00=\xf0\xfe\x1c\xe6\x01\x01![\xa1\x03\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x00\x00\x00\x00\xa8\x04Qn\xfe\x03\xe7\x01\x01Ms\x00\x00-9'b"\xfe\x1c\xe8\x01\x01\x1e\xb3\xa1\x03\x00|`\x7f\xbd\xe0\xd5\x199\xa5.U>7\xb4t9Mp\x9a\xbaZ\xda$\xbak\xbc\xfe\x18\xe9\x01\x01\xb2s\xba\x80\xbd:\xb47\xbb\x03qY>{\xb4)DY\xa6\x02\x18\xf3\xe7\xb8\xfd\x861\xfe\x1c\xea\x01\x01\xa3\x08\xcbY\xb9\x01\xc0'9\xbc\xff\xb6\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xe7*^:\x9d'6;\xb2\x14\xfe\x03\xeb\x01\x01\xa5\xc3\x14\x002\xcf\xfe\x0c\xec\x01\x01\x02\x88\xda\x97x\xb1N\x05\x00\xc7\xa1\x03\x00\x16B\xfe\x16\xed\x01\x01\x88Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\xae\xfe\x16\xee\x01\x01\xc1\xae\xafN<\x8a4-7\xa7\x08\xae;\xd0[\xb4=\x00\x00\x00\x00\xa5\x03\xcfF\xfe\x1a\xef\x01\x01\x1b/\xdf0\x0e\x00\x00\x00\x00\x05\x005\x00\x1c\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xe2P\xfe\x16\xf0\x01\x01t\x03\xa2\x03\x00\x0c\x00;\x002\xfc\x07\x00\x01\x00\xfb\xff\x07\x01\xa0\xff3\x02\xba}\xfe\x16\xf1\x01\x01\x81\x03\xa2\x03\x00\x03\x00B\x00\x1e\xfc\xfc\xff\x01\x00\xfd\xff%\x03\x87\x00v\x02\x90\xed\xfe\x0e\xf2\x01\x01\x1d\x03\xa2\x03\x00\xec\xa2iD33\xd3<:\x10\x9a\xed\xfe\x0e\xf3\x01\x01\x89\x03\xa2\x03\x008\xe7iD\xc2\xf5\xae>5\x15\xea\xa8\xfe\x1f\xf4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x004?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xce1\xfe\x06\xf5\x01\x01}\xc5\x14\x00\x00\x03\x00\x98x\xfe\x04\xf6\x01\x01\x98\x00\x00\xa0\x8a\xdbr\xfe\x02\xf7\x01\x01*\x00\x00\xd5\xa1\xfe\x1e\xf8\x01\x01\x18xK.\x0e\x00\x00\x00\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cu\xaf\xfe\x1a\xf9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf7\xb1\xfe\x08\xfa\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe0=\xfe\x15\xfb\x01\x01$\xf0\xe10\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00E\x12\xfe\x16\xfc\x01\x01#\x05\xa2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00J\xe5\xfe\x03\xfd\x01\x01Ms\x00\x00\x86D"b'\xfe\x14\xfe\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xe2\x9b'b'\xfe\x1c\xff\x01\x01!$\xa2\x03\x00Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x01\x00\xa8\x04;X\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd\xfe\x1c\x01\x01\x01\x1e\xa4\xa2\x03\x00\xa3\x0f\x7f\xbd\x00\xa9\xfb8S\x13U>b\x8a\xee8~K\x10\xba\x8b\x8f%9\xe3\xdf\xfe\x18\x02\x01\x01\xb2R\xac\x80\xbdF\x8b7\xbb\x02pY>\x8f\xb2)DY\xa6\x02\x18\xf3\xe7\xb8\xfd\x9f\xcb\xfe\x1c\x03\x01\x01\xa3\xc1YZ\xb9\x01\xf4)9~\xa8\x96\xb6\x00\x00\x00\x00\x00\x00\x00\x00d\xe8>:\x0b\xb24;\xa4\xae\xfe\x03\x04\x01\x01\xa5\xc5\x14\x00\xf9-\xfe\x0c\x05\x01\x01\x02\x002\x9bx\xb1N\x05\x00\xb8\xa2\x03\x00$,\xfe\x16\x06\x01\x01\x88Y\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa4\x96\xfe\x16\x07\x01\x01\xc1\xb8\x0eQ<\xe0\xda,7.\xfbN;9\x17\xb2=\x00\x00\x00\x00\xa5\x03\xd6\xea'b'\xfe\x1a\x08\x01\x01\x1b\x98\x8b4\x0e\x00\x00\x00\x00\x04\x003\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xacZ\xfe\x16\t\x01\x01t\xf4\xa2\x03\x00\x02\x00<\x00/\xfc\xff\xff\xfe\xff\x06\x00\x07\x01\xa0\xff4\x02\xa97\xfe\x16\n\x01\x01\x81\xf4\xa2\x03\x00\x03\x00?\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff)\x03\x88\x00v\x02pD\xfe\x0e\x0b\x01\x01\x1d\xf4\xa2\x03\x00\x83\xa3iD)\\\x0f=:\x10I\x96\xfe\x0e\x0c\x01\x01\x89\xf4\xa2\x03\x00\xae\xe7iD\xd7\xa3\xb2>7\x15R\xb0\xfe\x1f\r\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x014?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tx\x8a\xfe\x06\x0e\x01\x01}\xc5\x14\x00\x00\x03\x00P\xf6\xfe\x04\x0f\x01\x01\x98\x00\x00\xa0\x8a\xf5j\xfe\x02\x10\x01\x01*\x00\x00UD\xfe\x1e\x11\x01\x01\x18\xc8m4\x0e\x00\x00\x00\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0cY\xe7\xfe\x1a\x12\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00%\xd2\xfe\x08\x13\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00v\x05\xfe\x15\x14\x01\x01$\xcf\x8d4\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8c\x1e\xfe\x16\x15\x01\x01#\xf5\xa2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xfa\xad\xfe\x03\x16\x01\x01Ms\x00\x00\t\xfb'b"\xfe\x14\x17\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5\xb7\x91\xd89'\xd1T\xba8\x02\xff\xb7u\x15\xfe\x18\x1b\x01\x01\xb2m\xa7\x80\xbd\xae\x00:\xbbF}Y>\n\xa7)DZ\xa6\x02\x18\xf3\xe7\xb8\xfdcR"b'\xfe\x1c\x1c\x01\x01\xa3p\xe9Z\xb9\xa4",9\xda\xddm\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xd6\x938:\xd4\xf8D;\x10\xdd\xfe\x03\x1d\x01\x01\xa5\xc5\x14\x00\x82\xda\xfe\x0c\x1e\x01\x01\x02\xa0)\x9fx\xb1N\x05\x00\xa8\xa3\x03\x00\xda\x89\xfe\x16\x1f\x01\x01\x88Z\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x11\xd8\xfe\x16 \x01\x01\xc1\xd4\x00\\<,\xf1-7;\tm;\xb9J\xa1=\x00\x00\x00\x00\xa5\x03-\x02\xfe\x1a!\x01\x01\x1b\xf458\x0e\x00\x00\x00\x00\x05\x004\x00\x1e\xfc\x00\x00\xff\xff\x00\x00\r\x01\xb0\xffm\x01]T\xfe\x16"\x01\x01t\xe4\xa3\x03\x00\x07\x004\x00*\xfc\x00\x00\x03\x00\xfc\xff\x07\x01\x9f\xff3\x02md\xfe\x16#\x01\x01\x81\xe4\xa3\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfc\xff)\x03\x88\x00t\x02\x8e\x9c\xfe\x0e$\x01\x01\x1d\xe4\xa3\x03\x00\x17\xa3iD\xebQ\xe8<:\x10`\x11\xfe\x0e%\x01\x01\x89\xe4\xa3\x03\x00\x00\xe8iD33\xb5>7\x15\xbb\x13\xfe\x1f&\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf2\x004?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xaex\xfe\x06\'\x01\x01}\xc8\x14\x00\x00\x03\x00\xae\xd3\xfe\x04(\x01\x01\x98\x00\x00\xa0\x8a.t\xfe\x02)\x01\x01*\x00\x00&\xd3\xfe\x1e*\x01\x01\x18\x08{7\x0e\x00\x00\x00\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c@a\xfe\x1a+\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00CZ\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf\xfe\x15-\x01\x01$\x9988\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xe1\xfe\x16.\x01\x01#\xe5\xa3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00z\xb9'b'\xfe\x03/\x01\x01Ms\x00\x00\x82\xba\xfe\x140\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00S\x9a\xfe\x031\x01\x01/\xff\x00\x00!\xa9\xfe\x1c2\x01\x01!\xb5\xa3\x03\x00Z\xa6\x02\x18\xf3\xe7\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04~B\xfe\x123\x01\x01\xfci\xa4\x03\x004\x00\x01\x00ARMMASK\x00Wr_:'b"\xfe\t4\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xca\xa8\xfe\x1c5\x01\x01\x1e\x85\xa4\x03\x00\xdfZ\x7f\xbd@\x14\x089@\x0cU>;\x97\x82:\x9d\xac'\xba\xcc9\xfe\xb9gf\xfe\x186\x01\x01\xb2\xde\xc9\x80\xbd\xfe\x048\xbb{\x84Y>G\xb1)D[\xa6\x02\x18\xf3\xe7\xb8\xfd\x80\x02\xfe\x037\x01\x01Ms\x00\x00F\xcc\xfe\x1c8\x01\x01\xa3O~[\xb9\xf1G.9,\x8a/\xb6\x00\x00\x00\x00\x00\x00\x00\x00\xab\xa11:\xb8E8;5\xb3\xfe\x039\x01\x01\xa5\xc5\x14\x00\xacz\xfe\x0c:\x01\x01\x02\x08\xd7\xa2x\xb1N\x05\x00\x9a\xa4\x03\x00~\xfd\xfe\x16;\x01\x01\x88[\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00C\t\xfe\x16<\x01\x01\xc1\xa6\x03RL6\x82<\x9b\x11\x16\x01\x01\x1b\x7f\xe6;\x0e\x00\x00\x00\x00\x04\x004\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffm\x01\x93 \xfe\x16?\x01\x01t\xd6\xa4\x03\x00\x0b\x008\x00*\xfc\xfe\xff\xfe\xff\xfe\xff\x07\x01\xa0\xff3\x02\x90\xa4\xfe\x16@\x01\x01\x81\xd6\xa4\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00n\x02\\\xa0\xfe\x0eA\x01\x01\x1d\xd6\xa4\x03\x009\xa5iD\xcc\xcc|=;\x10W\x10\xfe\x0eB\x01\x01\x89\xd6\xa4\x03\x00\xdd\xe7iD\xb8\x1e\xb4>8\x15\xf4\xc9\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T`\x0f\xfe\x06D\x01\x01}\xc5\x14\x00\x00\x03\x00\xdd,\xfe\x04E\x01\x01\x98\x00\x00\xa0\x8a\xa6h\xfe\x02F\x01\x01*\x00\x00Wn\xfe\x1eG\x01\x01\x180\x8c:\x0e\x00\x00\x00\x00[\xa6\x02\x18\xf3\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cW \xfe\x1aH\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00&\xb4\xfe\x08I\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x1a\xfe\x15J\x01\x01$N\xe9;\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00@N\xfe\x16K\x01\x01#\xd7\xa4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xe7\xb1\xfe\x03L\x01\x01Ms\x00\x00S\xe3\xfe\x14M\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00)\xb6'b"\xfe\x1cN\x01\x01!G\xa5\x03\x00[\xa6\x02\x18\xf4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04~\x95\xfe\x1cO\x01\x01\x1ev\xa5\x03\x00T\x8c\x7f\xbd\x00\xed\xff7\x1e\xf5T>\x02\xec{:\x06I\x80\xbaS\xc2\xd1\xb76\xf4\xfe\x18P\x01\x01\xb27\xdb\x80\xbds\xf9=\xbbE\x8cY>p\xad)D[\xa6\x02\x18\xf4\xe7\xb8\xfdw,\xfe\x1cQ\x01\x01\xa3\x14\x16\\\xb9aj09\xa0\xa1\xe6\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xca':\xdd(e;\xebj\xfe\x03R\x01\x01\xa5\xc5\x14\x00\xc1\x0e\xfe\x0cS\x01\x01\x02\xa0|\xa6x\xb1N\x05\x00\x8a\xa5\x03\x00\xf9\xff\xfe\x16T\x01\x01\x88[\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xf6\xfe\x16U\x01\x01\xc1\x04xR9\x15;d\xfe\x1f\\\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf0\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tt#\xfe\x06]\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\xb4\xfe\x04^\x01\x01\x98\x00\x00\xa0\x8a\xff>\xfe\x02_\x01\x01*\x00\x00\xa7\x9a\xfe\x1e`\x01\x01\x18X\x9d=\x0e\x00\x00\x00\x00[\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd1\x94\xfe\x1aa\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcc\x0f\xfe\x08b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x8c\xfe\x15c\x01\x01$\xb3\x96?\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\xc7\xfe\x16d\x01\x01#\xc8\xa5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xb6\x05\xe8\x03\x82\x03\x00\x00\xc3#'b'\xfe\x03e\x01\x01Ms\x00\x00\xa0\xf9\xfe\x14f\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xe1z\x94\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xa6\x81\xfe\x1cg\x01\x01!\x10\xa6\x03\x00\\\xa6\x02\x18\xf4\xe7\xb8\xfd|[\n\x00\xde\xfe\xff\xff\xfc\xff\x01\x00\x00\x00\xa7\x04\x1fA'b"\xfe\x1ch\x01\x01\x1eh\xa6\x03\x00\xfdi\x7f\xbd\x00\\\xbb8\xa0\xd6T>\xa78\xfe9\xc5\x85\x96\xba\\\x13\x16\xb9\x87\x15\xfe\x18i\x01\x01\xb2\xb3\xcc\x80\xbd\xc9n<\xbb\x86\x8eY>\x00\xc0)D\\\xa6\x02\x18\xf4\xe7\xb8\xfd\xb0%\xfe\x1cj\x01\x01\xa3\xd0\xb4\\\xb9H\x8d29\xe8\xe1\\\xb5\x00\x00\x00\x00\x00\x00\x00\x00\xb1+):n4s;a\xcc\xfe\x03k\x01\x01\xa5\xc8\x14\x00\xc5\xc4\xfe\x0cl\x01\x01\x02\x08*\xaax\xb1N\x05\x00|\xa6\x03\x00\x9cn\xfe\x16m\x01\x01\x88\\\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe3\x96\xfe\x16n\x01\x01\xc1/+R<\x1b5.7\xac\td<\x1e]\xb4=\x00\x00\x00\x00\xa5\x03\xb9\x00\xfe\x03o\x01\x01Ms\x00\x00s\xdf\xfe\x1ap\x01\x01\x1bD?C\x0e\x00\x00\x00\x00\x05\x005\x00\x1c\xfc\x01\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\x80\x9f\xfe\x16q\x01\x01t\xb8\xa6\x03\x00\t\x00>\x00'\xfc\x00\x00\x02\x00\xfe\xff\x07\x01\x9f\xff3\x02\x1b\xca\xfe\x16r\x01\x01\x81\xb8\xa6\x03\x00\x01\x00B\x00 \xfc\xfd\xff\x01\x00\xfd\xff.\x03\x86\x00l\x02\xca.\xfe\x0es\x01\x01\x1d\xb8\xa6\x03\x00\xbb\xa1iD\xc2\xf5\xe8;:\x10\x8b\x97\xfe\x0et\x01\x01\x89\xb8\xa6\x03\x00k\xe8iD\\\x8f\xb8>:\x15ji\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0e\x05\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14\xfe\x04w\x01\x01\x98\x00\x00\xa0\x8a\xf1\xfb\xfe\x02x\x01\x01*\x00\x00<>\xfe\x1ey\x01\x01\x18\x80\xae@\x0e\x00\x00\x00\x00\\\xa6\x02\x18\xf4\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c,i\xfe\x1az\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xcbb\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe\xfe\x15|\x01\x01$\xd7AC\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x011\xfe\x16}\x01\x01#\xb8\xa6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00m\xa1"b'\xfe\x14~\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbe\x00\x00\x00\x00\x0b\x00\x00\x00z\xb5\xfe\x03\x7f\x01\x01Ms\x00\x00\x0b\x84'b"\xfe\x1c\x80\x01\x01!\xc4\xa6\x03\x00]\xa6\x02\x18\xf4\xe7\xb8\xfd\x86[\n\x00\xe8\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa6\x04\xa8x\xfe\x1c\x81\x01\x01\x1eY\xa7\x03\x00\x9a\x9f\x7f\xbd\xc0\xa6\xe38\xa8\xd4T>4\x8f\xab9D\x92\r\xba\x99o\xd2\xb9\xef\n\xfe\x18\x82\x01\x01\xb2\xe0\xce\x80\xbdy\x02;\xbb%\x98Y>\xa4\xb0)D]\xa6\x02\x18\xf4\xe7\xb8\xfd\x17O\xfe\x1c\x83\x01\x01\xa3\xacY]\xb9\xd1\xad49h\xf0\x023\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xe8!:|\xf3j;\xb4[\xfe\x03\x84\x01\x01\xa5\xc8\x14\x00\x94m\xfe\x0c\x85\x01\x01\x02\xa0\xcf\xadx\xb1N\x05\x00l\xa7\x03\x00\xe1\x8f\xfe\x16\x86\x01\x01\x88]\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6'\xfe\x12\x87\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x02\x1f\xfe\x16\x88\x01\x01\xc1y\xdbW<\x94\xd5-7\xe6\x93\xe9:\xc9\\\xab=\x00\x00\x00\x00\xa5\x03\x19\x9f\xfe\x03\x89\x01\x01Ms\x00\x00!\xda"b'\xfe\x1a\x8a\x01\x01\x1bC\xebF\x0e\x00\x00\x00\x00\x03\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\x7f\x87\xfe\x16\x8b\x01\x01t\xa8\xa7\x03\x00\x07\x005\x00,\xfc\x02\x00\xfe\xff\xfe\xff\x07\x01\xa0\xff4\x02)\x1e\xfe\x16\x8c\x01\x01\x81\xa8\xa7\x03\x00\x00\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff.\x03\x88\x00w\x02\xc0\xcc\xfe\x0e\x8d\x01\x01\x1d\xa8\xa7\x03\x00a\xa3iDR\xb8\x06=<\x10\x03\xb4\xfe\x0e\x8e\x01\x01\x89\xa8\xa7\x03\x00 \xe7iD33\xae>:\x15QF\xfe\x1f\x8f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x012?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TU\x12\xfe\x06\x90\x01\x01}\xc5\x14\x00\x00\x03\x00\xd3\\\xfe\x04\x91\x01\x01\x98\x00\x00\xa0\x8ac\x8a\xfe\x02\x92\x01\x01*\x00\x00\xf3\xf5\xfe\x1e\x93\x01\x01\x18\xe8\xccF\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf5\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cR\xe0\xfe\x1a\x94\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xce\xc8\xfe\x08\x95\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00:\xde\xfe\x15\x96\x01\x01$\xf9\xedF\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xb2\xfe\x16\x97\x01\x01#\xa9\xa7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00E7'b'\xfe\x14\x98\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x9c\x9bu:w\xbaT\xba\xe5\x83\xc18\xd6#\xfe\x18\x9c\x01\x01\xb2c\xbb\x80\xbd!b<\xbb\\\x9fY>3\xb3)D]\xa6\x02\x18\xf5\xe7\xb8\xfd\x97K\xfe\x12\x9d\x01\x01\xfcV\xa8\x03\x004\x00\x01\x00ARMMASK\x00Wrj\xc2\xfe\t\x9e\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1c\x99'b'\xfe\x1c\x9f\x01\x01\xa3\xd0\x06^\xb9W\xcc69\xb2\x8f`5\x00\x00\x00\x00\x00\x00\x00\x00\x04\x91 :\xc7\xd0\x8e;\xe8\xf8\xfe\x03\xa0\x01\x01\xa5\xc5\x14\x005F\xfe\x0c\xa1\x01\x01\x02 y\xb1x\xb1N\x05\x00]\xa8\x03\x00\x0eq\xfe\x16\xa2\x01\x01\x88]\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x14\xec\xfe\x16\xa3\x01\x01\xc1\xbc\xeaW<\xdc\xc4,7EL#:\xf9Y\xa5=\x00\x00\x00\x00\xa5\x03\x9f7\xfe\x03\xa4\x01\x01/\xff\x00\x00\xda\xae\xfe\t\xd3\n\x00m"\x00\x00\x00\x00\xd1\x00\x00\x00c\xdc\xfe\x03\xa5\x01\x01Ms\x00\x00\xb3W\xfe\x1a\xa6\x01\x01\x1bQ\x99J\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0c\x01\xb0\xffm\x01\x0f\x17\xfe\x16\xa7\x01\x01t\x99\xa8\x03\x00\x05\x006\x00%\xfc\x02\x00\xfe\xff\x01\x00\x07\x01\xa0\xff3\x02\xea\xc0\xfe\x16\xa8\x01\x01\x81\x99\xa8\x03\x00\x03\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff2\x03\x85\x00k\x02\xbe~\xfe\x0e\xa9\x01\x01\x1d\x99\xa8\x03\x00y\xa3iD\xcd\xcc\x0c=<\x10.W\xfe\x0e\xaa\x01\x01\x89\x99\xa8\x03\x00\x93\xe7iD\xcd\xcc\xb1>:\x157\x16\xfe\x1f\xab\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x002?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa6=\xfe\x06\xac\x01\x01}\xc5\x14\x00\x00\x03\x00\xe3-\xfe\x04\xad\x01\x01\x98\x00\x00\xa0\x8a\xe1\xc2\xfe\x02\xae\x01\x01*\x00\x00#\x92\xfe\x1e\xaf\x01\x01\x18(\xdaI\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf5\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cR\xb7\xfe\x1a\xb0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x005\xa3\xfe\x08\xb1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00.}\xfe\x15\xb2\x01\x01$\x04\x9cJ\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00KK\xfe\x16\xb3\x01\x01#\x9a\xa8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb0\xb5'b'\xfe\x14\xb4\x01\x01J\n\xd7#<\n\xd7#\xdc\x80\xfe9\x84\r\x1c\xbaO\x06\x88\xb9\xd3>\xfe\x18\xb8\x01\x01\xb2\xceq\x80\xbd\x84\x82:\xbba\xa4Y>3\xb3)D]\xa6\x02\x18\xf6\xe7\xb8\xfd\xffg\xfe\x1c\xb9\x01\x01\xa3g\xbe^\xb9A\xe889\xa1<\xd75\x00\x00\x00\x00\x00\x00\x00\x00\x93\xec=:\xef\x11o;X\xae\xfe\x03\xba\x01\x01\xa5\xc5\x14\x00\x9e;\xfe\x0c\xbb\x01\x01\x02\xa0"\xb5x\xb1N\x05\x00M\xa9\x03\x00?&\xfe\x16\xbc\x01\x01\x88]\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc8:\xfe\x16\xbd\x01\x01\xc1\xc6\xc1W<\xd0\x9e,7\xd6\xc4Y;\x19\x92\xb5=\x00\x00\x00\x00\xa5\x03\x01D\xfe\x16\xbe\x01\x01\xe1F\xb6\x13?)\x91D>\xb3\x06r;\x15\xd1\x01\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T*\xd0\xfe\x06\xc5\x01\x01}\xc5\x14\x00\x00\x03\x00W\xeb\xfe\x04\xc6\x01\x01\x98\x00\x00\xa0\x8avz\xfe\x02\xc7\x01\x01*\x00\x00\x9fw\xfe\x1e\xc8\x01\x01\x18P\xebL\x0e\x00\x00\x00\x00]\xa6\x02\x18\xf6\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xaa\xa8\xfe\x1a\xc9\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00c\xe5\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2\xfe\x15\xcb\x01\x01$+FN\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15a\xfe\x16\xcc\x01\x01#\x8a\xa9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00U\xd3\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9\xfe\x14\xce\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x0c\x10\x889\x03\xa9Q\xba\x83\x81\xef\xb7\x04b\xfe\x18\xd1\x01\x01\xb2\xe5H\x80\xbd@V>\xbb\xfe\xb3Y>\xa4\xb0)D^\xa6\x02\x18\xf6\xe7\xb8\xfd\xef\xec\xfe\x03\xd2\x01\x01Ms\x00\x00\xc4C\xfe\x1c\xd3\x01\x01\xa3u\x80_\xb9\x80\x05;9\xc5\x83\x1f6\x00\x00\x00\x00\x00\x00\x00\x00l\nL:\n"\x83;\xd1O\xfe\x03\xd4\x01\x01\xa5\xc5\x14\x00\x92\xd8\xfe\x0c\xd5\x01\x01\x028\xc8\xb8x\xb1N\x05\x00>\xaa\x03\x00\xe2\x05\xfe\x16\xd6\x01\x01\x88^\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8e\xa4\xfe\x16\xd7\x01\x01\xc1C\x04U<\x16\xa9,7\xdd\x8d\xd0:\x83:\xbb=\x00\x00\x00\x00\xa5\x03\xb7\xa0'b"\xfe\x1a\xd8\x01\x01\x1b\x85\xf0Q\x0e\x00\x00\x00\x00\x02\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffm\x01\xb3\t\xfe\x16\xd9\x01\x01t{\xaa\x03\x00\t\x001\x00,\xfc\x03\x00\x00\x00\xfd\xff\x07\x01\xa1\xff4\x02\xc8\xf9\xfe\x16\xda\x01\x01\x81{\xaa\x03\x00\x03\x00@\x00\x1d\xfc\xfd\xff\x00\x00\xfc\xff'\x03\x87\x00l\x02\xae\xac\xfe\x0e\xdb\x01\x01\x1d{\xaa\x03\x00\x06\xa4iD\x00\x000=;\x10Yq\xfe\x0e\xdc\x01\x01\x89{\xaa\x03\x00\xc9\xe7iD\xe1z\xb3>:\x15\xd3(\xfe*\xdd\x01\x01\x96s\xe7f\xbc\x10m\x01\x00;\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xec\xfd\xfe\x1f\xde\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x002?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd2^\xfe\x06\xdf\x01\x01}\xc5\x14\x00\x00\x03\x00\x9a\x8d\xfe\x04\xe0\x01\x01\x98\x00\x00\xa0\x8aP)\xfe\x02\xe1\x01\x01*\x00\x00\xd1L\xfe\x1e\xe2\x01\x01\x18x\xfcO\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf6\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cR\xce\xfe\x1a\xe3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xc4\x19\xfe\x08\xe4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb6W\xfe\x15\xe5\x01\x01$\x19\xf4Q\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x13\xfe\x16\xe6\x01\x01#{\xaa\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfeB"b'\xfe\x03\xe7\x01\x01Ms\x00\x00-9\xfe\x14\xe8\x01\x01J\n\xd7#<\n\xd7#Gv\xa0:\xec\x01w\xba9{\x04:\xcd\x80\xfe\x18\xeb\x01\x01\xb22\x1e\x80\xbd\xcf\x03>\xbb\x86\x9fY>f\xb6)D^\xa6\x02\x18\xf7\xe7\xb8\xfd\xdb\xaf\xfe\x1c\xec\x01\x01\xa3\xb1I`\xb9\xac&=9\x85UQ6\x00\x00\x00\x00\x00\x00\x00\x00\x86\xeb/:\x18\xa4e;\xea\xd4\xfe\x03\xed\x01\x01\xa5\xc5\x14\x00\x19\x99\xfe\x0c\xee\x01\x01\x02\xa0u\xbcx\xb1N\x05\x00/\xab\x03\x00?\xfa\xfe\x16\xef\x01\x01\x88^\xa6\x02\x18\xf7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x92\xf2\xfe\x16\xf0\x01\x01\xc1\xb4\x88V<\xb5o-7"\x98\xc0;\xa4\xdf\xa9=\x00\x00\x00\x00\xa5\x03\x8e\x80\xfe\x03\xf1\x01\x01Ms\x00\x00\xe4\x7f\xfe\x1a\xf2\x01\x01\x1b\x8f\x9bU\x0e\x00\x00\x00\x00\x04\x004\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\x85\xbc\xfe\x16\xf3\x01\x01tk\xab\x03\x00\r\x005\x00-\xfc\x00\x00\x00\x00\xfe\xff\x07\x01\xa0\xff3\x02t\xb9\xfe\x16\xf4\x01\x01\x81k\xab\x03\x00\x00\x00A\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff(\x03\x87\x00n\x02g\xbe\xfe\x0e\xf5\x01\x01\x1dk\xab\x03\x00\xc5\xa2iD)\\\xbf<:\x10R \xfe\x0e\xf6\x01\x01\x89k\xab\x03\x00\xf4\xe7iD\n\xd7\xb4>;\x15\xe67\xfe\x1f\xf7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TO\xfd\xfe\x06\xf8\x01\x01}\xc2\x14\x00\x00\x03\x00\xee\x08\xfe\x04\xf9\x01\x01\x98\x00\x00\xa0\x8a\xf3\xe4\xfe\x02\xfa\x01\x01*\x00\x00\x9a\x8f\xfe\x1e\xfb\x01\x01\x18\x98\xbbR\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf7\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cdV\xfe\x1a\xfc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00 x\xfe\x08\xfd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa3%\xfe\x15\xfe\x01\x01$\xef\x9dU\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x92\xfe\x16\xff\x01\x01#l\xab\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08N'b'\xfe\x14\x00\x01\x01J\n\xd7#<\n\xd7#Y\x99\x8a\xb9\xad\x03\xb6\xbaZMJ\xba\xa4\xd0\xfe\x18\x04\x01\x01\xb2`\xbc\x7f\xbd\x97\xd2C\xbb\xfd\xabY>G\xb1)D^\xa6\x02\x18\xf8\xe7\xb8\xfdu1\xfe\x1c\x05\x01\x01\xa32\x1ca\xb9\xd9E?9\x91$\x816\x00\x00\x00\x00\x00\x00\x00\x00H\x83':k\x11E;\xedL\xfe\x03\x06\x01\x01\xa5\xc5\x14\x00\x96&\xfe\x0c\x07\x01\x01\x02\x08#\xc0x\xb1N\x05\x00 \xac\x03\x00\xf1\x85\xfe\x16\x08\x01\x01\x88^\xa6\x02\x18\xf8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xedS\xfe\x16\t\x01\x01\xc1\x90\x06X<\x01\xdc,77\xa0\xee:*\xbe\xa5=\x00\x00\x00\x00\xa5\x03>\xba\xfe\x03\n\x01\x01Ms\x00\x00\x13\x9b\xfe\x12\x0b\x01\x01\xfcA\xac\x03\x004\x00\x01\x00ARMMASK\x00Wr;\x85"b'\xfe\t\x0c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc14\xfe\x1a\r\x01\x01\x1b\xbdJY\x0e\x00\x00\x00\x00\x03\x002\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xb6\xda\xfe\x16\x0e\x01\x01t\\\xac\x03\x00\x0b\x006\x00,\xfc\xff\xff\xfc\xff\x01\x00\x07\x01\xa0\xff3\x02\x13\x9c\xfe\x16\x0f\x01\x01\x81\\\xac\x03\x00\x03\x00A\x00\x1e\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x87\x00g\x02e6\xfe\x0e\x10\x01\x01\x1d\\\xac\x03\x00I\xa3iD\xd7\xa3\x00=<\x10\xbf7\xfe\x0e\x11\x01\x01\x89\\\xac\x03\x00\xf2\xe6iD\x8f\xc2\xac><\x15\xb7\xdb\xfe\x1f\x12\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x85\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TXS\xfe\x06\x13\x01\x01}\xc5\x14\x00\x00\x03\x00{0\xfe\x04\x14\x01\x01\x98\x00\x00\xa0\x8a\xac<\xfe\x02\x15\x01\x01*\x00\x00\xf6\xb4\xfe\x1e\x16\x01\x01\x18\xe8\xddX\x0e\x00\x00\x00\x00^\xa6\x02\x18\xf8\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x15\xb0\xfe\x1a\x17\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf2\x1b\xfe\x08\x18\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe9&\xfe\x15\x19\x01\x01$wMY\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfdc\xfe\x16\x1a\x01\x01#]\xac\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00w\xb2\xfe\t\xd4\n\x00m\t\x00\x00\x00\x00\xd0\x00\x00\x00U\x16\xfe\x03\x1b\x01\x01/\xff\x00\x00\x029'b"\xfe\x14\x1c\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xbf8\xfe\x03\x1d\x01\x01Ms\x00\x00e\\\xfe\x1c\x1e\x01\x01!A\xac\x03\x00^\xa6\x02\x18\xf8\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\x97@\xfe\x1c\x1f\x01\x01\x1e\xfc\xac\x03\x00'\xc3}\xbd\x80pV8\x00\xa7T>\xad\xde\xef9u\x07\x13\xba\xab\xcf\t\xba!\x18\xfe\x18 \x01\x01\xb2\xba\x92\x7f\xbd\x1a\xc0A\xbb\x90\xc5Y>\xc2\xb5)D^\xa6\x02\x18\xf8\xe7\xb8\xfd\xc1\xdc"b'\xfe\x1c!\x01\x01\xa3\x94\xf9a\xb9\xd0bA9\xcf\x1b\x9a6\x00\x00\x00\x00\x00\x00\x00\x00XE\x02:,\xc9\x0b;\x9d\\\xfe\x03"\x01\x01\xa5\xc5\x14\x00\xb8\x86\xfe\x0c#\x01\x01\x02\xa0\xc8\xc3x\xb1N\x05\x00\x11\xad\x03\x00\xea\xe8\xfe\x16$\x01\x01\x88_\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x94\x93\xfe\x16%\x01\x01\xc1\xfcqQ>\x15\x12\x88\xfe\x1f,\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf0\xd6\xfe\x06-\x01\x01}\xc8\x14\x00\x00\x03\x00&\xc4\xfe\x04.\x01\x01\x98\x00\x00\xa0\x8a1\xd0\xfe\x02/\x01\x01*\x00\x00\xeb\x8b\xfe\x1e0\x01\x01\x18(\xeb[\x0e\x00\x00\x00\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c-\x91\xfe\x1a1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00p\xf2\xfe\x082\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00{\xb5\xfe\x153\x01\x01$\xea\xf7\\\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00s\xd3\xfe\x164\x01\x01#M\xad\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00[\xb9'b'\xfe\x145\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00|\x90\xfe\x036\x01\x01Ms\x00\x00\xf9M\xfe\x1c7\x01\x01!\t\xad\x03\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04_\xe4'b'\xfe\x1c8\x01\x01\x1e\xed\xad\x03\x00\xb6;~\xbd\x80\xeb\xec8bxT>P\x15\xda9\xe56\x01\xba\x9ei\xc4\xb8\r\x13\xfe\x189\x01\x01\xb2K\xaa\x7f\xbd\xb4\xd5?\xbb \xb1Y>G\xb1)D_\xa6\x02\x18\xf9\xe7\xb8\xfd\xd1\x12\xfe\x1c:\x01\x01\xa3\xd7\xe1b\xb9\n\x85C9\xbe\x8d\xb36\x00\x00\x00\x00\x00\x00\x00\x00D(\xf09\xb0Z?;\xf7\x06\xfe\x03;\x01\x01\xa5\xc5\x14\x00\xc3q\xfe\x0c<\x01\x01\x02 r\xc7x\xb1N\x05\x00\x01\xae\x03\x00\xdb\x81\xfe\x16=\x01\x01\x88_\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00kO\xfe\x16>\x01\x01\xc1\xf8\xddN<\x9a\xdc*7\r\xe9\xab:\x9f\xbd\xc3=\x00\x00\x00\x00\xa5\x03\x0e\x95\xfe\x16?\x01\x01\xe1Y9\x14?\xcc\xccL>\xf1\x0fj\x00\x1f\x92p\xfe\x03@\x01\x01Ms\x00\x001\xd8'b'\xfe\x1aA\x01\x01\x1b\x80\xa2`\x0e\x00\x00\x00\x00\x04\x006\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffl\x01\x96\x17\xfe\x16B\x01\x01t>\xae\x03\x00\x0b\x007\x00(\xfc\x01\x00\xff\xff\x01\x00\x07\x01\xa0\xff4\x02\xf7\x8a\xfe\x16C\x01\x01\x81>\xae\x03\x00\x02\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff%\x03\x87\x00p\x02^,\xfe\x0eD\x01\x01\x1d>\xae\x03\x00\xc0\xa3iDff\x1e==\x10\x1c}\xfe\x0eE\x01\x01\x89>\xae\x03\x00\xd9\xe6iD\x00\x00\xac>>\x15\x81<\xfe\x1fF\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x006?;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd8\xa8\xfe\x06G\x01\x01}\xc2\x14\x00\x00\x03\x00v\x15\xfe\x04H\x01\x01\x98\x00\x00\xa0\x8ate\xfe\x02I\x01\x01*\x00\x00\xa3w\xfe\x1eJ\x01\x01\x18h\xf8^\x0e\x00\x00\x00\x00_\xa6\x02\x18\xf9\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xda\xd5\xfe\x1aK\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00k\xf3\xfe\x08L\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdc\t\xfe\x15M\x01\x01$\x02\xa5`\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8c\xfe\x16N\x01\x01#>\xae\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00T\xdc\xfe\x14O\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00]\xa2'b'\xfe\x1cP\x01\x01!\x9a\xae\x03\x00_\xa6\x02\x18\xfa\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04;>\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02\xfe\x1cR\x01\x01\x1e\xde\xae\x03\x00\x15$~\xbd R 9\x82lT>\xda\x84\x1e:\xeb\x88\xf78=%\x18:\xc3(\xfe\x18S\x01\x01\xb2\xe6\x9e\x7f\xbd\x1c\xd6>\xbb\xac\xb7Y>R\xb8)D_\xa6\x02\x18\xfa\xe7\xb8\xfd\x82\xb7\xfe\x1cT\x01\x01\xa3\x1f\xd1c\xb9\xb1\xacE9Z\x13\xcc6\x00\x00\x00\x00\x00\x00\x00\x00|\x1a\xd49\x08Y);\xac\xaa\xfe\x03U\x01\x01\xa5\xc6\x14\x00\x02\xb7\xfe\x0cV\x01\x01\x02\xa0\x1b\xcbx\xb1N\x05\x00\xf2\xae\x03\x00\xa5F\xfe\x16W\x01\x01\x88_\xa6\x02\x18\xfa\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xad\xfe\xfe\x16X\x01\x01\xc1\xbe%S<\xfa\x89*7d\xfa\xd8;\xeb\x8a\xc6=\x00\x00\x00\x00\xa5\x03\xb5x'b'\xfe\x1aY\x01\x01\x1b\x0bNd\x0e\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x00\x00\xff\xff\x00\x00\n\x01\xb0\xffm\x01\x82\x11\xfe\x16Z\x01\x01t.\xaf\x03\x00\x06\x000\x00!\xfc\x00\x00\x00\x00\xff\xff\x07\x01\x9f\xff3\x02x\xa8\xfe\x16[\x01\x01\x81.\xaf\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff&\x03\x88\x00v\x024e\xfe\x0e\\\x01\x01\x1d.\xaf\x03\x00\xe7\xa4iD\xebQh=>\x10\xd2S\xfe\x0e]\x01\x01\x89.\xaf\x03\x00\xc6\xe7iDff\xb3>?\x15\xc7\x80\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TT\xba\xfe\x06_\x01\x01}\xc5\x14\x00\x00\x03\x00\x81\x1f\xfe\x04`\x01\x01\x98\x00\x00\xa0\x8a\x87\xed\xfe\x02a\x01\x01*\x00\x00\xcc\xca\xfe\x1eb\x01\x01\x18\x90\tb\x0e\x00\x00\x00\x00_\xa6\x02\x18\xfa\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1fR\xfe\x1ac\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb5\x8d\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91\xfe\x15e\x01\x01$`Pd\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86o\xfe\x16f\x01\x01#/\xaf\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x10\xbb\xfe\x03g\x01\x01Ms\x00\x00\xcf\xf2'b'\xfe\x14h\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\\0\xfe\x1ci\x01\x01!c\xaf\x03\x00`\xa6\x02\x18\xfb\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xca\xae'b'\xfe\x1cj\x01\x01\x1e\xcf\xaf\x03\x00\x90l~\xbd\x80D\xdd8\xe9\x80T>D/\x93:\xd9\xb6\xb5\xba#B\x90\xb9s\xad\xfe\x18k\x01\x01\xb2^\x85\x7f\xbd%\xf2C\xbb\xc6\xd6Y>\xcd\xac)D`\xa6\x02\x18\xfb\xe7\xb8\xfdL\x8b\xfe\x03l\x01\x01Ms\x00\x00\xa3U\xfe\x1cm\x01\x01\xa3+\xced\xb9~\xd7G9\xe7\xa7\xe56\x00\x00\x00\x00\x00\x00\x00\x00\x1c\xb5\xda9q\xfe\xe9:\r\t\xfe\x03n\x01\x01\xa5\xc2\x14\x00\n\x8f\xfe\x0co\x01\x01\x02 \xc5\xcex\xb1N\x05\x00\xe3\xaf\x03\x00q@\xfe\x16p\x01\x01\x88`\xa6\x02\x18\xfb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xded\xfe\x12q\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00K\xe7\xfe\x16r\x01\x01\xc1\xe2\x16N<\xfb\xf8(7\xfb\xd5\xf2:L\xdd\xb4=\x00\x00\x00\x00\xa5\x03\x83A\xfe\x1as\x01\x01\x1bE\xfbg\x0e\x00\x00\x00\x00\x05\x003\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01\xed8\xfe\x16t\x01\x01t\x1f\xb0\x03\x00\x04\x000\x002\xfc\x03\x00\x00\x00\xfe\xff\x08\x01\xa0\xff4\x02I\xee\xfe\x16u\x01\x01\x81\x1f\xb0\x03\x00\x02\x00@\x00\x1e\xfc\xfd\xff\x01\x00\xfd\xff,\x03\x86\x00q\x02H\xa0\xfe\x0ev\x01\x01\x1d\x1f\xb0\x03\x00\xbe\xa3iD{\x14\x1e=>\x10\x0cK\xfe\x0ew\x01\x01\x89\x1f\xb0\x03\x00~\xe7iD\xf6(\xb1>@\x150k\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdd\xc4\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08\xfe\x04z\x01\x01\x98\x00\x00\xa0\x8a#\xf6\xfe\x02{\x01\x01*\x00\x00R\x96\xfe\x1e|\x01\x01\x18\xb8\x1ae\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfc\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cA\xed\xfe\x1a}\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00e)\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed\xfe\x15\x7f\x01\x01$\xfd\xfdg\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00l0\xfe\x16\x80\x01\x01# \xb0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc08\xfe\x12\x81\x01\x01\xfc,\xb0\x03\x004\x00\x01\x00ARMMASK\x00Wr\x19\xa6'b'\xfe\t\x82\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x11S\xfe\t\xd5\n\x00m\x02\x00\x00\x00\x00\xd1\x00\x00\x00\xbb~\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc\xfe\x14\x84\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x1e\x85\xbe\n\xd7#<\x0b\x00\x00\x00\x1eH'b"\xfe\x1c\x85\x01\x01!,\xb0\x03\x00`\xa6\x02\x18\xfc\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x01\x00\xa4\x04\x7f\x8d\xfe\x1c\x86\x01\x01\x1e\xc0\xb0\x03\x00\xb3\x88~\xbd\x00\xd2\xbe7'sT>vp\x9b\xb9\x17\xeb\xb9\xba0\xcc\x0f:nO\xfe\x18\x87\x01\x01\xb2\xc1\xa0\x7f\xbdX\xdcE\xbb\xd2\xd4Y>{\xb4)D`\xa6\x02\x18\xfc\xe7\xb8\xfdm\x94\xfe\x03\x88\x01\x01/\xff\x00\x00H#\xfe\x1c\x89\x01\x01\xa3\x9f\xd8e\xb9\xf8\x05J9\x90F\x007\x00\x00\x00\x00\x00\x00\x00\x00\xff0\xf09\x9eb\xc2:a\x82\xfe\x03\x8a\x01\x01\xa5\xc3\x14\x00\x8c\x9d\xfe\x0c\x8b\x01\x01\x02\x88r\xd2x\xb1N\x05\x00\xd4\xb0\x03\x00\xb6?\xfe\x16\x8c\x01\x01\x88`\xa6\x02\x18\xfc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc2\x07\xfe\x16\x8d\x01\x01\xc1\x8c\xe8D<2\xb8'7\x03\xf1\x82;\x0f\xdf\xb1=\x00\x00\x00\x00\xa5\x03 \xe8\xfe\x03\x8e\x01\x01Ms\x00\x00/F"b'\xfe\x1a\x8f\x01\x01\x1b\xca\xack\x0e\x00\x00\x00\x00\x03\x003\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb1\xffn\x01\xe6#\xfe\x16\x90\x01\x01t\x11\xb1\x03\x00\x0c\x007\x00.\xfc\xff\xff\x01\x00\xfe\xff\x07\x01\xa0\xff4\x02rk\xfe\x16\x91\x01\x01\x81\x11\xb1\x03\x00\x00\x00B\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x86\x00o\x02\x04)\xfe\x0e\x92\x01\x01\x1d\x11\xb1\x03\x00\xf0\xa4iD\\\x8fj=>\x10A\xcf\xfe\x0e\x93\x01\x01\x89\x11\xb1\x03\x007\xe6iD\x85\xeb\xa6>@\x15\xb6g\xfe\x1f\x94\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d6?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xa5\t\xfe\x06\x95\x01\x01}\xc5\x14\x00\x00\x03\x00\x17W\xfe\x04\x96\x01\x01\x98\x00\x00\xa0\x8a\x81c\xfe\x02\x97\x01\x01*\x00\x00P\x05\xfe\x1e\x98\x01\x01\x18\x08=k\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x95\x0b\xfe\x1a\x99\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xdf\x18\xfe\x08\x9a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x11\xeb\xfe\x15\x9b\x01\x01$\xde\xafk\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9R\xfe\x16\x9c\x01\x01#\x12\xb1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa1)\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97'b'\xfe\x14\x9e\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xeb\x1d\xfe\x1c\x9f\x01\x01!\xf5\xb0\x03\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04~7\xfe\x1c\xa0\x01\x01\x1e\xb1\xb1\x03\x00\x14J~\xbd\x00\xee\r9yVT>?3\xab9\xb4\xc5\xb5\xba\xac\xbf\xe2\xb9$\x92\xfe\x18\xa1\x01\x01\xb2\x97y\x7f\xbd\xe5\xf0C\xbb\x95\xd3Y>\x8f\xb2)D`\xa6\x02\x18\xfd\xe7\xb8\xfd\x80s'b'\xfe\x1c\xa2\x01\x01\xa3\xdc\xe9f\xb9Q;L9\xb0\x84\r7\x00\x00\x00\x00\x00\x00\x00\x00o\xed\xff9\xf6\xdf\x07;%\xe4\xfe\x03\xa3\x01\x01\xa5\xc5\x14\x00\xe5\xcc\xfe\x0c\xa4\x01\x01\x02@f\xd6x\xb1N\x05\x00\xc6\xb1\x03\x002\xa6\xfe\x16\xa5\x01\x01\x88`\xa6\x02\x18\xfd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x0b]\xfe\x16\xa6\x01\x01\xc1XKD<\x8dE%7\xd6\xb1\x01:Bn\xc0=\x00\x00\x00\x00\xa5\x03\xf6Z\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\\xfe\x1a\xa8\x01\x01\x1b\xa1Zo\x0e\x00\x00\x00\x00\x03\x003\x00\x1d\xfc\x01\x00\xff\xff\x00\x00\x0b\x01\xb0\xffn\x01\x1b\x99\xfe\x16\xa9\x01\x01t\x02\xb2\x03\x00\t\x007\x00(\xfc\x00\x00\x00\x00\x00\x00\x06\x01\x9f\xff3\x02\xbc\xae\xfe\x16\xaa\x01\x01\x81\x02\xb2\x03\x00\x02\x00A\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff&\x03\x8b\x00n\x02c\x9d\xfe\x0e\xab\x01\x01\x1d\x02\xb2\x03\x00\x8f\xa3iDp=\x12=>\x10&J\xfe\x0e\xac\x01\x01\x89\x02\xb2\x03\x00\x94\xe6iD\n\xd7\xa9>A\x15\x06\x97\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e3?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x95\x06\xfe\x06\xae\x01\x01}\xc5\x14\x00\x00\x03\x00\xc1\x86\xfe\x04\xaf\x01\x01\x98\x00\x00\xa0\x8a\x1bY\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1\xfe\x1e\xb1\x01\x01\x180Nn\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa8f\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\x11\x83\xfe\x1a\xb2\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00L!\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv\xfe\x15\xb4\x01\x01$p]o\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7i\xfe\x16\xb5\x01\x01#\x03\xb2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06F'b'\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86\xfe\x14\xb7\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00X+\xfe\x1c\xb8\x01\x01!\xbe\xb1\x03\x00`\xa6\x02\x18\xfd\xe7\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\x1f)'b'\xfe\x1c\xb9\x01\x01\x1e\xa2\xb2\x03\x00\xca\x07~\xbd\xc0\x8b:9\xf6jT>\xce\xba\xf69\x0cl~\xbai!^:^a\xfe\x18\xba\x01\x01\xb2x)\x7f\xbd?\x13E\xbb\\\xe7Y>\xeb\xa1)D`\xa6\x02\x18\xfe\xe7\xb8\xfd\xe7\x88\xfe\x1c\xbb\x01\x01\xa3S\x06h\xb9\xbeyN9C\x18\x1b7\x00\x00\x00\x00\x00\x00\x00\x00X\xc8\x00:\xb1\xa7\xe8:dE\xfe\x03\xbc\x01\x01\xa5\xc2\x14\x00\x0eq\xfe\x0c\xbd\x01\x01\x02\xd8\x0b\xdax\xb1N\x05\x00\xb6\xb2\x03\x00`\xab\xfe\x16\xbe\x01\x01\x88`\xa6\x02\x18\xfe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xae\x98\xfe\x16\xbf\x01\x01\xc1h_G<\x19\x1e$7C^)<\\\xbc\xb6=\x00\x00\x00\x00\xa5\x03\x11V\xfe\x16\xc0\x01\x01\xe1\xe2z\x14?)\x91D>Jk8<\xa8y\x8b<\xb7e\xf3>\x00\x1f%S\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\xfe\x1a\xc2\x01\x01\x1b\xe7\x05s\x0e\x00\x00\x00\x00\x05\x005\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01v\xb4\xfe\x16\xc3\x01\x01t\xf3\xb2\x03\x00\x06\x003\x00!\xfc\x02\x00\x00\x00\xfb\xff\x07\x01\xa1\xff4\x02\x0f \xfe\x16\xc4\x01\x01\x81\xf3\xb2\x03\x00\x01\x00?\x00"\xfc\xfd\xff\x02\x00\xfd\xff*\x03\x88\x00o\x02$9\xfe\x0e\xc5\x01\x01\x1d\xf3\xb2\x03\x00\x18\xa3iD\xc2\xf5\xe8<>\x10\x92M\xfe\x0e\xc6\x01\x01\x89\xf3\xb2\x03\x00\xd4\xe6iD\n\xd7\xab>A\x15\xf3\xdb\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0n\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\\xfe\x04\xc9\x01\x01\x98\x00\x00\xa0\x8a^\xec\xfe\x02\xca\x01\x01*\x00\x00\xd0Y\xfe\x1e\xcb\x01\x01\x18X_q\x0e\x00\x00\x00\x00`\xa6\x02\x18\xfe\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x1c\xc5\xfe\x1a\xcc\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xb4,\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca\xfe\x15\xce\x01\x01$\x8d\x08s\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00a\x9a\xfe\x16\xcf\x01\x01#\xf3\xb2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x13\x92\xfe\x14\xd0\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xf6\xf6\xfe\x03\xd1\x01\x01Ms\x00\x00\x14\xc9'b'\xfe\x1c\xd2\x01\x01!O\xb3\x03\x00`\xa6\x02\x18\xff\xe7\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa3\x04\'\x14\xfe\x1c\xd3\x01\x01\x1e\x93\xb3\x03\x00a\xca}\xbd@\x0f\xe38)MT>\xa0@\xa19W/\xab\xba\xef\xfb\xf98;+\xfe\x18\xd4\x01\x01\xb2\x89\xe0~\xbd*%G\xbb\x11\xdfY>\\\xaf)D`\xa6\x02\x18\xff\xe7\xb8\xfd\xcb\xf1\xfe\x1c\xd5\x01\x01\xa3b.i\xb9#\xbbP9\x1e\x05)7\x00\x00\x00\x00\x00\x00\x00\x00\xdb=\x04:\xc8\x85\x0f;\xba\x0f\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3\xfe\x0c\xd7\x01\x01\x02X\xb5\xddx\xb1N\x05\x00\xa7\xb3\x03\x002a\xfe\x16\xd8\x01\x01\x88`\xa6\x02\x18\xff\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb8\xc4\xfe\x16\xd9\x01\x01\xc1\xcf\xeeEB\x15)\xeb\xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00}\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\xbb\xfe\x06\xe1\x01\x01}\xc8\x14\x00\x00\x03\x00\xc7y\xfe\x04\xe2\x01\x01\x98\x00\x00\xa0\x8a\xaa\xb2\xfe\x02\xe3\x01\x01*\x00\x00j{\xfe\x1e\xe4\x01\x01\x18\x98lt\x0e\x00\x00\x00\x00`\xa6\x02\x18\xff\xe7\xb8\xfd\x9ef\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa7\xac\xfe\x1a\xe5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00^\x97\xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\\xfe\x15\xe7\x01\x01$\xf8\xb5v\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00?\x07\xfe\x16\xe8\x01\x01#\xe4\xb3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\xec\xfe\x12\xe9\x01\x01\xfc\x19\xb4\x03\x004\x00\x01\x00ARMMASK\x00Wr\x9c\xa1'b'\xfe\t\xea\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa2Z\xfe\x03\xeb\x01\x01Ms\x00\x00O\x02\xfe\x14\xec\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\x95\x1b\xfe\t\xd6\n\x00m\x01\x00\x00\x00\x00\xd1\x00\x00\x00\xec\x89\xfe\x1c\xed\x01\x01!\x18\xb4\x03\x00`\xa6\x02\x18\x00\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\xcc\x7f'b'\xfe\x1c\xee\x01\x01\x1e\x85\xb4\x03\x00\xef\xbd}\xbd\x00\xfd\x079_aT>\xe6\xee\xf49S\x95\xae\xba\xec\xd1\xec\xb9N\x02\xfe\x18\xef\x01\x01\xb2\xdb\xb3~\xbd\x96\xfeK\xbbq\xf4Y>R\xa8)D`\xa6\x02\x18\x00\xe8\xb8\xfd\xfe\xf9\xfe\x1c\xf0\x01\x01\xa3\xe5bj\xb9\x84\xfeR9\x9a\x0277\x00\x00\x00\x00\x00\x00\x00\x00\xc2w\x00:;\x14\x0b;\x01\x13\xfe\x03\xf1\x01\x01\xa5\xc8\x14\x00\x8cr\xfe\x0c\xf2\x01\x01\x02\xc0b\xe1x\xb1N\x05\x00\x98\xb4\x03\x00\x05g\xfe\x16\xf3\x01\x01\x88`\xa6\x02\x18\x00\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe5r\xfe\x16\xf4\x01\x01\xc1\xb0yL<\xc5d 7\xce\x11\xc0;?$\xb9=\x00\x00\x00\x00\xa5\x03%\xa6\xfe\x03\xf5\x01\x01Ms\x00\x00:i\xfe\x1a\xf6\x01\x01\x1be_z\x0e\x00\x00\x00\x00\x04\x004\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\xf85\xfe\x16\xf7\x01\x01t\xd4\xb4\x03\x00\t\x006\x00+\xfc\x04\x00\x00\x00\x00\x00\x07\x01\xa0\xff3\x02V\xae\xfe\x16\xf8\x01\x01\x81\xd4\xb4\x03\x00\x00\x00@\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x88\x00p\x02\xe1^\xfe\x0e\xf9\x01\x01\x1d\xd4\xb4\x03\x00C\xa4iD)\\?=?\x10{\xdf\xfe\x0e\xfa\x01\x01\x89\xd4\xb4\x03\x00\xdd\xe6iD\xb8\x1e\xac>B\x15\xfex\xfe*\xfb\x01\x01\x96s\xe7f\xbc\x10m\x01\x00?\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00j\t\xfe\x1f\xfc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe7\x003?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x9f\xe8\xfe\x06\xfd\x01\x01}\xc5\x14\x00\x00\x03\x002\xc4\xfe\x04\xfe\x01\x01\x98\x00\x00\xa0\x8a\x11\r\xfe\x02\xff\x01\x01*\x00\x009\x7f\xfe\x1e\x00\x01\x01\x18\xc0}w\x0e\x00\x00\x00\x00_\xa6\x02\x18\x00\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cW\xe3\xfe\x1a\x01\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe4\xa6\xfe\x08\x02\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0bZ\xfe\x15\x03\x01\x01$\x90bz\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00]|\xfe\x16\x04\x01\x01#\xd5\xb4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0c\xc0'b'\xfe\x03\x05\x01\x01/\xff\x00\x00wR\xfe\x14\x06\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00/\x93\xfe\x03\x07\x01\x01Ms\x00\x00\xce!'b'\xfe\x1c\x08\x01\x01!\xe1\xb4\x03\x00_\xa6\x02\x18\x00\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xfd\x88\xfe\x1c\t\x01\x01\x1et\xb5\x03\x00\x18G}\xbd\xa0\xaf-9\xe0\x86T>\xd5\xa0\xb6:\x1dx\xad\xba\x07\xb5\x1d:\x81w\xfe\x18\n\x01\x01\xb2\x0cC~\xbd\x9f@J\xbb\x10\x1cZ>\xae\xa7)D_\xa6\x02\x18\x00\xe8\xb8\xfd\x04\xc7\xfe\x1c\x0b\x01\x01\xa3\x96\xa3k\xb9\xe1AU9W\tE7\x00\x00\x00\x00\x00\x00\x00\x00\xe5@\n:k\xed\xce:\x9d\r\xfe\x03\x0c\x01\x01\xa5\xc5\x14\x00E\x00\xfe\x0c\r\x01\x01\x02X\x08\xe5x\xb1N\x05\x00\x88\xb5\x03\x00\xcc\xd9\xfe\x16\x0e\x01\x01\x88_\xa6\x02\x18\x00\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x04\x04\xfe\x16\x0f\x01\x01\xc1/mE<\xf2\x15\x1f7\xe5\xdf\xbc;~\xf8\xa3=\x00\x00\x00\x00\xa5\x03\xd7)'b'\xfe\x1a\x10\x01\x01\x1b\x08\x0c~\x0e\x00\x00\x00\x00\x05\x006\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffn\x01\xf7\xb7\xfe\x16\x11\x01\x01t\xc5\xb5\x03\x00\x05\x009\x00.\xfc\xfe\xff\x00\x00\xff\xff\x07\x01\xa0\xff4\x02\xf1m\xfe\x16\x12\x01\x01\x81\xc5\xb5\x03\x00\x01\x00?\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff&\x03\x85\x00j\x02\x1d\x02\xfe\x0e\x13\x01\x01\x1d\xc5\xb5\x03\x003\xa3iDff\xf6D\x15\x1d\xa2\xfe\x1f\x15\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x016?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x96\xe5\xfe\x06\x16\x01\x01}\xc5\x14\x00\x00\x03\x00\xbf;\xfe\x04\x17\x01\x01\x98\x00\x00\xa0\x8a\xab\xea\xfe\x02\x18\x01\x01*\x00\x00\xb9\x9a\xfe\x1e\x19\x01\x01\x18(\x9c}\x0e\x00\x00\x00\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xa9\xcf\xfe\x1a\x1a\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe3\xcb\xfe\x08\x1b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1e(\xfe\x15\x1c\x01\x01$\x9c\x0e~\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9fS\xfe\x16\x1d\x01\x01#\xc6\xb5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfc\xfb\xfe\x03\x1e\x01\x01Ms\x00\x00\xb5\xd6'b'\xfe\x14\x1f\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00<\xf3\xfe\x03 \x01\x01Ms\x00\x000\x0b\xfe\x1c!\x01\x01!\xa9\xb5\x03\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04\xfaq\xfe\x1c"\x01\x01\x1ee\xb6\x03\x00K\x91}\xbd\xc0\xb7\xb48\xd1\x87T>RS\xb29\x94\xb9\x18:\xd5\x9a\x0b\xb8\x89\t\xfe\x18#\x01\x01\xb2\x9aP~\xbd\x8e\x9dN\xbb\xb9+Z>\x99\xa9)D_\xa6\x02\x18\x02\xe8\xb8\xfd\x8c"'b"\xfe\x1c$\x01\x01\xa3Q\xefl\xb9L\x85W9\xc30S7\x00\x00\x00\x00\x00\x00\x00\x00,\x9a :\xb6'\xd0:\x16\xed\xfe\x03%\x01\x01\xa5\xc5\x14\x00\xb6\x1a\xfe\x0c&\x01\x01\x02\xc0\xb5\xe8x\xb1N\x05\x00z\xb6\x03\x00\x97\xc8\xfe\x16'\x01\x01\x88_\xa6\x02\x18\x02\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x07\xe3\xfe\x16(\x01\x01\xc1f\xd6@<~\x00\x1d7\xcaR{;T$\xb5=\x00\x00\x00\x00\xa5\x03\xc5\x06\xfe\x1a)\x01\x01\x1b\xf7\xb6\x81\x0e\x00\x00\x00\x00\x02\x005\x00\x1f\xfc\x00\x00\x00\x00\x00\x00\n\x01\xaf\xffm\x01 \xf1\xfe\x16*\x01\x01t\xb6\xb6\x03\x00\t\x008\x000\xfc\x00\x00\xff\xff\xfd\xff\x07\x01\xa0\xff4\x02\xf4\x8b\xfe\x16+\x01\x01\x81\xb6\xb6\x03\x00\x02\x00@\x00!\xfc\xfc\xff\x01\x00\xfc\xff,\x03\x89\x00n\x02\xc33\xfe\x0e,\x01\x01\x1d\xb6\xb6\x03\x00\xfc\xa2iDG\xe1\xdaC\x15)\x07\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tah\xfe\x06/\x01\x01}\xc5\x14\x00\x00\x03\x00KA\xfe\x040\x01\x01\x98\x00\x00\xa0\x8ap\xf4\xfe\x021\x01\x01*\x00\x00\x03\xb8\xfe\x1e2\x01\x01\x18P\xad\x80\x0e\x00\x00\x00\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c\xf0\x13\xfe\x1a3\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\tp\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8\xfe\x155\x01\x01$\x9d\xb9\x81\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x95\xfe\x166\x01\x01#\xb6\xb6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00pa\xfe\x037\x01\x01Ms\x00\x00F\xcc"b'\xfe\x148\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00C8\xfe\x1c9\x01\x01!r\xb6\x03\x00_\xa6\x02\x18\x02\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x01\x00\xa5\x04\x8c\xcc\xfe\x03:\x01\x01Ms\x00\x00\x9bv'b'\xfe\x1c;\x01\x01\x1eV\xb7\x03\x00q\x93}\xbd\x80\xb7\x1090\x85T>R$\x1e\xb8e\xfdn\xba|\x9f\xfa9G\x8e\xfe\x18<\x01\x01\xb2\xb6>~\xbd \x82M\xbb#3Z>\x99\xa9)D_\xa6\x02\x18\x03\xe8\xb8\xfdIr\xfe\x1c=\x01\x01\xa3IDn\xb9\xab\xcdY9\xe5 a7\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x0c:pze;1\xc5\xfe\x03>\x01\x01\xa5\xc2\x14\x00\x83\xb1\xfe\x0c?\x01\x01\x02@_\xecx\xb1N\x05\x00j\xb7\x03\x00J\xba\xfe\x16@\x01\x01\x88_\xa6\x02\x18\x03\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Y\xed\xfe\x16A\x01\x01\xc1Q\x1f=\x9e\xc1\x1f<<\xd9\x8b<\x9c\x06\xf1>\x00\x1f\x7f\xa1'b'\xfe\x1aC\x01\x01\x1b\x98f\x85\x0e\x00\x00\x00\x00\x06\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb1\xffn\x01\xfc1\xfe\x16D\x01\x01t\xa7\xb7\x03\x00\x05\x008\x00+\xfc\x01\x00\x01\x00\xfe\xff\x07\x01\xa0\xff3\x02\xb2\x0c\xfe\x16E\x01\x01\x81\xa7\xb7\x03\x00\x01\x00B\x00\x1f\xfc\xfc\xff\x00\x00\xfc\xff)\x03\x85\x00s\x02\xec\xb1\xfe\x0eF\x01\x01\x1d\xa7\xb7\x03\x00\x1b\xa3iDp=\xeaE\x15\x8e\x7f\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d6?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x12\xb5\xfe\x06I\x01\x01}\xc2\x14\x00\x00\x03\x00\xab\\\xfe\x04J\x01\x01\x98\x00\x00\xa0\x8a\x8e\xfe\xfe\x02K\x01\x01*\x00\x00\x18@\xfe\x1eL\x01\x01\x18\x90\xba\x83\x0e\x00\x00\x00\x00_\xa6\x02\x18\x03\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x0e\x17\xfe\x1aM\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xf1}\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\xfe\x15O\x01\x01$[i\x85\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3b\xfe\x16P\x01\x01#\xa8\xb7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe3\x99\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02\xfe\x14R\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00%\xc4\xfe\x12S\x01\x01\xfc\x04\xb8\x03\x004\x00\x01\x00ARMMASK\x00Wr&d'b'\xfe\tT\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x1aN\xfe\x1cU\x01\x01!\x03\xb8\x03\x00_\xa6\x02\x18\x04\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfd\xff\x02\x00\x00\x00\xa5\x041h\xfe\t\xd7\n\x00m\x01\x00\x00\x00\x00\xcf\x00\x00\x00\xfe"\xfe\x03V\x01\x01Ms\x00\x00\xf8\x9e\xfe\x1cW\x01\x01\x1eG\xb8\x03\x00\x8fC}\xbd\xc0\x07\xae8\xb3\x90T>\x90Y\xcc8\xa8}A\xba!\xe2\xb9\xb8\x84!\xfe\x18X\x01\x01\xb2}\x03~\xbds\nQ\xbb\x1cR\xa8)D_\xa6\x02\x18\x04\xe8\xb8\xfdF\x8a\xfe\x1cY\x01\x01\xa3\x0c\x9ao\xb9\xe6\x1c\\95\xc2m7\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x82\x0b:#C\x83;\x80\xcb\xfe\x03Z\x01\x01\xa5\xc5\x14\x00}#\xfe\x0c[\x01\x01\x02\xc0\x08\xf0x\xb1N\x05\x00[\xb8\x03\x00d0\xfe\x16\\\x01\x01\x88_\xa6\x02\x18\x04\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x13\xc2\xfe\x12]\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00`\x0e\xfe\x16^\x01\x01\xc1\xcdz@<\x12\xeb\x197q\xdd\xbe;9\xca\xa9=\x00\x00\x00\x00\xa5\x03R\xea'b'\xfe\x1a_\x01\x01\x1b\xa5\x11\x89\x0e\x00\x00\x00\x00\x03\x004\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\x0b\x01\xaf\xffn\x01\x9c\xe1\xfe\x16`\x01\x01t\x97\xb8\x03\x00\x02\x008\x00\'\xfc\x00\x00\x00\x00\xfe\xff\x06\x01\xa1\xff3\x02\xa7A\xfe\x16a\x01\x01\x81\x97\xb8\x03\x00\x02\x00A\x00\x1f\xfc\xfd\xff\x00\x00\xfd\xff)\x03\x86\x00o\x02"Y\xfe\x0eb\x01\x01\x1d\x98\xb8\x03\x000\xa3iD\xb8\x1e\xf5<@\x10\x1d\xb1\xfe\x0ec\x01\x01\x89\x98\xb8\x03\x00w\xe7iD\x85\xeb\xb0>F\x15d\xec\xfe\x1fd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tb\x0c\xfe\x06e\x01\x01}\xc8\x14\x00\x00\x03\x00\x89\xb5\xfe\x04f\x01\x01\x98\x00\x00\xa0\x8a\x98I\xfe\x02g\x01\x01*\x00\x00\x01\x92\xfe\x1eh\x01\x01\x18\xb8\xcb\x86\x0e\x00\x00\x00\x00_\xa6\x02\x18\x04\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x82j\xfe\x1ai\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\n\x16\xfe\x08j\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x92\xa1\xfe\x15k\x01\x01$\xaf\x14\x89\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00E>\xfe\x16l\x01\x01#\x98\xb8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xeb\x07\xfe\x03m\x01\x01Ms\x00\x00\x1c\xd4'b'\xfe\x14n\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00F)\xfe\x1co\x01\x01!\xcc\xb8\x03\x00^\xa6\x02\x18\x05\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa5\x04q1\xfe\x03p\x01\x01/\xff\x00\x00oM\xfe\x03q\x01\x01Ms\x00\x00\x06\xb4'b'\xfe\x1cr\x01\x01\x1e7\xb9\x03\x00$\x8d}\xbd\xc0\xbd\xb48g\x87T>;\xfb\xbb9\xfd\xeb.\xba\x927\xaa8\x1a\xf8\xfe\x18s\x01\x01\xb2\xe9\x0c~\xbd\xfd\xccT\xbb\x8eCZ>G\xb1)D^\xa6\x02\x18\x05\xe8\xb8\xfd\xbe#\xfe\x1ct\x01\x01\xa3\x0c\xf8p\xb9\x84r^9m\x1fz7\x00\x00\x00\x00\x00\x00\x00\x00ce\r:\xaab[;\xbck\xfe\x03u\x01\x01\xa5\xc5\x14\x00?$\xfe\x0cv\x01\x01\x02X\xae\xf3x\xb1N\x05\x00K\xb9\x03\x00\x02\x94\xfe\x16w\x01\x01\x88^\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x83\xb5\xfe\x16x\x01\x01\xc1\xa7LF<\x12\xad\x187K\xca\xc9:\xe6\xe3\xb4=\x00\x00\x00\x00\xa5\x03H\xc0\xfe\x1ay\x01\x01\x1b\xd3\xb9\x8c\x0e\x00\x00\x00\x00\x04\x003\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\n\x01\xb0\xffm\x01s\x17\xfe\x16z\x01\x01t\x87\xb9\x03\x00\x05\x00>\x00$\xfc\x03\x00\x00\x00\xfb\xff\x07\x01\xa0\xff4\x02."\xfe\x16{\x01\x01\x81\x87\xb9\x03\x00\x04\x00@\x00\x1c\xfc\xfd\xff\x01\x00\xfd\xff*\x03\x87\x00p\x02]\x84\xfe\x0e|\x01\x01\x1d\x87\xb9\x03\x00O\xa3iDp=\x02=?\x10\x94T\xfe\x0e}\x01\x01\x89\x87\xb9\x03\x00g\xe7iD\xa4p\xb0>F\x15{\xc3\xfe\x1f~\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xcc]\xfe\x06\x7f\x01\x01}\xc5\x14\x00\x00\x03\x00\x0b\xfd\xfe\x04\x80\x01\x01\x98\x00\x00\xa0\x8a\n8\xfe\x02\x81\x01\x01*\x00\x00T\xe8\xfe\x1e\x82\x01\x01\x18\xe0\xdc\x89\x0e\x00\x00\x00\x00^\xa6\x02\x18\x05\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xf0\xb2\xfe\x1a\x83\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xec\xb0\xfe\x08\x84\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00G\x81\xfe\x15\x85\x01\x01$\xf1\xbc\x8c\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00/\x07\xfe\x16\x86\x01\x01#\x88\xb9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\n\x18'b'\xfe\x03\x87\x01\x01Ms\x00\x00,\xea\xfe\x14\x88\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x80\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xc8\x93'b"\xfe\x1c\x89\x01\x01!\x94\xb9\x03\x00^\xa6\x02\x18\x05\xe8\xb8\xfd\xa4[\n\x00\x06\xff\xff\xff\xfc\xff\x02\x00\x01\x00\xa5\x04\xfb.\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P\xfe\x1c\x8b\x01\x01\x1e(\xba\x03\x00G\xf8}\xbd\xc0\x7f\xda8*\x94T>\x17Qb:\xbcO\xee\xb9\xb8\xb1\x939\xc5\xd3\xfe\x18\x8c\x01\x01\xb2\x85'~\xbdO\x89U\xbb\x17]Z>\x8f\xb2)D^\xa6\x02\x18\x05\xe8\xb8\xfd\x14\x95\xfe\x1c\x8d\x01\x01\xa3K_r\xb9H\xcf`9\xcc@\x837\x00\x00\x00\x00\x00\x00\x00\x00\xab\xa6\x0b:-\xab6;\xa8L\xfe\x03\x8e\x01\x01\xa5\xc5\x14\x00\xc8\xc0\xfe\x0c\x8f\x01\x01\x02\xa0\r\xf7x\xb1N\x05\x00<\xba\x03\x00\x18B\xfe\x16\x90\x01\x01\x88^\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00G\x15\x961\xfe\x1f\x97\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0b\x016?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T0\x98\xfe\x06\x98\x01\x01}\xc5\x14\x00\x00\x03\x00y\xe0\xfe\x04\x99\x01\x01\x98\x00\x00\xa0\x8a\xa9\xf5\xfe\x02\x9a\x01\x01*\x00\x00\x1f+\xfe\x1e\x9b\x01\x01\x18`\xf7\x8f\x0e\x00\x00\x00\x00^\xa6\x02\x18\x06\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c\xf0\xc7\xfe\x1a\x9c\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x08\xd1\xfe\x08\x9d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00R\xf3\xfe\x15\x9e\x01\x01$|k\x90\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00e\xd6\xfe\x16\x9f\x01\x01#y\xba\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06j\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b'\xfe\x14\xa1\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x00\x00\x80\xbe\n\xd7#<\x0b\x00\x00\x00\xad\x88\xfe\x1c\xa2\x01\x01!\\\xba\x03\x00^\xa6\x02\x18\x06\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x01\x00\xa4\x045\xd9\xfe\x03\xa3\x01\x01Ms\x00\x00\x02J\xfe\x1c\xa4\x01\x01\x1e\x18\xbb\x03\x00\xba\xdb}\xbd@\x9d690iT>\xbe\xa4b9\x1c\xf6\xf7\xb9\x12\xcc\x01\xb8R\xfc\xfe\x18\xa5\x01\x01\xb28\x0c~\xbd\xe7\x87S\xbb\x02IZ>\xeb\xa1)D^\xa6\x02\x18\x06\xe8\xb8\xfd\xe3s'b'\xfe\x1c\xa6\x01\x01\xa3>\xd1s\xb9\x081c9t\xa5\x897\x00\x00\x00\x00\x00\x00\x00\x00N"\x16:\xbe\xbb\xf5:\x93o\xfe\x03\xa7\x01\x01\xa5\xc5\x14\x00;\xda\xfe\x0c\xa8\x01\x01\x02@\x05\xfbx\xb1N\x05\x00-\xbb\x03\x00\x08x\xfe\x16\xa9\x01\x01\x88]\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa07\xfe\x16\xaa\x01\x01\xc1l/OH\x15\x16\xc2\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xec\x006?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x93\xe2\xfe\x06\xb1\x01\x01}\xc8\x14\x00\x00\x03\x00\x87\xc5\xfe\x04\xb2\x01\x01\x98\x00\x00\xa0\x8a]\xab\xfe\x02\xb3\x01\x01*\x00\x00\xa5\t\xfe\x1e\xb4\x01\x01\x18\x88\x08\x93\x0e\x00\x00\x00\x00]\xa6\x02\x18\x07\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd8\x9e\xfe\x1a\xb5\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xe2j\xfe\x08\xb6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00me\xfe\x15\xb7\x01\x01$2\x15\x94\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xc7\xfe\x16\xb8\x01\x01#i\xbb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x00\xb1'b'\xfe\x03\xb9\x01\x01Ms\x00\x00\xa97\xfe\x14\xba\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00iD\xfe\x1c\xbb\x01\x01!%\xbb\x03\x00]\xa6\x02\x18\x07\xe8\xb8\xfd\x9a[\n\x00\xfc\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04\xc2\xd9\xfe\x12\xbc\x01\x01\xfc\xed\xbb\x03\x004\x00\x01\x00ARMMASK\x00Wr\x93w'b'\xfe\t\xbd\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x9d\xbf\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab\xfe\x1c\xbf\x01\x01\x1e\t\xbc\x03\x00(\xda}\xbd\xa0\x9e\x159v|T>\x18\x97\x9c9\x91\xe7o\xbauU\xc58U\xf2\xfe\x18\xc0\x01\x01\xb2\xd3\xd8}\xbd\xcf\xe6T\xbbvaZ>{\xb4)D]\xa6\x02\x18\x07\xe8\xb8\xfd\xc3\xff\xfe\t\xd8\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00=\x91\xfe\x1c\xc1\x01\x01\xa3\x96Mu\xb9#\x93e9Y&\x907\x00\x00\x00\x00\x00\x00\x00\x00P|\x06:\x1a\xd02;\x196\xfe\x03\xc2\x01\x01\xa5\xc5\x14\x00[\x9e\xfe\x0c\xc3\x01\x01\x02\xc0\xae\xfex\xb1N\x05\x00\x1d\xbc\x03\x00\xc3\xbc\xfe\x16\xc4\x01\x01\x88]\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00E\x8c\xfe\x16\xc5\x01\x01\xc1\xc1\x89M<\x9e\xac\x177~\xc6\x89;\x14y\xb5=\x00\x00\x00\x00\xa5\x03\xae?\xfe\x16\xc6\x01\x01\xe143\x13?\\\x8fB>\x08\x8fM<\x0e\xb1`<\x1d\xc0\xea>\x00\x1f\xe3|'b'\xfe\x1a\xc7\x01\x01\x1b\xa7\xbd\x97\x0e\x00\x00\x00\x00\x03\x003\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xaf\xffm\x01\x9d\x1b\xfe\x16\xc8\x01\x01tY\xbc\x03\x00\x02\x002\x000\xfc\xfd\xff\xff\xff\xfc\xff\x07\x01\xa0\xff3\x02\xa6\xc5\xfe\x16\xc9\x01\x01\x81Y\xbc\x03\x00\x01\x00@\x00 \xfc\xfd\xff\x01\x00\xfd\xff$\x03\x88\x00j\x02\xfe+\xfe\x0e\xca\x01\x01\x1dY\xbc\x03\x00\xe7\xa4iD\xebQh=A\x10\x9b\xbf\xfe\x0e\xcb\x01\x01\x89Y\xbc\x03\x00A\xe7iDp=\xaf>H\x15\x81\xdb\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x005?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{\t\xfe\x06\xcd\x01\x01}\xc5\x14\x00\x00\x03\x00\xfdW\xfe\x04\xce\x01\x01\x98\x00\x00\xa0\x8a\xbc\x05\xfe\x02\xcf\x01\x01*\x00\x00s\xa9\xfe\x1e\xd0\x01\x01\x18\xc8\x15\x96\x0e\x00\x00\x00\x00]\xa6\x02\x18\x07\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c7\x05\xfe\x1a\xd1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00)\xcf\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5\xfe\x15\xd3\x01\x01$\xd7\xbf\x97\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xc0\xfe\x16\xd4\x01\x01#Z\xbc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00~\xe0\xfe\x03\xd5\x01\x01Ms\x00\x00\xca\xdf\xfe\x14\xd6\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\x00\x00\x00\x00\x0b\x00\x00\x00\xec\xef'b'\xfe\x1c\xd7\x01\x01!\xb5\xbc\x03\x00]\xa6\x02\x18\x08\xe8\xb8\xfd\x90[\n\x00\xf2\xfe\xff\xff\xfc\xff\x02\x00\x00\x00\xa4\x04PG\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e\xfe\x1c\xd9\x01\x01\x1e\xf9\xbc\x03\x00-\x06~\xbd\xa0\x9b#9I|T>S\xdc\x0c\xba\n\x92\xdc\xba>\x87\x959+\xfd\xfe\x18\xda\x01\x01\xb2\x19\xc0}\xbd^\x10V\xbbqiZ>\x14\xae)D]\xa6\x02\x18\x08\xe8\xb8\xfdg#\xfe\x1c\xdb\x01\x01\xa31\xd3v\xb9\xe3\xf4g9\xdb\xf9\x967\x00\x00\x00\x00\x00\x00\x00\x00V\xe4\t:\xc9\xdd\r;\x03\xb1\xfe\x03\xdc\x01\x01\xa5\xc3\x14\x00\xb4\xbe\xfe\x0c\xdd\x01\x01\x02(\\\x02y\xb1N\x05\x00\x0e\xbd\x03\x00\x0e\x1b\xfe\x16\xde\x01\x01\x88]\xa6\x02\x18\x08\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa2\xfc\xfe\x16\xdf\x01\x01\xc1\xa5\xb0L<\xf7:\x177&M7:n\xcc\xc5=\x00\x00\x00\x00\xa5\x03\xfc\xe9'b"\xfe\x03\xe0\x01\x01/\xff\x00\x00\xf5\xdd\xfe\x1a\xe1\x01\x01\x1b\xc8h\x9b\x0e\x00\x00\x00\x00\x05\x004\x00\x1d\xfc\x00\x00\x00\x00\x00\x00\x0b\x01\xb0\xffm\x01\xfc\xce\xfe\x16\xe2\x01\x01tI\xbd\x03\x00\x0b\x009\x00'\xfc\x01\x00\x02\x00\x03\x00\x07\x01\xa0\xff3\x02Fo\xfe\x16\xe3\x01\x01\x81I\xbd\x03\x00\x00\x00@\x00\x1e\xfc\xfc\xff\x01\x00\xfd\xff)\x03\x87\x00o\x02\xab\x8c\xfe\x0e\xe4\x01\x01\x1dI\xbd\x03\x00\xef\xa3iDp=*=@\x104T\xfe\x0e\xe5\x01\x01\x89I\xbd\x03\x00\xdd\xe7iD\xb8\x1e\xb4>I\x15/\x88\xfe\x1f\xe6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xee\x005?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x97q\xfe\x06\xe7\x01\x01}\xc5\x14\x00\x00\x03\x00\xff\xa2\xfe\x04\xe8\x01\x01\x98\x00\x00\xa0\x8a\x9aV\xfe\x02\xe9\x01\x01*\x00\x00=\x92\xfe\x1e\xea\x01\x01\x18\x08#\x99\x0e\x00\x00\x00\x00]\xa6\x02\x18\x08\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c.x\xfe\x1a\xeb\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x02\x00\xfe\x08\xec\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdez\xfe\x15\xed\x01\x01$Sk\x9b\x0e\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x9d\xfe\x16\xee\x01\x01#J\xbd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb6\xa6\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14"b'\xfe\x14\xf0\x01\x01J\n\xd7#<\n\xd7#\xb9\x97\x08:\xeb\x8b\x13\xba\xe9\x8f\x1b\xb9\x17T\xfe\x18\xf3\x01\x01\xb2\x18\xed}\xbd\xb7rV\xbb\xfbrZ>\x8f\xb2)D]\xa6\x02\x18\t\xe8\xb8\xfd\x04p\xfe\x1c\xf4\x01\x01\xa3\xac^x\xb9\xabXj9\x80\xd2\x9d7\x00\x00\x00\x00\x00\x00\x00\x00%\xfd":\xf9\x0c,;7\x16\xfe\x03\xf5\x01\x01\xa5\xc5\x14\x00\xdd\xef\xfe\x0c\xf6\x01\x01\x02\xc0\x01\x06y\xb1N\x05\x00\xfe\xbd\x03\x00\x1a\x8e\xfe\x16\xf7\x01\x01\x88]\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00k\xa6\xfe\x16\xf8\x01\x01\xc1\xf5\x01KJ\x15\xc3\xca\xfe\x1f\x1a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00B\x015?:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb6/\xfe\x06\x1b\x01\x01}\xc5\x14\x00\x00\x03\x00\xd1\x8c\xfe\x04\x1c\x01\x01\x98\x00\x00\x80\x8a]@\xfe\x02\x1d\x01\x01*\x00\x00\x1aj\xfe\x1e\x1e\x01\x01\x18\xc0\xcd\xbd\x0e\x00\x00\x00\x00]\xa6\x02\x18\r\xe8\xb8\xfd:f\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xd5b\xfe\x1a\x1f\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x004\x02\xfe\x08 \x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf1\xe4\xfe\x15!\x01\x01$T\xf4\xbd\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x0f\xfe\x16"\x01\x01#!\xc6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00"\xcf\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81'b"\xfe\x14$\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\x03\xcd\xfe\x1c%\x01\x01!\x18\xc6\x03\x00]\xa6\x02\x18\t\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfc\xff\x02\x00\x01\x00\xa4\x04\xedO\xfe\x1c&\x01\x01 \x9a\xc6\x03\x00\xcb\xf7\x04\xbeZ\xc6\x8b?\xed\x99\xa8>\xce\xe0B\xbd$\xac\xc6<\x03\xac0\xbc`\x9c\xfe\x1c'\x01\x01\x1e\xc2\xc6\x03\x00\xd8g~\xbd\xe0F\xb69\xdbqT>\xfe\xe3\xef\xb9\xf6\xe5\x01\xbb\x1e\x81E\xbbx\x9e\xfe\x18(\x01\x01\xb2\xd4`\x83\xbd\x82\xd46\xbb\x88\x8bZ>\xcd\x9c)D]\xa6\x02\x18\r\xe8\xb8\xfd\xf6\x89"b'\xfe\x1c)\x01\x01\xa3\xca;z\xb9\xa1\xb4l9\xd2`\xa57\x00\x00\x00\x00\x00\x00\x00\x00u\x115=\t\xb9\x88;\xbe:\xfe\x03*\x01\x01\xa5\xc5\x14\x00\x04\xab\xfe\x0c+\x01\x01\x02\xb0\x85(y\xb1N\x05\x00\xd6\xc6\x03\x00\x1d\x1e\xfe\x16,\x01\x01\x88]\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf8\x8b\xfe\x12-\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\n\n\xfe\x16.\x01\x01\xc1\x12P\x86<\xa6@Y<\xb2\xb0\xca9\xaa\x13\xab=\x00\x00\x00\x00?\x03\xfb\x91\xfe\x16/\x01\x01\xe1\xbdt\x13?\\\x8fB>\xf5\xe26<\\bF<\xe8C\xe8<\x00\x1f\xe3\x9d\xfe\x030\x01\x01Ms\x00\x00HP\xfe\x1a1\x01\x01\x1bFQ\xc1\x0e\x00\x00\x00\x00\x05\x003\x00\x1c\xfc\xfc\xff\xff\xff\t\x00\t\x01\xad\xffk\x01Hp\xfe\x162\x01\x01t\xfe\xc6\x03\x00\x10\x00<\x00&\xfc\x00\x00\xff\xff\x06\x00\x05\x01\x9d\xff2\x02\x1b~\xfe\x163\x01\x01\x81\xfe\xc6\x03\x00\x05\x00@\x00"\xfc\x00\x00\xfc\xff\xfe\xff!\x03\x85\x00n\x02\xb2n\xfe\x0e4\x01\x01\x1d\xfe\xc6\x03\x00K\xa4iD\xaeGA=C\x10P)\xfe\x0e5\x01\x01\x89\xfe\xc6\x03\x00\x0c\xe8iD\x99\x99\xb5>O\x15\x13f\xfe*6\x01\x01\x96s\xe7f\xbc\x10m\x01\x00C\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00M\xb7\xfe\x1f7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x017?Q\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd6-\xfe\x068\x01\x01}\xc5\x14\x00\x00\x03\x00\xe8\x90\xfe\x049\x01\x01\x98\x00\x00\x80\x8a|\xc5\xfe\x02:\x01\x01*\x00\x00\x81\xce\xfe\x1e;\x01\x01\x18\x00\xdb\xc0\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cI\x8a\xfe\x1a<\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00a"\xfe\x08=\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00P\x80\xfe\x15>\x01\x01$\x98\x9f\xc1\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00-\xb0\xfe\x16?\x01\x01#\x12\xc7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc2\x05'b'\xfe\x14@\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00P\x82\xfe\x03A\x01\x01Ms\x00\x00\x8eY\xfe\x1cB\x01\x01!\xe0\xc6\x03\x00\\\xa6\x02\x18\n\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfc\xff\x02\x00\x00\x00\xa5\x04\xe5J\xfe\x1cC\x01\x01 \x8a\xc7\x03\x00\x9dQ\x0f\xbeg(\x8d?.\xff\xa9>J\x87L\xbd\x0b\xdb\xd9<\xc27\x19\xbc\xeb\x18'b"\xfe\x12D\x01\x01\xfc\xb0\xc7\x03\x004\x00\x01\x00ARMMASK\x00WrC\xe8\xfe\tE\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03I\xcb\xfe\x1cF\x01\x01\x1e\xb2\xc7\x03\x00x\x8b~\xbd\x80K,:'yT>\xb6\x12\x86;\x0b\x0e\x057}\x94\x8e\xbb\xb1\xf8\xfe\x18G\x01\x01\xb2m,\x84\xbd_=-\xbb>\x81Z>\xb8\x8e)D\\\xa6\x02\x18\x0f\xe8\xb8\xfd\xb0\xf3\xfe\t\xdb\n\x00m\x02\x00\x00\x00\x00\xd0\x00\x00\x00\xf1\x94\xfe\x1cH\x01\x01\xa3v\xf6{\xb9\x84\xd5n9*6\xae7\x00\x00\x00\x00\x00\x00\x00\x00T\x90\xf4<\x03U\x81;\x9f\x90\xfe\x03I\x01\x01\xa5\xc6\x14\x00\x18\xd7\xfe\x0cJ\x01\x01\x020/,y\xb1N\x05\x00\xc6\xc7\x03\x00\x7f\x81\xfe\x16K\x01\x01\x88\\\xa6\x02\x18\x0b\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5\xb1\xfe\x16L\x01\x01\xc1\xa8\xc5\x81P\x15\xd4\xf1\xfe\x1fT\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x007?\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x137\xfe\x06U\x01\x01}\xc2\x14\x00\x00\x03\x00\x11\xcf\xfe\x04V\x01\x01\x98\x00\x00\x80\x8a\x0eB\xfe\x02W\x01\x01*\x00\x00KD\xfe\x1eX\x01\x01\x18@\xe8\xc3\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x11\xe9\xfe\x1aY\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x9eB\xfe\x08Z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe2N"b"\xfe%[\x01\x01'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x!!B4\x91t\xc03\xb3)D\x00\x00\x10\x00\xff\x06\x00\x00\x01\x9c\x15\xfe\x15\\\x01\x01$\xb7\x99\xc5\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xf6\xfe\x16]\x01\x01#\x16\xc8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb7\x98"b'\xfe\x14^\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\n\xd7#<\x0b\x00\x08\x00\xbeO\xfe\x03_\x01\x01Ms\x00\x00\xfb2\xfe\x1c`\x01\x01!p\xc8\x03\x00[\xa6\x02\x18\x0c\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfb\xff\x02\x00\x00\x00\xa5\x040\xb9\xfe\x1ca\x01\x01 \x8f\xc8\x03\x00]\x9b\x19\xbe>\xbc\x8e?\'\x1b\xaa> #[\xbd\x93q\xd8<\xe2\xe6"\xbcL\xbe\xfe\x1cb\x01\x01\x1e\xb7\xc8\x03\x00\x8e\x19\x7f\xbd\x9c/\xa2:$\x9cT>\xa9\xda\x84;l\x7f\xbc\xb8\x87\xa3/:\xe2\x82\xfe\x18c\x01\x01\xb2\x9cf\x84\xbd\x90\x0c\x15\xbb\xf1\x89Z>f\x86)D\\\xa6\x02\x18\x0f\xe8\xb8\xfdl\x9e'b'\xfe\x1cd\x01\x01\xa3[\xd3}\xb9\xb2\x18q9}\xa5\xb97\x00\x00\x00\x00\x00\x00\x00\x00}\x80\xc7<+~\xb1;\xca\x91\xfe\x03e\x01\x01\xa5\xc5\x14\x00G\x7f\xfe\x0cf\x01\x01\x02\xd0&0y\xb1N\x05\x00\xcb\xc8\x03\x00$\x92\xfe\x16g\x01\x01\x88[\xa6\x02\x18\x0c\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdc.\xfe\x16h\x01\x01\xc1 $\x9a<\x9b\x1cc<\xa2\x9a\x16:\xd6i\x88=\x00\x00\x00\x00?\x03\xe4c\xfe\x1ai\x01\x01\x1b\xb3\xab\xc8\x0e\x00\x00\x00\x00\x05\x00?\x00\x1d\xfc\x01\x00\x00\x00\x00\x00\n\x01\xac\xffk\x01Hm\xfe\x16j\x01\x01t\xe0\xc8\x03\x00\n\x00B\x00)\xfc\x01\x00\x00\x00\xff\xff\x04\x01\x9f\xff2\x02;\xd5\xfe\x16k\x01\x01\x81\xe0\xc8\x03\x00\x04\x00H\x00\x1d\xfc\xfc\xff\x04\x00\xfc\xff(\x03\x85\x00t\x02;\xdf\xfe\x0el\x01\x01\x1d\xe0\xc8\x03\x00\xef\xa6iD\xb8\x1e\xb5=D\x10:}\xfe\x0em\x01\x01\x89\xe0\xc8\x03\x00~\xe9iD\xf5(\xc1>P\x15n\x0f\xfe\x1fn\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d ?\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T{\t\xfe\x06o\x01\x01}\xc2\x14\x00\x00\x03\x00VK\xfe\x04p\x01\x01\x98\x00\x00\x80\x8a(\x11\xfe\x02q\x01\x01*\x00\x00\x05\x7f\xfe\x1er\x01\x01\x18\x80\xf5\xc6\x0e\x00\x00\x00\x00\\\xa6\x02\x18\x0f\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xb9\xd9\xfe\x1as\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x009\xbe\xfe\x08t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xcb\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2\xfe\x15v\x01\x01$\x0c\x95\xc9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xdej\xbd\xf9~\xec\xc5$\x11\xbbLp5\xbb_5\xcc\xba\xbbr\xfe\x18~\x01\x01\xb2%h\x84\xbd\xa2\x02\xfa\xba\x1d\x86Z>3\x83)D[\xa6\x02\x18\x10\xe8\xb8\xfd>\x0e\xfe\x1a\x7f\x01\x01\x1b\xf0U\xcc\x0e\x00\x00\x00\x00\x00\x007\x00!\xfc\x00\x00\x00\x00\x01\x00\x0b\x01\xae\xffk\x01\xb4o\xfe\x16\x80\x01\x01t\xd0\xc9\x03\x00\x07\x007\x00+\xfc\x00\x00\x00\x00\x00\x00\x04\x01\x9e\xff2\x02\x89\xb4\xfe\x16\x81\x01\x01\x81\xd0\xc9\x03\x00\x00\x00C\x00"\xfc\xfb\xff\x02\x00\xff\xff\'\x03\x84\x00j\x02\x11o\xfe\x0e\x82\x01\x01\x1d\xd0\xc9\x03\x00f\xa6iD\x00\x00\xa4=D\x10\xb5\xec\xfe\x0e\x83\x01\x01\x89\xd0\xc9\x03\x00\xe0\xe9iD33\xc4>Q\x15$\x0f\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe6\x00 ?\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Te|\xfe\x06\x85\x01\x01}\xc8\x14$\x00\x03\x00\x9cE\xfe\x04\x86\x01\x01\x98\x00\x00\x80\x8a.\x9f\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0\xfe\x1e\x88\x01\x01\x18\x90\n\xca\x0e\x00\x00\x00\x00[\xa6\x02\x18\x10\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cJ\xba\xfe\x1a\x89\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00S+\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1\xfe\x1c\x8b\x01\x01\xa3\xf3\xd8\x7f\xb99\x84s9c\x06\xc87\x00\x00\x00\x00\x00\x00\x00\x00O4\xb0\xe5\xf7z\xbd\xc1\x06\x00=F\x9fC\xbch\x93'b"\xfe\x1a\x97\x01\x01\x1b\x95\x02\xd0\x0e\x00\x00\x00\x00\x07\x007\x00\x1d\xfc\x00\x00\xfd\xff\x00\x00\t\x01\xae\xffl\x01\x14\xdc\xfe\x16\x98\x01\x01t\xc1\xca\x03\x00\x0c\x00=\x000\xfc\xff\xff\x00\x00\xfc\xff\x04\x01\x9f\xff2\x02\x1e\xb3\xfe\x16\x99\x01\x01\x81\xc1\xca\x03\x00\x05\x00A\x00\x1b\xfc\xfb\xff\xfe\xff\xfd\xff.\x03\x82\x00t\x02\xf8%\xfe\x0e\x9a\x01\x01\x1d\xc1\xca\x03\x00;\xa5iD\xb8\x1e}=D\x10\xfdg\xfe\x0e\x9b\x01\x01\x89\xc1\xca\x03\x00\x10\xe9iDR\xb8\xbd>R\x15$\xd4\xfe\x1f\x9c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xda\x00 ?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T:\x11\xfe\x06\x9d\x01\x01}\xc8\x14\x00\x00\x03\x00\xf2\xc5\xfe\x04\x9e\x01\x01\x98\x00\x00\x80\x8ap\x1f\xfe\x02\x9f\x01\x01*\x00\x00\xbc\xdb\xfe\x1e\xa0\x01\x01\x18\xf8(\xd0\x0e\x00\x00\x00\x00Z\xa6\x02\x18\x10\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x04\xe8\xfe\x1a\xa1\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x8dU\xfe\x08\xa2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\t)\xfe\x1c\xa3\x01\x01\x1e\xd5\xca\x03\x00\xc2o\x80\xbdn\xb9\x05;'LT>y\x91\xdb:D\x90\x85\xba*K\xbc:\xe4M\xfe\x18\xa4\x01\x01\xb2:\x81\x84\xbd\x06\x14\xd7\xba`NZ>G\x81)DZ\xa6\x02\x18\x10\xe8\xb8\xfd\x186\xfe\x1c\xa5\x01\x01\xa3\xa3\xdc\x80\xb9F\xbcu9x\xf0\xd67\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\x80<\xce\xf0\xae;\xec\xcb\xfe\x03\xa6\x01\x01\xa5\xc8\x14\x00\x0b\xd0\xfe\x0c\xa7\x01\x01\x020d8y\xb1N\x05\x00\xe9\xca\x03\x00\xeaP\xfe\x16\xa8\x01\x01\x88Y\xa6\x02\x18\x0f\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe2\xe8\xfe\x16\xa9\x01\x01\xc1,.\x8e<\xbc\x0e\xf7;^r\x11:\x1d\x15\xb4=\x00\x00\x00\x00?\x03\xa4\x1a\xfe\x16\xaa\x01\x01\xe1Y9\x14?\\\x8fB>\xf5\xe26<\\bF<\x06 \x89=\x00\x1f\xb0\xb9\xfe\x03\xab\x01\x01Ms\x00\x00\xbeg"b'\xfe\x15\xac\x01\x01$6\x89\xd1\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00PE\xfe\x16\xad\x01\x01#%\xcb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb1\xd5\xfe\x14\xae\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\n\xd7#<\x0b\x00\x08\x00\x1d\xbc\xfe\x03\xaf\x01\x01Ms\x00\x00`q'b'\xfe\x12\xb0\x01\x01\xfc\x9b\xcb\x03\x004\x00\x01\x00ARMMASK\x00Wr\xbd\xf0\xfe\t\xb1\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03)\x8e\xfe\x1c\xb2\x01\x01!\x7f\xcb\x03\x00X\xa6\x02\x18\x0f\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xfa\xff\x02\x00\x01\x00\xa2\x04\x1fv\xfe\x1c\xb3\x01\x01 \x9d\xcb\x03\x00\x1c\xd9<\xbe&\x85\x92?\x12\x98\xab>\x93\x9e\x89\xbd\xf1\xce\xf4<\xb2\xebE\xbc\xacy\xfe\t\xdc\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00\x84b\xfe\x1a\xb4\x01\x01\x1b5\xaf\xd3\x0e\x00\x00\x00\x00\x03\x004\x00\x1d\xfc\x01\x00\xfe\xff\x02\x00\t\x01\xac\xffk\x01\xc9G\xfe\x16\xb5\x01\x01t\xb1\xcb\x03\x00\x11\x007\x00(\xfc\x00\x00\x03\x00\x01\x00\x04\x01\x9f\xff2\x02g\xd6\xfe\x16\xb6\x01\x01\x81\xb1\xcb\x03\x00\x00\x00@\x00\x1d\xfc\xfd\xff\x01\x00\xff\xff#\x03\x8a\x00m\x02\x98\xd9\xfe\x0e\xb7\x01\x01\x1d\xb2\xcb\x03\x00!\xa7iD)\\\xbb=E\x10\x81\x8b\xfe\x0e\xb8\x01\x01\x89\xb2\xcb\x03\x00\x0f\xeaiD\x14\xae\xc5>R\x15\xd5\xd0\xfe\x1f\xb9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01 ?\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd5\xb7\xfe\x06\xba\x01\x01}\xbb\x14\x00\x00\x03\x00\xbc>\xfe\x04\xbb\x01\x01\x98\x00\x00\x80\x8aQ\x9a\xfe\x02\xbc\x01\x01*\x00\x00Q\x10\xfe\x1e\xbd\x01\x01\x18\x18\xe8\xd2\x0e\x00\x00\x00\x00Y\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x1e\x81\xfe\x1a\xbe\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00i4\xfe\x08\xbf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa8M\xfe\x1c\xc0\x01\x01\x1e\xd9\xcb\x03\x00\xa6\xfb\x80\xbd~"\x1f;\x1b\x12T>\xad\xab\x86;\x8e\xf1B\xbb\xa1\xb5M\xb9\xc6W\xfe\x18\xc1\x01\x01\xb2]\xce\x84\xbds\x08\xaf\xba;#Z>)|)DY\xa6\x02\x18\x11\xe8\xb8\xfdK%'b'\xfe\x1c\xc2\x01\x01\xa3\xeb\xd3\x81\xb9\xd0\xe8w9\x84\x95\xe77\x00\x00\x00\x00\x00\x00\x00\x00+\x13e<\xa4\x10\xcb;vW\xfe\x03\xc3\x01\x01\xa5\xe2\x14\x00\x96\xc7\xfe\x0c\xc4\x01\x01\x02\xb8_R\x15\xe1\xea\xfe\x1f\xd1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ti\xf4\xfe\x06\xd2\x01\x01}\xc5\x14\x00\x00\x03\x00\xf4:\xfe\x04\xd3\x01\x01\x98\x00\x00\x80\x8a\xc1\xf4\xfe\x02\xd4\x01\x01*\x00\x008j\xfe\x1e\xd5\x01\x01\x18X\xf5\xd5\x0e\x00\x00\x00\x00X\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x12\xb2'b"\xfe\x1a\xd6\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x87\x84\xfe\x08\xd7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x001\xb6\xfe\x1c\xd8\x01\x01!G\xcc\x03\x00W\xa6\x02\x18\x10\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x03\x00\x00\x00\xa1\x04\xb1E\xfe\x1c\xd9\x01\x01 \xb5\xcc\x03\x00\xc9\x97J\xbe\xf2\x9f\x93?\xaa~\xac>\xdc\xe2\x93\xbdM\x1f\xf6<\xb2T\xa7\xbbv\x1e\xfe\x1c\xda\x01\x01\x1e\xde\xcc\x03\x00\xb2\x00\x82\xbd\xf6\xa3E;\xd0\xd4S>\xb8D\x1a9I\x8f\x9f\xba\xf2\xcc\xd5\xba^<\xfe\x18\xdb\x01\x01\xb2\xd5\x99\x85\xbd2Hx\xba\xcd\x04Z>\\\x7f)DX\xa6\x02\x18\x11\xe8\xb8\xfd=\xf9\xfe\x1c\xdc\x01\x01\xa3-\xd6\x82\xb96\tz9\x16(\xfa7\x00\x00\x00\x00\x00\x00\x00\x00.\n`<\x9c\x1e\xd5;c'\xfe\x03\xdd\x01\x01\xa5\xc8\x14\x00\x1e\xff\xfe\x0c\xde\x01\x01\x02pS@y\xb1N\x05\x00\xf2\xcc\x03\x00\xcd\x7f\xfe\x16\xdf\x01\x01\x88V\xa6\x02\x18\x10\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa9\x94\xfe\x16\xe0\x01\x01\xc1\xb0\x07\xa0<*\xb4\xa2;\xe1\xe6\xf19\x00\x10\x94=\x00\x00\x00\x00?\x03s\xc5\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$"b'\xfe\x15\xe2\x01\x01$b\x7f\xd9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00L\x0c\xfe\x16\xe3\x01\x01#.\xcd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9d\x92'b"\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3\xfe\x14\xe5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\x0b\xf2\xfe\x1a\xe6\x01\x01\x1b\xbf\x05\xdb\x0e\x00\x00\x00\x00\x06\x007\x00\x13\xfc\x00\x00\x00\x00\x00\x00\n\x01\xac\xffh\x01C\x1d\xfe\x16\xe7\x01\x01t\x92\xcd\x03\x00\r\x00<\x00%\xfc\x04\x00\x07\x00\xfd\xff\x04\x01\x9f\xff2\x02\x95J\xfe\x16\xe8\x01\x01\x81\x92\xcd\x03\x00\x04\x00C\x00\x19\xfc\xff\xff\x01\x00\xfc\xff)\x03\x87\x00j\x02\x99\xcd\xfe\x0e\xe9\x01\x01\x1d\x92\xcd\x03\x00\xab\xa6iD\xd7\xa3\xac=E\x10\xf2D\xfe\x0e\xea\x01\x01\x89\x92\xcd\x03\x00\x99\xe9iD\x00\x00\xc2>T\x15D\xde\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tlc\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce\xfe\x04\xed\x01\x01\x98\x00\x00\x80\x8a\xb9'\xfe\x02\xee\x01\x01*\x00\x00%U\xfe\x1e\xef\x01\x01\x18\xa0T\xd9\x0e\x00\x00\x00\x00Y\xa6\x02\x18\x11\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf2`\xfe\x1a\xf0\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\x05m\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e\xfe\x1c\xf2\x01\x01!$\xcd\x03\x00V\xa6\x02\x18\x11\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x02\x00\x00\x00\xa1\x04{\x93\xfe\x1c\xf3\x01\x01 \xba\xcd\x03\x00Y\x0bU\xbe\xe7\x13\x94?\x02\xe6\xac>\xb9O\x9d\xbd1\xca\xb4<\xc3\xeeZ\xbb\x8d\xe5"b'\xfe\x03\xf4\x01\x01/\xff\x00\x00S\x90\xfe\x1c\xf5\x01\x01\x1e\xe2\xcd\x03\x00\xb2l\x82\xbdfia;\xfd\xd7S>\xe8&k\xbb\xf3\th:\xc4\x9bZ:[0\xfe\x18\xf6\x01\x01\xb2\x9d\x1c\x86\xbd\xb1\\(\xba\xde\x07Z>\xa4\x80)DX\xa6\x02\x18\x12\xe8\xb8\xfd\x9eV\xfe\x1c\xf7\x01\x01\xa3\x9b\xef\x83\xb9\xf1\xf6{9V\xd4\x068\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xc1E<\xc1\xf3\xbf;rz\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U\xfe\x0c\xf9\x01\x01\x02\xf8NDy\xb1N\x05\x00\xf7\xcd\x03\x00E\x0e\xfe\x16\xfa\x01\x01\x88V\xa6\x02\x18\x11\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x003\r\xfe\x16\xfb\x01\x01\xc1\x1d\xf9\x87<\x8d\xe4)\x00\x1d\xfc\xfc\xff\x04\x00\xfc\xff$\x03\x86\x00o\x02I\xf4\xfe\x0e\x03\x01\x01\x1d\x83\xce\x03\x00\n\xa7iD\xe1z\xb8=F\x10\xf5\xd0\xfe\x0e\x04\x01\x01\x89\x83\xce\x03\x00\x99\xe9iD\x00\x00\xc2>T\x15a\x86\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf7\x00\x1f?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TN\xb4\xfe\x06\x06\x01\x01}\xc8\x14\x00\x00\x03\x00\xb5d\xfe\x04\x07\x01\x01\x98\x00\x00\x80\x8a\x04\x16\xfe\x02\x08\x01\x01*\x00\x00p/\xfe\x1e\t\x01\x01\x18\xc0\x13\xdc\x0e\x00\x00\x00\x00X\xa6\x02\x18\x12\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\xd2\xb5\xfe\x1a\n\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00o\xf8\xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer\xfe\x14\x0c\x01\x01J\n\xd7#<\n\xd7#<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\xb5\xa6'b'\xfe\x1c\r\x01\x01!\xa1\xce\x03\x00U\xa6\x02\x18\x11\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf9\xff\x02\x00\x01\x00\xa0\x04k\xe4\xfe\x1c\x0e\x01\x01 \xc0\xce\x03\x00\xa67_\xbe\xb6\xa6\x94?\xb8\xc9\xac>>u\x9c\xbd\rB\xce<\x8cV3\xbc\x9bj\xfe\x1c\x0f\x01\x01\x1e\xe8\xce\x03\x00\xdfs\x83\xbd\x16\x8bj;v\xcfS>c\xbcc:\x8b7\x80\xbb2\xa2\x89\xba\xfa\xc5\xfe\x18\x10\x01\x01\xb2\xd7\xa4\x86\xbd\x80\xb9\xab\xb9\xe5\x04Z>G\x81)DX\xa6\x02\x18\x12\xe8\xb8\xfd,\x8e\xfe\x03\x11\x01\x01Ms\x00\x00\x07g\xfe\x1c\x12\x01\x01\xa3\x81\x15\x85\xb9 \xaf}9\x1c\n\x118\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xbeF\xf5\xe26<\\bF<\xa76\xdc=\x00\x1f\xbe%'b'\xfe\x15\x19\x01\x01$\xe9r\xe1\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00y)\xfe\x16\x1a\x01\x01#8\xcf\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x02\xa8'b'\xfe\x1a\x1b\x01\x01\x1bQ]\xe2\x0e\x00\x00\x00\x00\x05\x002\x00\x1c\xfc\x02\x00\xff\xff\x00\x00\t\x01\xae\xffk\x01\xe6\xc9\xfe\x16\x1c\x01\x01tt\xcf\x03\x00\xff\xff=\x00%\xfc\xfd\xff\xff\xff\x01\x00\x04\x01\x9e\xff1\x02\xdf\xe3\xfe\x16\x1d\x01\x01\x81t\xcf\x03\x00\x00\x00@\x00\x1f\xfc\xfe\xff\x02\x00\xfd\xff"\x03\x89\x00r\x02\xed\xd7\xfe\x0e\x1e\x01\x01\x1dt\xcf\x03\x00\t\xa7iD\xebQ\xb8=F\x10\xc9\xa2\xfe\x0e\x1f\x01\x01\x89t\xcf\x03\x00\xb0\xe9iDR\xb8\xc2>U\x15J\xcf\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0e\x1c\xfe\x06!\x01\x01}\xc8\x14\x00\x00\x03\x00\xd9&\xfe\x04"\x01\x01\x98\x00\x00\x80\x8a%\x93\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81\xfe\x02$\x01\x01*\x00\x00i\xfd\xfe\x1e%\x01\x01\x18(2\xe2\x0e\x00\x00\x00\x00W\xa6\x02\x18\x12\xe8\xb8\xfd\x8af\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\xf2\xdd\xfe\x1a&\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00R\x8a\xfe\x08\'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc\xfe\x12(\x01\x01\xfc\x86\xcf\x03\x004\x00\x01\x00ARMMASK\x00Wr\xeaa\xfe\t)\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x03\x03C1\xfe\t\xdd\n\x00m\x00\x00\x00\x00\x00\xcf\x00\x00\x00n\x1c\xfe\x14*\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x08\x00\xc1\xf7\xfe\x1c+\x01\x01!i\xcf\x03\x00T\xa6\x02\x18\x12\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf8\xff\x01\x00\x01\x00\xa1\x049,\xfe\x1c,\x01\x01 \xc4\xcf\x03\x00\x10\xb4h\xbe1<\x95?\xcfT\xad>\xe3,\xa7\xbd\xf5\x08\xa3<\xc2\x001\xbcfc'b'\xfe\x1c-\x01\x01\x1e\xed\xcf\x03\x00\xae\x08\x84\xbd\xde_q;\xb2\xddS>\xa0]\xf09\x83\xb9h\xbb\x1cr5:)7\xfe\x18.\x01\x01\xb2~E\x87\xbd\xc0\xf7\x93\xb8=\x0bZ>\xebq)DW\xa6\x02\x18\x12\xe8\xb8\xfdm\x97\xfe\x03/\x01\x01Ms\x00\x00\x82\xba\xfe\x1c0\x01\x01\xa3VE\x86\xb9NB\x7f9\t\xb8\x1b8\x00\x00\x00\x00\x00\x00\x00\x00j\xb9gLy\xb1N\x05\x00\x01\xd0\x03\x00\xe1F\xfe\x163\x01\x01\x88T\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xac.\xfe\x164\x01\x01\xc1\x02m\xa0<\x8cg6<<[\xde9l\xf9\x8f=\x00\x00\x00\x00?\x03B\x1b'b'\xfe\x155\x01\x01$Np\xe5\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00%\xe9\xfe\x166\x01\x01#=\xd0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00S-\xfe\x1a7\x01\x01\x1bd\x0c\xe6\x0e\x00\x00\x00\x00\x04\x002\x00\x1a\xfc\xfe\xff\x00\x00\x01\x00\t\x01\xad\xffl\x01\xe7*\xfe\x168\x01\x01te\xd0\x03\x00\x07\x00+\x00\'\xfc\xfa\xff\x05\x00\xfd\xff\x05\x01\x9f\xff2\x02"\x91\xfe\x169\x01\x01\x81e\xd0\x03\x00\x04\x00=\x00\x18\xfc\xfa\xff\x01\x00\xfd\xff+\x03\x85\x00m\x02\xb1m\xfe\x0e:\x01\x01\x1de\xd0\x03\x00\xac\xa6iD\xcd\xcc\xac=F\x10\x81#\xfe\x0e;\x01\x01\x89e\xd0\x03\x00k\xeaiD\\\x8f\xc8>V\x15d/\xfe\x1f<\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\n\xfe\x06=\x01\x01}\xc8\x14\x00\x00\x03\x00c\xb5\xfe\x04>\x01\x01\x98\x00\x00\x80\x8a\x9e,\xfe\x02?\x01\x01*\x00\x00">\xfe\x1e@\x01\x01\x188G\xe5\x0e\x00\x00\x00\x00W\xa6\x02\x18\x12\xe8\xb8\xfd\x80f\n\x00F\x00\xff\xff\x03\x00|J\x03\x0c\xe6q\xfe\x1aA\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00\xd4h\xfe\x08B\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Z9\xfe\x03C\x01\x01Ms\x00\x00\xe1R'b'\xfe\x14D\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x08\x00\xc9\xc1\xfe\x1cE\x01\x01!3\xd0\x03\x00S\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf8\xff\x01\x00\x00\x00\xa0\x04\x8eC\xfe\x1cF\x01\x01 \xc9\xd0\x03\x00\xdc\x94q\xbe\x14\\\x95?\xbfm\xae>_\xcb\xad\xbdr^8<\xa2=\xf1\xbb\xf2\xe3\xfe\x03G\x01\x01Ms\x00\x00?D\xfe\x1cH\x01\x01\x1e\xf1\xd0\x03\x00\xab\xf0\x84\xbdv\xeb|;\x1f\xbbS>\xb5\xb8\xfe\xb9\x1f&\xbd\xba\xf1{\xd3\xb8nU\xfe\x18I\x01\x01\xb2q\xda\x87\xbd \xd7D\xb9d\xf9Y>\xeb\x81)DW\xa6\x02\x18\x12\xe8\xb8\xfd\x8b\x9e'b'\xfe\x1cJ\x01\x01\xa3v\x83\x87\xb9QJ\x809\x02\xcd&8\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xad\x88\xfe\x16M\x01\x01\x88S\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x08\xca\xfe\x16N\x01\x01\xc1q\xad\xe6<\r\x02^<\xa5\xef\xc69\xe0P\x89=\x00\x00\x00\x00?\x03\xef\x0c\xfe\x15O\x01\x01$\x9ci\xe9\x0e2\x042\x042\x042\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xfc\xfe\x16P\x01\x01#A\xd1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x001\x16\xfe\x1aQ\x01\x01\x1b0\xb8\xe9\x0e\x00\x00\x00\x00\x08\x007\x00\x15\xfc\xff\xff\xff\xff\x00\x00\t\x01\xad\xffk\x01\xad\x12\xfe\x16R\x01\x01tV\xd1\x03\x00\t\x001\x00"\xfc\xff\xff\x04\x00\x00\x00\x04\x01\x9e\xff2\x02f\xcc\xfe\x16S\x01\x01\x81V\xd1\x03\x00\x05\x00A\x00\x18\xfc\xfe\xff\x01\x00\xfc\xff%\x03\x81\x00q\x02w\x8f\xfe\x0eT\x01\x01\x1dV\xd1\x03\x00\xd3\xa6iD\x99\x99\xb1=F\x10k`\xfe\x0eU\x01\x01\x89V\xd1\x03\x00\x99\xe9iD\x00\x00\xc2>V\x15/\x0b\xfe*V\x01\x01\x96s\xe7f\xbc\x14m\x01\x00F\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x08\xdd\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf5\x00\x1d?\x93\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb3~\xfe\x06X\x01\x01}\xc8\x14\x00\x00\x03\x00(\x91'b'\xfe\x04Y\x01\x01\x98\x00\x00\x80\x8a&\xd4\xfe\x02Z\x01\x01*\x00\x00\x04j\xfe\x1e[\x01\x01\x18\x98\xa2\xe8\x0e\x00\x00\x00\x00W\xa6\x02\x18\x13\xe8\xb8\xfdvf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0c\x83\x95\xfe\x1a\\\x01\x01>\xcc\xcc\xcc?{\x14.?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00Z\x00\x00\x00I\x8b\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V\xfe\x03^\x01\x01Ms\x00\x00D\xb3\xfe\x14_\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x08\x00\x16\xaa\xfe\x03`\x01\x01M\x16\x00\x00r\x99'b'\xfe\x1ca\x01\x01!\xc4\xd1\x03\x00S\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\x00\x00\x00\x00\xa0\x04\r\xda\xfe\x1cb\x01\x01 \xce\xd1\x03\x00\x1b\x91z\xbe\xc9\x98\x95?^\x88\xae>>\x9e\xc7\xbd90\x02;\xd4\xdd\xd9\xbb\x97\x95\xfe\x03c\x01\x01Ms\x00\x00\x11\xe4\xfe\x1cd\x01\x01\x1e\xf7\xd1\x03\x00\x9c\xef\x85\xbd\xc3r\x82;\x1a\xd5S>\x0f~\xdb\xbb@\xc6\x0e\xbc\x94_\x88;Z\xd7\xfe\x18e\x01\x01\xb2\x08{\x88\xbd\xe0\xfd\r9U\x01Z>\x85{)DW\xa6\x02\x18\x14\xe8\xb8\xfdL\xd0\xfe\x1cf\x01\x01\xa3\xc7\xc3\x88\xb9\xb1\xc8\x809r%28\x00\x00\x00\x00\x00\x00\x00\x00}\xf6i<\xf5\x87{;\xd9\xb0\xfe\x03g\x01\x01\xa5\xc5\x14\x00(t\xfe\x0ch\x01\x01\x02x-Ty\xb1N\x05\x00\x0b\xd2\x03\x00\xb4\x84\xfe\x16i\x01\x01\x88R\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Z\x1b\xfe\x16j\x01\x01\xc1\x9b\xda\xac<\xf5j\xa3X\x15\x0e\x9a\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00:\x01\xc4>\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x89L\xfe\x06r\x01\x01}\xc5\x14\x00\x00\x03\x00eJ\xfe\x04s\x01\x01\x98\x00\x00\x80\x8a/\xc7\xfe\x02t\x01\x01*\x00\x00\xa6\x8f\xfe\x1eu\x01\x01\x18\xa0e\xeb\x0e\x00\x00\x00\x00W\xa6\x02\x18\x14\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x00\x00|J\x03\x0c&I\xfe\x1av\x01\x01>\x99\x99y\xc0\xe1z\x14\xbf)#\xb8=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xb7\x00\x00\x00\xb4\x0f\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5\xfe\x15x\x01\x01$a\xb4\xed\x0ei\x04\xa8\x04]\x04\xaf\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xba\xfe\x16y\x01\x01#[\xd2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd0\x85\xfe\x03z\x01\x01Ms\x00\x00j\x13'b'\xfe\x14{\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x0f\x00\x9f\xb8\xfe\x1c|\x01\x01!\x8e\xd2\x03\x00R\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\x00\x00\x00\x00\xa1\x04*\x1e\xfe\x1c}\x01\x01 \xd4\xd2\x03\x00\xddV\x81\xbe\x04\xbc\x95?\x87&\xaf>\xa6\x93\xc7\xbd\xfe\x03\xbe\xba\xd2\x91L\xba\xf5\xf1\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05'b"\xfe\x1c\x7f\x01\x01\x1e\xfc\xd2\x03\x0087\x87\xbd\xcf\x10\x9e;[\xd4S>\x89\xb5\x15\xbcx\xe3\t\xbb\xdc\xbd\t3c)DW\xa6\x02\x18\x14\xe8\xb8\xfd\x07\x94\xfe\x1c\x81\x01\x01\xa3\xc9\x02\x8a\xb9=\x1f\x819\xac\xc1=8\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x1aM<\x8c\xba\x87;\xd0\xbd\xfe\x03\x82\x01\x01\xa5\xc5\x14\x00\xaa\xfb\xfe\x0c\x83\x01\x01\x02\x00)Xy\xb1N\x05\x00\x11\xd3\x03\x00\x00\xe3\xfe\x16\x84\x01\x01\x88R\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x17\xc6\xfe\x16\x85\x01\x01\xc1\xc6]\xd8\xf5\xe26<\\bFG\x101%\xfe\x0e\x8b\x01\x01\x898\xd3\x03\x00\x89\xeeiD\xe1z\xe9>X\x15U\xaf\xfe\x1f\x8c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xae\x00\xc4>[\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T]\xc2\xfe\x06\x8d\x01\x01}\xc6\x14\x00\x00\x03\x00\x962\xfe\x04\x8e\x01\x01\x98\x00\x00\x80\x8a\xe4\xe0\xfe\x02\x8f\x01\x01*\x00\x00un\xfe\x1e\x90\x01\x01\x18\xb0z\xee\x0e\x00\x00\x00\x00V\xa6\x02\x18\x14\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x01\x00|J\x03\x0cK\xf7\xfe\x1a\x91\x01\x01>=\nw\xc0\xf6(\x1c\xbf\x01\xa3~>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xb2\x00\x00\x00O?\xfe\x08\x92\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00y\xc6"b'\xfe\x15\x93\x01\x01$G\xb2\xf1\x0e\xf8\x04\xf5\x04\xd7\x04+\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaaX\xfe\x16\x94\x01\x01#`\xd3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbfa\xfe\x03\x95\x01\x01Ms\x00\x00;\xba\xfe\x12\x96\x01\x01\xfcr\xd3\x03\x004\x00\x01\x00ARMMASK\x00Wr\xc0\xb4\xfe\t\x97\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xfe\xa9\xfe\t\xde\n\x00m\x02\x00\x00\x00\x00\xcf\x00\x00\x00\x1e\xc7\xfe\x14\x98\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7#\xbc\x00\x00\x00\x00\x0b\x00\x17\x00X\x84'b"\xfe\x1c\x99\x01\x01!W\xd3\x03\x00Q\xa6\x02\x18\x12\xe8\xb8\xfd\x86[\n\x00\xf6\xff\xff\xff\xf7\xff\xff\xff\x00\x00\xa0\x04y\x96\xc3\xbd^.9\xbc3\xa8\xb8\xbbJ\xb8\xfe\x03\x9b\x01\x01Ms\x00\x006\x8a\xfe\x1c\x9c\x01\x01\x1e\x02\xd4\x03\x00\x89\xd1\x88\xbdA1\xab;\xaf>T>\xff\xc8\x81\xbbw\x933\xbc\x10\xdd\x85<|\xe1\xfe\x18\x9d\x01\x01\xb2\xda+\x8b\xbd\xb3R\xa5:\xb4xZ>\n')DV\xa6\x02\x18\x14\xe8\xb8\xfd\x11\xec\xfe\x1c\x9e\x01\x01\xa3O@\x8b\xb9\xf5N\x819}\x05J8\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xfcD<\x04V\xc4;e\xa6\xfe\x03\x9f\x01\x01\xa5\xc6\x14\x00\xc2?\xfe\x0c\xa0\x01\x01\x02\xf0f\\y\xb1N\x05\x00\x16\xd4\x03\x00\xecn\xfe\x16\xa1\x01\x01\x88Q\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8e^\xfe\x16\xa2\x01\x01\xc1a~\x96G\x10\xf2\xb3\xfe\x0e\xa7\x01\x01\x89*\xd4\x03\x00E\xf4iD\x14\xae\x0b?Y\x15:\xe5\xfe\x1f\xa8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00C\x00\xc4>\xc2\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TU\xf0\xfe\x06\xa9\x01\x01}\xb5\x14\x00\x00\x03\x00k7\xfe\x04\xaa\x01\x01\x98\x00\x00\x80\x8a8(\xfe\x02\xab\x01\x01*\x00\x00\x80b\xfe\x1e\xac\x01\x01\x18\x00\x9d\xf4\x0e\x00\x00\x00\x00U\xa6\x02\x18\x15\xe8\xb8\xfdbf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0c\x97\xee\xfe\x1a\xad\x01\x01>\\\x8fr\xc0\xa4p=\xbf\x02\xd3\xdc>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xa9\x00\x00\x00\xaas\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12\xfe\x15\xaf\x01\x01$\xc3\xb0\xf5\x0eq\x05\x93\x05\x80\x05\xa6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xaa\xfe\x16\xb0\x01\x01#f\xd4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x01S\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a'b'\xfe\x14\xb2\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\n\xd7#<\x0b\x00%\x00\xd3\xf2\xfe\x1c\xb3\x01\x01! \xd4\x03\x00P\xa6\x02\x18\x12\xe8\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xf7\xff\xfd\xff\x01\x00\xa1\x04+Z\xfe\x1c\xb4\x01\x01 \xdf\xd4\x03\x00\x85\x96\x8a\xbe\xb0\x9a\x95?\x91I\xad>\x7f\xe4\xcb\xbd\xb2i\x1b\xbdAv\xa0\xbc\x88\xf2'b'\xfe\x1c\xb5\x01\x01\x1e\x08\xd5\x03\x00W\x13\xa7\xbd=e\x8e;f\xb2S>\xf1p9\xbeu\x18\xb7\xbc\x94\\\xc4\xba\xc8\t\xfe\x18\xb6\x01\x01\xb2\xc2L\xa5\xbd@\xeb\xbf8\x1d#Z>\xeb\x91(DU\xa6\x02\x18\x15\xe8\xb8\xfd\xcc\xef\xfe\x03\xb7\x01\x01Ms\x00\x00\xa4\x07\xfe\x1a\xb8\x01\x01\x1b\xdes\xf8\x0e\x00\x00\x00\x00\x02\x00(\x00\xf6\xfbK\xff\xec\xff\t\x00\x07\x01\xa4\xffe\x01]\xb7\xfe\x16\xb9\x01\x01t\x1b\xd5\x03\x00\x02\x00/\x00\xfc\xfbI\xff\x00\x00\x05\x00\xfa\x00M\xff\x05\x02pl\xfe\x16\xba\x01\x01\x81\x1b\xd5\x03\x00\xff\xff0\x00\xf8\xfbY\xff\x08\x00\x00\x00\x1c\x03.\x00r\x024\x07\xfe\x0e\xbb\x01\x01\x1d\x1b\xd5\x03\x00.\xc0iDp=\xf7>G\x10\xda\x83\xfe\x0e\xbc\x01\x01\x89\x1b\xd5\x03\x004\x04jD\x85kK?Y\x15\xe9i\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xc0\x00\xc4>4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x809\xfe\x06\xbe\x01\x01}\xc2\x14\x00\x00\x03\x00\x9c0\xfe\x04\xbf\x01\x01\x98\x00\x00\x80\x8a\xb4\xa5\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0\xfe\x1e\xc1\x01\x01\x18(\xae\xf7\x0e\x00\x00\x00\x00U\xa6\x02\x18\x15\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cdT\xfe\x1a\xc2\x01\x01>33c\xc0\xf5(\\\xbf\x8d\x8c"?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8b\x00\x00\x00g\xcb\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa\xfe\x1c\xc4\x01\x01\xa3M\x89\x8c\xb9V;\x819^\x8bX8\x00\x00\x00\x00\x00\x00\x00\x00n\xa3?<\xa4\xb12<\x01\xaf\xfe\x03\xc5\x01\x01\xa5\xbd\x14\x00\xc8\xbd\xfe\x0c\xc6\x01\x01\x02\x90^`y\xb1N\x05\x00/\xd5\x03\x00\xc36\xfe\x16\xc7\x01\x01\x88P\xa6\x02\x18\x12\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x18\x18\xfe\x16\xc8\x01\x01\xc1\x8e\xb1\xa9<23\xb7<\x89Q\xd09o\xbc\x8b=\x00\x00\x00\x00?\x03b"'b'\xfe\x15\xc9\x01\x01$\xe9\xae\xf9\x0e\x05\x06!\x06\x06\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdf"\xfe\x16\xca\x01\x01#l\xd5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\n\x8f\xfe\x03\xcb\x01\x01Ms\x00\x00\xbf\xb4'b'\xfe\x14\xcc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x00\x00\x00\x00\n\xd7#>\x0b\x001\x00\xb2\xf8\xfe\x1c\xcd\x01\x01!\xb2\xd5\x03\x00P\xa6\x02\x18\x10\xe8\xb8\xfd\x9a[\n\x00\n\x00\x00\x00\xfa\xff\xee\xff\x17\x00\x99\x04\xc6\xbc\xfe\x1c\xce\x01\x01 \xe4\xd5\x03\x00\x87F\x8e\xbef\xd9\x92?<%\x9f>v\x9bx\xbd\x8a\xf6@\xbe\x80\xabn\xbe\xc1Y\xfe\x03\xcf\x01\x01Ms\x00\x00a\xa2\xfe\x1a\xd0\x01\x01\x1b\xfe \xfc\x0e\x00\x00\x00\x00\xfa\xff\xfa\xff\xa8\xfb\x96\x00\xbb\xff\xeb\xff\x0b\x01\x9c\xff`\x01\xa8J\xfe\x16\xd1\x01\x01t\x0c\xd6\x03\x00\xf7\xff\x03\x00\xa8\xfb\x91\x00\xc1\xff\xf3\xff\x02\x015\xff\xf8\x01\xe2\x0c\xfe\x16\xd2\x01\x01\x81\x0c\xd6\x03\x00\xf8\xff\x0b\x00\x94\xfb\x8e\x00\xb3\xff\xed\xff*\x03\r\x00m\x02u\x1e\xfe\x0e\xd3\x01\x01\x1d\x0c\xd6\x03\x00"\xc8iD\xa4p\x1b?G\x10\xfd\x8f\xfe\x0e\xd4\x01\x01\x89\x0c\xd6\x03\x00\x9d\rjD\\\x0fq?Z\x15\x90\x8b\xfe\x1f\xd5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x00q=\xb3\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TD\xde\xfe\x06\xd6\x01\x01}\xc2\x14\x00\x00\x03\x00\xb9\xa3\xfe\x04\xd7\x01\x01\x98\x00\x00\x80\x8a$\xcb\xfe\x02\xd8\x01\x01*\x00\x00\xa2\xdb'b'\xfe\x1e\xd9\x01\x01\x18P\xbf\xfa\x0e\x00\x00\x00\x00T\xa6\x02\x18\x15\xe8\xb8\xfdXf\n\x00F\x00\xff\xff\x02\x00|J\x03\x0cO/\xfe\x1a\xda\x01\x01>\x85\xeb\xf1\xbf{\x14n\xbf.\xe4N?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00`\x00\x00\x00W\x11\xfe\x08\xdb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xed\x8d\xfe\x1c\xdc\x01\x01\x1e \xd6\x03\x00\x98\x1a\xa1\xbd>\xc0\xf6\xbc\xa3)R>Y\xb81>\xf5C\xd1\xbd\xce\xbb\x17\xbd\x93<\xfe\x18\xdd\x01\x01\xb2B\x05\xa9\xbd92\x08\xbd\x8b2X>\xaeG(DT\xa6\x02\x18\x15\xe8\xb8\xfd\xd7\x02\xfe\x1c\xde\x01\x01\xa3\x14\xbf\x8d\xb9g\xf5\x809\xbc\xf0g8\x00\x00\x00\x00\x00\x00\x00\x00\xba}1\x0b\x003\x00\xacv'b"\xfe\x03\xe8\x01\x01Ms\x00\x00\x9f\x88\xfe\x1c\xe9\x01\x01!z\xd6\x03\x00Q\xa6\x02\x18\x08\xe8\xb8\xfd\xfe[\n\x00n\x00\x00\x00\x07\x00\xe0\xff6\x00\x85\x04\x19\xf1\xfe\x1c\xea\x01\x01 \xe9\xd6\x03\x00\x86{\x84\xbe\x0b\xad\x8a?\x8d\x86X>\xf8H\xa2=\xe4?\xa8\xbe\xf2\xab\x0b\xbf\xe5<\xfe\x1a\xeb\x01\x01\x1b\x9a\xcf\xff\x0e\x00\x00\x00\x00\x15\x00\xfc\xff\xb5\xfb\xf2\x00\xfa\xff\xf4\xff\x16\x01\xaf\xffZ\x01\xee\xb2\xfe\x16\xec\x01\x01t\xfd\xd6\x03\x00\x19\x00\r\x00\xbf\xfb\xe3\x00\x03\x00\t\x00\x0c\x01J\xff\xf5\x01\xd7g\xfe\x16\xed\x01\x01\x81\xfd\xd6\x03\x00\x0f\x00\x0f\x00\xb7\xfb\xb6\x00\x03\x00\x14\x001\x03\x0c\x00\x85\x02\xcf\x84\xfe\x0e\xee\x01\x01\x1d\xfd\xd6\x03\x00&\xbbiD\x00\x00\xcf>H\x10g\xb2\xfe\x0e\xef\x01\x01\x89\xfd\xd6\x03\x00\x14\xfeiD\x85\xeb2?Z\x15\x03\xa4\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00+\x01q=t\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x0b$\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce\xfe\x1e\xf4\x01\x01\x18\x90\xcc\xfd\x0e\x00\x00\x00\x00T\xa6\x02\x18\x13\xe8\xb8\xfdlf\n\x00F\x00\xff\xff\x0b\x00|J\x03\x0c\xcc\xbc\xfe\x1a\xf5\x01\x01>33\xb3>\x8f\xc2\xf5\xbc\x9b!Z?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00j\x00\x00\x00\x97?\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06\xfe\x1c\xf7\x01\x01\x1e%\xd7\x03\x00^\xad\xd1\xbc\x03\xd9\x1d\xbd\xc2\x88O>\x8e\x18y>E\x1b|<\xa8\x90\xbe:\x15\xb7\xfe\x18\xf8\x01\x01\xb2\\\xae\xf3\xbc)\xe61\xbda\xbcT>G\xc1(DT\xa6\x02\x18\x13\xe8\xb8\xfdO\xc4\xfe\x1c\xf9\x01\x01\xa37\xf8\x8e\xb9\x91m\x8099\xf6y8\x00\x00\x00\x00\x00\x00\x00\x00'\x88)<\xbc\x1c\xeb<\xb2\xa7\xfe\x03\xfa\x01\x01\xa5\xc6\x14\x00\xa2{\xfe\x0c\xfb\x01\x01\x02\xf0\x9bhy\xb1N\x05\x009\xd7\x03\x00\xddZ\xfe\x16\xfc\x01\x01\x88S\xa6\x02\x18\x05\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Rw\xfe\x12\xfd\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xe7n\xfe\x16\xfe\x01\x01\xc1\xb6\x1d\xf1<\xa0_\xbc<\xc3\x0cA;OY\xa7=\x00\x00\x00\x00?\x03qi\xfe\x16\xff\x01\x01\xe1\xa2E\x16?\x10\xc7:>\xf5\xe26<\\bF\x00\x1f\x87\xb8"b'\xfe\x12\x00\x01\x01\xfc`\xd7\x03\x004\x00\x01\x00ARMMASK\x00Wr\xde=\xfe\t\x01\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\x9a\xf7\xfe\t\xdf\n\x00m\x00\x00\x00\x00\x00\xd7\x00\x00\x00\xda\x0f\xfe\x03\x02\x01\x01Ms\x00\x00\xaf\xb6\xfe\x15\x03\x01\x01$\xab\xa6\x01\x0f<\x06\xf6\x05\x1d\x06\xfa\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00]\xff\xfe\x16\x04\x01\x01#v\xd7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\tN'b'\xfe\x14\x05\x01\x01J\xcc\xccL>\xcc\xccL>\xaeGa>=\n\x17?\x0b\x001\x00\x934\xfe\x03\x06\x01\x01Ms\x00\x00q\xa0\xfe\x1a\x07\x01\x01\x1b\x13~\x03\x0f\x00\x00\x00\x00\x1f\x00\xf0\xff3\xfc\x95\x00\x83\x00"\x00\x19\x01\xbf\xff]\x01e{\xfe\x16\x08\x01\x01t\xef\xd7\x03\x00 \x00\xf8\xff;\xfc\x90\x00\x83\x00\x17\x00\x0c\x01]\xff\xfe\x01P\xc0\xfe\x16\t\x01\x01\x81\xef\xd7\x03\x00\x12\x00\xff\xff/\xfc\xab\x00^\x00\x11\x00E\x03*\x00w\x02\xde\x95\xfe\x0e\n\x01\x01\x1d\xef\xd7\x03\x00\x9d\xabiD\xa4p%>H\x10_\xe2\xfe\x0e\x0b\x01\x01\x89\xef\xd7\x03\x00\xfd\xeeiD\xb8\x1e\xed>[\x15s4\xfe\x1f\x0c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb0\x00q=\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xf8\xe7\xfe\x06\r\x01\x01}\xcb\x14\x00\x00\x03\x00\xc2\x8e\xfe\x04\x0e\x01\x01\x98\x00\x00\x80\x8a3$\xfe\x02\x0f\x01\x01*\x00\x00h\xe8\xfe\x1e\x10\x01\x01\x18\xb8\xdd\x00\x0f\x00\x00\x00\x00X\xa6\x02\x18\x08\xe8\xb8\xfd\x02g\n\x00F\x00\xff\xff\x13\x00|J\x03\x0c\xcaJ\xfe\x1a\x11\x01\x01>\xf5(\xfc?ff\xc6?\x17+;?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00t\x00\x00\x005\x1e\xfe\x08\x12\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\xfe\x1c\x13\x01\x01!C\xd7\x03\x00W\xa6\x02\x18\xfe\xe7\xb8\xfd\x8a\\\n\x00\xfa\x00\x00\x00\x15\x00\xdf\xff:\x00\x99\x04g\xe5\xfe\x1c\x14\x01\x01 \x03\xd8\x03\x00H\xc6H\xbe3\x84\x7f?\x8d\xca\x8e=j\x91^>\x82\xcc\xad\xbe)\x8e\x16\xbfvX'b'\xfe\x1c\x15\x01\x01\x1e,\xd8\x03\x00i%`<\x10*\xa0\xbc\x94\x11S>\x8em\x06>\xfb&,>\xa3\x8ez;\xc2\xb1\xfe\x18\x16\x01\x01\xb2\xc6\xfd9<\x89x\xd8\xbc\x03\tX>Rx)DX\xa6\x02\x18\x08\xe8\xb8\xfd1\xdb\xfe\x1c\x17\x01\x01\xa3p\x0e\x90\xb9\x97*\x7f9\xc3`\x878\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\x98=\n\xd7>33\xb3>\x85\xeb\x11?\x0c\x001\x00\x9a\x05\xfe\x1a \x01\x01\x1b\xfc-\x07\x0f\x00\x00\x00\x00\x03\x00\xe5\xff%\xfc(\x00\x86\x00\x00\x00\x15\x01\xc6\xffa\x01\xa1m\xfe\x16!\x01\x01t\xe0\xd8\x03\x00\x08\x00\xf9\xff0\xfc\x10\x00\x88\x00\x13\x00\x02\x01a\xff\x02\x02\xf1\xa0\xfe\x16"\x01\x01\x81\xe0\xd8\x03\x00\x00\x00\x00\x00$\xfc\n\x00\x8e\x00\x07\x00\x1c\x03E\x00g\x02\xa5\x85\xfe\x0e#\x01\x01\x1d\xe0\xd8\x03\x00\xab\xa5iD\xd7\xa3\x8c=H\x10\xeb\x84\xfe\x0e$\x01\x01\x89\xe0\xd8\x03\x00=\xeaiD\xb8\x1e\xc7>[\x15Kk\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1b\x01q=\x1b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8c\xef\xfe\x06&\x01\x01}\xc5\x14\x00\x00\x03\x00p\xa8\xfe\x04\'\x01\x01\x98\x00\x00\x80\x8a=\xe1\xfe\x02(\x01\x01*\x00\x00\xf3L\xfe\x03)\x01\x01Ms\x00\x003\xa7\xfe\x1e*\x01\x01\x18\xf0\x03\x07\x0f\x00\x00\x00\x00\\\xa6\x02\x18\x02\xe8\xb8\xfdfg\n\x00F\x00\xff\xff*\x00\x82s\x03\x0c\\\xba\xfe\x1a+\x01\x01>ff6@\xd7\xa3@@\x8f\xeb\x1d?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00|\x00\x00\x00\\G'b'\xfe\x08,\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00-\xdf\xfe\x1c-\x01\x01!\xd6\xd8\x03\x00_\xa6\x02\x18\xf5\xe7\xb8\xfd\x02]\n\x00r\x01\x00\x00\x17\x00\xe3\xff8\x00\xc2\x04W\x08\xfe\x1c.\x01\x01 \t\xd9\x03\x00\x84?\xde\xbdg\x8bk?\x8e\xdcZ\xbd\x18\xebp>n\xb9\x97\xbet\x1b\x10\xbf6f\xfe\x1c/\x01\x01\x1e0\xd9\x03\x00\n)\xeb\xb7j\xff<\xf0,\x04>)\x9b\xe8\xbb\x99\xdd\xfe\x180\x01\x01\xb2\xad\xf6\xe1<+t\x9d<\x06z_>)\x8c)D\\\xa6\x02\x18\x02\xe8\xb8\xfd\xff\x08\xfe\x1c1\x01\x01\xa3b/\x91\xb9[\xaf|9\x0bL\x928\x00\x00\x00\x00\x00\x00\x00\x00\x02\xe8\xb9<\xba{\xb0<\xd0<\xfe\x032\x01\x01\xa5\xc8\x14\x00OV\xfe\x0c3\x01\x01\x020\x8bpy\xb1N\x05\x00D\xd9\x03\x00(\x04\xfe\x164\x01\x01\x88`\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb7\xac\xfe\x165\x01\x01\xc1E\xc0\xc0<\xe2\xce\xe0<\xa1\x8c\x14[\x15]\xf6\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00A\x01\x19=K\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xfe\xa5\xfe\x06?\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e0\xfe\x04@\x01\x01\x98\x00\x00\x80\x8a\x85\x19\xfe\x02A\x01\x01*\x00\x00O\xa9\xfe\x1eB\x01\x01\x18\x18\x15\n\x0f\x00\x00\x00\x00a\xa6\x02\x18\xfc\xe7\xb8\xfd\xc0g\n\x00F\x00\xff\xff3\x00\xe0y\x03\x0c\x92\x86\xfe\x1aC\x01\x01>\xcc\xccL@\xd7\xa3P@\x87\xa0\x02?\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x7f\x00\x00\x00y{\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$\xfe\x14E\x01\x01J\\\x8f\x02?\\\x8f\x02?\xd7\xa3\xf0>\\\x8f\x02?\x0c\x001\x00\xae\x1a\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5\xfe\x1cG\x01\x01!\x9f\xd9\x03\x00e\xa6\x02\x18\xed\xe7\xb8\xfdz]\n\x00\xea\x01\x00\x00\x11\x00\xe6\xff3\x00\xcb\x04;\x85\xfe\x1cH\x01\x01 \r\xda\x03\x00\xb9\x9c\x08\xbd\xc5fZ?aI,\xbePF0>Es\x87\xbe\x8a\x00\x03\xbf\xcd\x85"b"\xfe\x1cI\x01\x01\x1e5\xda\x03\x00\xc6\xa9\x10=\xeeq\x1d=\xd9\xdd[>\x10\xc1|=\xdb\xa7\x15=-\xfb+<\x12h\xfe\x18J\x01\x01\xb2q\xee\t=n\xf3\t=\xf4\xa9`>\xae\xb7)Da\xa6\x02\x18\xfc\xe7\xb8\xfd\x93P\xfe\x1cK\x01\x01\xa30Y\x92\xb9\xd3qy9\xda>\x9d8\x00\x00\x00\x00\x00\x00\x00\x00\xee\x9a\xf6<\xdd\xf7T<\xac\x9a\xfe\x03L\x01\x01\xa5\xc8\x14\x00;\xee\xfe\x0cM\x01\x01\x02\xd0\x82ty\xb1N\x05\x00J\xda\x03\x00\x1f[\xfe\x16N\x01\x01\x88g\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00'\xcf\xfe\x16O\x01\x01\xc1^`)=in\xce<\xdd\x1ed;\xb9\xabn<\x00\x00\x00\x00?\x03\xcc\xa7\xfe\x03P\x01\x01/\xff\x00\x00\x9f\xfb\xfe\x03Q\x01\x01Ms\x00\x00\xf6\x02"b'\xfe\x15R\x01\x01$\x1b\x9c\r\x0f\xee\x05\xff\x05@\x06\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xb9\xfe\x16S\x01\x01#\x86\xda\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1bl\xfe\x1aT\x01\x01\x1bl\x86\x0e\x0f\x00\x00\x00\x00\x0f\x00\xf5\xffD\xfc;\x00\xf4\xff\x1b\x00\x02\x01\xd1\xffp\x01\r\xd9\xfe\x16U\x01\x01t\xc2\xda\x03\x00\x12\x00\xf5\xffL\xfcL\x00\xf7\xff\x0e\x00\xee\x00l\xff\x12\x02\x87\xef\xfe\x16V\x01\x01\x81\xc2\xda\x03\x00\x08\x00\xf4\xff4\xfcF\x00\xe6\xff\x12\x00\x12\x03;\x00\x87\x02\x8d\x11\xfe\x0eW\x01\x01\x1d\xc2\xda\x03\x00\x15\x9fiD\xf6(\x0c\xbdI\x10%\xab\xfe\x0eX\x01\x01\x89\xc2\xda\x03\x00\x8e\xe1iD\xd7\xa3\x81>\\\x15r\x0e\xfe\x1fY\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1e\x01\x19=A\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x07\xe0\xfe\x06Z\x01\x01}\xc5\x14\x00\x00\x03\x00E\x14\xfe\x04[\x01\x01\x98\x00\x00\x80\x8a\xdcO\xfe\x02\\\x01\x01*\x00\x00\xc92\xfe\x1e]\x01\x01\x18@&\r\x0f\x00\x00\x00\x00f\xa6\x02\x18\xf6\xe7\xb8\xfd$h\n\x00F\x00\xff\xff-\x00\x04|\x03\x0c@p\xfe\x1a^\x01\x01>\xaeGa@\xa4pM@\n\x9f\xc9>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x81\x00\x00\x00\x83\x93\xfe\x08_\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfb]\xfe\x03`\x01\x01Ms\x00\x00\xc1n'b"\xfe\x14a\x01\x01J\x1e\x85\xeb>\x1e\x85\xeb>\x99\x99\x19?\xaeG\xe1>\x0c\x00/\x00\x0e\xf1\xfe\x1cb\x01\x01!h\xda\x03\x00j\xa6\x02\x18\xe6\xe7\xb8\xfd\xf2]\n\x00b\x02\x00\x00\n\x00\xea\xff*\x00\xda\x04\x8dc\xfe\x1cc\x01\x01 \x12\xdb\x03\x00s\x04\xfb<.\xf3K?\x83\xf8\x95\xbe\x9d#\xdc=ZDe\xbe\xac2\xda\xbe\x11\x14\xfe\x1cd\x01\x01\x1e:\xdb\x03\x00\x87===:\xa8\x15=\xda\xb1^>\xba\xee\xcd;)f\x17\xbc\xef\x8c\xa5<\xf1X\xfe\x18e\x01\x01\xb2\xd6\x1d8=\xa8\xe9\x02=\xa9\xa0c>\x85\xbb)Di\xa6\x02\x18\xf2\xe7\xb8\xfd`\xc9\xfe\x12f\x01\x01\xfcL\xdb\x03\x004\x00\x01\x00ARMMASK\x00Wr\xd1\xd2\xfe\tg\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03'\x1f\xfe\t\xe0\n\x00m\x07\x00\x00\x00\x00\xd2\x00\x00\x00\xf7\x01"b'\xfe\x1ch\x01\x01\xa39}\x93\xb9A0u9\xe6\xfc\xa78\x00\x00\x00\x00\x00\x00\x00\x00\x8b"\xdb<\x11\xf8\xf5;\xdb\x05\xfe\x03i\x01\x01\xa5\xc8\x14\x00\xaa\xcf\xfe\x0cj\x01\x01\x02X~xy\xb1N\x05\x00O\xdb\x03\x00x\xc1\xfe\x16k\x01\x01\x88k\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00wU\xfe\x16l\x01\x01\xc1\xea\xd7\xf8\xf5\xe26<\\bF\x00\x1f\xb2\xa6\xfe\x03n\x01\x01Ms\x00\x00\xcc^\xfe\x15o\x01\x01$\x17\x96\x11\x0f\xc6\x05\xf5\x05\\\x06\xf2\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00pO\xfe\x16p\x01\x01#\x8a\xdb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00>s'b'\xfe\x1aq\x01\x01\x1b;6\x12\x0f\x00\x00\x00\x00\x06\x00\xdb\xffH\xfc\xf7\xff\xe5\xff\xff\xff\x01\x01\xd4\xffq\x01\xa8B\xfe\x16r\x01\x01t\xb3\xdb\x03\x00\x0c\x00\xda\xffF\xfc\xf6\xff\xec\xff\x02\x00\xf3\x00p\xff\x13\x02\x0e\xc1\xfe\x16s\x01\x01\x81\xb3\xdb\x03\x00\x05\x00\xeb\xffJ\xfc\xf7\xff\xf0\xff\xf9\xff\x1d\x03H\x00\x80\x02\x11\xda\xfe\x0et\x01\x01\x1d\xb3\xdb\x03\x00\x82\x9eiD\xc2\xf50\xbdI\x10\xec\xa9\xfe\x0eu\x01\x01\x89\xb3\xdb\x03\x00\xd9\xe0iD\x00\x00x>]\x15\x86\xdb\xfe*v\x01\x01\x96s\xe7f\xbc\x07m\x01\x00I\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x19\x11\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x19=\x04\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xbb\x01\xfe\x06x\x01\x01}\xc6\x14\x00\x00\x03\x00\x83\xf5\xfe\x04y\x01\x01\x98\x00\x00\x80\x8a\x1f#\xfe\x02z\x01\x01*\x00\x00\x87\t\xfe\x1e{\x01\x01\x18\x803\x10\x0f\x00\x00\x00\x00i\xa6\x02\x18\xf2\xe7\xb8\xfdjh\n\x00F\x00\xff\xff!\x00\x99|\x03\x0c\xcd\x1f\xfe\x1a|\x01\x01>\x99\x99Y@p=:@Ge\x91>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x82\x00\x00\x00N\xeb\xfe\x08}\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x01\xe3\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05\xfe\x14\x7f\x01\x01J\xc2\xf5\xa8>\xc2\xf5\xa8>\x8f\xc25?{\x14\xae>\x0c\x00/\x00\xcb\x03'b'\xfe\x1c\x80\x01\x01!\xf9\xdb\x03\x00n\xa6\x02\x18\xe2\xe7\xb8\xfdj^\n\x00\xda\x02\x00\x00\x05\x00\xef\xff \x00\xe1\x04p\xae\xfe\x1c\x81\x01\x01 \x18\xdc\x03\x00v!\x8f=\x93\xe7B?t\x90\xd1\xbe\xd7@g=\x99\x96/\xbeD\xc1\xa4\xbe)\x87\xfe\x1c\x82\x01\x01\x1e@\xdc\x03\x00>\xff?=\xae\x85\xf6<\t\xfd^>\xc7\xd2)<\xef\xe9\xd6\xbbX_T\xbcB\xe1\xfe\x18\x83\x01\x01\xb2\xe7\xbe:=\x8e\x97\xd3<\xb72d>\xf6\xd8)Dm\xa6\x02\x18\xee\xe7\xb8\xfdR\xae\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`\xfe\x1c\x85\x01\x01\xa3_s\x94\xb9\x91!p9c\x8a\xb28\x00\x00\x00\x00\x00\x00\x00\x00\xe4$\x18=\xfa\x11\xd3;m6\xfe\x03\x86\x01\x01\xa5\xc5\x14\x00t\xed\xfe\x0c\x87\x01\x01\x02\xf8u|y\xb1N\x05\x00T\xdc\x03\x00\xa5`\xfe\x16\x88\x01\x01\x88o\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\x85\xfe\x16\x89\x01\x01\xc1\x9d\xb8~=a\x10\xe4<\xcf\x89)<\x016]<\x00\x00\x00\x00?\x03\xd2\xd9'b'\xfe\x15\x8a\x01\x01$W\x94\x15\x0f\xe1\x05\xee\x05L\x06\xf6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1,\xfe\x16\x8b\x01\x01#\x90\xdc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x000\xa8\xfe\x1a\x8c\x01\x01\x1b\xf6\xe1\x15\x0f\x00\x00\x00\x00\x13\x00\xe3\xffW\xfc\x1a\x00\x14\x00\xe9\xff\x06\x01\xd4\xffo\x01\xaa:\xfe\x16\x8d\x01\x01t\xa4\xdc\x03\x00\x15\x00\xed\xffw\xfc\x1e\x00#\x00\xea\xff\xf4\x00t\xff\x14\x02\xa7?\xfe\x16\x8e\x01\x01\x81\xa4\xdc\x03\x00\x11\x00\xe6\xffa\xfc\x1d\x00\n\x00\xe7\xff\n\x03I\x00\x84\x02k\xbd\xfe\x0e\x8f\x01\x01\x1d\xa4\xdc\x03\x00\x93\x9fiD\x99\x99\xd9\xbcJ\x10};\xfe\x0e\x90\x01\x01\x89\xa4\xdc\x03\x00\x01\xe1iD\xe1zz>^\x15I\xd9\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\x1d=\xd9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TaQ\xfe\x06\x92\x01\x01}\xc3\x14\x00\x00\x03\x00<\xaf\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12\xfe\x02\x94\x01\x01*\x00\x00>\xad\xfe\x1e\x95\x01\x01\x18\xa8D\x13\x0f\x00\x00\x00\x00o\xa6\x02\x18\xeb\xe7\xb8\xfd\ni\n\x00F\x00\xff\xff)\x00\xfc~\x03\x0c9~\xfe\x1a\x96\x01\x01>\x8f\xc2U@\x85\xebA@\x1c\x1bI>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x83\x00\x00\x00\xce\x15\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5\xfe\x03\x98\x01\x01Ms\x00\x00\xe6\x00'b'\xfe\x14\x99\x01\x01J=\nW>=\nW>\xcc\xccL?=\nW>\x0c\x000\x00R\xd1\xfe\x1c\x9a\x01\x01!\xc2\xdc\x03\x00q\xa6\x02\x18\xe0\xe7\xb8\xfd\xba^\n\x00*\x03\x00\x00\x02\x00\xf6\xff\x14\x00\xd5\x04k\x12\xfe\x1c\x9b\x01\x01 \x1d\xdd\x03\x00k\x18\xd8=\xe0\x88=?s\x88\xfa\xbe\xa9\xe5\xa8<\xc8\x8b\xd1\xbd\x1erU\xbet\xd8'b"\xfe\x1c\x9c\x01\x01\x1eE\xdd\x03\x00\x954R=\xe6\xc3\x11=ce\\>\x01=\x90\xbc\x06\x18\xee\x14\xce)Do\xa6\x02\x18\xeb\xe7\xb8\xfdd\x02\xfe\x03\x9e\x01\x01Ms\x00\x00W\x1d\xfe\x1c\x9f\x01\x01\xa3ME\x95\xb9c=j9]\xb5\xbc8\x00\x00\x00\x00\x00\x00\x00\x00\x11\xb9.='\xfc\x9d;\t\xda\xfe\x03\xa0\x01\x01\xa5\xc5\x14\x005F\xfe\x0c\xa1\x01\x01\x02\x98m\x80y\xb1N\x05\x00Y\xdd\x03\x00a\x96\xfe\x16\xa2\x01\x01\x88q\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00y\xb7\xfe\x16\xa3\x01\x01\xc1\x9c\xf4\x16=\xc2\x1c\xe0^\x15\xf4\xf6\xfe\x1f\xa9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00(\x01\x1d=\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xd1\x05\xfe\x06\xaa\x01\x01}\xc8\x145\x00\x03\x00^\x04\xfe\x04\xab\x01\x01\x98\x00\x00\x80\x8a\xc5e\xfe\x02\xac\x01\x01*\x00\x00\x98\xa5\xfe\x1e\xad\x01\x01\x18\xf8f\x19\x0f\x00\x00\x00\x00q\xa6\x02\x18\xea\xe7\xb8\xfd333@\x14\xae7@\x8a\xa2\x10>\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x84\x00\x00\x00\x98\xf1"b'\xfe\x08\xaf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00x\x17\xfe\x15\xb0\x01\x01$\x0c\xe1\x19\x0f\xf7\x05\x11\x06O\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\xa3\xfe\x16\xb1\x01\x01#\xaa\xdd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00V+\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90\xfe\x14\xb3\x01\x01J\x00\x00\x80>\x00\x00\x80>\xf5(\\?\x99\x99\x19>\x0c\x000\x00\xcd2'b'\xfe\x1c\xb4\x01\x01!\x8b\xdd\x03\x00s\xa6\x02\x18\xe0\xe7\xb8\xfd\xf6^\n\x00f\x03\x00\x00\xff\xff\xfd\xff\x0f\x00\xc6\x04;<\xfe\x1c\xb5\x01\x01 "\xde\x03\x00\xf4\xa6\xfd=\xb3\x9a>?\xd5+\x0c\xbfT\xb1\x9d\xbc\x99/\xfa\xbcr\x8d\x1e\xbet\x06\xfe\x1c\xb6\x01\x01\x1eJ\xde\x03\x00u\x00\x08=}\xf2&=\xb6=[>u\xd8\xb3\xbd\x83*E=Z\xa7\xb7;ut\xfe\x18\xb7\x01\x01\xb2A\xd1\x05=\r6\x16=hF`>\xc2\xd5)Ds\xa6\x02\x18\xeb\xe7\xb8\xfd\xb8\xd8\xfe\x03\xb8\x01\x01Ms\x00\x00\x16\xb6\xfe\x1c\xb9\x01\x01\xa3\xf8\xd4\x95\xb9:{c9\xc2\x9a\xc68\x00\x00\x00\x00\x00\x00\x00\x00Q\x18\x1c=\x88\x14\xb5;\xa0\xc9\xfe\x03\xba\x01\x01\xa5\xc8\x14\x00\x11\xb0\xfe\x0c\xbb\x01\x01\x028e\x84y\xb1N\x05\x00_\xde\x03\x00\x08\x07\xfe\x16\xbc\x01\x01\x88s\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa5T\xfe\x16\xbd\x01\x01\xc1\tz4=H!\x1a=\x01\x86~:\xa4)\x80;\x00\x00\x00\x00?\x03\xd7\x01'b'\xfe\x03\xbe\x01\x01/\xff\x00\x00q\xd3\xfe\x1a\xbf\x01\x01\x1b\xfe?\x1d\x0f\x00\x00\x00\x00\x12\x00\xd9\xff2\xfc\xdf\xff\x1a\x00\x10\x00\x02\x01\xd1\xffs\x01j6\xfe\x16\xc0\x01\x01t\x87\xde\x03\x00\x18\x00\xd9\xff?\xfc\xd9\xff!\x00\xfc\xff\xf0\x00o\xff\x13\x02\xce\x10\xfe\x16\xc1\x01\x01\x81\x87\xde\x03\x00\x0e\x00\xe2\xff:\xfc\xc6\xff"\x00\t\x00\n\x03G\x00q\x02\xbb\xf0\xfe\x0e\xc2\x01\x01\x1d\x87\xde\x03\x00K\x9eiDR\xb8>\xbdJ\x10\xfd\xd0\xfe\x0e\xc3\x01\x01\x89\x87\xde\x03\x00u\xe1iDG\xe1\x80>`\x15\x8c\x1a\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00V\x01\x1d=\xc3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8bw\xfe\x06\xc5\x01\x01}\xc2\x14\x00\x00\x03\x00O,\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy\xfe\x02\xc7\x01\x01*\x00\x00\x9fw\xfe\x1e\xc8\x01\x01\x18\x00*\x1c\x0f\x00\x00\x00\x00s\xa6\x02\x18\xeb\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\x95d\xfe\x1a\xc9\x01\x01>\xa4p\r@\x14\xae7@\x85w\xc5=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\x9b\xf5\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2\xfe\x15\xcb\x01\x01$\xb4\xdb\x1d\x0f\xf0\x05\x01\x06C\x06\xf3\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xdd\xfe\x16\xcc\x01\x01#\xaf\xde\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00_\xd1'b'\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9\xfe\x14\xce\x01\x01J{\x14.>{\x14.>fff?\xaeG\xe1=\x0c\x000\x00\xc5\xb4\xfe\x1c\xcf\x01\x01!\t\xdf\x03\x00s\xa6\x02\x18\xe2\xe7\xb8\xfd\x1e_\n\x00\x8e\x03\x00\x00\xf8\xff\xff\xff\n\x00\xc5\x04\x15*\xfe\x1c\xd0\x01\x01 (\xdf\x03\x00E\xf2\x04>OrC?\x14m\x15\xbf\xf2@\xb0\xbd\x87<:\xbc\xdb!\xd8\xbd\x10@\xfe\t\xe1\n\x00m\x08\x00\x00\x00\x00\xd8\x00\x00\x00i\x9e'b'\xfe\x12\xd1\x01\x01\xfc:\xdf\x03\x004\x00\x01\x00ARMMASK\x00Wr\x06?\xfe\t\xd2\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xc2g\xfe\x03\xd3\x01\x01Ms\x00\x00{\xc2\xfe\x1c\xd4\x01\x01\x1eP\xdf\x03\x00\x82x\xd9<\x01\x8d>=lbZ>RQ\xb4\xbc\\\xedN=\x8a\xd13<\xc0\x97\xfe\x18\xd5\x01\x01\xb2\xedJ\xd5<#\x03.=9\x84_>p\xcd)Dt\xa6\x02\x18\xec\xe7\xb8\xfd\xbf\xac\xfe\x1c\xd6\x01\x01\xa3\x89\x16\x96\xb9^\xd1[9\xd6,\xd08\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xe0\x10=\x05x\xb0;\x94\xfe\xfe\x03\xd7\x01\x01\xa5\xc5\x14\x00BR\xfe\x0c\xd8\x01\x01\x02\xd8\\\x88y\xb1N\x05\x00d\xdf\x03\x00\xa4\xc9\xfe\x16\xd9\x01\x01\x88s\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa1C\xfe\x12\xda\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x8a{\xfe\x16\xdb\x01\x01\xc1\xd7\xb5Y=\xf2\xb1\x1b=\xd2\x1a\x01<.\xf8\xc0<\x00\x00\x00\x00?\x03%\xb1\xfe\x16\xdc\x01\x01\xe1}?\x15?{\x14.>\xf5\xe26<\\bF<0r\x15?\x00\x1fD\xfd\xfe\x1a\xdd\x01\x01\x1b\xac\xef \x0f\x00\x00\x00\x00\x03\x00\xe5\xff \xfc\xf0\xff\x1b\x00\xf3\xff\xfc\x00\xcf\xffu\x01\n\xba\xfe\x16\xde\x01\x01tx\xdf\x03\x00\x04\x00\xe5\xff6\xfc\xdf\xff%\x00\x03\x00\xed\x00h\xff\x11\x02t\x85\xfe\x16\xdf\x01\x01\x81x\xdf\x03\x00\x00\x00\xe2\xff&\xfc\xf4\xff\x1a\x00\xfe\xff\x1f\x031\x00\x87\x02\xab\xf4\xfe\x0e\xe0\x01\x01\x1dx\xdf\x03\x00r\x9eiD\xb8\x1e5\xbdJ\x10&\xfc\xfe\x0e\xe1\x01\x01\x89x\xdf\x03\x00F\xe0iD\xcc\xccn>_\x15\xf4\xdf\xfe\x1f\xe2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe3\x00\x1d=\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Txi\xfe\x06\xe3\x01\x01}\xc2\x14\x00\x00\x03\x00\xb2;\xfe\x04\xe4\x01\x01\x98\x00\x00\x80\x8a\x8e\x15\xfe\x02\xe5\x01\x01*\x00\x00\xa7#\xfe\x1e\xe6\x01\x01\x18(;\x1f\x0f\x00\x00\x00\x00t\xa6\x02\x18\xec\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\x07\x8b\xfe\x1a\xe7\x01\x01>\xebQ\xf8?G\xe1\x1a@R;\x94=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\xbc$\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl'b'\xfe\x15\xe9\x01\x01$\x14\xdc!\x0f\x00\x06\xfb\x05-\x06\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00~%\xfe\x16\xea\x01\x01#\xb5\xdf\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9e-\xfe\x03\xeb\x01\x01Ms\x00\x00O\x02'b'\xfe\x14\xec\x01\x01J\xebQ8>\xebQ8>{\x14n?\x8f\xc2u=\x0c\x000\x00\xa1\x8d\xfe\x1c\xed\x01\x01!\xd3\xdf\x03\x00r\xa6\x02\x18\xe5\xe7\xb8\xfd2_\n\x00\xa2\x03\x00\x00\xf0\xff\xfe\xff\x06\x00\xbd\x04h\xd8\xfe\x1c\xee\x01\x01 -\xe0\x03\x00S\xcf\xf5=\xc8\xa4I?\xa4\xe5\x1b\xbf\xf9\xd9$\xbe\x1f@\xae\xbcg\xb7\x8b\xbd\xce`\xfe\x03\xef\x01\x01Ms\x00\x00\x91\x14\xfe\x1c\xf0\x01\x01\x1eU\xe0\x03\x00\xf0\x87\x87<\xdd\xee;=8\x1cX>N\x02\xfc<\xbb\xc4D\xbc\xc5\xcb\x81\xbc\\s\xfe\x18\xf1\x01\x01\xb2\xfa[z<;t/=\xde(]>{\xd4)Du\xa6\x02\x18\xed\xe7\xb8\xfdIN'b'\xfe\x1a\xf2\x01\x01\x1b\xd3\x9e$\x0f\x00\x00\x00\x00\x0c\x00\xe1\xff2\xfc\xf6\xff\xf5\xff\x04\x00\x01\x01\xc9\xffr\x01\x16\x8b\xfe\x16\xf3\x01\x01tj\xe0\x03\x00\x08\x00\xe1\xff4\xfc\x02\x00\xfd\xff\xef\xff\xec\x00f\xff\x12\x02\x95\xd4\xfe\x16\xf4\x01\x01\x81j\xe0\x03\x00\x06\x00\xee\xff#\xfc\xe9\xff\xf5\xff\xfd\xff\x19\x039\x00\x8f\x02\x17\x19\xfe\x0e\xf5\x01\x01\x1dj\xe0\x03\x00)\x9ciD\x14\xae\xa3\xbdJ\x10\xb0\xa5\xfe\x0e\xf6\x01\x01\x89j\xe0\x03\x00\x8b\xe0iD\xb8\x1es>a\x15S\x18\xfe\x1f\xf7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xee<\xdb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T$`\xfe\x06\xf8\x01\x01}\xc6\x14\x00\x00\x03\x00\x98g\xfe\x04\xf9\x01\x01\x98\x00\x00\x80\x8a\xc8\xe7\xfe\x02\xfa\x01\x01*\x00\x00\x9a\x8f\xfe\x1e\xfb\x01\x01\x188P"\x0f\x00\x00\x00\x00u\xa6\x02\x18\xed\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x12\x00\xf8\x83\x03\x0c\te\xfe\x1a\xfc\x01\x01>\xd7\xa3\xf0?\x99\x99\xd9?\xd7\xef9=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x88\x00\x00\x00\xfc\xa5\xfe\x08\xfd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa3%\xfe\x1c\xfe\x01\x01\xa3\x0e\x08\x96\xb9\xf4\xa8R9\xd16\xda8\x00\x00\x00\x00\x00\x00\x00\x00\xbel\x07=: \x86;^\x98\xfe\x03\xff\x01\x01\xa5\xc8\x14\x00\x81B\xfe\x0c\x00\x01\x01\x02\x98\xa2\x8cy\xb1N\x05\x00~\xe0\x03\x00\xbf\xd4\xfe\x16\x01\x01\x01\x88r\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00l\xdf\xfe\x16\x02\x01\x01\xc1\x8fC\x7f= _\x13=\x05e\xdc;T\x83\xa2<\x00\x00\x00\x00?\x03\x9f]\xfe\x15\x03\x01\x01$\x98\xd7%\x0f\x11\x06\x17\x06/\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa3\xfe\x16\x04\x01\x01#\xba\xe0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc9\xae\xfe\x03\x05\x01\x01Ms\x00\x00\xa1*'b'\xfe\x14\x06\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\n\xd7#=\x0b\x000\x00\xd7b'b'\xfe\x1c\x07\x01\x01!\x9c\xe0\x03\x00p\xa6\x02\x18\xe7\xe7\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xe9\xff\xfd\xff\x04\x00\xa0\x04-\xf4\xfe\x1c\x08\x01\x01 2\xe1\x03\x00\xec\x83\xc3=\xdb\x94N?\xf3\x0f!\xbfaPl\xbe\xc8\x1f\x1f\xbd\xe0c0\xbd-\xcb\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11\xfe\x1a\n\x01\x01\x1b\xbdI(\x0f\x00\x00\x00\x00\x0b\x00\xda\xff\x13\xfc\x19\x00@\xff\t\x00\x00\x01\xcd\xffr\x01\xc3\xf6\xfe\x16\x0b\x01\x01tZ\xe1\x03\x00\n\x00\xe1\xff\x1e\xfc\x11\x00X\xff\xe8\xff\xf0\x00i\xff\x12\x02S\xd9\xfe\x16\x0c\x01\x01\x81Z\xe1\x03\x00\x0e\x00\xea\xff\x19\xfc\xe4\xff\x1d\xff\xfa\xff\xfb\x02A\x00\x84\x02ik\xfe\x0e\r\x01\x01\x1dZ\xe1\x03\x00\x9b\x9biD\xa4p\xb5\xbdJ\x10\xd3\xc7\xfe\x0e\x0e\x01\x01\x89Z\xe1\x03\x00\xc9\xdfiD\xc2\xf5f>a\x15\xf8\xc7\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x17\x01\xee<\xd1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T6B\xfe\x06\x10\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xce\xfe\x04\x11\x01\x01\x98\x00\x00\x80\x8a\x8fM\xfe\x02\x12\x01\x01*\x00\x00\xees\xfe\x1e\x13\x01\x01\x18`a%\x0f\x00\x00\x00\x00u\xa6\x02\x18\xf1\xe7\xb8\xfd2i\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\xa3j\xfe\x1a\x14\x01\x01>\xd7\xa3\x00@\x99\x99Y?\n\xa5\xb9<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\x83\xfc\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18\xfe\x1c\x16\x01\x01\x1en\xe1\x03\x00\xa0\xf7\xa1<\xd0"\xbc<\r\xc0R>H\xf6\x10=;\x9e5\xbe.\xe4\x1a;@\x85\xfe\x18\x17\x01\x01\xb2\xc7\x93\x92<\xa5I\xae<9"X>\xae\xe7)Dv\xa6\x02\x18\xef\xe7\xb8\xfd\xc2M\xfe\x1c\x18\x01\x01\xa3|\xaa\x95\xb9f6I9^i\xe38\x00\x00\x00\x00\x00\x00\x00\x00\x96\t\xd8<\xd8+Y;\x90\x15\xfe\x03\x19\x01\x01\xa5\xc6\x14\x00\x91\xe9\xfe\x0c\x1a\x01\x01\x02P\x96\x90y\xb1N\x05\x00\x82\xe1\x03\x00*\xa8\xfe\x16\x1b\x01\x01\x88o\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x190\xfe\x16\x1c\x01\x01\xc1x\xa1{=\xd4\x98\x17=w\x92"<\xd6sh<\x00\x00\x00\x00?\x03\xad\xd1'b'\xfe\x03\x1d\x01\x01Ms\x00\x00e\\\xfe\x15\x1e\x01\x01$\x8c\xd2)\x0f\x17\x06)\x066\x06\xbe\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00>\xb9\xfe\x16\x1f\x01\x01#\xbf\xe1\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x004\xc1'b'\xfe\x14 \x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xebQx?\n\xd7\xa3<\x0b\x001\x00\xcd\xa0\xfe\x03!\x01\x01Ms\x00\x00\x8f\x8a\xfe\x1c"\x01\x01!-\xe2\x03\x00m\xa6\x02\x18\xe9\xe7\xb8\xfdZ_\n\x00\xca\x03\x00\x00\xea\xff\xfd\xff\x02\x00\x8a\x04h\\\xfe\x1c#\x01\x01 7\xe2\x03\x00<\x88w=\t\xddR?\x98\xa5#\xbf+\x1bk\xbe\x8az\n\xbd\x1d\xb2\xb2\xbc@2\xfe\x1a$\x01\x01\x1b\xc1\xf8+\x0f\x00\x00\x00\x00\x06\x00\xda\xff\x1c\xfc\x02\x00\x1a\x00\xed\xff\t\x01\xcc\xffk\x01"\x1e\xfe\x16%\x01\x01tK\xe2\x03\x00\x06\x00\xe0\xff+\xfc\xf4\xff\x10\x00\xfb\xff\xf9\x00l\xff\x0b\x02,3\xfe\x16&\x01\x01\x81K\xe2\x03\x00\x03\x00\xec\xff\x17\xfc\xe6\xff\xf7\xff\xfe\xff,\x03F\x00v\x02\xfa\xaf\xfe\x0e\'\x01\x01\x1dL\xe2\x03\x00e\x9eiD\xebQ8\xbdJ\x10V\x82\xfe\x0e(\x01\x01\x89L\xe2\x03\x00\xd3\xdeiD\x99\x99W>`\x15\xf3\xa8\xfe\x1f)\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x00\xee<\xeb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xdc\xa3\xfe\x06*\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0d'b'\xfe\x04+\x01\x01\x98\x00\x00\x80\x8a\x12\xa1\xfe\x02,\x01\x01*\x00\x00\x85#\xfe\x1e-\x01\x01\x18\xc8\x7f+\x0f\x00\x00\x00\x00t\xa6\x02\x18\xf2\xe7\xb8\xfd\x14i\n\x00F\x00\xff\xff\x08\x00\xf8\x83\x03\x0c`\xf7\xfe\x1a.\x01\x01>\\\x8f\x02@p=\n?po\xc0<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00{{\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1\xfe\x1c0\x01\x01\x1et\xe2\x03\x00\xa4\xcb\xdcP>\xeer\r\xbc\xe2\xe5\xfb<\x83H\x0e=I\x82\xfe\x181\x01\x01\xb2\xa5<\xd0\n\xd7)Dt\xa6\x02\x18\xf2\xe7\xb8\xfd\x05t\xfe\x1c2\x01\x01\xa3O\xeb\x94\xb9n\xab>9\xed\xc0\xec8\x00\x00\x00\x00\x00\x00\x00\x00\x01c\xb2<\x95z\xb8;\xc8&\xfe\x033\x01\x01\xa5\xc5\x14\x00\x7f\\\xfe\x0c4\x01\x01\x02\xf0\x8d\x94y\xb1N\x05\x00\x88\xe2\x03\x00Z\x85\xfe\x165\x01\x01\x88l\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb9\xf2\xfe\x166\x01\x01\xc1\xb2\xcdx=i\xe9\x18=\xdf\n\x82;\xcd\xc4\xbc<\x00\x00\x00\x00?\x03\xa3W\xfe\x037\x01\x01Ms\x00\x00F\xcc\xfe\x038\x01\x01/\xff\x00\x00"\x05'b'\xfe\x159\x01\x01$\xd6\xd0-\x0f\x03\x06\x1e\x069\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\xfa\xfe\x16:\x01\x01#\xc4\xe2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00=\xc0\xfe\x14;\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xebQx?\x8f\xc2\xf5<\x0b\x000\x00 \xc2\xfe\t\xe2\n\x00m\x02\x00\x00\x00\x00\xda\x00\x00\x00\xb8:'b'\xfe\x12<\x01\x01\xfc\'\xe3\x03\x004\x00\x01\x00ARMMASK\x00Wr;\xf8\xfe\t=\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03(\x98\xfe\x1a>\x01\x01\x1b\xb7\xa9/\x0f\x00\x00\x00\x00\x02\x00\xe4\xff"\xfc\x13\x00\xa5\xff(\x00\x0b\x01\xce\xffh\x01\xa5w\xfe\x16?\x01\x01t=\xe3\x03\x00\n\x00\xd7\xffA\xfc\x19\x00\xc4\xff\xfb\xff\xf7\x00l\xff\x08\x02\x93Y\xfe\x16@\x01\x01\x81=\xe3\x03\x00\xfe\xff\xec\xff\'\xfc\xed\xff\x9d\xff\x17\x001\x037\x00\x86\x02j\xa1\xfe\x0eA\x01\x01\x1d=\xe3\x03\x00w\x9fiD\x14\xae\xe7\xbcI\x10`P\xfe\x0eB\x01\x01\x89=\xe3\x03\x00F\xe0iD\xcc\xccn>_\x15\xc4\xf6\xfe\x1fC\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xce<\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xff\xdb\xfe\x06D\x01\x01}\xc2\x14\x00\x00\x03\x00\xc5\xeb\xfe\x03E\x01\x01Ms\x00\x00PO\xfe\x04F\x01\x01\x98\x00\x00\x80\x8a\x9a\xbd\xfe\x02G\x01\x01*\x00\x00\x82\xf1\xfe\x1eH\x01\x01\x18\xf0\x90.\x0f\x00\x00\x00\x00r\xa6\x02\x18\xf5\xe7\xb8\xfd\x00i\n\x00F\x00\xff\xff\t\x00\xf8\x83\x03\x0c\x06\xf1\xfe\x1aI\x01\x01>\x85\xeb\xf1?\x1e\x85\xeb>{\x90\xa2<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\xac\xe8\xfe\x08J\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x002\x14\xfe\x1cK\x01\x01!\xf6\xe2\x03\x00j\xa6\x02\x18\xec\xe7\xb8\xfdZ_\n\x00\xca\x03\x00\x00\xea\xff\xff\xff\x02\x00\x8f\x04`\xea\xfe\x1cL\x01\x01 R\xe3\x03\x00\x88^\xeb<\x01QY?\x18\xd2#\xbf\xa0\xf2e\xbeP{\x88\xbcE\xda\xbb\xbc\xfe\x15\xfe\x1cM\x01\x01\x1ey\xe3\x03\x00\n\xd6\xfe\xea\xe1\x98=(\xedK\xbae^\xb6<,l\xfe\x18N\x01\x01\xb2\x87\xb8\xea<)Q\x14<\x90\x89U>\xd7\xc3)Dr\xa6\x02\x18\xf5\xe7\xb8\xfdB\xd3'b'\xfe\x1cO\x01\x01\xa3\xdb\xe1\x93\xb9\xeb:39\xf8E\xf68\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xa9\x9c<\x01\xf6v;1u\xfe\x03P\x01\x01\xa5\xc5\x14\x00\xae\x05\xfe\x0cQ\x01\x01\x02x\x89\x98y\xb1N\x05\x00\x8e\xe3\x03\x00O\xcc\xfe\x16R\x01\x01\x88i\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xad1\xfe\x16S\x01\x01\xc1R\x94n=r(/=U\xf8\xee;+\x06\x84<\x00\x00\x00\x00?\x038\xd0\xfe\x16T\x01\x01\xe1\xe2z\x14?\xff\x00#>\xf5\xe26<\\bF<\xb1\xe0\x1f?\x00\x1f\xfe\x9a\xfe\x03U\x01\x01Ms\x00\x00(\x14\xfe\x15V\x01\x01$\xd1\xcd1\x0f\x15\x06)\x06=\x06\x07\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xe8\xfe\x16W\x01\x01#\xca\xe3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0c\x90'b"\xfe\x14X\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\x8f\xc2\xf5<\x0b\x001\x00J\x81\xfe\x1aY\x01\x01\x1b\x92X3\x0f\x00\x00\x00\x00\xfd\xff\xd5\xff\x0f\xfc\x04\x00\x10\x00\x00\x00\x11\x01\xd0\xfff\x01$:\xfe\x16Z\x01\x01t/\xe4\x03\x00\xfe\xff\xd4\xff\x17\xfc\xf2\xff\t\x00\x07\x00\xf9\x00h\xff\x04\x02\xb5\xf3\xfe\x16[\x01\x01\x81/\xe4\x03\x00\xfb\xff\xe8\xff\t\xfc\xfb\xff\xfa\xff\x0f\x00\n\x03\\\x00h\x02/e\xfe\x0e\\\x01\x01\x1d/\xe4\x03\x00/\x9fiD\x8f\xc2\x05\xbdJ\x10U'\xfe\x0e]\x01\x01\x89/\xe4\x03\x00\xc5\xe2iD)\\\x8b>a\x15\xf2\xa8\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xce<\xe3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Tn!\xfe\x06_\x01\x01}\xc5\x14\x00\x00\x03\x00\x81\x1f\xfe\x04`\x01\x01\x98\x00\x00\x80\x8a\xbc\xee\xfe\x03a\x01\x01Ms\x00\x00~\xef\xfe\x02b\x01\x01*\x00\x00\xa2b\xfe\x1ec\x01\x01\x18\x00\xa61\x0f\x00\x00\x00\x00p\xa6\x02\x18\xf7\xe7\xb8\xfd\xf6h\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\x9e\xa7\xfe\x1ad\x01\x01>\xc2\xf5\xc8?\xebQ\xb8>\x14o)=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x86\x00\x00\x00\x95\x97\xfe\x08e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x94"b'\xfe\x1cf\x01\x01!\xc0\xe3\x03\x00h\xa6\x02\x18\xf0\xe7\xb8\xfd<_\n\x00\xac\x03\x00\x00\xea\xff\x02\x00\x03\x00\xa6\x04\x1cA\xfe\x1cg\x01\x01 W\xe4\x03\x00\xd8\xf6\xa2\xbaD[a?\xe7\x10\x1e\xbf%gg\xbew\xd1\xe1<\x90]\x19\xbd\x1e\xeb\xfe\x1ch\x01\x01\x1e\x7f\xe4\x03\x00\xc2+\x0b=\x9a$q;\x04\x99U>\xcc]^\xbd\xfb\x93q\xbd\xd7r0=\x86\x99\xfe\x18i\x01\x01\xb2\xb4\x8a\x03=\xa1>#;\xf0\xe3Y>\x85\xdb)Dp\xa6\x02\x18\xf7\xe7\xb8\xfd\x18\xc8\xfe\x1cj\x01\x01\xa3^\x8b\x92\xb99\xea&9\x97\xd7\xff8\x00\x00\x00\x00\x00\x00\x00\x00\x12\x1f\x8a<\xd8\xe8];\x96\xe3\xfe\x03k\x01\x01\xa5\xc8\x14\x00\xc5\xc4\xfe\x0cl\x01\x01\x02h\xc7\x9cy\xb1N\x05\x00\x93\xe4\x03\x00\xf6\xc4\xfe\x16m\x01\x01\x88h\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x93\x03\xfe\x16n\x01\x01\xc1\xd5m{=\xc27?=\xb5\x8fF:\xcc\x90\xda<\x00\x00\x00\x00?\x03\xda\x8d\xfe\x03o\x01\x01Ms\x00\x00s\xdf'b'\xfe\x15p\x01\x01$\x82\xcc5\x0f\x07\x06#\x06a\x06\xe4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x814\xfe\x16q\x01\x01#\xd0\xe4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x000\x83'b'\xfe\x1ar\x01\x01\x1bj\x077\x0f\x00\x00\x00\x00\x06\x00\xd6\xff\x16\xfc\xe0\xff\x1a\x00\xf8\xff\x0e\x01\xcd\xfff\x01VG\xfe\x16s\x01\x01t \xe5\x03\x00\x0e\x00\xda\xff$\xfc\xe7\xff\x0b\x00\xfd\xff\xfb\x00g\xff\x02\x02I\x06\xfe\x16t\x01\x01\x81 \xe5\x03\x00\x03\x00\xe0\xff\x19\xfc\xe7\xff\x10\x00\xf2\xff\x1c\x036\x00}\x02\xfd\xed\xfe\x0eu\x01\x01\x1d \xe5\x03\x00y\x9ciD\x99\x99\x99\xbdK\x10\xba\x87\xfe\x0ev\x01\x01\x89 \xe5\x03\x00\xac\xdfiD33e>c\x15\xf8\xdc\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x01\xce<5\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x8be\xfe\x06x\x01\x01}\xc5\x14\x00\x00\x03\x00\xed]\xfe\x03y\x01\x01Ms\x00\x00\xba\x99\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5\xfe\x02{\x01\x01*\x00\x00R\x96\xfe\x1e|\x01\x01\x18(\xb74\x0f\x00\x00\x00\x00o\xa6\x02\x18\xfa\xe7\xb8\xfd\xe2h\n\x00F\x00\xff\xff\x0b\x00\xf8\x83\x03\x0c\xd6\x93\xfe\x1a}\x01\x01>33\x93?ff\xe6>\\\x90\x14=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x87\x00\x00\x00\xd1\xee\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed\xfe\x14\x7f\x01\x01J\xaeG\xe1=\xaeG\xe1=33s?\n\xd7#=\x0b\x001\x00\xa9\xc1\xfe\x1c\x80\x01\x01!R\xe5\x03\x00f\xa6\x02\x18\xf5\xe7\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xec\xff\x04\x00\x04\x00\xaa\x04\xab\xbb\xfe\x1c\x81\x01\x01 \\\xe5\x03\x00\xd7\x0e\xc9\xbc?\x91k?\xaah \xbfy5M\xbeL\x89>=\x8b\xcf:\xbdV\xd7'b'\xfe\x1c\x82\x01\x01\x1e\x85\xe5\x03\x00\xbc.\xba<\x84#\xd5:\njU>\xe1\xc8}\xbdY\x9bL=X@\x06;\x1d#\xfe\x18\x83\x01\x01\xb2}\x93\xa6<@3\xf4\xb8C\xf5Y>\xe1\xda)Dn\xa6\x02\x18\xfd\xe7\xb8\xfd\xfe#\xfe\x1c\x84\x01\x01\xa3:\xe9\x90\xb9Ye\x199n\xc5\x049\x00\x00\x00\x00\x00\x00\x00\x00)\xa4\x84<\xe0 4;\xaaE\xfe\x03\x85\x01\x01\xa5\xc6\x14\x00iB\xfe\x0c\x86\x01\x01\x02\xd8\xc6\xa0y\xb1N\x05\x00\x99\xe5\x03\x00z\x9c\xfe\x16\x87\x01\x01\x88f\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00r\xcb\xfe\x16\x88\x01\x01\xc1/\x7fw=\xf7!I=7]\x9b8\x03\x96\xff<\x00\x00\x00\x00?\x03\x8b<\xfe\x03\x89\x01\x01Ms\x00\x00!\xda\xfe\x15\x8a\x01\x01$\xa3\xc89\x0f\r\x060\x06%\x06\xf1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15*\xfe\x16\x8b\x01\x01#\xd5\xe5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd3\xf2'b'\xfe\x1a\x8c\x01\x01\x1b\x08\xb3:\x0f\x00\x00\x00\x00\x10\x00\xdf\xff(\xfc\xe0\xffK\x00\xf4\xff\n\x01\xcc\xffi\x01\xaf\x05\xfe\x16\x8d\x01\x01t\x11\xe6\x03\x00\x16\x00\xdf\xff*\xfc\xef\xffQ\x00\xed\xff\xfb\x00i\xff\x05\x02/\xdc\xfe\x16\x8e\x01\x01\x81\x11\xe6\x03\x00\x0b\x00\xf5\xff\x1f\xfc\xf4\xffj\x00\xd0\xff!\x03?\x00|\x02\xa2E\xfe\x0e\x8f\x01\x01\x1d\x11\xe6\x03\x00\xb4\x9ciDp=\x92\xbdK\x10\x1a\xef\xfe\x0e\x90\x01\x01\x89\x11\xe6\x03\x00\xc9\xdfiD\xc2\xf5f>c\x15\x82]\xfe*\x91\x01\x01\x96s\xe7f\xbc\x04m\x01\x00K\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xe6\xf2\xfe\x1f\x92\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01\xc1<\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x1c\xfa\xfe\x06\x93\x01\x01}\xc8\x14\x00\x00\x03\x00/\x8c\xfe\x04\x94\x01\x01\x98\x00\x00\x80\x8a@\xfb\xfe\x03\x95\x01\x01Ms\x00\x00;\xba\xfe\x02\x96\x01\x01*\x00\x00\x85\x9a\xfe\x1e\x97\x01\x01\x18x\xd9:\x0f\x00\x00\x00\x00m\xa6\x02\x18\x01\xe8\xb8\xfd\xceh\n\x00F\x00\xff\xff\x11\x00\xf8\x83\x03\x0c\xbd\xc8\xfe\x1a\x98\x01\x01>\xe1zT?\x00\x00@?\x85{\xd1<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8a\x00\x00\x00\xb6\x1d\xfe\x08\x99\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe6\xe5\xfe\x14\x9a\x01\x01J{\x14.>{\x14.>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x001\x00\xfd\x91'b'\xfe\x1c\x9b\x01\x01!\x1b\xe6\x03\x00e\xa6\x02\x18\xfa\xe7\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xee\xff\x06\x00\x03\x00\x8a\x04`\xf6\xfe\x1c\x9c\x01\x01 b\xe6\x03\x00\xf8Z \xbdmlw?o\xb4"\xbf\x11`<\xbe\x83\x81~=0\\\xfc\xbc\x97\xb5\xfe\x1c\x9d\x01\x01\x1e\x8a\xe6\x03\x00\xfc@\x9e<\xa5\xe9\x9dH\xe5\x13\xbd\x94\xbdj\xe1\xda)Dm\xa6\x02\x18\x01\xe8\xb8\xfd\x88 \xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\x1c\xa0\x01\x01\xa3]\x03\x8f\xb9\n\x0e\x0b9e\xbc\t9\x00\x00\x00\x00\x00\x00\x00\x00\x909n<\xf2\x04(;F\x83\xfe\x03\xa1\x01\x01\xa5\xc5\x14\x00\x8a\xc7\xfe\x0c\xa2\x01\x01\x02x\xbe\xa4y\xb1N\x05\x00\x9e\xe6\x03\x00&\x96\xfe\x16\xa3\x01\x01\x88e\xa6\x02\x18\xfc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00,\x95\xfe\x16\xa4\x01\x01\xc1\x04\xb7x=\xb2gR=\x009\xc19\x8b\x8e\xbd<\x00\x00\x00\x00?\x03\x1b\xdf'b"\xfe\x15\xa5\x01\x01$\r\xc5=\x0f2\x06:\x066\x06\xd1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9e\xfe\x16\xa6\x01\x01#\xda\xe6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd4B\xfe\x03\xa7\x01\x01/\xff\x00\x00\n$\xfe\x1a\xa8\x01\x01\x1b\x17a>\x0f\x00\x00\x00\x00\x04\x00\xde\xff\x1f\xfc\xee\xff\xca\xff\xf6\xff\x08\x01\xcd\xffl\x01DG\xfe\x16\xa9\x01\x01t\x02\xe7\x03\x00\x03\x00\xe1\xff5\xfc\xee\xff\xd9\xff\xf0\xff\xf7\x00g\xff\t\x02\xb8\xa7\xfe\x16\xaa\x01\x01\x81\x02\xe7\x03\x00\x03\x00\xf3\xff'\xfc\xe9\xff\xb7\xff\xed\xff%\x03.\x00\x8a\x02\x95\xcc\xfe\x0e\xab\x01\x01\x1d\x02\xe7\x03\x00\xef\x9eiD\x8f\xc2\x15\xbdK\x10o!\xfe\x0e\xac\x01\x01\x89\x02\xe7\x03\x00\xd2\xe0iD\x1e\x85w>d\x15\xcci\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x00\xc1<\xe1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\xb3 \xfe\x06\xae\x01\x01}\xc8\x14\x00\x00\x03\x00\x8e\xa8\xfe\x04\xaf\x01\x01\x98\x00\x00\x80\x8a Z\xfe\t\xe3\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x00\x80\xac"b'\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1\xfe\x1e\xb1\x01\x01\x18\xa0\xea=\x0f\x00\x00\x00\x00m\xa6\x02\x18\x04\xe8\xb8\xfd\xbah\n\x00F\x00\xff\xff\x12\x00\xf8\x83\x03\x0c\x90\xbc\xfe\x1a\xb2\x01\x01>\xb8\x1e\x05?\\\x8fB?\xd7,\x0b=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x8f\x00\x00\x00\x9dn\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv\xfe\x12\xb4\x01\x01\xfc\x14\xe7\x03\x004\x00\x01\x00ARMMASK\x00Wr\xef\x84\xfe\t\xb5\x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\x95\xf1\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86\xfe\x14\xb7\x01\x01J\xebQ8>\xebQ8>33s?\x8f\xc2\xf5<\x0b\x001\x00\x99:\xfe\x1c\xb8\x01\x01!\xe4\xe6\x03\x00d\xa6\x02\x18\x00\xe8\xb8\xfdF_\n\x00\xb6\x03\x00\x00\xed\xff\x06\x00\x04\x00q\x04eZ\xfe\x1c\xb9\x01\x01 f\xe7\x03\x00h\xc2V\xbd\x00\xca\x81?\xfa\x1a \xbf\x14\nD\xbe\x86P\x88=\xc4\x82C\xbdKF'b'\xfe\x1c\xba\x01\x01\x1e\x8f\xe7\x03\x00H\x8b\x95\xd3\x9bH=\xd6\x0b\xdd<\xcd\xa7>=1\x9b\xfe\x18\xbb\x01\x01\xb26\xf8f<\xc6\xb1\x1f\xc2\xd5)Dm\xa6\x02\x18\x04\xe8\xb8\xfdm<\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0\xfe\x1c\xbd\x01\x01\xa39\xe6\x8c\xb9\x95\xea\xf78\xae\xca\x0e9\x00\x00\x00\x00\x00\x00\x00\x00>4j<\xd7\xfb\x04;\x15\x14\xfe\x03\xbe\x01\x01\xa5\xc5\x14\x00@-\xfe\x0c\xbf\x01\x01\x020\xb2\xa8y\xb1N\x05\x00\xa3\xe7\x03\x00\xceY\xfe\x16\xc0\x01\x01\x88d\xa6\x02\x18\x01\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\r5\xfe\x12\xc1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xd4[\xfe\x16\xc2\x01\x01\xc1)<|=\xbc\xe5S=_\xfe};\xaf(\xb9<\x00\x00\x00\x00?\x03v\xd3\xfe\x16\xc3\x01\x01\xe1F\xb6\x13?\x99\x99\x19>\xf5\xe26<\\bF<>W3?\x00\x1fM\xb4'b'\xfe\x15\xc4\x01\x01$\x1d\xc2A\x0f.\x06\x1a\x06$\x06\xd7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00a\xbf\xfe\x16\xc5\x01\x01#\xdf\xe7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00`\x89\xfe\x1a\xc6\x01\x01\x1b\xbd\x0fB\x0f\x00\x00\x00\x00\x03\x00\xf6\xff\x1d\xfcJ\x00\x1e\x00\xe9\xff\x0b\x01\xcc\xffj\x01\x95\n\xfe\x16\xc7\x01\x01t\xf3\xe7\x03\x00\x08\x00\xf6\xff*\xfc2\x00"\x00\xfd\xff\xf9\x00m\xff\x08\x02as\xfe\x16\xc8\x01\x01\x81\xf3\xe7\x03\x00\x00\x00\xf7\xff1\xfc\x1b\x00\x1c\x00\x00\x00\x11\x03X\x00m\x02\xdf\xdc\xfe\x0e\xc9\x01\x01\x1d\xf3\xe7\x03\x00B\x9ciD\xe1z\xa0\xbdL\x10\xf1\xa6\xfe\x0e\xca\x01\x01\x89\xf3\xe7\x03\x00P\xe0iD\xa3po>f\x15c\xd1\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00E\x01\xc1<.\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T[\x96\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02\xfe\x04\xcd\x01\x01\x98\x00\x00\x80\x8a\x80\xd0\xfe\x02\xce\x01\x01*\x00\x00\xa66\xfe\x1e\xcf\x01\x01\x18\xc8\xfb@\x0f\x00\x00\x00\x00m\xa6\x02\x18\x08\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x13\x00\xf8\x83\x03\x0c|\x90\xfe\x1a\xd0\x01\x01>\xaeGa>\xf5(\\?\xcd\xa0\x02=\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x96\x00\x00\x00\xa8\xb9\xfe\x08\xd1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xab\xfe\x03\xd2\x01\x01Ms\x00\x00\xc4C'b'\xfe\x14\xd3\x01\x01J\\\x8fB>\\\x8fB>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x001\x00[l\xfe\x1c\xd4\x01\x01!\xad\xe7\x03\x00c\xa6\x02\x18\x06\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xed\xff\x08\x00\x03\x00x\x04C\x99\xfe\x1c\xd5\x01\x01 l\xe8\x03\x00%Ls\xbd\xeb\x15\x88?$\xe5!\xbf#\xd7C\xbeR\x07\xb3=^\xcc \xbd\xad\xf2\xfe\x1c\xd6\x01\x01\x1e\x94\xe8\x03\x00\x02\x85\x00=\xa0\xad\x86<\x10\xe8L>\xbb\xe1\x1a\xbd\x87\x02\xa9p\xdd)Dm\xa6\x02\x18\x0c\xe8\xb8\xfdm\xd6'b'\xfe\x1c\xd8\x01\x01\xa3\xf4\x91\x8a\xb9ni\xd78\xb5\x03\x149\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x99\x86f\x15\xf0\x14\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xc1<\xd6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TZ\x19\xfe\x06\xe4\x01\x01}\xc6\x14\x00\x00\x03\x00"\xf4\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b\xfe\x1e\xe7\x01\x01\x18\xf0\x0cD\x0f\x00\x00\x00\x00m\xa6\x02\x18\x0c\xe8\xb8\xfd\xa6h\n\x00F\x00\xff\xff\x15\x00\xf8\x83\x03\x0c\xd5\xbf\xfe\x1a\xe8\x01\x01>\x1e\x85\xeb\xbe\x99\x99Y?\xd7\xbf\xb8<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xa0\x00\x00\x00\xce\x88\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i\xfe\x15\xea\x01\x01$=\x10F\x0f!\x06\x06\x06\xfd\x05\xff\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x1a\xfe\x16\xeb\x01\x01#\xf9\xe8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb0O'b'\xfe\x03\xec\x01\x01Ms\x00\x00A\x9e\xfe\x14\xed\x01\x01J\xcc\xccL>\xcc\xccL>\x8f\xc2u?\x8f\xc2\xf5<\x0b\x000\x00,\xa9'b'\xfe\x1c\xee\x01\x01!?\xe9\x03\x00b\xa6\x02\x18\r\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xeb\xff\r\x00\x03\x00\x92\x04\x99"\xfe\x1c\xef\x01\x01 q\xe9\x03\x00\xa9\xc9\x8d\xbd\xf7\xd8\x8f?\xc6\xd5"\xbf+]Y\xbe\n1\x07>\xd3\xd1\x17\xbdy\r\xfe\x1c\xf0\x01\x01\x1e\x99\xe9\x03\x00\xb7CA<\xf0\x84j<\xc5\x10Q>Qk\xb7\xbdW)"\xbc\xc7:\xa7\xbbkG\xfe\x18\xf1\x01\x01\xb2fc\x14\x99\xd9)Dl\xa6\x02\x18\x10\xe8\xb8\xfd\x10\x82\xfe\x03\xf2\x01\x01Ms\x00\x004\xf5\xfe\x1c\xf3\x01\x01\xa3\xbe\x0e\x88\xb9\xcc\x1c\xb58\xd5P\x199\x00\x00\x00\x00\x00\x00\x00\x00\xf8(rg\x156\xb7\xfe\x1f\xfd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\xae<\xd7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00T\x92 \xfe\x06\xfe\x01\x01}\xc5\x14\x00\x00\x03\x00\x81:\xfe\x04\xff\x01\x01\x98\x00\x00\x80\x8a\xd7C\xfe\x02\x00\x01\x01*\x00\x00\x9c\xf1\xfe\x1e\x01\x01\x01\x18\x18\x1eG\x0f\x00\x00\x00\x00l\xa6\x02\x18\x10\xe8\xb8\xfd\xa6h\n\x00F\x00\xff\xff\x13\x00\xf8\x83\x03\x0c\xc9\xf7\xfe\x1a\x02\x01\x01>\xe1z\x94\xbf\\\x8fB?\x14\xdc\xc9<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xae\x00\x00\x00\xed'\xfe\x08\x03\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa6_\xfe\x15\x04\x01\x01$\t\x08J\x0f\x0f\x06\x16\x06&\x06\xf5\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x9d\xfe\x16\x05\x01\x01#\xfd\xe9\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00~\xfa\xfe\x03\x06\x01\x01Ms\x00\x00q\xa0"b'\xfe\x14\x07\x01\x01J\x1e\x85k>\x1e\x85k>\x8f\xc2u?\n\xd7\xa3<\x0b\x001\x00w2\xfe\x1c\x08\x01\x01!\x07\xea\x03\x00a\xa6\x02\x18\x14\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xed\xff\x0c\x00\x03\x00\xa7\x04\x1d\xb8\xfe\x1c\t\x01\x01 v\xea\x03\x0000\xa8\xbd\xf9\xb5\x97?(\t"\xbf\x17\xadH\xbe\xd8\x94\x00>\n(\x01\xbd\xb1#'b'\xfe\x1c\n\x01\x01\x1e\x9f\xea\x03\x00\xc2\x14N\xbb\ro\x85\xa3\xec.\xbd\xee$^\xbd\x88[\x8d<\xd8\x0f\xfe\x18\x0b\x01\x01\xb2>\xa9\xe2\xbb6\x87\x95<\x96.Y>\xb8\xde)Dk\xa6\x02\x18\x15\xe8\xb8\xfd\xfbl\xfe\x1c\x0c\x01\x01\xa3\xc6n\x85\xb9\x10\x8d\x918\xd6\x9d\x1e9\x00\x00\x00\x00\x00\x00\x00\x00M\x83M<4\x87\xa4;\x8a\xa8\xfe\x03\r\x01\x01\xa5\xc5\x14\x00\xfa\x81\xfe\x0c\x0e\x01\x01\x02(\x95\xb4y\xb1N\x05\x00\xb3\xea\x03\x00\x0fe\xfe\x16\x0f\x01\x01\x88a\xa6\x02\x18\x16\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00pw\xfe\x16\x10\x01\x01\xc1Xs\\="\x07P=\xcc\x98 ;\xad5\r=\x00\x00\x00\x00?\x03\x16,\xfe\x03\x11\x01\x01Ms\x00\x00\x07g\xfe\x1a\x12\x01\x01\x1b\x19\x1bM\x0f\x00\x00\x00\x00\x12\x00\xe3\xff\x1d\xfc\xe3\xff\xd2\xff\x1d\x00\x05\x01\xc4\xffj\x01\xe4\xf2\xfe\x16\x13\x01\x01t\xc7\xea\x03\x00\x11\x00\xec\xff<\xfc\xd7\xff\xc1\xff\x1a\x00\xf7\x00`\xff\n\x02\xfe\x07\xfe\x16\x14\x01\x01\x81\xc7\xea\x03\x00\x0e\x00\xf2\xff\x06\xfc\xd0\xff\x9f\xff\x14\x00$\x03?\x00\x81\x02W\xbb\xfe\x0e\x15\x01\x01\x1d\xc7\xea\x03\x00\x97\x9ciD\x85\xeb\x95\xbdL\x10\xd8\xc7\xfe\x0e\x16\x01\x01\x89\xc7\xea\x03\x00\x9b\xe1iD=\n\x82>g\x15\x0e\x8a\xfe\x1f\x17\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xae<\xe2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00TV/\xfe\x06\x18\x01\x01}\xc8\x14\x00\x00\x03\x00-\\\xfe\x04\x19\x01\x01\x98\x00\x00\x80\x8aE2\xfe\x02\x1a\x01\x01*\x00\x00\x02\xad\xfe\x1e\x1b\x01\x01\x18h@M\x0f\x00\x00\x00\x00j\xa6\x02\x18\x1b\xe8\xb8\xfd\x9ch\n\x00F\x00\xff\xff\x1a\x00\xba\x17\x03\x0c\xdag\xfe\x1a\x1c\x01\x01>\xf5(\xbc\xbf\xcc\xccL?R<\xd0<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xbd\x00\x00\x00!a\xfe\x08\x1d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf05\xfe\t\xe4\n\x00m\x92\x00\x00\x00\x00\xdb\x00\x00\x005O\xfe\x03\x1e\x01\x01/\xff\x00\x00c\xae\xfe\x12\x1f\x01\x01\xfc\x01\xeb\x03\x004\x00\x01\x00ARMMASK\x00Wr\x88\xae\xfe\t \x01\x01\x00\x05\x00\x00\x00\x02\x03\xd9\x04\x03\xcf,'b'\xfe\x15!\x01\x01$\x99\x07N\x0f\r\x06\xe0\x05G\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\xfc\xfe\x16"\x01\x01#\x04\xeb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9f=\xfe\x03#\x01\x01Ms\x00\x00\xe0\x81\xfe\x14$\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>\x8f\xc2u?\n\xd7\xa3<\x0c\x000\x00Wa'b'\xfe\x1c%\x01\x01!\xd1\xea\x03\x00`\xa6\x02\x18\x1b\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf2\xff\x08\x00\x03\x00\xd3\x04\xa7E\xfe\x1c&\x01\x01 |\xeb\x03\x00S8\xb8\xbd\x03\xfb\x9e?\\\xd4"\xbfF/\x10\xbe\xc8\x81\xb1=\xd2\xc3\x02\xbd\'\xd6\xfe\x1c\'\x01\x01\x1e\xa4\xeb\x03\x00.\x08\xc7\xbc\xad\xba\x9d;\xc7\x08]>\xb2C\xae\xbd\xb9\x087=\xf1\x9f\x9a;`\xba\xfe\x18(\x01\x01\xb2\t0\xe6\xbc\x82\xae\xce;\xa8\x0ea>\xe1\xda)Dh\xa6\x02\x18 \xe8\xb8\xfd\xd1\xbb\xfe\x1a)\x01\x01\x1b|\xc9P\x0f\x00\x00\x00\x00\x16\x00\xd2\xff\x1d\xfc\xcf\xff6\x00\x1e\x00\x0c\x01\xbd\xffi\x015\xf3\xfe\x16*\x01\x01t\xb8\xeb\x03\x00\x15\x00\xd0\xff0\xfc\xcf\xff4\x00\x10\x00\xfa\x00Z\xff\x06\x02\xc8>\xfe\x16+\x01\x01\x81\xb8\xeb\x03\x00\x11\x00\xe4\xff\x1b\xfc\xe4\xff%\x00\x18\x00-\x03\'\x00}\x02\x14)\xfe\x0e,\x01\x01\x1d\xb8\xeb\x03\x00\xfb\x9ciD\xa4p\x89\xbdM\x10\xeb\x03\xfe\x0e-\x01\x01\x89\xb8\xeb\x03\x00L\xe3iD\x99\x99\x8f>i\x15\x18\xd9\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00*\x00\xae<\xed\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x80\x9e\xfe\x06/\x01\x01}\xc8\x14\x00\x00\x03\x00\x04o\xfe\x030\x01\x01Ms\x00\x00HP\xfe\x041\x01\x01\x98\x00\x00\x80\x8a\xb6\xba\xfe\x022\x01\x01*\x00\x00m\x10\xfe\x1e3\x01\x01\x18\x90QP\x0f\x00\x00\x00\x00h\xa6\x02\x18 \xe8\xb8\xfd\x92h\n\x00F\x00\xff\xff\x16\x00\xba\x17\x03\x0c\\V\xfe\x1a4\x01\x01>33\xb3\xbf\xaeG\xa1?Rl\xc7<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xcb\x00\x00\x00\xc6R\xfe\x085\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x008\xad'b'\xfe\x1c6\x01\x01\xa35o\x82\xb9\x08\x9cS8Yy$9\x00\x00\x00\x00\x00\x00\x00\x00^eY=\x13\xe2\t<\xd5v\xc1<\x00\x00\x00\x00?\x03U\xf0\xfe\x16;\x01\x01\xe1Y9\x14?\xee@\x1d>\xf5\xe26<\\bF\x01\x01Ms\x00\x00E`\xfe\x14?\x01\x01J\xaeGa>\xaeGa>\x8f\xc2u?\n\xd7#<\x0c\x001\x00c\x03\xfe\x1c@\x01\x01!c\xec\x03\x00a\xa6\x02\x18\x1f\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf6\xff\x01\x00\x01\x00\xe3\x04j\xf3\xfe\x1cA\x01\x01 \x81\xec\x03\x00B\xa8\xaf\xbd$\xd8\xa3?%\x03#\xbf\xfe\x1a\xd3\xbd\x81\x9f\x95<\xf0\xa0\x90\xbc_A'b'\xfe\x1aB\x01\x01\x1b\xe4wT\x0f\x00\x00\x00\x00\x15\x00\xe1\xff\x1e\xfc\xe9\xff\xff\xff\xe5\xff\x05\x01\xb9\xffk\x01\x06\x92\xfe\x16C\x01\x01t\xa9\xec\x03\x00\x14\x00\xd4\xff\x1d\xfc\xf7\xff\x10\x00\xeb\xff\xf3\x00T\xff\x07\x02G\r\xfe\x16D\x01\x01\x81\xaa\xec\x03\x00\x10\x00\xec\xff!\xfc\xe8\xff\xfc\xff\xe9\xff#\x03\x1b\x00\x87\x029\x19\xfe\x0eE\x01\x01\x1d\xaa\xec\x03\x00;\x9diD\xa4p\x81\xbdM\x10\xa7A\xfe\x0eF\x01\x01\x89\xaa\xec\x03\x00\xd3\xdeiD\x99\x99W>h\x15b\x17\xfe\x1fG\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00=\x01\x89<\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa3\xfd\xfe\x06H\x01\x01}\xc5\x14\x00\x00\x03\x00"\xce\xfe\x03I\x01\x01Ms\x00\x002t\xfe\x04J\x01\x01\x98\x00\x00\x80\x8a\xb5\xfd\xfe\x02K\x01\x01*\x00\x00\x18@\xfe\x1eL\x01\x01\x18\xb8bS\x0f\x00\x00\x00\x00h\xa6\x02\x18$\xe8\xb8\xfd\x88h\n\x00F\x00\xff\xff\x13\x00\xba\x17\x03\x0c1\xc5\xfe\x1aM\x01\x01>p=J\xbf\xcc\xcc\xcc?\xeb\xa9\xb6<\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\xd1\x00\x00\x00\x8fT\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\xfe\x1cO\x01\x01\x1e\xbe\xec\x03\x00\xc2\xe6\xa2\xbc\xfe=\xc49Br<8!\x0b\xf6\xd8)Dh\xa6\x02\x18$\xe8\xb8\xfd!\x94\xfe\x1cQ\x01\x01\xa3\xaf\x11\x7f\xb9.\xbd\x088\xbb *9\x00\x00\x00\x00\x00\x00\x00\x00\xd9jN\n\xd7#>\x8f\xc2u?\x00\x00\x00\x00\x0c\x005\x00\x14)\xfe\x1c\\\x01\x01!,\xed\x03\x00a\xa6\x02\x18!\xe8\xb8\xfdP_\n\x00\xc0\x03\x00\x00\xf6\xff\xfb\xff\xff\xff\x04\x05\xf2/\xfe\x1c]\x01\x01 \x87\xed\x03\x00\xc8\x1a\xa8\xbd\xd1I\xa6?|j!\xbfr/\xd0\xbd\xb0\x9ck\xbd\x81\xbb\x89<\x01\xca\xfe\x1a^\x01\x01\x1bC&X\x0f\x00\x00\x00\x00\x15\x00\xf4\xff\xff\xfb8\xff\xd0\xff\xc3\x01\x07\x01\xbc\xffk\x01\x88M\xfe\x16_\x01\x01t\x9b\xed\x03\x00\x10\x00\xf3\xff\x00\xfcL\xff\xd3\xff\x97\x01\xf3\x00Y\xff\x0b\x02<<\xfe\x16`\x01\x01\x81\x9b\xed\x03\x00\x08\x00\xe3\xff\xeb\xfbi\xff\xd8\xff\x93\x01\x17\x03\x1f\x00\x7f\x02[\xf6\xfe\x0ea\x01\x01\x1d\x9b\xed\x03\x00R\x9ciD\\\x8f\x9e\xbdM\x10\xf6\xbd\xfe\x0eb\x01\x01\x89\x9b\xed\x03\x00^\xe1iD\xf6(\x80>i\x15\xdas\xfe\x1fc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x89<\x0f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sx\x87\xfe\x06d\x01\x01}\xc6\x14\x00\x00\x03\x009f\xfe\x04e\x01\x01\x98\x00\x00\x80\x8a\xa4\x9c\xfe\x02f\x01\x01*\x00\x00\xd4\r\xfe\x1eg\x01\x01\x18\xe0sV\x0f\x00\x00\x00\x00h\xa6\x02\x18\'\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\x10\x00\xba\x17\x03\x0cm,\xfe\x1ah\x01\x01>Q9\xa3\xbf\x07W\x96?\xa4\x8e\xdc<\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\xc9\xb4\xfe\x08i\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00e\xaf\xfe\x1cj\x01\x01\x1e\xaf\xed\x03\x00\xbd\xb9\x01\xbdf\xb1\xcf<\x03\x8by>\xc5\xa8T\xbe"\x1b\xa0\xbd\xf3\xf5\x0c?\xd3\xd4\xfe\x18k\x01\x01\xb2\xab\x1e\r\xbd\x01\xc0\xef<\x9d\xa8w>G\xe1)Dh\xa6\x02\x18\'\xe8\xb8\xfd=\xd7\xfe\x03l\x01\x01Ms\x00\x00\xa3U'b'\xfe\x1cm\x01\x01\xa3\xddwy\xb9e\x9e\x8674\x8d/9\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xee\x83h\x15\r@\xfe\x1f}\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00c\x89<[\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SuA\xfe\x06~\x01\x01}\xc8\x14\x00\x00\x03\x00\xd5\x86\xfe\x04\x7f\x01\x01\x98\x00\x00\x80\x8a\x00\x87\xfe\x02\x80\x01\x01*\x00\x00\x81w\xfe\x1e\x81\x01\x01\x18\xe86Y\x0f\x00\x00\x00\x00f\xa6\x02\x18(\xe8\xb8\xfdjh\n\x00F\x00\xff\xff\x07\x00\xba\x17\x03\x0ca\x7f\xfe\x1a\x82\x01\x01>\x92\xd63>V\x8a)?p\xd0_=\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\xb9x\xfe\x08\x83\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x04\x99\xfe\x1c\x84\x01\x01\x1e\xb5\xee\x03\x00I\x08\xb7\xbc\x82\xe4.0>\xb2=\xf8\xac*\xbe\xbe\xcc\xd1>\xc5\xbf\xfe\x18\x85\x01\x01\xb2w\xd1\xdb\xbc\x13\x97\x85<\xbc5\xb5>\x8f\xe2)Df\xa6\x02\x18(\xe8\xb8\xfd\xdf\xf9\xfe\x03\x86\x01\x01Ms\x00\x00\x93k\xfe\x1c\x87\x01\x01\xa3?\x18s\xb9\xd9\x7f\x01\xb6\xf2r59\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x02\xaf\x15\x001\x00\x19j\xfe\x1a\x93\x01\x01\x1b\x12\x84_\x0f\x00\x00\x00\x00\x19\x00\xdb\xff\x91\xfcy\x00C\x00&\x01\xfd\x00\x97\xffj\x01\x91=\xfe\x16\x94\x01\x01t}\xef\x03\x00\x14\x00\xeb\xff\xb3\xfcd\x00E\x00\x1c\x01\xf7\x00I\xff\x10\x02\xddE\xfe\x16\x95\x01\x01\x81}\xef\x03\x00\x11\x00\xe0\xff\x9a\xfc\x84\x007\x00\'\x01\x13\x03\x1a\x00\x85\x02\'W\xfe\x0e\x96\x01\x01\x1d~\xef\x03\x00\x86\x9ciD\x00\x00\x98\xbdM\x10\xde\x1d\xfe\x0e\x97\x01\x01\x89~\xef\x03\x00}\xe1iD\xb8\x1e\x81>j\x15\x8d+\xfe\x1f\x98\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\x89p=*@=\n\xd7>3\r$=\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\xaf\x00g\x9a\xefc\xfe\x08\x9e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xfd\xfe\x1c\x9f\x01\x01!t\xef\x03\x00c\xa6\x02\x18\x1d\xe8\xb8\xfdn_\n\x00\xde\x03\x00\x00\x00\x00\xeb\xff\x07\x00\xef\x08Dk\xfe\x1c\xa0\x01\x01 \x92\xef\x03\x00Y8~\xbdmU\xa1?\xfc\x1f+\xbf\xfdi\xca;\xe4\xbaZ\xbe\xf6\xf0\x9b\xbd"\xaf\xfe\x03\xa1\x01\x01Ms\x00\x00mA'b'\xfe\x1c\xa2\x01\x01\x1e\xba\xef\x03\x00\xefvh<\x18\xe5<\x0e\x1a\r>\xcb^[>p\x8d)?\xa10\xfe\x18\xa3\x01\x01\xb2\x883"<\xbb\xbbW<\x93J\xd7>\xeb\xe1)Dg\xa6\x02\x18\'\xe8\xb8\xfd8u\xfe\x1c\xa4\x01\x01\xa3\x82^l\xb9\x1e#\xa7\xb7\x17t;9\x00\x00\x00\x00\x00\x00\x00\x005\xf0\xbc<\xf3oL\xf5\xe26<\\bF<.\x06]?\x00\x1f\x13\x15\xfe\x15\xab\x01\x01$"\xa8a\x0f\xef\x05j\x06A\x06\x10\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xc4\xfe\x16\xac\x01\x01#\n\xf0\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00L*'b'\xfe\x03\xad\x01\x01Ms\x00\x00\x0fz\xfe\x14\xae\x01\x01J\n\xd7#>\n\xd7#>\x00\x00\x80?\n\xd7#=\x1d\x00;\x00\x0f\x1b\xfe\x1a\xaf\x01\x01\x1b\x9c1c\x0f\x00\x00\x00\x00\xf9\xff\xe3\xff\x9d\xfb\xc8\x00\x9c\xff?\x01\xf0\x00\x8f\xffo\x01\x00\r\xfe\x16\xb0\x01\x01to\xf0\x03\x00\xf2\xff\xe7\xff\x84\xfb\xc9\x00\xb6\xff%\x01\xe8\x00)\xff\n\x02^\xd9\xfe\x16\xb1\x01\x01\x81o\xf0\x03\x00\xfe\xff\xea\xff\x95\xfb\xba\x00\xe1\xff"\x01\x06\x03\x07\x00\x7f\x02\xb4\x86\xfe\x0e\xb2\x01\x01\x1do\xf0\x03\x00\xe5\x9ciD\xf6(\x8c\xbdM\x10\xff8\xfe\x0e\xb3\x01\x01\x89o\xf0\x03\x00E\xe0iDR\xb8n>i\x15\xaf\xd3\xfe*\xb4\x01\x01\x96s\xe7f\xbc\x05m\x01\x00M\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00=]\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xe2<\x82\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SW\xd1\xfe\x06\xb6\x01\x01}\xc5\x14\x00\x00\x03\x00.K\xfe\x04\xb7\x01\x01\x98\x00\x00\x80\x8a~\xda\xfe\x02\xb8\x01\x01*\x00\x00\'\x7f\xfe\x1e\xb9\x01\x01\x18Hnb\x0f\x00\x00\x00\x00h\xa6\x02\x18$\xe8\xb8\xfd\x88h\n\x00F\x00\xff\xff\x10\x00\xba\x17\x03\x0c7\x9d\xfe\x1a\xba\x01\x01>\t\x00E@\x04\xc2\xbc\xbd\x14\'\x89=\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\xd8=\xfe\x08\xbb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1c['b'\xfe\x1c\xbc\x01\x01!=\xf0\x03\x00e\xa6\x02\x18\x1a\xe8\xb8\xfdx_\n\x00\xe8\x03\x00\x00\xfb\xff\xee\xff\r\x00\xf7\x0b\x00@\xfe\x1c\xbd\x01\x01 \x97\xf0\x03\x00\xb4\x1d\x0e\xbdM\x97\x9d?k\xc3-\xbf\x16\xbd^\xbd=6>\xbe\x98~\r\xbe\x98e\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab\xfe\x1c\xbf\x01\x01\x1e\xbf\xf0\x03\x00\xb1\xcd\x7f="#;<2\x92\n?\x819\x10>|\x1d\xf1\xber\x164>\xe1\xe3\xfe\x18\xc0\x01\x01\xb2\x86\x99s=\xf23\xaa<\x86\xec\n?{\xe4)Dh\xa6\x02\x18$\xe8\xb8\xfd\xde)\xfe\x1c\xc1\x01\x01\xa3?ke\xb9U\x1f\x1f\xb8\x95XA9\x00\x00\x00\x00\x00\x00\x00\x00h\x01\xae'b'\xfe\x1a\xc9\x01\x01\x1b6\xdff\x0f\x00\x00\x00\x00\x1a\x00\xe8\xff6\xfc\x87\xff\xdd\xff\x82\x02\xf1\x00\x81\xffm\x01 \x06\xfe\x16\xca\x01\x01t`\xf1\x03\x00\x19\x00\xe8\xffF\xfcu\xff\xd5\xff\x81\x02\xec\x00$\xff\r\x02K=\xfe\x16\xcb\x01\x01\x81`\xf1\x03\x00\x0b\x00\xe9\xff4\xfc\x80\xff\xf1\xff\x89\x02%\x03\xe7\xff~\x02o\x14\xfe\x0e\xcc\x01\x01\x1d`\xf1\x03\x00\xcc\x9ciD33\x8f\xbdM\x10W\x9a\xfe\x0e\xcd\x01\x01\x89`\xf1\x03\x00F\xe1iD\xcc\xcc~>k\x15c\n\xfe\x1f\xce\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\xe2<\xec\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xb9*\xfe\x06\xcf\x01\x01}\xc5\x14\x00\x00\x03\x00\xdf\xfc\xfe\x04\xd0\x01\x01\x98\x00\x00\x80\x8a\xc6"\xfe\x02\xd1\x01\x01*\x00\x00\x9b\x9a\xfe\x1e\xd2\x01\x01\x18\x88{e\x0f\x00\x00\x00\x00h\xa6\x02\x18"\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\t\x00\xba\x17\x03\x0cMw\xfe\x1a\xd3\x01\x01>,\x82\xd7?\xcc\xdeQ\xbf3\x15n=\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00[\x1d\xfe\x08\xd4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xb8\xfe\x14\xd5\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xb8\x1e\x85?\\\x8fB>#\x00/\x00\xdda\xfe\x1c\xd6\x01\x01!\x05\xf1\x03\x00f\xa6\x02\x18\x19\xe8\xb8\xfd\xaa_\n\x00\x1a\x04\x00\x00\xfc\xff\xfd\xff\x11\x00\x9f\x0e\x0c]\xfe\x1c\xd7\x01\x01 \x9c\xf1\x03\x00?-\x06\xbd\xb8\xdf\x9c?\xcb[:\xbf\xeb\xbb,\xbds1\x15\xbd7\xba5\xbe\x1e\x03\xfe\x03\xd8\x01\x01Ms\x00\x00\x17e'b'\xfe\x1c\xd9\x01\x01\x1e\xc4\xf1\x03\x00\x05S\x18=\xde~\xcb\xbc\xb09/?\xee\xe6\n\xbd\xe6\x84\xf0=M\x98G?\x88\xa8\xfe\x18\xda\x01\x01\xb2\x9d\xb6\x16=\x8c\x87\xa6\xbck>.?\xb8\xde)Dh\xa6\x02\x18"\xe8\xb8\xfd\xbc\xb9\xfe\x1c\xdb\x01\x01\xa3\xf0$^\xb9\xbc\xc0i\xb8\xf2\x04G9\x00\x00\x00\x00\x00\x00\x00\x00z6\xeb<[I\xdf<\x03 \xfe\x03\xdc\x01\x01\xa5\xc8\x14\x00\xa1~\xfe\x0c\xdd\x01\x01\x02p^\xd0y\xb1N\x05\x00\xd8\xf1\x03\x00\t\xcd\xfe\x16\xde\x01\x01\x88f\xa6\x02\x18\x19\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9d\x83\xfe\x16\xdf\x01\x01\xc1\x8c\xc3I=\x08\x1d\xf7<\xee\xa6\xfb:\x08T\xff<\x00\x00\x00\x00?\x03\x1b\x7f'b'\xfe\x15\xe0\x01\x01$h\xa1i\x0f6\x06?\x066\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xb6\xfe\x16\xe1\x01\x01#\x14\xf2\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x009L\xfe\x03\xe2\x01\x01Ms\x00\x00L\xae\xfe\x1a\xe3\x01\x01\x1b\xaf\x8cj\x0f\x00\x00\x00\x00\x13\x00\xe0\xff\x10\xfc\xa1\xff\x96\x00K\x02\xd9\x00Z\xffj\x01\x04\x9d\xfe\x16\xe4\x01\x01tQ\xf2\x03\x00\x1f\x00\xdb\xff\x14\xfc\x9e\xff\x98\x00-\x02\xd8\x00\xf2\xfe\xff\x01\x8d\xce\xfe\x16\xe5\x01\x01\x81Q\xf2\x03\x00\x11\x00\xee\xff\x0f\xfcv\xff\xa0\x00H\x02\xf5\x02\xc9\xff\x8a\x02\\m\xfe\x0e\xe6\x01\x01\x1dQ\xf2\x03\x00\xd7\x9biD\x85\xeb\xad\xbdN\x106\xd0\xfe\x0e\xe7\x01\x01\x89Q\xf2\x03\x00s\xdfiD\x99\x99a>l\x15\xf3\xa1\xfe\x1f\xe8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xe2<{\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sq\xdc\xfe\x06\xe9\x01\x01}\xc5\x14\x00\x00\x03\x00"\xeb\xfe\x04\xea\x01\x01\x98\x00\x00\x80\x8a[\xce\xfe\x02\xeb\x01\x01*\x00\x00\x86\xa5\xfe\x1e\xec\x01\x01\x18\xb0\x8ch\x0f\x00\x00\x00\x00h\xa6\x02\x18!\xe8\xb8\xfd~h\n\x00F\x00\xff\xff\t\x00\xba\x17\x03\x0c$\x0f\xfe\x1a\xed\x01\x01>\xe80\x87?\xc7\x9b\xed=\xf5\xea}=\x00\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00en\xfe\x08\xee\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x84q'b'\xfe\x14\xef\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=p=\x8a?\x99\x99\x19>-\x002\x00\xd0\xb3\xfe\x03\xf0\x01\x01Ms\x00\x00[\xfe\xfe\x1c\xf1\x01\x01!\x97\xf2\x03\x00g\xa6\x02\x18\x1b\xe8\xb8\xfd\xc8_\n\x008\x04\x00\x00\x00\x00\x02\x00\x0e\x00,\x12F^\xfe\x1c\xf2\x01\x01 \xa1\xf2\x03\x00\xb5\xcc\x86\xbc<\x97\x9f?\x8c\x8fB\xbf\xb5\xf4\x92;Zg\xa5<[\xea\x18\xbe\xcfZ\xfe\t\xe6\n\x00m\n\x00\x00\x00\x00\xde\x00\x00\x008\x8d\xfe\x1c\xf3\x01\x01\x1e\xc9\xf2\x03\x00}\x92#\x12\x08\xf9>\x17\x98\xfe\x18\xf4\x01\x01\xb2\xe7\xf8D<\xd3b\x81<\xa5tT?\xb8\xde)Dh\xa6\x02\x18"\xe8\xb8\xfda\xa4'b'\xfe\x12\xf5\x01\x01\xfc\xdb\xf2\x03\x004\x00\x01\x00ARMMASK\x00Wr<\xca\xfe\t\xf6\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe3\x1d\xfe\x1c\xf7\x01\x01\xa3z\xa3V\xb9V\x18\x9a\xb8\x91QL9\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x8e\x00=\x82\x057=\xdds\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U\xfe\x0c\xf9\x01\x01\x02\x00\xac\xd4y\xb1N\x05\x00\xde\xf2\x03\x00\xa5\x95\xfe\x16\xfa\x01\x01\x88g\xa6\x02\x18\x1c\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x80\x9c\xfe\x16\xfb\x01\x01\xc1\xfeb =,v\xfd<5t\xee;\xb3A\x7f=\x00\x00\x00\x00?\x03\t\xdb\xfe\x03\xfc\x01\x01Ms\x00\x009\xc5\xfe\x15\xfd\x01\x01$\xe4\x9em\x0f=\x06s\x06\x08\x06\xbf\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80p\xfe\x16\xfe\x01\x01#\x1a\xf3\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb3\x9e'b"\xfe\x1a\xff\x01\x01\x1b\x88l\x15Q\x97\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x005\x00Z\xa9r\x8b?\xa4\x19\x03?\xb8\x0c\x83=\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x00\x00\x19\x92\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw\xfe\x03\x0b\x01\x01/\xff\x00\x00zb\xfe\x14\x0c\x01\x01J{\x14.>{\x14.>{\x14\x8e?)\\\x0f>7\x000\x00\xb4c\xfe\x03\r\x01\x01Ms\x00\x00\x1d\x07"b'\xfe\x1c\x0e\x01\x01!`\xf3\x03\x00h\xa6\x02\x18\x1e\xe8\xb8\xfd\xf0_\n\x00`\x04\x00\x00\x06\x00\xfa\xff\x0b\x00\x8b\x16\x0b\x12\xfe\x1c\x0f\x01\x01 \xa6\xf3\x03\x002\xd0N;5\x85\xa2?\x02\xffK\xbfry\x7f=\xdf\x95\x7f\xbd\xc4f\xe8\xbd\xec=\xfe\x1c\x10\x01\x01\x1e\xcf\xf3\x03\x00\xbe\xec\x9a\xbc2\xaa\x00=P\x81\x85?3\x13W\xbc\xb5C\x9a==If?\x9d\x0c\xfe\x18\x11\x01\x01\xb2Q\xf2\x8d\xbc\x05P\x16=\x9f\x05\x85?p\xed)Di\xa6\x02\x18%\xe8\xb8\xfd\xb8\xa6\xfe\x1c\x12\x01\x01\xa3Y\xcdN\xb9\xab\xa4\xbe\xb8\x12\x0fQ9\x00\x00\x00\x00\x00\x00\x00\x00%q\x0c=Y\x93L=\x9a\r\xfe\x03\x13\x01\x01\xa5\xc5\x14\x00\x8f\xea\xfe\x0c\x14\x01\x01\x02\xb8\x9f\xd8y\xb1N\x05\x00\xe3\xf3\x03\x00}\xdb\xfe\x16\x15\x01\x01\x88i\xa6\x02\x18\x1e\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00W\x89\xfe\x16\x16\x01\x01\xc1-\xd9!=>$\x0b=T\xe3\xd4;XW{=\x00\x00\x00\x00?\x03\xc0\x8b\xfe\x16\x17\x01\x01\xe1\xf4\xfd\x14?{\x14.>\xf5\xe26<\\bF<\x11A]?\x00\x1f2<\xfe\x03\x18\x01\x01Ms\x00\x00\x04\xcb'b'\xfe\x15\x19\x01\x01$\x1b\x9cq\x0f\x0f\x06s\x06I\x06\xd4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00bp\xfe\x16\x1a\x01\x01#\x1f\xf4\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbbk\xfe\x1a\x1b\x01\x01\x1b\xa3\xeaq\x0f\x00\x00\x00\x00\xff\xff\xcd\xff\x10\xfc\xe6\xff \x00\x82\x03}\x00\r\xffo\x01\x19T\xfe\x16\x1c\x01\x01t3\xf4\x03\x00\x00\x00\xdb\xff1\xfc\xce\xff+\x00]\x03\x88\x00\x9d\xfe\xff\x01\xf4;\xfe\x16\x1d\x01\x01\x813\xf4\x03\x00\xf9\xff\xd1\xff\x1f\xfc\xbb\xff8\x00x\x03w\x02\x83\xffv\x02\xf4\x8a\xfe\x0e\x1e\x01\x01\x1d3\xf4\x03\x00\x94\x9ciDp=\x96\xbdN\x10\x88\xf8\xfe\x0e\x1f\x01\x01\x893\xf4\x03\x00F\xe1iD\xcc\xcc~>m\x15\x05\xe2\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80eZ\xb7\xf2.?\xe4\xca\xd9?R\xfe\x8a=\x00\x00\x00\x00\x00\x00\x00\x00H\x00\x00\x00\x00\x007\xc5\xfe\x08&\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xf9'b"\xfe\x03'\x01\x01Ms\x00\x00>\x97\xfe\x14(\x01\x01J\n\xd7#>\n\xd7#>\x85\xeb\x91?\xcc\xcc\xcc=D\x005\x00\x04\xf4\xfe\x1c)\x01\x01!)\xf4\x03\x00k\xa6\x02\x18\x1d\xe8\xb8\xfd\x04`\n\x00t\x04\x00\x00\x0b\x00\xed\xff\x0c\x00M\x1b\xc6]\xfe\x1c*\x01\x01 \xab\xf4\x03\x00p\xf1*=\xd6\xc4\xa1?\xfa1R\xbf\xbf\xfb\xe9=9\xe2E\xbew\xe4\xfa\xbd\xc7\x17"b'\xfe\x1c+\x01\x01\x1e\xd4\xf4\x03\x00B\x05\x0e\xbc\x11l\x1e=\x13,\xa0?\xe0\xe8\x13=&\xcf/\xbd\x04\xebV?"E\xfe\x18,\x01\x01\xb2\xd0\x95\xcf\xbb\x8d-5=\xb1\xb0\x9f?\x99\xf9)Dk\xa6\x02\x18\'\xe8\xb8\xfd\x9f\xdc\xfe\x1c-\x01\x01\xa3\xc2\x92F\xb9\x8c\x81\xe2\xb8y\x80U9\x00\x00\x00\x00\x00\x00\x00\x00\xe6b\x1b=76U=w\x0f\xfe\x03.\x01\x01\xa5\xc8\x14\x00U6\xfe\x0c/\x01\x01\x02X\x97\xdcy\xb1N\x05\x00\xe8\xf4\x03\x00\x10&\xfe\x160\x01\x01\x88l\xa6\x02\x18\x1d\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x81\x80\xfe\x161\x01\x01\xc1S\x83)=\x89\x91\n=+\xd9im\x153\xd0\xfe\x1f8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01Z<\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S>P\xfe\x069\x01\x01}\xc5\x14\x00\x00\x03\x00y\xc5\xfe\x04:\x01\x01\x98\x00\x00\x80\x8a{\x13\xfe\x02;\x01\x01*\x00\x00TQ\xfe\x1e<\x01\x01\x18P\xd1t\x0f\x00\x00\x00\x00m\xa6\x02\x18\'\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x0b\x00\xba\x17\x03\x0c\xda\x85\xfe\x1a=\x01\x01>\x9c\xdb\xf1?\xe6\x1f?>G\xe2\x87=\x00\x00\x00\x00\x00\x00\x00\x00Y\x00\x00\x00\x00\x00g7\xfe\x08>\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x8e'b'\xfe\x15?\x01\x01$i\xe5u\x0f\x10\x06\x0b\x06\x17\x06\xed\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07G\xfe\x16@\x01\x01#8\xf5\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf8\xce\xfe\x03A\x01\x01Ms\x00\x00\x8eY\xfe\x14B\x01\x01J\xaeG\xe1=\xaeG\xe1==\n\x97?\n\xd7\xa3=Q\x003\x00\xcfW'b'\xfe\x1cC\x01\x01!\xf2\xf4\x03\x00o\xa6\x02\x18\x19\xe8\xb8\xfd6`\n\x00\xa6\x04\x00\x00\x0f\x00\xe4\xff\x07\x00\x92 :}\xfe\x1cD\x01\x01 \xb1\xf5\x03\x00 \x82\xaf=[8\x9d?\xb0\xe2\\\xbf-\xae\x1a>I\xc1\x90\xbe\xcc\xdc\xa2\xbd\xfeD\xfe\x1cE\x01\x01\x1e\xd9\xf5\x03\x00\xa4\'\xfb<\x10\xa7\x03<=\xe5\xbe?\x1c\xf0\x0f>\xec\xcf1\xbdpxp?")\xfe\x18F\x01\x01\xb2|Z\r=n\xfcCn\x15\x82M\xfe\x1fR\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x008\x01\x18<\xaa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xf1\x81\xfe\x06S\x01\x01}\xc5\x14\x00\x00\x03\x00~\xfd\xfe\x04T\x01\x01\x98\x00\x00\x80\x8a\xf4\xd9\xfe\x02U\x01\x01*\x00\x00\xf0s\xfe\x1eV\x01\x01\x18x\xe2w\x0f\x00\x00\x00\x00p\xa6\x02\x18$\xe8\xb8\xfd\xbah\n\x00F\x00\xff\xff\x16\x00\x84\x05\x03\x0c\x92\x96\xfe\x1aW\x01\x01>\x195%@]\x8d\xc9\xbf\xeb\xca\x98=\x00\x00\x00\x00\x00\x00\x00\x00i\x00\x00\x00\x00\x00\x81\x8d\xfe\x08X\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb8E\xfe\x15Y\x01\x01$\x16\xe2y\x0f\n\x06\x1e\x06\x18\x06\x02\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00h\xd5\xfe\x16Z\x01\x01#=\xf6\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe6\xa9'b'\xfe\x03[\x01\x01Ms\x00\x00%$\xfe\x14\\\x01\x01J\xaeGa>\xaeGa>G\xe1\x9a?\x8f\xc2\xf5=_\x002\x00jF\xfe\t\xe7\n\x00m\x07\x00\x00\x00\x00\xdb\x00\x00\x00\x14 \xfe\x1c]\x01\x01!\x84\xf6\x03\x00s\xa6\x02\x18\x13\xe8\xb8\xfdT`\n\x00\xc4\x04\x00\x00\n\x00\xe1\xff\x0c\x00\x0c&\x12\xbf\xfe\x1c^\x01\x01 \xb7\xf6\x03\x00:\xd1\x05>\x988\x96?b\xead\xbf4L\xd4=\xb8\xaa\xa0\xbeR`\xfe\xbd`\x9c'b'\xfe\x12_\x01\x01\xfc\xc8\xf6\x03\x004\x00\x01\x00ARMMASK\x00WrX\xe5\xfe\t`\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x87C\xfe\x1ca\x01\x01\x1e\xde\xf6\x03\x00\xb4\xa9<=\xeeuN\xbc\xa4\x96\xde?\xccp"\xbdv\x8e\x8b\xbd\xca\xcd}?\xf9Q\xfe\x18b\x01\x01\xb2\xf8\x02V=\xdbs8\xbcR4\xde?\xae\xe7)Dr\xa6\x02\x18\x1f\xe8\xb8\xfdyA\xfe\x1cc\x01\x01\xa3\xe9{4\xb9\xb7\x8c\x13\xb9\xa4t]9\x00\x00\x00\x00\x00\x00\x00\x00Q\xc7\x0f=%\xf7\x86=\x94<\xfe\x03d\x01\x01\xa5\xcb\x14\x00\xbaP\xfe\x0ce\x01\x01\x02\xb0\x82\xe4y\xb1N\x05\x00\xf2\xf6\x03\x00\xc9\xe3\xfe\x16f\x01\x01\x88t\xa6\x02\x18\x11\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x0f\xfe\x16g\x01\x01\xc1e4\xcd<4_\xae<.4N;_\x03\xe8=\x00\x00\x00\x00?\x03D\x82\xfe\x1ah\x01\x01\x1b\xee\xf2|\x0f\x00\x00\x00\x00\xea\xff\xdd\xff\xfe\xfb\xf4\xff\xb2\xff\xfa\x03\xeb\xff\x07\xff~\x01\xed\x95\xfe\x16i\x01\x01t\x06\xf7\x03\x00\xee\xff\xdf\xff\xfe\xfb\xfb\xff\xbe\xff\xc7\x03\xfa\xff\x85\xfe\x0b\x02Th\xfe\x16j\x01\x01\x81\x06\xf7\x03\x00\xeb\xff\xf7\xff\xfc\xfb\xe1\xff\xbf\xff\xca\x03\xc5\x01p\xff{\x02G\x14\xfe\x0ek\x01\x01\x1d\x06\xf7\x03\x00\x9d\x9biD\xb8\x1e\xb5\xbdP\x10\x8e\x95\xfe\x0el\x01\x01\x89\x06\xf7\x03\x00%\xdfiDR\xb8\\>o\x15\xa8\xa2\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x18<\x93\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x9bo\xfe\x06n\x01\x01}\xc5\x14\x00\x00\x03\x00\xdf\xd9\xfe\x03o\x01\x01Ms\x00\x00s\xdf\xfe\x04p\x01\x01\x98\x00\x00\x80\x8a(\x11\xfe\x02q\x01\x01*\x00\x00\x05\x7f\xfe\x1er\x01\x01\x18\xa0\xf3z\x0f\x00\x00\x00\x00r\xa6\x02\x18\x1f\xe8\xb8\xfd\xb0h\n\x00F\x00\xff\xff\x16\x00|\x85\x03\x0c\x04\x07\xfe\x1as\x01\x01>\t\xdf\xda?d\x97D\xc0\xae\xdb\xad=\x00\x00\x00\x00\x00\x00\x00\x00z\x00\x00\x00\x00\x00\xbea\xfe\x08t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xcb'b'\xfe\x15u\x01\x01$\xed\xdd}\x0f\x04\x06A\x067\x06\x0f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00`x\xfe\x16v\x01\x01#C\xf7\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa1\x9c'b'\xfe\x03w\x01\x01Ms\x00\x00\xb7\xa9\xfe\x03x\x01\x01/\xff\x00\x00\xd3`\xfe\x14y\x01\x01J\x00\x00\x80>\x00\x00\x80>\x00\x00\xa0?\n\xd7#>m\x000\x00*Y\xfe\x1cz\x01\x01!L\xf7\x03\x00u\xa6\x02\x18\x0b\xe8\xb8\xfd|`\n\x00\xec\x04\x00\x00\x04\x00\xe2\xff\x0e\x00\xa8+\xb4\xa1\xfe\x1c{\x01\x01 \xbb\xf7\x03\x00\x8e\x82\x18>\x11\x1f\x8e?\x05\xe1n\xbf\xffJK=\xc6\x08\x9d\xbe-\xdd\x16\xbe\xbd]\xfe\x1c|\x01\x01\x1e\xe3\xf7\x03\x00\x9e$$=\xa8\xbb \xbd\x8f\xb9\xfe?\xb4\x08\x02>\xf9\x80\x89\xbd\xfa\x1bx?\xb2:\xfe\x18}\x01\x01\xb2\xab\xff6=\x84\xfe!\xbd\xbac\xfe?\xd7\xf3)Dt\xa6\x02\x18\x1a\xe8\xb8\xfd!('b'\xfe\x1a~\x01\x01\x1b\xef\xa1\x80\x0f\x00\x00\x00\x00\xe1\xff\xcf\xffC\xfc\xbb\x00k\xff\xc3\x03\xac\xff\x15\xff\x80\x01\xc9\xf2\xfe\x16\x7f\x01\x01t\xf8\xf7\x03\x00\xe9\xff\xd5\xffI\xfc\x8e\x00x\xff\xc5\x03\xbc\xff\x90\xfe\x0b\x02\x0f\xeb\xfe\x16\x80\x01\x01\x81\xf8\xf7\x03\x00\xe2\xff\xd5\xff6\xfc\x9a\x00^\xff\xcc\x03q\x01\x84\xffw\x02ua\xfe\x0e\x81\x01\x01\x1d\xf8\xf7\x03\x00\xb5\x9ciD{\x14\x92\xbdP\x10\xdbQ\xfe\x0e\x82\x01\x01\x89\xf8\xf7\x03\x00\xb7\xdeiD\n\xd7U>o\x15<\x12\xfe\x1f\x83\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x002\x01\x18\x1e\x85\x1b@\xcd\xcc\x1c\xc0G\x94\xbd=\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\x00\x00\x00\x00\x19\xd5\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1\xfe\x1c\x8b\x01\x01\xa3D/*\xb9\x14\xc9$\xb9\x02\xb4`9\x00\x00\x00\x00\x00\x00\x00\x002B\n=\x9fJ\x92=\x85E\xfe\x03\x8c\x01\x01\xa5\xc8\x14\x00(@\xfe\x0c\x8d\x01\x01\x02X\xcc\xe8y\xb1N\x05\x00\x0c\xf8\x03\x00&\xc3\xfe\x16\x8e\x01\x01\x88u\xa6\x02\x18\t\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00G\x8e\xfe\x12\x8f\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x0eq\xfe\x16\x90\x01\x01\xc1\xf3\xee\xb6<\x9b\x1d\x9a<\tiU<6\x11\xf8=\x00\x00\x00\x00?\x03\x02n\xfe\x16\x91\x01\x01\xe1\x90\xc2\x15?\xaf\x01#>\xf5\xe26<\\bF<\x89\x94u?\x00\x1f\xa1\x86\xfe\x15\x92\x01\x01$\x00\xda\x81\x0f5\x06_\x06B\x06\x0c\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xf0\xfe\x16\x93\x01\x01#H\xf8\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd5\x1b'b'\xfe\x03\x94\x01\x01Ms\x00\x00\x84;\xfe\x14\x95\x01\x01J\xe1z\x94>\xe1z\x94>\\\x8f\xa2?\xb8\x1e\x05>{\x007\x00?I'b'\xfe\x1c\x96\x01\x01!\x16\xf8\x03\x00u\xa6\x02\x18\x04\xe8\xb8\xfd\x90`\n\x00\x00\x05\x00\x00\xfb\xff\xe5\xff\x10\x00\x111x6\xfe\x1c\x97\x01\x01 \xc0\xf8\x03\x00\xab6\x1f>\x16\xc4\x85?\xa1\xcbt\xbf\x18\xa9e\xbd4\n\x8f\xbe\xaf\xdc%\xbe\xf2=\xfe\x1a\x98\x01\x01\x1b\x88L\x84\x0f\x00\x00\x00\x00\xe0\xff\xfc\xff\xf2\xfb\xaf\xff\xe2\xff\x90\x03\x92\xff2\xff\x89\x014,\xfe\x16\x99\x01\x01t\xe8\xf8\x03\x00\xeb\xff\x00\x00\x06\xfc\xba\xff\xe0\xff\x91\x03\x9f\xff\x95\xfe\x0f\x02xi\xfe\x16\x9a\x01\x01\x81\xe8\xf8\x03\x00\xdb\xff\xfc\xff\xf4\xfb\xbe\xff\xd4\xff\x9c\x03X\x01x\xff\x93\x02\x88\x0b\xfe\x0e\x9b\x01\x01\x1d\xe8\xf8\x03\x00\x82\x9aiD\xe1z\xd8\xbdP\x10\xbc\xb6\xfe\x0e\x9c\x01\x01\x89\xe8\xf8\x03\x00\xc1\xddiD\xe1zF>o\x15\xe3\r\xfe\x1f\x9d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\x18<\xdd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SBv\xfe\x06\x9e\x01\x01}\xc5\x14\x00\x00\x03\x00\x0e\x15\xfe\x04\x9f\x01\x01\x98\x00\x00\x80\x8a\x8dR\xfe\x02\xa0\x01\x01*\x00\x00\x02\x14\xfe\x1e\xa1\x01\x01\x180#\x84\x0f\x00\x00\x00\x00v\xa6\x02\x18\x0c\xe8\xb8\xfd\xf6h\n\x00F\x00\xff\xff\x16\x00\x89w\x03\x0c\x934\xfe\x1a\xa2\x01\x01>\xa7\xe5\x07\xbf\xad@\xbf\xc0\x00Q\xd9=\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x003\xa4\xfe\x08\xa3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa4,\xfe\x1c\xa4\x01\x01\x1e\xfc\xf8\x03\x00h\x15>=0S\xcc\xbdt\xc7\x0f@W6\x88\xbdn\xd8Q;\\\xeej?\xdd8\xfe\x18\xa5\x01\x01\xb2V\xa7W=\x06\x07\xd3\xbd\x83\xad\x0f@\xeb\xf1)Dv\xa6\x02\x18\x0c\xe8\xb8\xfd\xdc\xc2\xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd\xfe\x1c\xa7\x01\x01\xa3){ \xb9\xc6@4\xb9\xe5\xeeb9\x00\x00\x00\x00\x00\x00\x00\x00\xd6\xe3\x0c=\x08+\x9a=x\xca\xfe\x03\xa8\x01\x01\xa5\xc0\x14\x00\xde\x05\xfe\x0c\xa9\x01\x01\x02\x10\xc0\xecy\xb1N\x05\x00\x10\xf9\x03\x00\xe5R\xfe\x16\xaa\x01\x01\x88u\xa6\x02\x18\x02\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1a\xd1\xfe\x16\xab\x01\x01\xc1\xd07\xd7<\x8c\xa4\x16\xaeGa>\xc2\xf5\xa8?\xb8\x1e\x05>\x89\x002\x00y4\xfe\x1c\xb0\x01\x01!\xa7\xf9\x03\x00r\xa6\x02\x18\xfe\xe7\xb8\xfd\xc2`\n\x002\x05\x00\x00\xed\xff\xec\xff\x0b\x00b6\xcd\xda\xfe\x1c\xb1\x01\x01 \xc5\xf9\x03\x00\xe5\xd6\xf0=j:\x7f?\x97=\x80\xbft=E\xbeL\x85M\xbe\x84\x1d\xf3\xbdL\x88\xfe\x1a\xb2\x01\x01\x1bF\xfa\x87\x0f\x00\x00\x00\x00\xe9\xff\xf5\xff.\xfc\xaf\xff\xb1\x00\xb5\x03n\xffJ\xff\x8b\x01\n\x8c\xfe\x16\xb3\x01\x01t\xd9\xf9\x03\x00\xe9\xff\x04\x00=\xfc\xc2\xff\xaa\x00\x94\x03\x7f\xff\xc1\xfe\x1b\x02w\xa7\xfe\x16\xb4\x01\x01\x81\xd9\xf9\x03\x00\xe1\xff\x12\x003\xfc\x00\x00\x94\x00\x87\x03"\x01\xb2\xff\x88\x02\xa7\x9c\xfe\x0e\xb5\x01\x01\x1d\xd9\xf9\x03\x00\xe1\x9aiD\xd7\xa3\xcc\xbdQ\x10]\xa2\xfe\x0e\xb6\x01\x01\x89\xd9\xf9\x03\x00\x14\xdeiD\x14\xaeK>q\x15\x122\xfe\x1f\xb7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xcd\x00c<5\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S~\xe2\xfe\x06\xb8\x01\x01}\xc5\x14\x00\x00\x03\x00\xf3\x02\xfe\x04\xb9\x01\x01\x98\x00\x00\x80\x8a\xab\x01\xfe\x02\xba\x01\x01*\x00\x00\x9cH\xfe\x1e\xbb\x01\x01\x18X4\x87\x0f\x00\x00\x00\x00u\xa6\x02\x18\x06\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x13\x00\x89w\x03\x0cE\xa1\xfe\x1a\xbc\x01\x01>\xcd\xdd7\xc0\xae\x05o\xc0\x14\xd0\xd5=\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\x00\x00\x8b\xdb\xfe\x08\xbd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf2F'b'\xfe\x1c\xbe\x01\x01\x1e\x02\xfa\x03\x00(\xbb\x1c;D\xae\x88\xbd]\x16\x1f@\xaa\x97\x1d\xbe\xcf&H>\nDl?\xc5\xe1\xfe\x18\xbf\x01\x01\xb2\x04\xad\r\x00\x00\x00\x00?\x03\xa9\x91'b'\xfe\x15\xc6\x01\x01$\xf8\xd1\x89\x0f+\x06P\x06$\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x99\xfe\x16\xc7\x01\x01#R\xfa\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\x96\xfe\t\xe8\n\x00m\x01\x00\x00\x00\x00\xd6\x00\x00\x00V+\xfe\x03\xc8\x01\x01Ms\x00\x00o>\xfe\x14\xc9\x01\x01J\xebQ8>\xebQ8>\xcd\xcc\xac?{\x14.>\x96\x002\x00\xd1\x03\xfe\x12\xca\x01\x01\xfc\xb4\xfa\x03\x004\x00\x01\x00ARMMASK\x00Wr\xed\xc8\xfe\t\xcb\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xbb\x0c'b'\xfe\x1a\xcc\x01\x01\x1bQ\xa9\x8b\x0f\x00\x00\x00\x00\xdf\xff\xf5\xff\x19\xfc\x1b\x00x\x00\x8d\x03*\xffq\xff|\x01EG\xfe\x16\xcd\x01\x01t\xcb\xfa\x03\x00\xdb\xff\xf8\xff\x1d\xfc\xfa\xffr\x00\x8a\x036\xff\xd9\xfe\x05\x028\xbb\xfe\x16\xce\x01\x01\x81\xcb\xfa\x03\x00\xdc\xff\x03\x00\x14\xfc\xf1\xffe\x00\x99\x03\xd9\x00\xd6\xfff\x02\xc90\xfe\x0e\xcf\x01\x01\x1d\xcb\xfa\x03\x00\xb3\x9biDff\xb2\xbdQ\x10\nh\xfe\x0e\xd0\x01\x01\x89\xcb\xfa\x03\x00\x9d\xdeiDp=T>q\x15>\xd5\xfe*\xd1\x01\x01\x96s\xe7f\xbc\x03m\x01\x00Q\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x86\t\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x009\x01c<\x94\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xd5u\xfe\x06\xd3\x01\x01}\xc8\x14\x00\x00\x03\x00*A\xfe\x04\xd4\x01\x01\x98\x00\x00\x80\x8a#\x1d\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5\xfe\x1e\xd6\x01\x01\x18\x80E\x8a\x0f\x00\x00\x00\x00r\xa6\x02\x18\x03\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x12\x00\x89w\x03\x0c{\x05\xfe\x1a\xd7\x01\x01>\xe6\x8cp\xc0\x82\xfd\xeb\xbf\x85\xbb\xe8=\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\xe7J\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83\xfe\x1c\xd9\x01\x01!p\xfa\x03\x00m\xa6\x02\x18\xfa\xe7\xb8\xfd\xe0`\n\x00P\x05\x00\x00\xec\xff\xf3\xff\x12\x00#<\xb5/\xfe\x1c\xda\x01\x01 \xdf\xfa\x03\x00g\x03i=3\x05w?\x8b4\x84\xbf\xda\x9fS\xbe@U\x0e\xbeKS8\xbeRG\xfe\x1c\xdb\x01\x01\x1e\x07\xfb\x03\x00\x8a\xa3\xd5\xbc\x8e$\xbf\xbcsG.@9+\xd5;\xaf\xaf\xc4=L\xcaq?\x90\x15\xfe\x18\xdc\x01\x01\xb24\x97\xb8\xbc4\xeb\xf1\xbc#o.@\n\xe7)Dr\xa6\x02\x18\x03\xe8\xb8\xfdQf\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2'b'\xfe\x1c\xde\x01\x01\xa30\x89\x0c\xb9jyQ\xb9\xea\x80e9\x00\x00\x00\x00\x00\x00\x00\x00Xu\x02=\xad\xca\x96=f\xf4\xfe\x03\xdf\x01\x01\xa5\xc5\x14\x00\xfe\x7f\xfe\x0c\xe0\x01\x01\x02P\xaf\xf4y\xb1N\x05\x00\x1b\xfb\x03\x00\x96\xc5\xfe\x16\xe1\x01\x01\x88l\xa6\x02\x18\xfa\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa8\x96\xfe\x16\xe2\x01\x01\xc1\x83\xf8\x1d=g{l\x00\x00\x00\x00?\x03\x18!\xfe\x15\xe3\x01\x01$\n\xcf\x8d\x0f\x16\x06B\x06\x0f\x06\r\x06\x00\x00\x00\x00\x00\x00\x00\x00\x005(\xfe\x16\xe4\x01\x01#W\xfb\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb9n'b'\xfe\x03\xe5\x01\x01Ms\x00\x00B2\xfe\x14\xe6\x01\x01J\x8f\xc2u>\x8f\xc2u>\x85\xeb\xb1?\xebQ8>\xa4\x000\x00\x96\x01\xfe\x1a\xe7\x01\x01\x1bCX\x8f\x0f\x00\x00\x00\x00\xdd\xff\xff\xffL\xfc3\x00&\x00\x95\x03\x0f\xff\x9e\xfft\x01\x9e\xb3\xfe\x16\xe8\x01\x01t\xbc\xfb\x03\x00\xe4\xff\xfe\xff[\xfc(\x005\x00v\x03\x13\xff\xfd\xfe\x01\x02\xe6%\xfe\x16\xe9\x01\x01\x81\xbc\xfb\x03\x00\xe1\xff\x06\x00N\xfc{\x006\x00^\x03\xb0\x00\xe5\xff}\x02\xf1h\xfe\x0e\xea\x01\x01\x1d\xbc\xfb\x03\x00\x05\x9aiD\xf5(\xe8\xbdQ\x10r\xe5\xfe\x0e\xeb\x01\x01\x89\xbc\xfb\x03\x00\x02\xddiD\\\x8f:>q\x15\x0c\xff\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01c<\x0c\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Sm\xce\xfe\x06\xed\x01\x01}\xc6\x14\x00\x00\x03\x00\x19\x1d\xfe\x03\xee\x01\x01/\xff\x00\x00\xf8\xed\xfe\x04\xef\x01\x01\x98\x00\x00\x80\x8aC\xbc\xfe\x02\xf0\x01\x01*\x00\x00\xcdf\xfe\x1e\xf1\x01\x01\x18\x90Z\x8d\x0f\x00\x00\x00\x00m\xa6\x02\x18\x01\xe8\xb8\xfd\x00i\n\x00F\x00\xff\xff\x18\x00}f\x03\x0c\xbe\n\xfe\x1a\xf2\x01\x01>\x1e\x85{\xc0\n\xd7\x03@Ge\xda=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\xd6\xa4\xfe\x08\xf3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00%\x15'b'\xfe\x1c\xf4\x01\x01!:\xfb\x03\x00h\xa6\x02\x18\xf8\xe7\xb8\xfd\x08a\n\x00x\x05\x00\x00\xf3\xff\xf5\xff\x0e\x00iA\x94\x14\xfe\x1c\xf5\x01\x01 \xe6\xfb\x03\x00h\xc5\xaf;q/s?\xc2\xa0\x89\xbf\xf6\xa3\r\xbef\xaa\xee\xbdY\xc4\x12\xbe\x1f[\xfe\x03\xf6\x01\x01Ms\x00\x00\xea\xe3\xfe\x1c\xf7\x01\x01\x1e\r\xfc\x03\x008C\xdb\xbc\x8f\xde\xac;~N=@\xe3\x9d<\xbd\xd1\xcd >\x00\x12^?%\x9e\xfe\x18\xf8\x01\x01\xb2\xa2?\xbc\xbcT_9\xbb\xe1\x97=@\x99\xe9)Dj\xa6\x02\x18\xfe\xe7\xb8\xfd\xcek\xfe\x1c\xf9\x01\x01\xa3[P\x02\xb9mH_\xb9\xb7Lf9\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xcd\xc5<="\x8b=\xbf{\xfe\x03\xfa\x01\x01\xa5\xc8\x14\x00\xe0\xd5\xfe\x0c\xfb\x01\x01\x02\xf0\xa6\xf8y\xb1N\x05\x00!\xfc\x03\x00\x02\xac\xfe\x16\xfc\x01\x01\x88h\xa6\x02\x18\xf8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xe3\x12\xfe\x16\xfd\x01\x01\xc1u\xbf\xe3\x00\x00\x00\x00?\x03rY\xfe\x16\xfe\x01\x01\xe1+\x87\x16?\xcc\xccL>\xf5\xe26<\\bF<\x07R\x92?\x00\x1f\x1fX'b'\xfe\x15\xff\x01\x01$\x01\xd1\x91\x0f\xf1\x05\n\x06\xa1\x06\x93\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xf4\xfe\x16\x00\x01\x01#^\xfc\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbb\xc2\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b"\xfe\x1a\x02\x01\x01\x1b\xb8\x0b\x93\x0f\x00\x00\x00\x00\xec\xff\x0c\x00\xcb\xfb'\x004\x00\x88\x01\xf6\xfe\xe0\xffg\x01\x81\xd7\xfe\x16\x03\x01\x01t\xaf\xfc\x03\x00\xe8\xff\x0f\x00\xd4\xfb\x18\x007\x00\x86\x01\xea\xfe\x1b\xff\xea\x01\xc1z\xfe\x16\x04\x01\x01\x81\xaf\xfc\x03\x00\xdf\xff\x17\x00\xd3\xfb)\x00A\x00\x8d\x01\x7f\x00\xed\xffo\x02\x98\xca\xfe\x0e\x05\x01\x01\x1d\xaf\xfc\x03\x00\xe2\x9biD\xe1z\xac\xbdQ\x10\x1c\x02\xfe\x0e\x06\x01\x01\x89\xaf\xfc\x03\x00E\xe0iDR\xb8n>s\x15r/\xfe\x1f\x07\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00'\x01\xe2;\xae\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x04\x01\xfe\x06\x08\x01\x01}\xc8\x14\x00\x00\x03\x00h-\xfe\x04\t\x01\x01\x98\x00\x00\x80\x8a\xd1\xcd\xfe\x02\n\x01\x01*\x00\x00\xcb\x18\xfe\x1e\x0b\x01\x01\x18\xc0.\x93\x0f\x00\x00\x00\x00i\xa6\x02\x18\xfe\xe7\xb8\xfd\x14i\n\x00F\x00\xff\xff\x10\x00}f\x03\x0cPx\xfe\x1a\x0c\x01\x01>/m4\xc0\x91\x8f\xa0?\xeb\x99\x04>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x18\xd4\xfe\x08\r\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00 o\xfe\x14\x0e\x01\x01J\n\xd7#>\n\xd7#>33\xb3?{\x14.>\xaf\x007\x00\xdd\xc4\xfe\x1c\x0f\x01\x01!\xb8\xfc\x03\x00f\xa6\x02\x18\xf7\xe7\xb8\xfd\x12a\n\x00\x82\x05\x00\x00\x00\x00\xf7\xff\x14\x00\x18Es]\xfe\x1c\x10\x01\x01 \xeb\xfc\x03\x00\x9al\xbb\xbc\x7f\xabo?\r\xad\x8a\xbfF^\xd4\xbb\x81\x92\xc8\xbdd6Q\xbe\xd8 "b"\xfe\x1c\x11\x01\x01\x1e\x13\xfd\x03\x00Vw\xae\xbc\xea \xdc<\xa5\xd6F@u.9\xbb\xd3\xc5\x0c<\xff\xeb\x01?[\xba\xfe\x18\x12\x01\x01\xb2\x94\xe0\x92\xbc\x0f\xb1\xa4<\x97bG@\xa4\xe0)Di\xa6\x02\x18\xfe\xe7\xb8\xfd\x03\x9b\xfe\x03\x13\x01\x01Ms\x00\x00hl\xfe\x1c\x14\x01\x01\xa3\x8e\xc8\xef\xb8\xc8\x8dl\xb9\xeb\xedf9\x00\x00\x00\x00\x00\x00\x00\x00\xb1#\xd2<\x9d\xd2e=\xf5\xb9\xfe\x03\x15\x01\x01\xa5\xc2\x14\x00\x1f\xa0\xfe\x0c\x16\x01\x01\x02\x98\xf0\xfcy\xb1N\x05\x00'\xfd\x03\x00\x9d\xce\xfe\x16\x17\x01\x01\x88f\xa6\x02\x18\xf7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00F2\xfe\x16\x18\x01\x01\xc1\xc6\x0f\xe0<\xbe\x82\x92<\xe8\x16\x93<\x84\x1e)>\x00\x00\x00\x00?\x03=i\xfe\x15\x19\x01\x01$\x03\xcb\x95\x0f\xc7\x05\xf4\x05x\x06\x82\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\n\xfe\x16\x1a\x01\x01#c\xfd\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00;\xfd"b'\xfe\x1a\x1b\x01\x01\x1b\xa2\xba\x96\x0f\x00\x00\x00\x00\xea\xff\x08\x00\x13\xfc\x1b\x00\xc5\xfft\x00\xec\xfe\xfc\xffk\x01\x9e2\xfe\x16\x1c\x01\x01t\xa0\xfd\x03\x00\xe9\xff\x10\x00\x1e\xfc\x18\x00\xc8\xffo\x00\xe4\xfeK\xff\xf3\x01\xff#\xfe\x16\x1d\x01\x01\x81\xa0\xfd\x03\x00\xea\xff\x15\x00\x10\xfc-\x00\xad\xffl\x00Z\x00Y\x00J\x02H}\xfe\x0e\x1e\x01\x01\x1d\xa0\xfd\x03\x00O\x9biDG\xe1\xbe\xbdQ\x10\xdf\x14\xfe\x0e\x1f\x01\x01\x89\xa0\xfd\x03\x00\x9c\xdeiD\xf5(T>s\x15\xf0`\xfe\x1f \x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe2;\xde\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\rF\xfe\x06!\x01\x01}\xc5\x14\x00\x00\x03\x00\x96\x08\xfe\x03"\x01\x01Ms\x00\x00_\x00\xfe\x04#\x01\x01\x98\x00\x00\x80\x8a\xd8\xde\xfe\x02$\x01\x01*\x00\x00i\xfd\xfe\x1e%\x01\x01\x18\xf0\x91\x96\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfd\xe7\xb8\xfd\x1ei\n\x00F\x00\xff\xff\x04\x00}f\x03\x0c\x82\xc1\xfe\x1a&\x01\x01>6\x01!\xc0d\t\x03=\xa48\x0e>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x11%\xfe\x08\'\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xfc\xfe\x14(\x01\x01J\xcc\xccL=\xcc\xccL==\n\xb7?\x8f\xc2u>\xb4\x003\x00au'b"\xfe\x1c)\x01\x01!\x96\xfd\x03\x00h\xa6\x02\x18\xf6\xe7\xb8\xfd0a\n\x00\xa0\x05\x00\x00\r\x00\xf9\xff\x17\x00gF\xaa\x8a\xfe\x1c*\x01\x01 \xf0\xfd\x03\x00r\xb6\xf8\xbb\x86\xd6m?`U\x8f\xbf\xe84\n>\xc8\x91\xa1\xbd\xd1ps\xbe\xdf\xd4\xfe\x1c+\x01\x01\x1e\x18\xfe\x03\x00D'\xb7\xbc\xde\x82I<&\xc7H\xc0\x13\xc9\xfd\xbc\xf4\xf9\x04\xbee\x9eK\xba\xb8\xbc\xfe\x18,\x01\x01\xb2\xe8\xa2\x8f\xbcR\x8e\xd3;A\xfcG\xc0\xb8\xfe)Dj\xa6\x02\x18\xfd\xe7\xb8\xfd\x9b5\xfe\x03-\x01\x01Ms\x00\x00\xed\xb1\xfe\x1c.\x01\x01\xa3\xef\x86\xda\xb8Owy\xb9_\x9ag9\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xe2\xb0<@\xa02=i\x10\xfe\x03/\x01\x01\xa5\xc5\x14\x00e<\xfe\x0c0\x01\x01\x02\x18\x9a\x00z\xb1N\x05\x00,\xfe\x03\x00>5\xfe\x161\x01\x01\x88h\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8d\x1f\xfe\x162\x01\x01\xc1B9\x9d<\xda\xfa\xd4<\xca\x06\x88;\xd3\xe4$>\x00\x00\x00\x00?\x03q-"b'\xfe\x153\x01\x01$A\xce\x99\x0f\x00\x06!\x06/\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82F\xfe\x164\x01\x01#j\xfe\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00a\x97\xfe\t\xe9\n\x00m\x01\x00\x00\x00\x00\xd7\x00\x00\x00\xf8^\xfe\x1a5\x01\x01\x1bhh\x9a\x0f\x00\x00\x00\x00\xf2\xff\x10\x00<\xfc\x0c\x00{\xff+\x00\xf2\xfe\x02\x00o\x01J\xa9\xfe\x166\x01\x01t\x91\xfe\x03\x00\xf2\xff\x14\x00K\xfc\xf9\xff\x82\xff\'\x00\xef\xfea\xff\x03\x02\x16\x8d\xfe\x167\x01\x01\x81\x91\xfe\x03\x00\xea\xff\x15\x006\xfc\xfb\xff{\xff"\x00\x83\x00J\x00u\x02\xc7:\xfe\x0e8\x01\x01\x1d\x91\xfe\x03\x00\xb3\x9biDff\xb2\xbdR\x10>\xe8\xfe\x0e9\x01\x01\x89\x91\xfe\x03\x00\xdd\xddiDp=H>s\x15J\xc0\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xb6\x00\xe2;\xd2\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x11K\xfe\x06;\x01\x01}\xc2\x14\x00\x00\x03\x00C\xa9\xfe\x04<\x01\x01\x98\x00\x00\x80\x8ad\xb7'b'\xfe\x02=\x01\x01*\x00\x00\x99\t\xfe\x1e>\x01\x01\x18\x18\xa3\x99\x0f\x00\x00\x00\x00m\xa6\x02\x18\xfd\xe7\xb8\xfd\xff\xd6\x13\xc0 F\xc1\xbfG.\x0b>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x90W\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002\xfe\x12A\x01\x01\xfc\xa3\xfe\x03\x004\x00\x01\x00ARMMASK\x00Wrg\x83\xfe\tB\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xec\x1b\xfe\x03C\x01\x01Ms\x00\x04\x815\xfe\x14D\x01\x01J)\\\x8f=)\\\x8f=\xa4p\xbd?\n\xd7#>\xb4\x005\x00\t@\xfe\x1cE\x01\x01!_\xfe\x03\x00k\xa6\x02\x18\xf6\xe7\xb8\xfdXa\n\x00\xc8\x05\x00\x00\x12\x00\xfd\xff\x11\x00|F\x03\x13\xfe\x1cF\x01\x01 \xf6\xfe\x03\x00O\x04&=\xf2\x15n?o\x9b\x94\xbf\xa0\x9d?>\xfc\xdf!\xbdm\xf54\xbe\xbf\xce'b'\xfe\x1cG\x01\x01\x1e\x1e\xff\x03\x00"/\xe7\xbc=i\xcc\xbcQ\x9eH\xc0\x9e\xe13;v<\x02\xbe\xb0%)\xbdr-\xfe\x18H\x01\x01\xb2N5\xc4\xbc\xe6\n\xfc\xbcg\xd7G\xc0\xc2\xf5)Dq\xa6\x02\x18\xfe\xe7\xb8\xfd\xd6\xbb\xfe\x1cI\x01\x01\xa3\x80\xea\xc4\xb8R \x83\xb9Z\x9bh9\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x8d\xae<\xcdE\xdc<\x10\xc3\xfe\x03J\x01\x01\xa5\xc5\x14\x00\x05x\xfe\x0cK\x01\x01\x02\xb8\x91\x04z\xb1N\x05\x002\xff\x03\x00\xe6\xd6\xfe\x16L\x01\x01\x88l\xa6\x02\x18\xf6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbb\x9f\xfe\x16M\x01\x01\xc1\xcep\xe2<\x05k;=\x1e\xf1\xb1;\'\xf06>\x00\x00\x00\x00?\x03ER\xfe\x03N\x01\x01Ms\x00\x04\\\x8f'b'\xfe\x15O\x01\x01$\xf8\xc7\x9d\x0f+\x06\x18\x06/\x06<\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x1d\xfe\x16P\x01\x01#n\xff\x03\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf5b\xfe\x1aQ\x01\x01\x1bx\x15\x9e\x0f\x00\x00\x00\x00\xfa\xff\xfe\xff$\xfc&\x00\xb6\xff\xe4\xff\x05\xff\x00\x00y\x01L\xf0\xfe\x16R\x01\x01t\x82\xff\x03\x00\xfa\xff\x05\x00.\xfc \x00\xbc\xff\xf1\xff\xfd\xfe^\xff\r\x02\xd6\xf0\xfe\x16S\x01\x01\x81\x82\xff\x03\x00\xf3\xff\x14\x00-\xfc(\x00\xbb\xff\xde\xff\x8f\x00O\x00\x84\x02\xe3\xe0\xfe\x0eT\x01\x01\x1d\x82\xff\x03\x00%\x99iD{\x14\x02\xbeR\x10\x9ch\xfe\x0eU\x01\x01\x89\x82\xff\x03\x00\xb7\xddiD\n\xd7E>t\x15g\xb8\xfe\x1fV\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01\xe2;\xfc\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe0B\xfe\x06W\x01\x01}\xc5\x14\x00\x00\x03\x00+\xa3\xfe\x04X\x01\x01\x98\x00\x00\x80\x8a\xdb\x99\xfe\x02Y\x01\x01*\x00\x00j\xc2\xfe\x1eZ\x01\x01\x18 f\x9c\x0f\x00\x00\x00\x00q\xa6\x02\x18\xfe\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x11\x00}f\x03\x0c\x92.\xfe\x1a[\x01\x01>\xfb\xcb\xe4\xbf\xd8\xbc\x18\xc0fN\x07>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc3\xbb\xfe\x08\\\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0cS\xfe\x03]\x01\x01Ms\x00\x04\xf4^'b'\xfe\x14^\x01\x01J{\x14.>{\x14.>\\\x8f\xc2?\x99\x99\x19>\xb4\x002\x00\r\xb4\xfe\x03_\x01\x01/\xff\x00\x00-J\xfe\x1c`\x01\x01!\xf0\xff\x03\x00p\xa6\x02\x18\xf8\xe7\xb8\xfd\x8aa\n\x00\xfa\x05\x00\x00\x0f\x00\x01\x00\x0e\x00eF\xb4@\xfe\x1ca\x01\x01 \xfa\xff\x03\x00\x16\xdf\xc5=\xfdGr?j\xbd\x99\xbf\xe8\xbe >\x97\x1e@<\xfaz\x17\xbe\xc9\xd7\xfe\x1cb\x01\x01\x1e"\x00\x04\x00\xca\x7f\xc6\xbcn\xd56\xbd\xbd\xf7H\xc0*1 \xbc\xc2\r\xec\xbd*;\xae\xbdU\xfc\xfe\x18c\x01\x01\xb2r\xd1\xa1\xbc<\xf8K\xbd\xf0/H\xc0f\xf6)Dv\xa6\x02\x18\x00\xe8\xb8\xfd]\x96'b'\xfe\x03d\x01\x01Ms\x00\x04\x7f\x1f\xfe\x1ce\x01\x01\xa3\xae*\xaf\xb8p\x95\x89\xb9\x92\x03j9\x00\x00\x00\x00\x00\x00\x00\x001N\x96<@\x88\x8c<\x1c\x82\xfe\x03f\x01\x01\xa5\xc5\x14\x00\x97\xf5\xfe\x0cg\x01\x01\x02X\x89\x08z\xb1N\x05\x007\x00\x04\x00{\x85\xfe\x16h\x01\x01\x88q\xa6\x02\x18\xf9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00;\x91\xfe\x12i\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00_U\xfe\x16j\x01\x01\xc1\xe5E\xb3<\x18\x14X=o\x8f\xff8A\xcb\x1d>\x00\x00\x00\x00?\x03\xc3\x01\xfe\x16k\x01\x01\xe1P\x8d\x17?\xd5+>>\xf5\xe26<\\bFv\x15\xb6\x19\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xfc;\xc6\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x84\x8d\xfe\x06r\x01\x01}\xc5\x14\x00\x00\x03\x00eJ\xfe\x04s\x01\x01\x98\x00\x00\x80\x8a/\xc7\xfe\x02t\x01\x01*\x00\x00\xa6\x8f\xfe\x1eu\x01\x01\x18\x80\xc1\x9f\x0f\x00\x00\x00\x00v\xa6\x02\x18\x00\xe8\xb8\xfdPi\n\x00F\x00\xff\xff\x12\x00}f\x03\x0c\xa4Z\xfe\x1av\x01\x01>\xaf\xb1S\xbf\x0e\xaa\xbb\xc0fr\xd6=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0f/\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5\xfe\x15x\x01\x01$\x86\x12\xa2\x0f6\x06\x14\x06E\x06@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00"\xae\xfe\x16y\x01\x01#\x87\x00\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8f\xb5'b'\xfe\x03z\x01\x01Ms\x00\x04\nt\xfe\x14{\x01\x01J\\\x8fB>\\\x8fB>ff\xc6?\xb8\x1e\x05>\xb1\x006\x00\xde\x84'b"\xfe\x1c|\x01\x01!\xa5\x00\x04\x00t\xa6\x02\x18\xfc\xe7\xb8\xfd\x9ea\n\x00\x0e\x06\x00\x00\x02\x00\x06\x00\x0f\x00\x1bEh:\xfe\x1c}\x01\x01 \x00\x01\x04\x009D\x11>BYz?\x15\x0b\x9d\xbfky\xe0<\xd3\x9c\x83=n<#\xbe~\xb5\xfe\x1c~\x01\x01\x1e(\x01\x04\x00\xa4\xc2\x94\xbc\x03\xcd\xc6\xbd\xa6CE@\xdf\xf1\x08>a\x00\xd3=4\xcd \xbe\x97\xd2\xfe\x18\x7f\x01\x01\xb2&a\x81\xbc\xe7t\xd5\xbd\xde\xf8E@p\xfd)D{\xa6\x02\x18\x03\xe8\xb8\xfd'\xa6\xfe\x1c\x80\x01\x01\xa3&\xa0\x99\xb8\x80\x1d\x90\xb9\x18\xaak9\x00\x00\x00\x00\x00\x00\x00\x00\xedl\x9f<\xdbD{<\xca\x02\xfe\x03\x81\x01\x01\xa5\xc5\x14\x00zq\xfe\x0c\x82\x01\x01\x02\xf8\x80\x0cz\xb1N\x05\x00<\x01\x04\x00\xbfY\xfe\x16\x83\x01\x01\x88u\xa6\x02\x18\xfd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd7\xc3\xfe\x16\x84\x01\x01\xc1\x8dq\xaa<\x815w=^\xb8(;\xa3{>>\x00\x00\x00\x00?\x03\xa8\xfa\xfe\x03\x85\x01\x01Ms\x00\x04#\x86"b'\xfe\x1a\x86\x01\x01\x1b\xbbr\xa5\x0f\x00\x00\x00\x00\xeb\xff\xfa\xff\x16\xfcY\x00\x8e\x00\xae\xff \xff\xf0\xff\x89\x01xa\xfe\x16\x87\x01\x01te\x01\x04\x00\xee\xff\xf5\xff%\xfcp\x00\x92\x00\xb2\xff\x1b\xffK\xff\x1a\x02\xe3G\xfe\x16\x88\x01\x01\x81e\x01\x04\x00\xef\xff\x11\x00\x11\xfcA\x00\x8b\x00\xbd\xff\xa1\x00I\x00w\x02\xe2R\xfe\x0e\x89\x01\x01\x1de\x01\x04\x00\x0c\x99iD\x99\x99\x03\xbeR\x10~\x13\xfe\x0e\x8a\x01\x01\x89e\x01\x04\x00\xcc\xdciD337>v\x15VK\xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x01\xfc;7\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SE\xa0\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf\xfe\x04\x8d\x01\x01\x98\x00\x00\x80\x8a\xe36\xfe\x02\x8e\x01\x01*\x00\x00\xa0\xf1\xfe\x1e\x8f\x01\x01\x18\x98\x99\xa5\x0f\x00\x00\x00\x00\x80\xa6\x02\x18\x08\xe8\xb8\xfd2i\n\x00F\x00\xff\xff\x15\x00}f\x03\x0c}\x15\xfe\x1a\x90\x01\x01>\xad\xe51>\x1d\x8ef\xc0\xcc\xee\xe3=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00A\\\xfe\x08\x91\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xc8\xfe\x15\x92\x01\x01$\xe9\x0e\xa6\x0f\r\x06?\x06$\x06\x05\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xa9\xfe\x16\x93\x01\x01#\x8d\x01\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf9\x03'b'\xfe\x03\x94\x01\x01Ms\x00\x00\x84;\xfe\x14\x95\x01\x01J=\nW>=\nW>p=\xca?{\x14.>\xaf\x003\x00\x89\xb5\xfe\x1c\x96\x01\x01!o\x01\x04\x00u\xa6\x02\x18\x01\xe8\xb8\xfd\xc6a\n\x006\x06\x00\x00\xf5\xff\x08\x00\x0f\x00\xceDp\xd7\xfe\x1c\x97\x01\x01 \x05\x02\x04\x00\x01p\x18>\xee\x82\x83?\x7f\xe4\xa1\xbf\x01\x91\xf3\xbd\xf2F\xac=j\xba#\xbe\xca\xd8'b'\xfe\x1c\x98\x01\x01\x1e.\x02\x04\x00\x8c\xb1\x91<\xd9\xe4l\xbdb{E@6kF>0\xfb(>\xe9X\xa1>\x0e\t\xfe\x18\x99\x01\x01\xb2?\x14\xaa\x00\x00\x00\x00?\x03#\x14\xfe\x03\x9f\x01\x01Ms\x00\x00\xe8\x9c\xfe\x1a\xa0\x01\x01\x1b\x97\x1e\xa9\x0f\x00\x00\x00\x00\xf1\xff\x06\x00\x07\xfc\xb1\x00\x9d\x00\x1f\x01\x10\xff\xfc\xff\x88\x01\xf9\r\xfe\x16\xa1\x01\x01tU\x02\x04\x00\xfa\xff\x07\x00\n\xfc\xa1\x00\x9c\x003\x01\x0f\xffR\xff\x15\x02_2\xfe\x16\xa2\x01\x01\x81U\x02\x04\x00\xee\xff\x12\x00\x07\xfc\xdb\x00\x8b\x00\x1f\x01\xa8\x008\x00n\x02\xe3l\xfe\x0e\xa3\x01\x01\x1dU\x02\x04\x00\x98\x98iDG\xe1\n\xbeR\x10\x02E\xfe\x0e\xa4\x01\x01\x89U\x02\x04\x00r\xdeiD\x1e\x85Q>w\x15:Q\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00>\x01\xfc;7\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe1\xc2\xfe\x06\xa6\x01\x01}\xc6\x14\x00\x00\x03\x00\x05\x92\xfe\x04\xa7\x01\x01\x98\x00\x00\x80\x8a\xea%\xfe\t\xea\n\x00m\x16\x00\x00\x00\x00\xdd\x00\x00\x00\xc9\x87\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca\xfe\x1e\xa9\x01\x01\x18\xc0\xaa\xa8\x0f\x00\x00\x00\x00\x81\xa6\x02\x18\x0b\xe8\xb8\xfd\x99W\x15?\xe5\t\x03\xc0fz\xea=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf1"\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01'b'\xfe\x12\xac\x01\x01\xfc\x8f\x02\x04\x004\x00\x01\x00ARMMASK\x00Wr%m\xfe\t\xad\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x06\xe4\xfe\x15\xae\x01\x01$\x8c\n\xaa\x0f!\x06.\x06\x18\x061\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8s\xfe\x16\xaf\x01\x01#\x92\x02\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00{1\xfe\x03\xb0\x01\x01Ms\x00\x00\xaa\x9b\xfe\x14\xb1\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>{\x14\xce?{\x14.>\xb2\x005\x00\xe6\x0c'b'\xfe\x1c\xb2\x01\x01!\x00\x03\x04\x00t\xa6\x02\x18\x06\xe8\xb8\xfd\xe4a\n\x00T\x06\x00\x00\xf0\xff\xff\xff\x12\x00\xf7E\r\x18\xfe\x1c\xb3\x01\x01 \n\x03\x04\x00fY\n>u\x1b\x88?\xf1\xaf\xa5\xbf\x9b9%\xbe\xc3\xac\x9d\xbc\x1f\xc4>\xbe\xbe\xd1\xfe\x1c\xb4\x01\x01\x1e2\x03\x04\x00Z\xa3\xf0<\xca\x12\xd7\xbc\x9ePH@w\xbf\xb4\xbd\xda,e=\x92z\xac=\x8a\xb4\xfe\x18\xb5\x01\x01\xb2b\x9c\x11=\xb0\x84\x06\xbdK\xe2H@f\x06*D\x80\xa6\x02\x18\x0f\xe8\xb8\xfd^m\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86\xfe\x1a\xb7\x01\x01\x1b\x94\xcc\xac\x0f\x00\x00\x00\x00\xf0\xff\xf9\xff\r\xfc\x96\xff?\x00a\x00\x08\xff\x0f\x00|\x01\xc2\xdb\xfe\x16\xb8\x01\x01tF\x03\x04\x00\xf6\xff\xf5\xff\x15\xfc\x9d\xffD\x00K\x00\x02\xffb\xff\x0c\x02\x13\xf0\xfe\x16\xb9\x01\x01\x81F\x03\x04\x00\xeb\xff\n\x00\x06\xfcx\xffZ\x00T\x00\x86\x00]\x00h\x02q\xce\xfe\x0e\xba\x01\x01\x1dF\x03\x04\x00P\x98iD)\\\x0f\xbeS\x10\x0b^\xfe\x0e\xbb\x01\x01\x89F\x03\x04\x00\xe2\xdciD\\\x8f8>w\x15\xf7\xe1\xfe\x1f\xbc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xfc;\xd1\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S]\x02\xfe\x06\xbd\x01\x01}\xc5\x14\x00\x00\x03\x007\t'b'\xfe\x04\xbe\x01\x01\x98\x00\x00\x80\x8aI\xe8\xfe\x02\xbf\x01\x01*\x00\x00?\xb8\xfe\x1e\xc0\x01\x01\x18\x00\xb8\xab\x0f\x00\x00\x00\x00\x80\xa6\x02\x18\x0f\xe8\xb8\xfdFi\n\x00F\x00\xff\xff\x10\x00}f\x03\x0c\xa7\x12\xfe\x1a\xc1\x01\x01>\x90hk\xbeJ\xee\x9f\xbf=\x04\xf8=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb7\x1b\xfe\x08\xc2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\xfe\x1c\xc3\x01\x01\xa3F!^\xb8k4\x9e\xb97Ao9\x00\x00\x00\x00\x00\x00\x00\x00l\xf6\x9f<9R\x92\x00\x00\x00\x00?\x03\x1d\xdc\xfe\x15\xc8\x01\x01$<\x07\xae\x0f\x0b\x06\x08\x06\r\x06%\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xd7\xfe\x16\xc9\x01\x01#\x97\x03\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb6\xe9\xfe\x03\xca\x01\x01Ms\x00\x00\x005'b'\xfe\x14\xcb\x01\x01J\xcc\xccL>\xcc\xccL>33\xd3?\n\xd7#>\xb3\x004\x00yS\xfe\x1c\xcc\x01\x01!\xca\x03\x04\x00r\xa6\x02\x18\x07\xe8\xb8\xfd\x0cb\n\x00|\x06\x00\x00\xf3\xff\xf8\xff\x0f\x00OFF\xcc\xfe\x1c\xcd\x01\x01 \x10\x04\x04\x00\xf5u\xe3=\xec\x10\x89?\x9cw\xaa\xbf\xe1\r\x0c\xbe\x17\x05\xae\xbd\x98\xa8 \xbe\xaa\x80'b'\xfe\x03\xce\x01\x01/\xff\x00\x00\x08[\xfe\x1a\xcf\x01\x01\x1bf~\xb0\x0f\x00\x00\x00\x00\xe3\xff\x00\x00\xf4\xfb\xb5\xff\xf2\xff\x1f\x00\xff\xfe\x0b\x00v\x01S\xf3\xfe\x16\xd0\x01\x01t8\x04\x04\x00\xe6\xff\x01\x00\x0e\xfc\x95\xff\xf1\xff!\x00\xfa\xfe^\xff\x04\x02\xb6R\xfe\x16\xd1\x01\x01\x818\x04\x04\x00\xe2\xff\x15\x00\xf9\xfb\xa9\xff\xef\xff#\x00\x8f\x00@\x00t\x02\xa8S\xfe\x0e\xd2\x01\x01\x1d8\x04\x04\x00\x82\x99iD\xe1z\xf8\xbdS\x103(\xfe\x0e\xd3\x01\x01\x898\x04\x04\x00\x86\xdciD\xcd\xcc2>w\x15\x94)\xfe\x1f\xd4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00:\x01\xe4;\xa0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SD\x88\xfe\x06\xd5\x01\x01}\xbe\x14\x00\x00\x03\x00\xdc\xfd\xfe\x04\xd6\x01\x01\x98\x00\x00\x80\x8a\xd9\x86\xfe\x02\xd7\x01\x01*\x00\x00V\xc2\xfe\x1e\xd8\x01\x01\x18\x10\xcd\xae\x0f\x00\x00\x00\x00|\xa6\x02\x18\x10\xe8\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00\xdeT\x03\x0c6:\xfe\x1a\xd9\x01\x01>\xaf\xf8\x10\xbf0\x93\x03?G\x81\xe3=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xff\xb4\xfe\x08\xda\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00@\x88\xfe\x1c\xdb\x01\x01\x1eL\x04\x04\x00\xec\xcd\xf9\xbb\x14;\x91\xbc\xae\xf3H\xc0\x16\xe2\xd8\xbd5T\xed\xbc[*\xce<\x05\xc0\xfe\x18\xdc\x01\x01\xb2\xfe@\xef\xba\x0f\x11\xbf\xbc|RH\xc0\x85\xfb)D|\xa6\x02\x18\x10\xe8\xb8\xfd\xda\x99\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2\xfe\x1c\xde\x01\x01\xa3\x96\xe26\xb8Z3\xa5\xb9\xbaMq9\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8d\xa8<\x80\x90Y<\xb1\x1e\xfe\x03\xdf\x01\x01\xa5\xbd\x14\x00c\xc0\xfe\x0c\xe0\x01\x01\x02\xf8\xb5\x18z\xb1N\x05\x00`\x04\x04\x00\xb9\xb6\xfe\x16\xe1\x01\x01\x88q\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbdo\xfe\x16\xe2\x01\x01\xc1t$\xef<\x94\x1bF=\xd9\x1a\x1d<\xe6\x047>\x00\x00\x00\x00?\x03O1\xfe\x16\xe3\x01\x01\xe1\xda\xce\x17?=\nW>\xf5\xe26<\\bF\xebQ8>\x8f\xc2\xd5?\x99\x99\x19>\xb3\x007\x00\xca5\xfe\x1c\xe8\x01\x01!\x93\x04\x04\x00o\xa6\x02\x18\x07\xe8\xb8\xfd b\n\x00\x90\x06\x00\x00\xf8\xff\xfb\xff\x11\x00IF\x91.\xfe\x1c\xe9\x01\x01 \x15\x05\x04\x00\xd4>\xaf=\xac6\x89?\xbe2\xad\xbf\x8c8\xaa\xbd\x0f\xc4h\xbdY\xc53\xbe?x\xfe\x1a\xea\x01\x01\x1b\x11)\xb4\x0f\x00\x00\x00\x00\xe3\xff\x02\x00\xf1\xfbF\x00\x16\x00@\x00\xf9\xfe\x02\x00w\x01f\x89\xfe\x16\xeb\x01\x01t)\x05\x04\x00\xe2\xff\x05\x00\xfb\xfbD\x00\x1a\x00N\x00\xf8\xfeU\xff\x05\x02\xdbN\xfe\x16\xec\x01\x01\x81)\x05\x04\x00\xde\xff\x17\x00\xe9\xfb8\x00\xed\xffB\x00\x86\x00E\x00X\x02\xb8*\xfe\x0e\xed\x01\x01\x1d)\x05\x04\x00\x1c\x98iD\xd7\xa3\x12\xbeS\x10\xdcH\xfe\x0e\xee\x01\x01\x89)\x05\x04\x00\x94\xdciD\x14\xae3>w\x15\xc7\xa6\xfe*\xef\x01\x01\x96s\xe7f\xbc\xfdl\x01\x00S\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00Z2\xfe\x1f\xf0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf8\x00\xe4;n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xf1Y\xfe\x06\xf1\x01\x01}\xc5\x14\x00\x00\x03\x00\xcd&\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce\xfe\x1e\xf4\x01\x01\x188\xde\xb1\x0f\x00\x00\x00\x00y\xa6\x02\x18\x10\xe8\xb8\xfdxi\n\x00F\x00\xff\xff\x12\x00\xdeT\x03\x0c\xc0\xd1\xfe\x1a\xf5\x01\x01>\xd5\xc7O\xbf)R\xb1>)r\xff=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xcf\xe7\xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06'b'\xfe\x1c\xf7\x01\x01\x1eQ\x05\x04\x00\x8f\x9b\xa2\xbc\x18RR\xb2s9\x00\x00\x00\x00\x00\x00\x00\x00\xad\xa7\xae<9bD<\xb3\xa7\xfe\x03\xfb\x01\x01\xa5\xc5\x14\x00\xd0\xdf\xfe\x0c\xfc\x01\x01\x02\xd0\xf7\x1cz\xb1N\x05\x00e\x05\x04\x00\xb5\xd7\xfe\x16\xfd\x01\x01\x88o\xa6\x02\x18\x07\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaa>\xfe\x16\xfe\x01\x01\xc1e\xe3\xf5\x00\x00\x00\x00?\x03D\x1b\xfe\x15\xff\x01\x01$^\xff\xb5\x0f&\x06\x06\x06)\x06k\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1=\xfe\x16\x00\x01\x01#\xa1\x05\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00!\xc3'b'\xfe\x03\x01\x01\x01Ms\x00\x04\x1f[\xfe\x14\x02\x01\x01J\x8f\xc2u>\x8f\xc2u>\x99\x99\xd9?\\\x8fB>\xb4\x004\x007\xf2'b'\xfe\x1a\x03\x01\x01\x1b\x11\xd8\xb7\x0f\x00\x00\x00\x00\xf0\xff\xf6\xff\x08\xfc<\x00\xce\xff\x1f\x00\xf5\xfe\x0b\x00t\x01\x0f\xc2\xfe\x16\x04\x01\x01t\x1a\x06\x04\x00\xf6\xff\xee\xff#\xfc(\x00\xda\xff\x18\x00\xef\xfeY\xff\xfd\x01v\t\xfe\x16\x05\x01\x01\x81\x1a\x06\x04\x00\xec\xff\x05\x00\x0f\xfc\x07\x00\xd8\xff!\x00z\x00K\x00Z\x02\x94o\xfe\x0e\x06\x01\x01\x1d\x1a\x06\x04\x00\xdd\x98iD\\\x8f\x06\xbeS\x10\xef\xd4\xfe\x0e\x07\x01\x01\x89\x1a\x06\x04\x00\x10\xdciD\xa4p+>x\x15|\x87\xfe\x1f\x08\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xe4;\xad\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xc5\x98\xfe\x06\t\x01\x01}\xc5\x14\x00\x00\x03\x00\xb6V\xfe\x04\n\x01\x01\x98\x00\x00\x80\x8a\xd6\x1b\xfe\x02\x0b\x01\x01*\x00\x00\x1e\x87\xfe\x1e\x0c\x01\x01\x18\x88\x00\xb8\x0f\x00\x00\x00\x00t\xa6\x02\x18\r\xe8\xb8\xfd\xbei\n\x00F\x00\xff\xff\x0c\x00{O\x03\x0c\x11\x98\xfe\x1a\r\x01\x01>\x936\x1d\xbf`\x8c\x97\xbe\n\xea\x08>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xdb\x00\xfe\x08\x0e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd7a\xfe\x1c\x0f\x01\x01!%\x06\x04\x00n\xa6\x02\x18\x07\xe8\xb8\xfd>b\n\x00\xae\x06\x00\x00\x00\x00\xfc\xff\x13\x00\x83F\x1a\xf4\xfe\x1c\x10\x01\x01 .\x06\x04\x00+\xe1\x90=Z\xf8\x89?L\x97\xb1\xbf\xf0\xc4\xb4;\x19N*\xbd\xae7K\xbe\xb6\xa6\xfe\t\xeb\n\x00m\x02\x00\x00\x00\x00\xdd\x00\x00\x00\xed\x9b\xfe\x1c\x11\x01\x01\x1eV\x06\x04\x00n\xdf\x01\xbbP-\xac\xb9huH\xc0\xd2\xc4\x8d=I\xc3\xe9\xbdy,\x7f\xbb\x98\x90\xfe\x18\x12\x01\x01\xb2\x8f\x15,;,#\xa8\xbb\xbd\xdbG\xc0G\x01*Dt\xa6\x02\x18\r\xe8\xb8\xfd\xce\xc3\xfe\x1c\x13\x01\x01\xa3\x038\xd4\xb7H\x94\xb3\xb9~av9\x00\x00\x00\x00\x00\x00\x00\x00\xf91\xbf<\xdb<\t\x00\x00\x00\x00?\x03j>'b'\xfe\x03\x18\x01\x01Ms\x00\x04d\xac\xfe\x12\x19\x01\x01\xfc|\x06\x04\x004\x00\x01\x00ARMMASK\x00WrE\xad\xfe\t\x1a\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x037a\xfe\x15\x1b\x01\x01$r\xfd\xb9\x0f3\x06\xf2\x05(\x06D\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00|&\xfe\x16\x1c\x01\x01#\xa7\x06\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd4\xd3'b'\xfe\x03\x1d\x01\x01Ms\x00\x04\x05;\xfe\x14\x1e\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=R\xb8\xde?\\\x8fB>\xb4\x002\x00]K\xfe\x1a\x1f\x01\x01\x1b\xd8\x86\xbb\x0f\x00\x00\x00\x00\xfb\xff\x14\x00"\xfcK\x00}\xff\xf1\xff\xfa\xfe\x11\x00x\x01\x05s\xfe\x16 \x01\x01t\x0c\x07\x04\x00\x06\x00\x17\x00E\xfcC\x00\x89\xff\xfc\xff\xf7\xfek\xff\x0b\x02B\x9b\xfe\x16!\x01\x01\x81\x0c\x07\x04\x00\xf5\xff\x1d\x00)\xfc-\x00\x81\xff\x07\x00\x90\x00F\x00z\x02ag\xfe\x0e"\x01\x01\x1d\x0c\x07\x04\x00\x0f\x99iD\xa4p\x03\xbeS\x10\x85.\xfe\x0e#\x01\x01\x89\x0c\x07\x04\x00)\xdciD\xc2\xf5,>w\x15\t\xab\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x01\xe3;\x82\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x94\xd3\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V\xfe\x04&\x01\x01\x98\x00\x00\x80\x8a\xc0\xac\xfe\x02\'\x01\x01*\x00\x00\x07U\xfe\x1e(\x01\x01\x18\xc8\r\xbb\x0f\x00\x00\x00\x00t\xa6\x02\x18\r\xe8\xb8\xfd\xd2i\n\x00F\x00\xff\xff\t\x00{O\x03\x0c\x03=\xfe\x1a)\x01\x01>\x18\xa9\x86\xbfB\x03\\\xbf\x1f>\n>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00l\x8b\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2\xfe\x1c+\x01\x01!\xed\x06\x04\x00n\xa6\x02\x18\x06\xe8\xb8\xfdfb\n\x00\xd6\x06\x00\x00\x01\x00\xf6\xff\x12\x00\x80F\xa2\xed\xfe\x1c,\x01\x01 3\x07\x04\x00\xb5\xe0\x9a=\xaf\xa8\x88?\xe0\xf4\xb5\xbf\x84\x83tM\xa8<\xe8\x01\xc9;:\x8f\xfe\x031\x01\x01\xa5\xc5\x14\x00\x10W\xfe\x0c2\x01\x01\x02\xf8\xea$z\xb1N\x05\x00p\x07\x04\x00\xbb\xd0\xfe\x163\x01\x01\x88n\xa6\x02\x18\x06\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15\x16\xfe\x164\x01\x01\xc1\xf3*\xc1<\x04a\xf9<9\x19;;C\xe8;>\x00\x00\x00\x00?\x03\x90&'b'\xfe\x155\x01\x01$7\xf9\xbd\x0f0\x06\xd3\x05+\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00I\xfe\x166\x01\x01#\xac\x07\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x97\xb9\xfe\x037\x01\x01Ms\x00\x04&\xab\xfe\x1a8\x01\x01\x1be0\xbf\x0f\x00\x00\x00\x00\x04\x00\x04\x000\xfc\xc2\xff=\x00\xf8\xff\x0c\xff\x11\x00{\x011\xa5\xfe\x169\x01\x01t\xfc\x07\x04\x00\x07\x00\t\x00=\xfc\xc6\xffD\x00\x03\x00\x00\xffh\xff\x0f\x02h\xfb\xfe\x16:\x01\x01\x81\xfc\x07\x04\x00\xfa\xff\x18\x00&\xfc\xb7\xff8\x00\x05\x00\x8f\x00X\x00\x83\x024\xaf\xfe\x0e;\x01\x01\x1d\xfc\x07\x04\x00\xf5\x98iD=\n\x05\xbeT\x102\xee\xfe\x0e<\x01\x01\x89\xfc\x07\x04\x00\x83\xdbiD\xd7\xa3">y\x15\x84\t\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\xe3;`\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xe0\x02\xfe\x06>\x01\x01}\xc8\x14\x00\x00\x03\x00\xd0K\xfe\x04?\x01\x01\x98\x00\x00\x80\x8aca\xfe\x02@\x01\x01*\x00\x00\x9a6\xfe\x1eA\x01\x01\x18\x08\x1b\xbe\x0f\x00\x00\x00\x00s\xa6\x02\x18\r\xe8\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x0c\x00{O\x03\x0c"\x14\xfe\x1aB\x01\x01>\xfc\'\x0e\xc0.\x85\xe3\xbe\xd7\x80\x11>\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x80\xb3\xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<'b'\xfe\x14D\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\\\x8f\xe2?{\x14.>\xb4\x004\x00\xef\xf1\xfe\x1cE\x01\x01!\xb5\x07\x04\x00n\xa6\x02\x18\x02\xe8\xb8\xfd\x84b\n\x00\xf4\x06\x00\x00\xfb\xff\xed\xff\x11\x00\x87F\xe2\x99\xfe\x1cF\x01\x01 9\x08\x04\x00\x14\x07\x8b=z$\x84?&\x16\xba\xbf\xeb\x96Z\xbd\x18\xe6I\xbe\xd6|4\xbe\x80\xad\xfe\x03G\x01\x01/\xff\x00\x00\xe9<\xfe\x1cH\x01\x01\x1ea\x08\x04\x00\xac\xc3P;\xeb\\\xd6\xbcF{H\xc0+\xf9\xb9\xbd$\x19\xba=\x07\xf4\x19\xbd}u\xfe\x18I\x01\x01\xb2\xe8\xff\x0e<\xa7\xd1\x02\xbd\xe4\xe8G\xc0\xae\x07*Ds\xa6\x02\x18\r\xe8\xb8\xfd\x00U\xfe\x03J\x01\x01Ms\x00\x04\x82\x99'b'\xfe\x1cK\x01\x01\xa3V\xb2\xf2\xb6iW\xc2\xb9Z\x92|9\x00\x00\x00\x00\x00\x00\x00\x00F\xaf\x91<\x0c\xb9\xe2;_\x08\xfe\x03L\x01\x01\xa5\xc8\x14\x00;\xee\xfe\x0cM\x01\x01\x02\x98\xe2(z\xb1N\x05\x00u\x08\x04\x00\x06\xb0\xfe\x16N\x01\x01\x88m\xa6\x02\x18\x01\xe8\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3\xd3\xfe\x12O\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xfb\xc9\xfe\x16P\x01\x01\xc1\xc6G\xb0\x00\x00\x00\x00?\x03\xbd\xff\xfe\x16Q\x01\x01\xe1\xda\xce\x17?a\xbe<>\xf5\xe26<\\bF<\xa4g\xa3?\x00\x1f+\x99\xfe\x15R\x01\x01$\x17\xf5\xc1\x0f\x9b\x05\x9d\x05r\x06\xae\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x90\xfe\x16S\x01\x01#\xb1\x08\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6\xa8'b'\xfe\x03T\x01\x01Ms\x00\x04\xf7\xf2\xfe\x1aU\x01\x01\x1b\x01\xe4\xc2\x0f\x00\x00\x00\x00\xe9\xff\x02\x002\xfc\xe4\xff\xb7\xff~\xfe\x06\xff\x07\x00u\x01\xa88\xfe\x16V\x01\x01t\xee\x08\x04\x00\xed\xff\xfc\xffM\xfc\xf0\xff\xd0\xff}\xfe\xf6\xfed\xff\x03\x02\x90\xe0\xfe\x16W\x01\x01\x81\xee\x08\x04\x00\xe9\xff\x19\x00#\xfc\xea\xff\xc2\xffp\xfe~\x00R\x00f\x02g!\xfe\x0eX\x01\x01\x1d\xee\x08\x04\x00 \x96iDff2\xbeQ\x10W5\xfe\x0eY\x01\x01\x89\xee\x08\x04\x00G\xdbiDG\xe1\x1e>x\x15\x9d\xab\xfe\x1fZ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01\xe3;n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x90\xe5\xfe\x06[\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4A\xfe\x04\\\x01\x01\x98\x00\x00\x80\x8a>\xa6\xfe\x02]\x01\x01*\x00\x00\x1c\xad\xfe\x1e^\x01\x01\x18\x004\xc1\x0f\x00\x00\x00\x00q\xa6\x02\x18\x0c\xe8\xb8\xfd\xbei\n\x00F\x00\xff\xff\x13\x00{O\x03\x0c\x17"\xfe\x1a_\x01\x01>\xfc\xeeA\xc0\x9b\xcb{\xc0\xae=\xef=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00bz\xfe\x08`\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x87\xfe\x14a\x01\x01J\xcc\xccL>\xcc\xccL>\x14\xae\xe7?\xb8\x1e\x05>\xb1\x002\x00\xb4%'b'\xfe\x1cb\x01\x01!\x80\x08\x04\x00k\xa6\x02\x18\xfc\xe7\xb8\xfd\xacb\n\x00\x1c\x07\x00\x00\xfa\xff\xe8\xff\n\x00FE\x89\xb6\xfe\x1cc\x01\x01 ?\t\x04\x00M!#=\x12\xbe{?&\x01\xbf\xbf\xee\xb9\x8d\xbd\xab\n{\xbe\xacO\xdf\xbdl{\xfe\x03d\x01\x01Ms\x00\x04\x7f\x1f\xfe\x1ce\x01\x01\x1eg\t\x04\x00\x1e\xbc\x1a\xbc\xdb(\x1d\xbdL\x98E@\x15\xab3\xbe\xf9\xc2\xe3\xbd\xec\xeb/\xbe\x8e\xa0\xfe\x18f\x01\x01\xb2\x9f\x1dZ\xbb\x03I*\xbd\xfb6F@\x00\x10*Dm\xa6\x02\x18\x08\xe8\xb8\xfd*\x97\xfe\x1cg\x01\x01\xa3\x1a\x02\xe953\x15\xca\xb9I\xef\x7f9\x00\x00\x00\x00\x00\x00\x00\x00fa\x8a<\xd9 \x15<,>\xfe\x03h\x01\x01\xa5\xc2\x14\x00\xbb\x92\xfe\x0ci\x01\x01\x028\xda,z\xb1N\x05\x00{\t\x04\x00(\x85\xfe\x16j\x01\x01\x88j\xa6\x02\x18\xfb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00v;\xfe\x16k\x01\x01\xc1\x1f:\xc9<\xc0P\xc1>\x00\x00\x00\x00?\x03c>'b'\xfe\x15l\x01\x01$j\xf5\xc5\x0fe\x06<\x06\x03\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00".\xfe\x16m\x01\x01#\xb7\t\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb2_\xfe\x1an\x01\x01\x1b\x8c\x91\xc6\x0f\x00\x00\x00\x00\xec\xff\x06\x00\xf6\xfb\xe3\xfe\xc0\x00{\xff\t\xff\xf8\xff}\x01\x83\x08\xfe\x16o\x01\x01t\xdf\t\x04\x00\xf1\xff\x07\x00\x00\xfc\xee\xfe\xb6\x00\x82\xff\x03\xffK\xff\x0e\x02\xef\x91\xfe\x16p\x01\x01\x81\xdf\t\x04\x00\xe8\xff\t\x00\xf2\xfb\xe1\xfe\xaa\x00\x88\xff\x9b\x00B\x00\x84\x02\xf8}\xfe\x0eq\x01\x01\x1d\xdf\t\x04\x00\xac\x97iD\x99\x99\x19\xbeS\x10t\x80\xfe\x0er\x01\x01\x89\xdf\t\x04\x00C\xdciD\xd7\xa3.>y\x15J\xa0\xfe\x1fs\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x01\xe3;\xf6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00SPh\xfe\x06t\x01\x01}\xc5\x14\x00\x00\x03\x00\x12\xbf\xfe\x03u\x01\x01Ms\x00\x00\xd8\xa2\xfe\x04v\x01\x01\x98\x00\x00\x80\x8a7\xb5\xfe\x02w\x01\x01*\x00\x00\xc8\'\xfe\x1ex\x01\x01\x18(E\xc4\x0f\x00\x00\x00\x00m\xa6\x02\x18\x08\xe8\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x1d\x00\x1aW\x03\x0c\xfc\xbb\xfe\x1ay\x01\x01>\nW\xff=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x90\xfb\xfe\x08z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00B\xfb'b'\xfe\x14{\x01\x01J\n\xd7\xa3>\n\xd7\xa3>\x1e\x85\xeb?)\\\x0f>\xaf\x00/\x00Z\xa1\xfe\t\xec\n\x00m\x01\x00\x00\x00\x00\xdb\x00\x00\x00\x9b\xa4\xfe\x1c|\x01\x01!\x12\n\x04\x00h\xa6\x02\x18\xf6\xe7\xb8\xfd\xc0b\n\x000\x07\x00\x00\xf5\xff\xec\xff\x10\x00\xd1DjX\xfe\x1c}\x01\x01 D\n\x04\x00Z\x17\x10\xbb\xe0\xa0m?\xf0S\xc2\xbf\xa3\xf8\xe7\xbd\x88\xf7L\xbe#N&\xben\x9b\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05\xfe\x12\x7f\x01\x01\xfcj\n\x04\x004\x00\x01\x00ARMMASK\x00Wr\xdeR\xfe\t\x80\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x89#'b'\xfe\x1c\x81\x01\x01\x1el\n\x04\x00\x03\xcem\xbd\xe5\x99\x9b;i\x95E@\xdd\xf5\xf2\xbc[\x06v>\x1cS\xac>\xb2j\xfe\x18\x82\x01\x01\xb2\xfd\xddX\xbd\xe8\xcb\x03\xba\x99\xf6E@\xc2\x15*Dm\xa6\x02\x18\x04\xe8\xb8\xfd>;\xfe\x1c\x83\x01\x01\xa3}\xbc27\x1f\xfe\xd1\xb9\x8d\xb5\x819\x00\x00\x00\x00\x00\x00\x00\x00d}{\xd7\xd6\x00\x00\x00\x00?\x03\xc1)\xfe\x15\x88\x01\x01$l\xf1\xc9\x0f\x06\x06\x18\x06\xf9\x05\xe9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbdC\xfe\x16\x89\x01\x01#\xbc\n\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00e]\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P'b"\xfe\x1a\x8b\x01\x01\x1b\xcdB\xca\x0f\x00\x00\x00\x00\xef\xff\x04\x00\x89\xfc\xa7\xff.\x00\x97\x00\xf3\xfe\xed\xffo\x01 \x87\xfe\x16\x8c\x01\x01t\xd1\n\x04\x00\xf8\xff\x06\x00\x8b\xfc\xa6\xff.\x00\x95\x00\xf3\xfe[\xff\x0c\x02h\xf7\xfe\x16\x8d\x01\x01\x81\xd1\n\x04\x00\xe9\xff\n\x00\x8d\xfc\xa3\xff\x1a\x00\x95\x00z\x00O\x00^\x02S\xca\xfe\x0e\x8e\x01\x01\x1d\xd1\n\x04\x00}\x99iD\xb8\x1e\xf9\xbdU\x10\xa6\xf3\xfe\x0e\x8f\x01\x01\x89\xd1\n\x04\x00\xcb\xdbiD\xb8\x1e'>{\x15\xb9~\xfe\x1f\x90\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00#\x01\xca;\xff\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\x10-\xfe\x06\x91\x01\x01}\xc5\x14\x00\x00\x03\x00B\t\xfe\x04\x92\x01\x01\x98\x00\x00\x80\x8a__\xfe\x02\x93\x01\x01*\x00\x00&j\xfe\x1e\x94\x01\x01\x18xg\xca\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfe\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff%\x003[\x03\x0c\x1d\x81\xfe\x1a\x95\x01\x01>s\x9f8\xc0\x07p|?3\x1b\xc8=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc0`\xfe\x08\x96\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xd0\xfe\x14\x97\x01\x01J\xa4p\xbd>\xa4p\xbd>\xcc\xcc\xec?\x00\x00\x00\x00\xb2\x008\x00\xd3\x98"b'\xfe\x03\x98\x01\x01Ms\x00\x00\xe6\x00\xfe\x1c\x99\x01\x01!\xdb\n\x04\x00f\xa6\x02\x18\xf2\xe7\xb8\xfd\xcab\n\x00:\x07\x00\x00\xfd\xff\xf8\xff\x01\x00\xf3E_\xf3\xfe\x1c\x9a\x01\x01 I\x0b\x04\x00^W\t\xbd\nKe?\x9e\xfe\xc2\xbf\xe3O \xbd\x15q\xa8\xbd\xd2\x8b\x92\xbc\xd2\x01\xfe\x1c\x9b\x01\x01\x1eq\x0b\x04\x00%\'\x82\xbd\x08\x8f|\x00\x00\x00\x00?\x03\rr'b"\xfe\x1a\xa2\x01\x01\x1bg\xef\xcd\x0f\x00\x00\x00\x00\xea\xff\r\x00\x06\xfcA\x00\xdc\xff4\x00\xf0\xfe\xf0\xffl\x01I\x88\xfe\x16\xa3\x01\x01t\xc2\x0b\x04\x00\xf2\xff\x1a\x00\x0e\xfcT\x00\xdb\xff?\x00\xeb\xfe5\xff\xf3\x01'F\xfe\x16\xa4\x01\x01\x81\xc2\x0b\x04\x00\xec\xff\x12\x00\x03\xfcU\x00\xd3\xffF\x00m\x004\x00k\x02Xn\xfe\x0e\xa5\x01\x01\x1d\xc2\x0b\x04\x00\xef\x96iD\xa4p%\xbeT\x10\xf4\xa0\xfe\x0e\xa6\x01\x01\x89\xc2\x0b\x04\x00\xab\xdaiD\xb8\x1e\x15>|\x15j\xe6\xfe\x1f\xa7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01\xca;/\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00S\xa6\xeb\xfe\x06\xa8\x01\x01}\xc8\x14\x00\x00\x03\x00\xf9]\xfe\x03\xa9\x01\x01Ms\x00\x00\xd1l\xfe\x04\xaa\x01\x01\x98\x00\x00\x80\x8a8(\xfe\x02\xab\x01\x01*\x00\x00\x80b\xfe\x1e\xac\x01\x01\x18\xa0x\xcd\x0f\x00\x00\x00\x00j\xa6\x02\x18\xfa\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x1d\x00p]\x03\x0c\\+\xfe\x1a\xad\x01\x01>A\xce\xee\xbf\xfc\xb7\xdf>)|\xd7=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf0I\xfe\x08\xae\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x12\xfe\x15\xaf\x01\x01$\xb9=\xce\x0f\x13\x06\xf9\x05\xf3\x052\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00L\xf4\xfe\x16\xb0\x01\x01#\xd6\x0b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x90\x9c"b'\xfe\x14\xb1\x01\x01J\x99\x99\x99>\x99\x99\x99>{\x14\xee?\x8f\xc2u=\xb3\x001\x00@H\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90\xfe\x1c\xb3\x01\x01!\xa4\x0b\x04\x00e\xa6\x02\x18\xf1\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x04\x00\x01\x00\x05\x00FFW\x1b\xfe\x1c\xb4\x01\x01 N\x0c\x04\x00D\xa8\x15\xbd\xb8\xe5b?\xfe\xe2\xc3\xbf\xf8\xb94=T\x97q<\xb9\xd0U\xbdW\xa1'b'\xfe\x1c\xb5\x01\x01\x1ew\x0c\x04\x00f\xef\x0e\xbd^: <*\x0fI@\xe1A\xad=Q\xb9+\xbd\x06$\x8a=\xa8\xc1\xfe\x18\xb6\x01\x01\xb2a\xc6\xf8\xbc\x1d\x15\x03<%\x8cH\xc0\x14\x0e*Dl\xa6\x02\x18\xf8\xe7\xb8\xfdb\x81\xfe\x1c\xb7\x01\x01\xa3\x8d\xd3\xf07V\x18\xe2\xb9\x17\x80\x859\x00\x00\x00\x00\x00\x00\x00\x00+\xe0\xaf<\xed\xdf\xec;\x11^\xfe\x03\xb8\x01\x01\xa5\xc5\x14\x00\xf10\xfe\x0c\xb9\x01\x01\x02\x18\xc18z\xb1N\x05\x00\x8b\x0c\x04\x00\xde\x1a\xfe\x16\xba\x01\x01\x88f\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xda\xaf\xfe\x16\xbb\x01\x01\xc1\x93\x86*=\x96(!=\xaf\x7f\xa6;\xecW\x1b>\x00\x00\x00\x00?\x03\xc2_\xfe\x16\xbc\x01\x01\xe1>\n\x17?\x99\x99\x19>\xf5\xe26<\\bF<\x14\xd3\xac?\x00\x1f\xcaP\xfe\x03\xbd\x01\x01/\xff\x00\x00\xa1Y\xfe\x1a\xbe\x01\x01\x1b\xd9\x9c\xd1\x0f\x00\x00\x00\x00\xf3\xff\t\x00\x16\xfc?\x00\xdf\xff\x0f\x00\xee\xfe\xfc\xffq\x01\x14\xeb\xfe\x16\xbf\x01\x01t\xb3\x0c\x04\x00\xf1\xff\x08\x00!\xfcD\x00\xdd\xff\x0c\x00\xf0\xfeX\xff\x02\x02\xfa\xa8\xfe\x16\xc0\x01\x01\x81\xb3\x0c\x04\x00\xe8\xff\x14\x00\x1b\xfcA\x00\xc3\xff\x0b\x00\x7f\x008\x00i\x02L\x96\xfe\x0e\xc1\x01\x01\x1d\xb3\x0c\x04\x00\x80\x97iDff\x1c\xbeT\x10L\x07\xfe\x0e\xc2\x01\x01\x89\xb3\x0c\x04\x00\x99\xdbiD\x00\x00$>|\x15\x9f\xc9\xfe\x1f\xc3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x00\xca;h\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x986\xfe\x06\xc4\x01\x01}\xc2\x14\x00\x00\x03\x00\xdey\xfe\x04\xc5\x01\x01\x98\x00\x00\x80\x8aJ\xaf\xfe\x02\xc6\x01\x01*\x00\x00J\xe8\xfe\x1e\xc7\x01\x01\x18\xb0\x8d\xd0\x0f\x00\x00\x00\x00l\xa6\x02\x18\xf8\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x13\x00p]\x03\x0c1\x02\xfe\x1a\xc8\x01\x01>\xefA\xf5\xbf\x92;\xc0\xbd\xcc\xee\xd1=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9am`\xfe\x08\xc9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00g\xdc'b'\xfe\x15\xca\x01\x01$\xd5\xeb\xd1\x0f\x97\x05c\x05\x93\x06\xad\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xef\xfe\x16\xcb\x01\x01#\xc7\x0c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00p\xdd\xfe\x03\xcc\x01\x01Ms\x00\x00\xb1(\xfe\x14\xcd\x01\x01J\\\x8fB>\\\x8fB>\xcc\xcc\xec?\xcc\xccL=\xb3\x005\x00"\t'b'\xfe\x1c\xce\x01\x01!!\r\x04\x00g\xa6\x02\x18\xf1\xe7\xb8\xfd\xcab\n\x00:\x07\x00\x00\x0b\x00\x04\x00\x05\x00\x01Fb\xd4\xfe\x1c\xcf\x01\x01 ?\r\x04\x00\xd1\xd5w\xbc\xc5\xc3c?\xffL\xc3\xbf\xab:\xe3=\x1brB=\x13\x9fc\xbdYf\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH\xfe\x1c\xd1\x01\x01\x1eg\r\x04\x00\x0c(\xc6\xbc\x1a9L;\xf7\x90H@s\xb1\xb7=y\x99\x1a\xbdo\xff7>\xe4\x82\xfe\x18\xd2\x01\x01\xb2\xbd3\x9b\xbc\xaeH\x98:\xae\xf0H@)\x0c*Dm\xa6\x02\x18\xf7\xe7\xb8\xfd\x8c-\xfe\x1c\xd3\x01\x01\xa3g\xa7\x1c8^\x8f\xe9\xb9\xc0K\x879\x00\x00\x00\x00\x00\x00\x00\x00\x86\xf3\x94<\x9cC\xb0;\x05\x8b\xfe\x03\xd4\x01\x01\xa5\xc5\x14\x00\x92\xd8\xfe\x0c\xd5\x01\x01\x02\x98j\x00\x00\x00\x00?\x03\x0c\xbe'b'\xfe\x1a\xd8\x01\x01\x1b\x0fJ\xd5\x0f\x00\x00\x00\x00\xf9\xff\x08\x00\xf7\xfbL\x00\xa4\xff:\x00\xf6\xfe\xfe\xffn\x01\x97)\xfe\x16\xd9\x01\x01t\xa4\r\x04\x00\xfb\xff\x18\x00\x08\xfcC\x00\xb4\xff9\x00\xf1\xfeM\xff\xfc\x01\x87`\xfe\x16\xda\x01\x01\x81\xa4\r\x04\x00\xf1\xff\x19\x00\x02\xfc0\x00\xad\xff8\x00k\x000\x00w\x02\xbcv\xfe\x0e\xdb\x01\x01\x1d\xa4\r\x04\x00\xdd\x97iD\\\x8f\x16\xbeV\x10@\xa9\xfe\x0e\xdc\x01\x01\x89\xa4\r\x04\x00\xab\xdaiD\xb8\x1e\x15>}\x15\xfc4\xfe\x1f\xdd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00,\x01\xdc;s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xe4\\\xfe\x06\xde\x01\x01}\xc5\x14\x00\x00\x03\x00\x0b\xd8\xfe\x04\xdf\x01\x01\x98\x00\x00\x80\x8a\xee\xb4\xfe\x02\xe0\x01\x01*\x00\x00\x04\xd3\xfe\x1e\xe1\x01\x01\x18\xe8H\xd3\x0f\x00\x00\x00\x00m\xa6\x02\x18\xf7\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x0c\x00p]\x03\x0ct&\xfe\x1a\xe2\x01\x01>\x0c\x92\xa0\xbf\x87\xeb\x9a\xbf\xd7\xef\xd3=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00z\x84\xfe\x08\xe3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf5O\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3\xfe\x15\xe5\x01\x01$\x08\xe6\xd5\x0f\xe4\x05\x0b\x06+\x06\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91=\xfe\x16\xe6\x01\x01#\xcc\r\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xda\x00'b'\xfe\t\xed\n\x00m\x1c\x00\x00\x00\x00\xda\x00\x00\x00\xf5\xf6\xfe\x14\xe7\x01\x01J\n\xd7\xa3=\n\xd7\xa3={\x14\xee?\xebQ\xb8=\xb4\x000\x00D/\xfe\x03\xe8\x01\x01Ms\x00\x00\x9f\x88\xfe\x1c\xe9\x01\x01!\xff\r\x04\x00j\xa6\x02\x18\xf2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x10\x00\x05\x00\x08\x00cFL\xa3\xfe\x1c\xea\x01\x01 E\x0e\x04\x00\xa1\xf0\xd9<2\xd2e?\xe2;\xc5\xbf\x1a\xf1$>eOQ=5O\xa5\xbd\x89\xff'b"\xfe\x12\xeb\x01\x01\xfcW\x0e\x04\x004\x00\x01\x00ARMMASK\x00Wr\x91b\xfe\t\xec\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x83\xd9\xfe\x1c\xed\x01\x01\x1em\x0e\x04\x00v\xd5\xb2\xbc\x888\x99\xbcR\xcaH\xc0a\xd2N\xbd2\xaa\xc0\xbd\x19\xa1\xc4<\xca\x07\xfe\x18\xee\x01\x01\xb2\x83\xb4\x86\xbc\xb4\x95\xa4\xbc\xccUH\xc0f\x06*Do\xa6\x02\x18\xf6\xe7\xb8\xfd')\xfe\x1c\xef\x01\x01\xa3\x1b6D82\xae\xf1\xb9w7\x899\x00\x00\x00\x00\x00\x00\x00\x00\xec\xff\x81\x00\x00\x00\x00?\x03\xe7\xb8\xfe\x1a\xf4\x01\x01\x1b\x0b\xf9\xd8\x0f\x00\x00\x00\x00\xed\xff\xf8\xffM\xfc\x01\x00\x88\xff\xf9\xff\xfe\xfe\x04\x00v\x01\xbdt\xfe\x16\xf5\x01\x01t\x95\x0e\x04\x00\xeb\xff\xf9\xff\\\xfc\xf8\xff\x90\xff\xff\xff\xf9\xfed\xff\n\x02\xf6\x0c\xfe\x16\xf6\x01\x01\x81\x95\x0e\x04\x00\xe8\xff\x07\x006\xfc\xdf\xff\x89\xff\x04\x00\x7f\x00W\x00b\x02Q\xa9\xfe\x0e\xf7\x01\x01\x1d\x95\x0e\x04\x00S\x98iD33\x0f\xbeV\x10\xb8O\xfe\x0e\xf8\x01\x01\x89\x95\x0e\x04\x00\xab\xdaiD\xb8\x1e\x15>~\x15\xa5Z\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdc;L\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\n\xd9\xfe\x06\xfa\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4d\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|\xfe\x02\xfc\x01\x01*\x00\x00W\xd7\xfe\x1e\xfd\x01\x01\x18\x18\xac\xd6\x0f\x00\x00\x00\x00o\xa6\x02\x18\xf6\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x08\x00p]\x03\x0c^g\xfe\x1a\xfe\x01\x01>\xe2\x86\x8c\xbf\x91\xaf\x01\xc0G[\xbb=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x1aS\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd"b'\xfe\x15\x01\x01\x01$\x19\xe5\xd9\x0f\x1e\x06)\x06C\x06B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1X\xfe\x16\x02\x01\x01#\xd2\x0e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xda`'b'\xfe\x14\x03\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=)\\\xef?\xcc\xccL=\xb4\x003\x00\xc6\x80\xfe\x03\x04\x01\x01Ms\x00\x04~\xcc\xfe\x1c\x05\x01\x01!\xc8\x0e\x04\x00n\xa6\x02\x18\xf3\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x10\x00\x06\x00\x06\x00pFcC\xfe\x1c\x06\x01\x01 J\x0f\x04\x00Q\x9f\x9a=\x9aah?\x93\n\xc5\xbf\x1aD%>R\xbc\x80=\xcd\xad\x87\xbd\xa9\xb0\xfe\x1c\x07\x01\x01\x1er\x0f\x04\x00J\x82\x8c\xbcy[+\xbd\x80\xb9H\xc0f\xb5\x96=,R\x98\xbd\xef\xbf\xc5;:{\xfe\x18\x08\x01\x01\xb2\xdb\n\\\xbc\x80c1\xbdnIH\xc0\x99\t*Dr\xa6\x02\x18\xf7\xe7\xb8\xfd_\x9d'b'\xfe\x1a\t\x01\x01\x1bL\xa8\xdc\x0f\x00\x00\x00\x00\xe5\xff\x0e\x00\x17\xfc\x17\x00\xb3\xff\x18\x00\x08\xff\x05\x00~\x01\xce\x9f\xfe\x16\n\x01\x01t\x87\x0f\x04\x00\xf3\xff\x06\x00\x1f\xfc \x00\xc1\xff\xfe\xff\x01\xff`\xff\x0f\x02\xf2\xc5\xfe\x16\x0b\x01\x01\x81\x87\x0f\x04\x00\xe1\xff#\x00\x11\xfc\x15\x00\x9f\xff\x04\x00\xa5\x00F\x00\x8e\x02f\x95\xfe\x0e\x0c\x01\x01\x1d\x87\x0f\x04\x00\x81\x99iD\xd7\xa3\xf8\xbdV\x10d\xa9\xfe\x0e\r\x01\x01\x89\x87\x0f\x04\x003\xdbiD\x99\x99\x1d>~\x153\x90\xfe*\x0e\x01\x01\x96s\xe7f\xbc\xffl\x01\x00V\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00f\xaf\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x04\x01\xdc;\x05\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x8a\xe2\xfe\x06\x10\x01\x01}\xc2\x14\x00\x00\x03\x00\xd0\t\xfe\x04\x11\x01\x01\x98\x00\x00\x80\x8a\x8fM\xfe\x02\x12\x01\x01*\x00\x00\xees\xfe\x1e\x13\x01\x01\x18`|\xdc\x0f\x00\x00\x00\x00u\xa6\x02\x18\xf6\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x0b\x00p]\x03\x0c\x04\x87\xfe\x1a\x14\x01\x01>\x9d<\\\xbf\xbfl \xc0)\xee\xc3=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb7\x10\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18\xfe\x1c\x16\x01\x01\xa3\xc6Ao8\xed\x85\xfa\xb9QD\x8b9\x00\x00\x00\x00\x00\x00\x00\x00\x91\xa36<\x1d\xbf\x92;\x19\x93\xfe\x03\x17\x01\x01\xa5\xb8\x14\x00\x9b-\xfe\x0c\x18\x01\x01\x02\xf8\xa7Dz\xb1N\x05\x00\x9b\x0f\x04\x00\xed\x1a\xfe\x16\x19\x01\x01\x88p\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd2\x18\xfe\x16\x1a\x01\x01\xc1\xc7/\r=\x03y$=s\x16\xa3<\xb1\xdf4>\x00\x00\x00\x00?\x03-\x14\xfe\x03\x1b\x01\x01Ms\x00\x04\xb4&\xfe\x15\x1c\x01\x01$\xd1\xe0\xdd\x0f3\x06.\x06H\x06D\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00Tl\xfe\x16\x1d\x01\x01#\xd7\x0f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x16N'b'\xfe\x03\x1e\x01\x01Ms\x00\x04\xd5\xb1\xfe\x14\x1f\x01\x01J\xaeG\xe1=\xaeG\xe1={\x14\xee?\xcc\xcc\xcc=\xb4\x001\x00\x92\x9e'b'\xfe\x1c \x01\x01!E\x10\x04\x00r\xa6\x02\x18\xf4\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x0b\x00\x06\x00\x0b\x00eFNA\xfe\x1c!\x01\x01 O\x10\x04\x00\xb1\x1f\xf3=\xc9\xcaj?GM\xc5\xbf\xed;\xef=Q\x17y=\xa0\xc8\xe4\xbd\xc9\xaa\xfe\x1a"\x01\x01\x1b\x0cT\xe0\x0f\x00\x00\x00\x00\xe7\xff\xf9\xffI\xfc\xf2\xff6\x00\xfd\xff\x0e\xff\x06\x00\x80\x01\xc6\xbf\xfe\x16#\x01\x01tw\x10\x04\x00\xef\xff\xef\xffW\xfc\x00\x00-\x00\x00\x00\x05\xff`\xff\x10\x02\x86^\xfe\x16$\x01\x01\x81w\x10\x04\x00\xe2\xff\x0b\x00Q\xfc\xfb\xff,\x00\x04\x00\x8c\x00Z\x00s\x02\x17\x19\xfe\x0e%\x01\x01\x1dw\x10\x04\x00\xd9\x98iD\xcd\xcc\x06\xbeV\x10Bk\xfe\x0e&\x01\x01\x89w\x10\x04\x00>\xdbiD\xebQ\x1e>~\x15P\xc7\xfe\x1f\'\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1a\x01\x96;]\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Rn\xaf\xfe\x06(\x01\x01}\xc8\x14\x00\x00\x03\x00\xe2\xcf\xfe\x04)\x01\x01\x98\x00\x00\x80\x8a\xe8:\xfe\x02*\x01\x01*\x00\x00H{\xfe\x1e+\x01\x01\x18\x88\x8d\xdf\x0f\x00\x00\x00\x00x\xa6\x02\x18\xf5\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x0e\x00p]\x03\x0c\x07\xad\xfe\x1a,\x01\x01>s\xd6X\xbf\xf3\xad \xc0\xeb\xdb\xbc=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfb\xf7\xfe\x08-\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x80\xda\xfe\x1c.\x01\x01\x1e\x8c\x10\x04\x00\'\xdc\x08\xbcx\xbb8\xbd=\xdcH\xc0 @n:B\xd6==cY\x03\xbc\x8fo\xfe\x18/\x01\x01\xb2#h\x8b\xbb\x18\xb7B\xbd\xd1kH\xc0\xeb\x01*Dx\xa6\x02\x18\xf5\xe7\xb8\xfd\x9a\xa2\xfe\x030\x01\x01Ms\x00\x04(7\xfe\x1c1\x01\x01\xa3o\xf6\x8b8We\x01\xbak\x16\x8d9\x00\x00\x00\x00\x00\x00\x00\x00hmQ<\xe9q\xc7;)\xde\xfe\x032\x01\x01\xa5\xc2\x14\x00\xe1\x8a\xfe\x0c3\x01\x01\x02\xb0\x9bHz\xb1N\x05\x00\x9f\x10\x04\x00:z\xfe\x164\x01\x01\x88s\xa6\x02\x18\xf5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00`\x91\xfe\x125\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x1e\xb8\xfe\x166\x01\x01\xc1\x13w\x19=\xc3@\x1b=\xa3\xdet<\xd0\xb9K>\x00\x00\x00\x00?\x03\x05\xa5\xfe\x167\x01\x01\xe1P\x8d\x17?\\\x8fB>\xf5\xe26<\\bF<`\xa6\xad?\x00\x1f?\x80'b'\xfe\x038\x01\x01/\xff\x00\x00"\x05\xfe\x159\x01\x01$\x90\xdc\xe1\x0f|\x05\xc7\x05K\x06}\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xad\xfe\x16:\x01\x01#\xdc\x10\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00t\xfd'b'\xfe\x03;\x01\x01Ms\x00\x04D\x90\xfe\x14<\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=)\\\xef?\n\xd7\xa3=\xb3\x002\x00,\x8a\xfe\x1c=\x01\x01!#\x11\x04\x00u\xa6\x02\x18\xf4\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\t\x00\x02\x00\x08\x00\xa2E\xa6C\xfe\x1c>\x01\x01 T\x11\x04\x00*\xaf\x1c>m\xb1j?\x10\xf9\xc4\xbf\xc8l\xbd=\xbf\xe9\xb4\x7f\x15\x04\x9e\xfe\x1fD\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x00\x96;$\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd7\x16\xfe\x06E\x01\x01}\xc5\x14\x00\x00\x03\x00Ly\xfe\x04F\x01\x01\x98\x00\x00\x80\x8a\x9a\xbd\xfe\x02G\x01\x01*\x00\x00\x82\xf1\xfe\x1eH\x01\x01\x18\xb8\xf0\xe2\x0f\x00\x00\x00\x00z\xa6\x02\x18\xf4\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\x0c\x00p]\x03\x0c\x1cX'b"\xfe\x1aI\x01\x01>\xa6\x1d\xd9=\xa0\xbd\xa1\xc0\n\xa5\xb9=\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xb0n\xfe\x08J\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x002\x14\xfe\x1cK\x01\x01\x1e\x91\x11\x04\x00\x1b\xdc'<\xccY\x9a\xbd\xc3\x19F@\xb8\xb5\x02>q\r\xa3\xbe\x82X2\xbej7\xfe\x18L\x01\x01\xb2\xd7ZA<\x16\xf8\x96\xbd\xc0\x9cF@f\x06*Dz\xa6\x02\x18\xf4\xe7\xb8\xfdBW\xfe\x03M\x01\x01Ms\x00\x04\x8c\x05\xfe\x1cN\x01\x01\xa3\x1d\x94\xa08\x14\x89\x05\xbaN\xce\x8e9\x00\x00\x00\x00\x00\x00\x00\x00\xcfb:<\xb3\xb7\xb8;k7\xfe\x03O\x01\x01\xa5\xc5\x14\x00d\xef\xfe\x0cP\x01\x01\x028\x97Lz\xb1N\x05\x00\xa5\x11\x04\x00\xaaF\xfe\x16Q\x01\x01\x88v\xa6\x02\x18\xf4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\x85\xfe\x16R\x01\x01\xc1\x9b\xa4!=H\xc3\x04=\x16\xd0;<\x1a5+>\x00\x00\x00\x00?\x03\xfb\xff"b"\xfe\x15S\x01\x01$9\xdc\xe5\x0f4\x06 \x06\n\x06J\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00I\xe9\xfe\x16T\x01\x01#\xe2\x11\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa47\xfe\t\xee\n\x00m&\x00\x00\x00\x00\xd9\x00\x00\x00\x87'\xfe\x03U\x01\x01Ms\x00\x00(\x14\xfe\x14V\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc={\x14\xee?\xcc\xcc\xcc=\xb0\x002\x00'\x0f\xfe\x12W\x01\x01\xfcC\x12\x04\x004\x00\x01\x00ARMMASK\x00WrdT\xfe\tX\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x8c\xdf"b'\xfe\x1aY\x01\x01\x1b\xb0\xb0\xe7\x0f\x00\x00\x00\x00\xdf\xff\xf9\xff\x07\xfc/\x00d\x00x\x00\x17\xff\xfe\xff\x8b\x01\x83\x95\xfe\x16Z\x01\x01tZ\x12\x04\x00\xe1\xff\x00\x00\x14\xfc \x00q\x00k\x00\x15\xffY\xff\x1a\x02\x077\xfe\x16[\x01\x01\x81Z\x12\x04\x00\xd4\xff\x03\x00\x14\xfcG\x00[\x00n\x00\xb2\x00B\x00\x82\x02.\x82\xfe\x0e\\\x01\x01\x1dZ\x12\x04\x00\xb8\x96iDG\xe1(\xbeW\x10 \xc0\xfe\x0e]\x01\x01\x89Z\x12\x04\x00\x99\xdaiD\x00\x00\x14>\x80\x15\xd3\x01\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x96;\x9a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x86\xf2\xfe\x06_\x01\x01}\xc8\x14\x00\x00\x03\x00\xce1\xfe\x04`\x01\x01\x98\x00\x00\x80\x8a\xbc\xee\xfe\x02a\x01\x01*\x00\x00\xcc\xca\xfe\x1eb\x01\x01\x18\xd8\xaf\xe5\x0f\x00\x00\x00\x00|\xa6\x02\x18\xf3\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\t\x00p]\x03\x0c\xea`\xfe\x1ac\x01\x01>-\xbc7\xbfE\xd1@\xc03\xc9\xb5=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc7\xc2\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91\xfe\x1ce\x01\x01!\xd7\x11\x04\x00w\xa6\x02\x18\xf2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\xfd\xff\xfb\xff\x0b\x00\tE\xdb\xbb\xfe\x1cf\x01\x01 n\x12\x04\x00\x01\xee,>\xd4\xecd?!\x12\xc5\xbf\xf6\x86\x04\xbd\xd9\xecY\xbd\xf3\xe4\xef\xbd\xdfa\xfe\x1cg\x01\x01\x1e\x96\x12\x04\x00/\x1d\x18\xf6?\xad>\xce\x8c\xfe\x18h\x01\x01\xb21\xd76<\xea;\xb2\xf5\xfe\x03k\x01\x01\xa5\xc5\x14\x00JO\xfe\x0cl\x01\x01\x02\xf8\xdcPz\xb1N\x05\x00\xab\x12\x04\x00\x937\xfe\x16m\x01\x01\x88v\xa6\x02\x18\xf1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x02\x9d\xfe\x16n\x01\x01\xc1L/\xbd\x00\x00\x00\x00?\x03\xcd|\xfe\x15o\x01\x01$~\xd6\xe9\x0f\xf9\x05\xe3\x05\xfb\x05\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00-\x9f\xfe\x16p\x01\x01#\xe7\x12\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06"'b'\xfe\x03q\x01\x01Ms\x00\x00\x06\xb4\xfe\x14r\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xd7\xa3\xf0?\x8f\xc2\xf5<\xb3\x002\x00 }\xfe\x1as\x01\x01\x1b^b\xeb\x0f\x00\x00\x00\x00\xe0\xff\xfd\xffW\xfcA\xff\x16\x00{\x00\x0c\xff\x04\x00\x7f\x01\x88\x01\xfe\x16t\x01\x01tL\x13\x04\x00\xe2\xff\t\x00x\xfcG\xff\x15\x00u\x00\x07\xffp\xff\x19\x02\xc5\x1a\xfe\x16u\x01\x01\x81L\x13\x04\x00\xe0\xff\x12\x00_\xfc7\xff*\x00t\x00\xa8\x00N\x00\x81\x02ba\xfe\x0ev\x01\x01\x1dL\x13\x04\x00*\x98iD\x8f\xc2\x11\xbeW\x10\x86\x92\xfe\x0ew\x01\x01\x89L\x13\x04\x00\x0e\xdaiD\xaeG\x0b>\x80\x15\x16\xe9\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x01\x96;\x9a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R26\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5\xfe\x02{\x01\x01*\x00\x00R\x96\xfe\x1e|\x01\x01\x18\x00\xc1\xe8\x0f\x00\x00\x00\x00{\xa6\x02\x18\xef\xe7\xb8\xfd,j\n\x00F\x00\xff\xff\t\x00p]\x03\x0c\x1b\x1c\xfe\x1a}\x01\x01>7?\xdd\xbf\xf0\x97\xfb\xbf\x85\x8d\x9c=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00re\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed'b'\xfe\x1c\x7f\x01\x01!j\x13\x04\x00v\xa6\x02\x18\xee\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf9\xff\xf7\xff\x00\x00\x1aF@\x08\xfe\x1c\x80\x01\x01 t\x13\x04\x00&\x02 >\xa0\xe5[?]u\xc6\xbf_\xfc\x8f\xbd\x8f\xae\xc6\xbd\xcc\xb9\xbc\xba\xd0U\xfe\x1c\x81\x01\x01\x1e\x9d\x13\x04\x00F\xc0\xdd\xbc\x0f\'.\xbd\xb6\xb0H@\x0eu\xbe\xbd\xbc8\x8a\xba\xbbO\x9f=\xf8\xee\xfe\x18\x82\x01\x01\xb2"7\xd1\xbcg\xb5/\xbd\xf6\xffH\xc0\xf6\x18*D{\xa6\x02\x18\xef\xe7\xb8\xfd\x8b:\xfe\x03\x83\x01\x01Ms\x00\x00\xf2\xfc\xfe\x1c\x84\x01\x01\xa3\xb7)\xcb8\xf8\xd7\r\xba\xf9\xe1\x919\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xd5u<\x81+\xe2;\xcb\xf6\xfe\x03\x85\x01\x01\xa5\xc5\x14\x00\xa4g\xfe\x0c\x86\x01\x01\x02\xb0\xd0Tz\xb1N\x05\x00\xb0\x13\x04\x00Z\x12\xfe\x16\x87\x01\x01\x88u\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xef\xfe\xfe\x16\x88\x01\x01\xc1\xc3x\xfe<\xac\xb1\xa2>\x00\x00\x00\x00?\x03d\xa1'b'\xfe\x15\x89\x01\x01$\xa7\xd6\xed\x0f\x1c\x06\xc6\x05\x0c\x06F\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\x97\xfe\x16\x8a\x01\x01#\xed\x13\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5\x98\xfe\x03\x8b\x01\x01Ms\x00\x00N\xd1'b'\xfe\x1a\x8c\x01\x01\x1bK\x12\xef\x0f\x00\x00\x00\x00\xee\xff\x04\x00\x1b\xfc\xd7\xff*\x00\x1d\x00\x06\xff\xfe\xff\x80\x01\x82B\xfe\x16\x8d\x01\x01t>\x14\x04\x00\xe6\xff\x05\x00\x18\xfc\xe2\xff!\x00 \x00\x02\xff]\xff\x12\x02\x82\x9b\xfe\x16\x8e\x01\x01\x81>\x14\x04\x00\xe8\xff\n\x00\x06\xfc\xce\xff9\x00\x1a\x00\x85\x00L\x00o\x02H{\xfe\x0e\x8f\x01\x01\x1d>\x14\x04\x00\\\x97iD\xd7\xa3\x1e\xbeW\x10\xee\xe8\xfe\x0e\x90\x01\x01\x89>\x14\x04\x00\x86\xdciD\xcd\xcc2>\x81\x15\xbcX\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xf9;\x8b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R>J\xfe\x06\x92\x01\x01}\xc8\x14\x00\x00\x03\x00\xbe\xd9\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12\xfe\x02\x94\x01\x01*\x00\x00>\xad\xfe\x1e\x95\x01\x01\x188\xe7\xee\x0f\x00\x00\x00\x00y\xa6\x02\x18\xeb\xe7\xb8\xfd6j\n\x00F\x00\xff\xff\x1a\x00\xa0\\\x03\x0c\xfaA\xfe\x1a\x96\x01\x01>\xf1{\t\xc0\x0e\xba\xad\xbf\x1e)\x9d=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00`\xba\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5\xfe\x14\x98\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>\xd7\xa3\xf0?\xcc\xccL=\xb4\x002\x00F6\xfe\x1c\x99\x01\x01!3\x14\x04\x00s\xa6\x02\x18\xe9\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf6\xff\xf9\xff\x06\x00kFB!\xfe\x1c\x9a\x01\x01 z\x14\x04\x00N\x1c\x07>%\xecQ?K\xa6\xc6\xbf\x9d\xc7\xd8\xbd1\xce\x9b\xbd\t\x07y\xbd]\xe7\xfe\x03\x9b\x01\x01Ms\x00\x006\x8a'b"\xfe\x1c\x9c\x01\x01\x1e\xa2\x14\x04\x00\x9a\x11\x11\xbdSZ\x17\xbd\xcd\xb2H\xc0\xd6\x04\x84\xbbhT-=\xd4\x00\xbc<\xe9\xf4\xfe\x18\x9d\x01\x01\xb2T\xe4\x0f\xbdiJ\x1a\xbd\xba6H\xc0{\x04*Dy\xa6\x02\x18\xeb\xe7\xb8\xfd\x80\x14\xfe\x1c\x9e\x01\x01\xa3\xf1\xf0\xe08\x9e\x10\x12\xba\xaaS\x939\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xe8\x94\x00\x00\x00\x00?\x03\xf3`\xfe\x16\xa3\x01\x01\xe1\xfe\xd4\x18?{\x14.>\xf5\xe26<\\bF<\xc2\xf9\xab?\x00\x1f7G\xfe\x03\xa4\x01\x01/\xff\x00\x00\xda\xae\xfe\x15\xa5\x01\x01$ \xd4\xf1\x0f\x13\x06]\x04\xae\x05B\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6U\xfe\x16\xa6\x01\x01#\xf2\x14\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa4\x13"b'\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\\xfe\x1a\xa8\x01\x01\x1b`\xbf\xf2\x0f\x00\x00\x00\x00\xf0\xff\x1a\x009\xfc\xd2\xff\x0c\x00b\xff\x02\xff\xfd\xff~\x01\xe7\x8a\xfe\x16\xa9\x01\x01t.\x15\x04\x00\xf7\xff\x1d\x00?\xfc\xd0\xff\x1b\x00v\xff\x00\xff]\xff\x11\x02\xe8\x9b\xfe\x16\xaa\x01\x01\x81.\x15\x04\x00\xed\xff-\x00>\xfc\xb3\xff\x0c\x00j\xff}\x00X\x00j\x02\x95\x98\xfe\x0e\xab\x01\x01\x1d.\x15\x04\x00\x81\x98iD\xebQ\x0c\xbeW\x10\xf0\xa8\xfe\x0e\xac\x01\x01\x89.\x15\x04\x00T\xddiD\x14\xae?>\x82\x15\xe1\xe7\xfe\x1f\xad\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00 \x01\xf9;\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RW\x1a\xfe\x06\xae\x01\x01}\xc2\x14\x00\x00\x03\x00\xd9A\xfe\x04\xaf\x01\x01\x98\x00\x00\x80\x8a Z\xfe\x02\xb0\x01\x01*\x00\x00\xcb\xa1\xfe\x1e\xb1\x01\x01\x18`\xf8\xf1\x0f\x00\x00\x00\x00v\xa6\x02\x18\xe6\xe7\xb8\xfd6j\n\x00F\x00\xff\xff\x1a\x00\xa0\\\x03\x0c\xb1\x96\xfe\x1a\xb2\x01\x01>\xee\x84k\xc0\x1e\x02\xae\xbf\x1eA\xa7=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xa6\x1c\xfe\x08\xb3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00tv\xfe\x14\xb4\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>)\\\xef?\xcc\xccL=\xb3\x004\x00\xa75'b'\xfe\x1c\xb5\x01\x01!\xfc\x14\x04\x00p\xa6\x02\x18\xe5\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf4\xff\xfc\xff\x05\x00\x0cFi\n\xfe\x1c\xb6\x01\x01 \x7f\x15\x04\x00\x86\xae\xbf=j\xaaH?\xbf\xa6\xc5\xbf\xf3\x15\x04\xbeyr-\xbd\x1a\xf6W\xbd9\xf5\xfe\x03\xb7\x01\x01Ms\x00\x04\xc4`\xfe\x1c\xb8\x01\x01\x1e\xa7\x15\x04\x00H\x1b\x00\xbd\x13%,\xbd\x8ayH@I\xc6N>\xe1\\\xad\xbd\t\xdd\x9e=l\x97\xfe\x18\xb9\x01\x01\xb2Mf\x0c\xbd\xaa\x8c(\xbd\x93\xebH@f\x06*Dv\xa6\x02\x18\xe6\xe7\xb8\xfdw\x8a\xfe\x1c\xba\x01\x01\xa3\xc5T\xf78"[\x16\xbaP\xae\x949\x00\x00\x00\x00\x00\x00\x00\x00e\xf0\x89<2+\xc7;\xec\xc9\xfe\x03\xbb\x01\x01\xa5\xc2\x14\x00\x00\xed\xfe\x0c\xbc\x01\x01\x02\xd0q\\z\xb1N\x05\x00\xbb\x15\x04\x00\x17\xcd\xfe\x16\xbd\x01\x01\x88o\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb0M\xfe\x16\xbe\x01\x01\xc1\xc1r\x10=y\x10\x8e<\xf5\xc4A<*7;>\x00\x00\x00\x00?\x03:D'b'\xfe\t\xef\n\x00m\t\x00\x00\x00\x00\xda\x00\x00\x00\xc8E\xfe\x15\xbf\x01\x01$/\xd0\xf5\x0f\x16\x06\x14\x06*\x06*\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xddb\xfe\x16\xc0\x01\x01#\xf7\x15\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00i\xcb\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92\xfe\x1a\xc2\x01\x01\x1b\x97n\xf6\x0f\x00\x00\x00\x00\xe7\xff\x0b\x00\x14\xfc\xfa\xff\xc2\x00\x19\x00\t\xff\xf8\xff{\x01\x14\xcd\xfe\x16\xc3\x01\x01t \x16\x04\x00\xe7\xff\x01\x00\x0f\xfc\xef\xff\xd0\x00\x16\x00\x02\xffM\xff\x11\x02\xde\xda\xfe\x16\xc4\x01\x01\x81 \x16\x04\x00\xe1\xff\x1a\x00\x01\xfc\x03\x00\xc0\x00\x18\x00\x8a\x008\x00u\x02a\xc6\xfe\x0e\xc5\x01\x01\x1d \x16\x04\x00\xaf\x97iD\xa4p\x19\xbeX\x10\x1e\x8a\xfe\x0e\xc6\x01\x01\x89 \x16\x04\x00~\xd9iD\xebQ\x02>\x82\x15\\\x87\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x00\xf9;\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R4\x9e\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\\xfe\x04\xc9\x01\x01\x98\x00\x00\x80\x8ae\xef\xfe\x02\xca\x01\x01*\x00\x00\xd0Y\xfe\x1e\xcb\x01\x01\x18\x88\t\xf5\x0f\x00\x00\x00\x00t\xa6\x02\x18\xe3\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x16\x00\xa0\\\x03\x0c\x98:'b'\xfe\x1a\xcc\x01\x01>\xb3?V\xc0\xab\xfb\x95=\\{\xa6=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x06}\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca\xfe\x12\xce\x01\x01\xfc1\x16\x04\x004\x00\x01\x00ARMMASK\x00Wr\x1d\x16\xfe\t\xcf\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x02\xff\xfe\x14\xd0\x01\x01J\x1e\x85k>\x1e\x85k>)\\\xef?\xebQ\xb8=\xb3\x00/\x00\xbfg\xfe\x1c\xd1\x01\x01!\xc5\x15\x04\x00l\xa6\x02\x18\xe1\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf2\xff\xfc\xff\x07\x00JF\x0f\xd0\xfe\x1c\xd2\x01\x01 \x84\x16\x04\x00>*O=i/@?{q\xc6\xbf\xf9\xed\x14\xbe\xb3\xbb:\xbdM\x88\x94\xbdSc'b"\xfe\x03\xd3\x01\x01Ms\x00\x00{\xc2\xfe\x1c\xd4\x01\x01\x1e\xac\x16\x04\x00\xc8\xda1\xbd@\xc5@\xba\xb6\xfeH@v?\xdc\xbd\xbf\xec\t>\xde\x9d[<\xe4\x15\xfe\x18\xd5\x01\x01\xb2{'5\xbd\xda\xaeU\xba\x05\x96H\xc0)\x0c*Dp\xa6\x02\x18\xe1\xe7\xb8\xfd\x19\x10\xfe\x1c\xd6\x01\x01\xa3\x01J\x079\xee\xb0\x1a\xba\x16\xed\x959\x00\x00\x00\x00\x00\x00\x00\x00\xad\xd2\xa6<\xc5\xd5\x13<\x0b\xe4\xfe\x03\xd7\x01\x01\xa5\xc2\x14\x00c\x05\xfe\x0c\xd8\x01\x01\x02\x90\xb7`z\xb1N\x05\x00\xc0\x16\x04\x00\xb3$\xfe\x16\xd9\x01\x01\x88k\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x7fL\xfe\x16\xda\x01\x01\xc1\n|\x12=,\x88=<\xba\xb5\xef;\xfe\x9a9>\x00\x00\x00\x00?\x03\x8b\x8c"b'\xfe\x15\xdb\x01\x01$\x7f\xce\xf9\x0f-\x06#\x06\x1a\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c+\xfe\x16\xdc\x01\x01#\xfd\x16\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x96\x82\xfe\x1a\xdd\x01\x01\x1b\xa6\x1d\xfa\x0f\x00\x00\x00\x00\xe0\xff\x01\x00\x14\xfc\xaf\xff\x1d\x00-\x00\xf7\xfe\xfb\xffr\x01\xa1l\xfe\x16\xde\x01\x01t\x11\x17\x04\x00\xe8\xff\xf5\xff/\xfc\xb5\xff5\x00\x05\x00\xf0\xfeR\xff\x02\x02\xd2\x0b\xfe\x16\xdf\x01\x01\x81\x11\x17\x04\x00\xe0\xff\x15\x00\x1e\xfc\x88\xff9\x00\x19\x00\x82\x00@\x00l\x02\xcc\xd8\xfe\x0e\xe0\x01\x01\x1d\x11\x17\x04\x00\x9d\x96iD\\\x8f*\xbeW\x109F\xfe\x0e\xe1\x01\x01\x89\x11\x17\x04\x003\xdbiD\x99\x99\x1d>\x83\x15\xe6\xe0\xfe\x1f\xe2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xe8;|\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xfe\xa7\xfe\x06\xe3\x01\x01}\xc5\x14\x00\x00\x03\x00\xaa\xfc\xfe\x03\xe4\x01\x01Ms\x00\x00\xfd\xb3\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b\xfe\x1e\xe7\x01\x01\x18\xb0\x1a\xf8\x0f\x00\x00\x00\x00p\xa6\x02\x18\xe1\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x1d\x00\xebV\x03\x0c\x8e:\xfe\x1a\xe8\x01\x01>\xef\xc0S\xc0A9\xaf>\x14"\x9a=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x12\xde\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i'b'\xfe\x14\xea\x01\x01J=\nW>=\nW>\xd7\xa3\xf0?\xcc\xccL=\xb3\x000\x00\x16B\xfe\x1c\xeb\x01\x01!W\x17\x04\x00i\xa6\x02\x18\xde\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfa\xff\x01\x00\x03\x00?F\xad\xf5\xfe\x1c\xec\x01\x01 \x89\x17\x04\x00\x08r:<\xd6\x91:?\xe7m\xc7\xbf;\x06\x8d\xbd\xe1\xc4L<&\xfa!\xbd\x89p\xfe\x03\xed\x01\x01Ms\x00\x00\xfe\x1f\xfe\x1c\xee\x01\x01\x1e\xb2\x17\x04\x00O\x0c]\xbd\xfd\x80\xa4;2\xd7H@L~\x03;bcF\xbd\xd5\xcf\x0e\xbc\xcd\xf9\xfe\x18\xef\x01\x01\xb2\x9d\xeeg\xbd\x1fR\xe4;\xec\xb8H\xc0\x1e\x15*Dn\xa6\x02\x18\xdf\xe7\xb8\xfd\x07%'b'\xfe\x1c\xf0\x01\x01\xa3U&\x139\xe8\x1b\x1f\xbau2\x979\x00\x00\x00\x00\x00\x00\x00\x00{P\xc0<\x1a\x08A<\x01\xbe\xfe\x03\xf1\x01\x01\xa5\xc2\x14\x00"\xae\xfe\x0c\xf2\x01\x01\x02\xe0hdz\xb1N\x05\x00\xc7\x17\x04\x00\x08\x0f\xfe\x16\xf3\x01\x01\x88h\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xff\xac\xfe\x16\xf4\x01\x01\xc1\x92\xd8\xd4<\xac\xec+<\x02\x9b\xb3;D"\x17>\x00\x00\x00\x00?\x03T\x08\xfe\x1a\xf5\x01\x01\x1b\x9f\xc9\xfd\x0f\x00\x00\x00\x00\xf6\xff\x04\x00"\xfc\x13\x00\xc3\xff\x00\x00\xf4\xfe\xf8\xffn\x01An\xfe\x16\xf6\x01\x01t\x02\x18\x04\x00\xf9\xff\xfd\xff8\xfc\x08\x00\xce\xff\xfb\xff\xf2\xfeZ\xff\x08\x02+,\xfe\x16\xf7\x01\x01\x81\x02\x18\x04\x00\xf1\xff\n\x003\xfc\x15\x00\xd1\xff\xf5\xffr\x00L\x00u\x02\xd1\x10\xfe\x0e\xf8\x01\x01\x1d\x02\x18\x04\x00\\\x97iD\xd7\xa3\x1e\xbeX\x10\xe7\xb4\xfe\x0e\xf9\x01\x01\x89\x02\x18\x04\x00\xb3\xdbiD\x99\x99%>\x84\x15rS\xfe\x1f\xfa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe8;\xe2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd3o\xfe\x06\xfb\x01\x01}\xc2\x14\x00\x00\x03\x00]\xf6\xfe\x04\xfc\x01\x01\x98\x00\x00\x80\x8a\xd0\x95\xfe\x02\xfd\x01\x01*\x00\x00\x82H\xfe\x1e\xfe\x01\x01\x18\xd8+\xfb\x0f\x00\x00\x00\x00l\xa6\x02\x18\xde\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x15\x00\xebV\x03\x0c\x85{\xfe\x1a\xff\x01\x01>0<+\xc0{Q\x9d\xbe\x00$\x8e=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00JX\xfe\x08\x00\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00QQ\xfe\x15\x01\x01\x01$v\x18\xfe\x0f$\x06 \x06#\x06\x12\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00K\x95\xfe\x16\x02\x01\x01#\x16\x18\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xae\xc5'b'\xfe\x03\x03\x01\x01Ms\x00\x00\x107\xfe\x14\x04\x01\x01J\xebQ8>\xebQ8>\xd7\xa3\xf0?\n\xd7\xa3<\xb3\x004\x00\xfco'b'\xfe\x1c\x05\x01\x01! \x18\x04\x00h\xa6\x02\x18\xde\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xff\xff\x07\x00\x02\x001F@\xf2\xfe\x1c\x06\x01\x01 \x8f\x18\x04\x00++\xa5\xba]\xfd9?G0\xc7\xbf?r\x83\xbc\xa8Y\x9c=\x8c\xe6\xe5\xbc\xb9*\xfe\x03\x07\x01\x01Ms\x00\x00\xce!\xfe\x1c\x08\x01\x01\x1e\xb7\x18\x04\x00\xf8\x0e9\xbd\x9f~\x04\xbc.\xaeH@\x12\xc9\xd7<\xd8\xbd\x04;\x02r\x16\xbc6\xc9\xfe\x18\t\x01\x01\xb2\xc8\xd7E\xbd\xe2,\xd8\xbb\xe8\xdfH\xc0\x99\x19*Dl\xa6\x02\x18\xde\xe7\xb8\xfd\x99\x98\xfe\x1c\n\x01\x01\xa3\x9f5\x1f9\xdb\x8b#\xba\xe0\x84\x989\x00\x00\x00\x00\x00\x00\x00\x00\xc9X\xd2<\x15m\x19<\x1f\xaa\xfe\x03\x0b\x01\x01\xa5\xc6\x14\x00\x86\xb9\xfe\x0c\x0c\x01\x01\x02\xd0\xa6hz\xb1N\x05\x00\xcb\x18\x04\x00:\xae\xfe\x16\r\x01\x01\x88h\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xbf\x8b\xfe\x12\x0e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00a(\xfe\x16\x0f\x01\x01\xc1U\x81\x02=\x1d\xdaA<\xe9\xed\x0f;f21>\x00\x00\x00\x00?\x03}\x14\xfe\x16\x10\x01\x01\xe16^\x1a?{\x14.>\xf5\xe26<\\bF\x84\x15~\xe6\xfe\x1f\x16\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00<\x00\xe8;e\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xd7R\xfe\x06\x17\x01\x01}\xc5\x14\x00\x00\x03\x00.n\xfe\x04\x18\x01\x01\x98\x00\x00\x80\x8a\xb8\x7f\xfe\x02\x19\x01\x01*\x00\x00l\x05\xfe\x1e\x1a\x01\x01\x18(N\x01\x10\x00\x00\x00\x00j\xa6\x02\x18\xde\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x0b\x00\xebV\x03\x0c\xc0\xbe\xfe\x1a\x1b\x01\x01>\x16)\x04\xc0\xbd\xde \xbf\x14\xc6\x85=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe5C\xfe\x08\x1c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00]0\xfe\x03\x1d\x01\x01/\xff\x00\x00\xb3$\xfe\x15\x1e\x01\x01$p\x16\x02\x10#\x06\x95\x05\xe5\x05\x15\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00{f\xfe\x16\x1f\x01\x01#\x1c\x19\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb2\x84\xfe\x03 \x01\x01Ms\x00\x000\x0b'b'\xfe\x14!\x01\x01J\xaeG\xe1=\xaeG\xe1=\x85\xeb\xf1?\x00\x00\x00\x00\xb3\x004\x005\xc8\xfe\x1c"\x01\x01!\xe9\x18\x04\x00h\xa6\x02\x18\xdf\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\x0b\x00\x00\x00\xfbE\x08\x0e\xfe\x1c#\x01\x01 \x94\x19\x04\x00\x94\xf6%\xbc\xd2\'=?\xdaA\xc8\xbf\x1d\xfc?<@g\xf1=$\xa1\x87;\xcev\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b"\xfe\x1c%\x01\x01\x1e\xbd\x19\x04\x00\xdf\xd2*\xbd\xd5\x86\xa1;\xe29H@\xaaE\xdf;\xe3$\x84=G\x83\n=\x948\xfe\x18&\x01\x01\xb2\xd8^8\xbd\xc3\x97\xc9;\x11\xbdH@\x8f\x12*Dj\xa6\x02\x18\xdf\xe7\xb8\xfd~\x05\xfe\t\xf0\n\x00m\x11\x00\x00\x00\x00\xda\x00\x00\x00\x80\xb7\xfe\x1c'\x01\x01\xa3\xd2u+9\xf7\r(\xba4\xdb\x999\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x04\xb9<\x9b\xa40<\x89\x9e\xfe\x03(\x01\x01\xa5\xc2\x14\x00J\xf7\xfe\x0c)\x01\x01\x02X\xa2lz\xb1N\x05\x00\xd1\x19\x04\x00q\xbb\xfe\x16*\x01\x01\x88h\xa6\x02\x18\xe0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00nh\xfe\x16+\x01\x01\xc1\xd3\x90\x01=IU.<\\\xebi;\xa7e$>\x00\x00\x00\x00?\x03\xde\xa2\xfe\x1a,\x01\x01\x1b\x8e*\x05\x10\x00\x00\x00\x00\xf2\xff\x01\x00\xed\xfbU\x00\x01\x00F\x00\xf5\xfe\xf8\xfft\x01\xbe\x0f\xfe\x16-\x01\x01t\xe6\x19\x04\x00\xeb\xff\x12\x00\x17\xfcN\x00\x1c\x00.\x00\xf4\xfeH\xff\x01\x02\xa9\xf6\xfe\x16.\x01\x01\x81\xe6\x19\x04\x00\xe9\xff\x17\x00\r\xfc<\x00,\x008\x00\x84\x000\x00k\x02\xa24\xfe\x0e/\x01\x01\x1d\xe6\x19\x04\x00\t\x97iD\n\xd7#\xbeX\x100\x87\xfe\x0e0\x01\x01\x89\xe6\x19\x04\x00\xb4\xdbiD\x14\xae%>\x85\x15]L\xfe*1\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00X\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00DS\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01\xe8;e\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Rs\x86\xfe\x063\x01\x01}\xc2\x14\x00\x00\x03\x00\xe9\x15\xfe\x044\x01\x01\x98\x00\x00\x80\x8a\xae\xc8\xfe\x025\x01\x01*\x00\x00u\xd7\xfe\x1e6\x01\x01\x18P_\x04\x10\x00\x00\x00\x00j\xa6\x02\x18\xdf\xe7\xb8\xfdTj\n\x00F\x00\xff\xff\x04\x00\xebV\x03\x0c^4\xfe\x1a7\x01\x01>\x94[\x9f\xbfr\xec\xb9\xbeR6\x90=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xa6\x01\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93"b'\xfe\x129\x01\x01\xfc \x1a\x04\x004\x00\x01\x00ARMMASK\x00Wr=\x8c\xfe\t:\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x88\xc4\xfe\x15;\x01\x01$\x9b\x19\x06\x100\x066\x06"\x06\x01\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\xc3\xfe\x16<\x01\x01##\x1a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00O?\xfe\x03=\x01\x01Ms\x00\x00\x95\xea\xfe\x14>\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\xf1?\xcc\xccL=\xb3\x003\x00\x99\xf8'b'\xfe\x1c?\x01\x01!|\x1a\x04\x00h\xa6\x02\x18\xe2\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x07\x00\x0e\x00\x04\x00!F\xba*\xfe\x1c@\x01\x01 \x9b\x1a\x04\x00\xecG\x83:(4C?\x9e7\xc8\xbf\xaa{\x96=\xf7o\x18>\x83&B\xbd\xb7\x11\xfe\x03A\x01\x01Ms\x00\x00\x8eY\xfe\x1cB\x01\x01\x1e\xc3\x1a\x04\x00\xa6\xaf\xd1\xbc1\xbbK\xbcG\x8eH@\xd6(\x1b<\x907\xfa\xbd+\xf8\xe4\xbc\xe6\x17\xfe\x18C\x01\x01\xb2]\xd7\xf4\xbcn\xcd\x11\xbc\x0e\x02I\xc03\x13*Dk\xa6\x02\x18\xe2\xe7\xb8\xfd\xae\xfd\xfe\x1aD\x01\x01\x1b\x02\xd8\x08\x10\x00\x00\x00\x00\xf7\xff\xfd\xff\x17\xfc\x15\x00~\xff\x1b\x00\xf5\xfe\xfe\xffs\x01\x08\xb8\xfe\x16E\x01\x01t\xd7\x1a\x04\x00\x01\x00\xf4\xff\x12\xfc\x07\x00\x92\xff\x03\x00\xf5\xfeZ\xff\t\x02\x8e\x02\xfe\x16F\x01\x01\x81\xd7\x1a\x04\x00\xf2\xff\r\x00\x10\xfc\xcd\xff\xb7\xff\x0f\x00z\x00Q\x00c\x02\x1c\xd7\xfe\x0eG\x01\x01\x1d\xd7\x1a\x04\x00\xf2\x96iD\xaeG%\xbeX\x10\xbfM\xfe\x0eH\x01\x01\x89\xd7\x1a\x04\x00C\xdciD\xd7\xa3.>\x86\x15\xb6r\xfe\x1fI\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01t;\xa2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x17\xc8\xfe\x06J\x01\x01}\xc5\x14\x00\x00\x03\x00\x00e\xfe\x04K\x01\x01\x98\x00\x00\x80\x8aH\xb0'b"\xfe\x02L\x01\x01*\x00\x00\x00\x87\xfe\x1eM\x01\x01\x18`t\x07\x10\x00\x00\x00\x00k\xa6\x02\x18\xe2\xe7\xb8\xfdJj\n\x00F\x00\xff\xff\x01\x00\xebV\x03\x0c(\xa5\xfe\x1aN\x01\x01>\x9b\x84\x11\xbf;5\xa1\xbf\x8f\x9e\x8a=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfd\x1a\xfe\x08O\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00+\x07\xfe\x1cP\x01\x01\xa3\x0b\xe2899\xe3,\xbaBP\x9b9\x00\x00\x00\x00\x00\x00\x00\x00\x90\xe7\x9c\x00\x00\x00\x00?\x03,a\xfe\x15U\x01\x01$\x90\x13\n\x10A\x06\x13\x06\x15\x06\x1f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00r\xbe\xfe\x16V\x01\x01#'\x1b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18\xad\xfe\x03W\x01\x01Ms\x00\x00G\x1f"b'\xfe\x14X\x01\x01J\xebQ\xb8=\xebQ\xb8=\x85\xeb\xf1?\x8f\xc2u=\xb3\x003\x00\x80-\xfe\x1cY\x01\x01!E\x1b\x04\x00j\xa6\x02\x18\xe6\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x08\x00\x0e\x00\x06\x00(F\xd1M\xfe\x1cZ\x01\x01 \xa0\x1b\x04\x00\xd7D\xc8<{\x84K?\xf5\xa4\xc8\xbf\x9c\x03\xa8=\xc9\\\x18>\xeb\x80\x8d\xbdC\xb0\xfe\x03[\x01\x01Ms\x00\x00%$'b"\xfe\x1a\\\x01\x01\x1b\xb4\x89\x0c\x10\x00\x00\x00\x00\xed\xff\x0f\x00\x0f\xfc \x00\xcb\xff\xfe\xff\x01\xff\x01\x00z\x01\xb1\xa5\xfe\x16]\x01\x01t\xc9\x1b\x04\x00\xe5\xff\x1c\x00\x14\xfc\x07\x00\xdb\xff\xf5\xff\xfd\xfe[\xff\r\x02\xed_\xfe\x16^\x01\x01\x81\xc9\x1b\x04\x00\xe4\xff\x1c\x00\x14\xfc\xe5\xff\xe2\xff\xf2\xff\x7f\x00\\\x00b\x02\x19}\xfe\x0e_\x01\x01\x1d\xc9\x1b\x04\x00\x00\x98iDff\x14\xbeZ\x10\xb2,\xfe\x0e`\x01\x01\x89\xc9\x1b\x04\x00t\xdaiD\x14\xae\x11>\x86\x15E\xbc\xfe\x1fa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00dt;\xec\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xe2\x83\xfe\x06b\x01\x01}\xc5\x14\x00\x00\x03\x00 ;\xfe\x04c\x01\x01\x98\x00\x00\x80\x8a\xbb8\xfe\x02d\x01\x01*\x00\x00o:\xfe\x1ee\x01\x01\x18\x88\x85\n\x10\x00\x00\x00\x00k\xa6\x02\x18\xe5\xe7\xb8\xfd^j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x17\x82\xfe\x1af\x01\x01>MO&\xbe\xec\xf9\xce\xbf\xcd\x0c\x87=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb5\xce\xfe\x08g\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x9f\xfe\x1ch\x01\x01\x1e\xdc\x1b\x04\x00\xa6\xfck\xbc\xed\xbd\xe8\xbc\x95\x92H@4\xd9\x04\xbc\xaa\xe3\xd0\xbc\xc7\xf4n\xbcR\xbf\xfe\x18i\x01\x01\xb2F}\x9d\xbc'Z\xd5\xbc\n\xf8H\xc0\x99\t*Dk\xa6\x02\x18\xe5\xe7\xb8\xfd\xe5\xa8\xfe\x1cj\x01\x01\xa3G9E9oY1\xba\xc9\x98\x9c9\x00\x00\x00\x00\x00\x00\x00\x00\xa7`\x8f<\x95\xbf\xfd;Ny\xfe\x03k\x01\x01\xa5\xc2\x14\x00k\x18\xfe\x0cl\x01\x01\x02\xd0\xdbtz\xb1N\x05\x00\xf1\x1b\x04\x00\xb5Q\xfe\x16m\x01\x01\x88j\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9c\x17\xfe\x16n\x01\x01\xc14\xc1\xac<\x07\x82\x87<\xb7\xe4*\x00\x00\x00\x00?\x03]\xec"b'\xfe\x15o\x01\x01$\x1a\x15\x0e\x10#\x06G\x06\xfc\x05\x0e\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\t\xfb\xfe\x16p\x01\x01#.\x1c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v\xf0\xfe\x03q\x01\x01Ms\x00\x00\x06\xb4'b'\xfe\x14r\x01\x01J)\\\x0f>)\\\x0f>33\xf3?)\\\x8f=\xb3\x001\x00\xd8B\xfe\x1cs\x01\x01!\xfb\x1b\x04\x00l\xa6\x02\x18\xea\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x07\x00\r\x00\x07\x00\x1aF\x82\x97\xfe\x1ct\x01\x01 \xa6\x1c\x04\x00~\xbaN=\xfd\xc5S?U\xa0\xc9\xbf\xd5\xfe\x96=W\xa5\x08>\xe9;\x99\xbda}\xfe\x1au\x01\x01\x1b\xed7\x10\x10\x00\x00\x00\x00\xe4\xff\x06\x00&\xfc\x01\x00\x02\x00\xee\xff\x05\xff\x03\x00z\x01g|\xfe\x16v\x01\x01t\xba\x1c\x04\x00\xdf\xff\x06\x00.\xfc\x10\x00\x04\x00\xf7\xff\xff\xfe`\xff\x0e\x02_\xf4\xfe\x16w\x01\x01\x81\xba\x1c\x04\x00\xe3\xff\x0c\x00"\xfc"\x00\xe0\xff\n\x00\x8a\x00W\x00q\x02\xdfo\xfe\x0ex\x01\x01\x1d\xba\x1c\x04\x00\x94\x96iD\xb8\x1e+\xbeY\x10\t\x13\xfe\x0ey\x01\x01\x89\xba\x1c\x04\x00\xc5\xdaiDR\xb8\x16>\x86\x15g\x94\xfe\x1fz\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xba\x00t;\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xab\xd0\xfe\x06{\x01\x01}\xc6\x14\x00\x00\x03\x000\x0b\xfe\x04|\x01\x01\x98\x00\x00\x80\x8a\x07Q\xfe\x03}\x01\x01Ms\x00\x00d\x8f\xfe\x02~\x01\x01*\x00\x00\xf1f\xfe\x1e\x7f\x01\x01\x18\xa0]\x10\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x92\x02\xfe\x1a\x80\x01\x01>[\xcd\x96\x00\x00\x00\x00?\x03P\xa6\xfe\x16\x89\x01\x01\xe1\xbf\x9f\x1a?\xf9\xba%>\xf5\xe26<\\bF<\xfe\xe7\xb0?\x00\x1f}v\xfe\x15\x8a\x01\x01$f\x0c\x12\x10\xf6\x05\xf4\x05\xc0\x05\xf9\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xaf\xfe\x16\x8b\x01\x01#2\x1d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x00\xe8\xfe\x03\x8c\x01\x01/\xff\x00\x00\x965\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc'b'\xfe\x14\x8e\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc==\n\xf7?\n\xd7\xa3\xbc\xb3\x002\x00\x8fu'b"\xfe\x1a\x8f\x01\x01\x1b&\xe6\x13\x10\x00\x00\x00\x00\xef\xff\x02\x007\xfc)\x00E\xff\x13\x00\x02\xff\x02\x00|\x01\xb3J\xfe\x16\x90\x01\x01t\xab\x1d\x04\x00\xf3\xff\x07\x00C\xfc&\x00V\xff\x05\x00\xfe\xfec\xff\x0f\x02\xfc\x17\xfe\x16\x91\x01\x01\x81\xab\x1d\x04\x00\xe5\xff\n\x007\xfc6\x00)\xff\x0c\x00\x90\x00J\x00v\x02\x85\xad\xfe\x0e\x92\x01\x01\x1d\xab\x1d\x04\x00f\x96iD\x00\x00.\xbeZ\x10\x94\xb0\xfe\x0e\x93\x01\x01\x89\xab\x1d\x04\x00=\xd9iD\xe1z\xfc=\x86\x15\x1d\xdd\xfe\x1f\x94\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x002\x01\xde;\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RR|\xfe\x06\x95\x01\x01}\xc5\x14\x00\x00\x03\x00\x17W\xfe\x03\x96\x01\x01Ms\x00\x00\xeb0\xfe\t\xf1\n\x00m\x04\x00\x00\x00\x00\xdb\x00\x00\x00\xc7\x8c\xfe\x04\x97\x01\x01\x98\x00\x00\x80\x8aG-\xfe\x02\x98\x01\x01*\x00\x00\xa4\x1c\xfe\x1e\x99\x01\x01\x18\x00\xb9\x13\x10\x00\x00\x00\x00s\xa6\x02\x18\xef\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\xfca\xfe\x1a\x9a\x01\x01>d\xd4\x92?\x9d\xc0\xda\xc0p-\xc5<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x85a\xfe\x08\x9b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbc\xee\xfe\x1c\x9c\x01\x01!\xa0\x1d\x04\x00n\xa6\x02\x18\xee\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x08\x00\x0c\x00\xfb\xff$F9H\xfe\x1c\x9d\x01\x01 \xbf\x1d\x04\x008\xcf\x9e=\th\\?\x12$\xcd\xbf\x1a'\xaa=\x93i\x01>~5\\=\xbd1\xfe\x1c\x9e\x01\x01\x1e\xe7\x1d\x04\x00z#\x03\xbc\xe8\x1aQ\xbd\xf1\xa7H@\x1e\x1d\x86=\xb9\xe9\x98\xbe\x9d\t\xf5<3\xae\xfe\x18\x9f\x01\x01\xb2\x92\xf0n\xbcK\xc4:\xbdp\xe6H\xc0R\x18*Ds\xa6\x02\x18\xef\xe7\xb8\xfd\x9a\xcb\xfe\x1c\xa0\x01\x01\xa3\xd8\x88]9#\x13:\xba\x93\x13\x9f9\x00\x00\x00\x00\x00\x00\x00\x00D\xf0\x81\x00\x00\x00\x00?\x03\x8e*\xfe\x12\xa5\x01\x01\xfc\r\x1e\x04\x004\x00\x01\x00ARMMASK\x00Wrw\xae"b"\xfe\t\xa6\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03[\x88\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\\xfe\x15\xa8\x01\x01$\x92\n\x16\x10P\x06\x07\x06\xf0\x05[\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae'\xfe\x16\xa9\x01\x01#7\x1e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x03\x18"b'\xfe\x14\xaa\x01\x01J\xebQ\xb8=\xebQ\xb8==\n\xf7?\n\xd7#<\xb3\x00/\x00\x94\x04\xfe\x1a\xab\x01\x01\x1b\x03\x91\x17\x10\x00\x00\x00\x00\xe5\xff\x13\x00\x18\xfch\x00\x9a\x00?\x00\x16\xff\x03\x00\x83\x01\xfc\xed\xfe\x16\xac\x01\x01t\x9b\x1e\x04\x00\xe7\xff\x14\x00\x1f\xfcy\x00\x95\x00$\x00\x0b\xff\\\xff\x15\x02\x13\x1b\xfe\x16\xad\x01\x01\x81\x9b\x1e\x04\x00\xdc\xff\x1a\x00*\xfc~\x00y\x00&\x00\xa0\x00O\x00l\x02\xeb\x15\xfe\x0e\xae\x01\x01\x1d\x9b\x1e\x04\x00\xb8\x96iDG\xe1(\xbeZ\x10\xbee\xfe\x0e\xaf\x01\x01\x89\x9b\x1e\x04\x00+\xd9iDp=\xfa=\x87\x15x\x85\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01\xde;\xe7\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RH\xaf\xfe\x06\xb1\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xeb\xfe\x04\xb2\x01\x01\x98\x00\x00\x80\x8af\xa8\xfe\x03\xb3\x01\x01Ms\x00\x00z\x11\xfe\x02\xb4\x01\x01*\x00\x00\xbd\xce\xfe\x1e\xb5\x01\x01\x18\x08|\x16\x10\x00\x00\x00\x00w\xa6\x02\x18\xf2\xe7\xb8\xfd\x86j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\x96\x1d\xfe\x1a\xb6\x01\x01>\xdfa\x81?\xfbsT\xc0)t\x92<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x008\x1e\xfe\x08\xb7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc0`\xfe\x1c\xb8\x01\x01!U\x1e\x04\x00q\xa6\x02\x18\xf1\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x01\x00\x0b\x00\x00\x00SF\xfcr\xfe\x1c\xb9\x01\x01 \xc3\x1e\x04\x00\x9e.\xcf=\xc5\x0bd?\x96\xee\xcd\xbf\x98\xb52<\x15\xac\xeb=\xf9#\x9b:f\xcc'b'\xfe\x1c\xba\x01\x01\x1e\xeb\x1e\x04\x00\x06\xe3\x8f<\xe6{L\xbd\xa0\xffH\xc05\xb9\xc7=\xe3P\x1a>c\t\x92;\xd3M\xfe\x18\xbb\x01\x01\xb2s\x08.<\x0b\x7fJ\xbd\xa1nH\xc0\x85+*Dw\xa6\x02\x18\xf2\xe7\xb8\xfd\xa9C\xfe\x1c\xbc\x01\x01\xa3\xdfXi9)Y>\xba\xf57\xa09\x00\x00\x00\x00\x00\x00\x00\x00g\xf3~<\xe4\x19\x05\x00\x00\x00\x00?\x036j\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\xfe\x15\xc2\x01\x01$i\x03\x1a\x10\xf2\x05\x11\x06\x11\x06\x1f\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00k\xdf\xfe\x16\xc3\x01\x01#<\x1f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x14A\xfe\x1a\xc4\x01\x01\x1b\xed:\x1b\x10\x00\x00\x00\x00\xeb\xff\xff\xff-\xfc\xbc\xff\n\x00\xff\xff\t\xff\x10\x00\x81\x01s\x83\xfe\x16\xc5\x01\x01t\x8c\x1f\x04\x00\xe0\xff\x0c\x000\xfc\xcf\xff\r\x00\r\x00\x04\xffk\xff\x10\x02\xc9\x90\xfe\x16\xc6\x01\x01\x81\x8c\x1f\x04\x00\xe5\xff\n\x00\x11\xfc\xbf\xff\x07\x00\x14\x00\x93\x00a\x00y\x02\xaf\xf0\xfe\x0e\xc7\x01\x01\x1d\x8c\x1f\x04\x00\x81\x96iD\xebQ,\xbe[\x10[\xfb\xfe\x0e\xc8\x01\x01\x89\x8c\x1f\x04\x00\x80\xd8iD\xcc\xcc\xe4=\x88\x15\x8f\xed\xfe\x1f\xc9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00\xde;\x06\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x9f\x11\xfe\x06\xca\x01\x01}\xc5\x14\x00\x00\x03\x00\x1b\xf7\xfe\x04\xcb\x01\x01\x98\x00\x00\x80\x8a\x9ft\xfe\x02\xcc\x01\x01*\x00\x00\x1d\x01'b'\xfe\x1e\xcd\x01\x01\x18H\x89\x19\x10\x00\x00\x00\x00y\xa6\x02\x18\xf5\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x08\x00\xebV\x03\x0ck/\xfe\x1a\xce\x01\x01>n\x82\x1f?\xb4\\+\xc0\xe1JA<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8d\xab\xfe\x08\xcf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x89\xc1\xfe\x14\xd0\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xebQ\xf8?\x00\x00\x00\x00\xb4\x005\x00\x89\xb3\xfe\x03\xd1\x01\x01Ms\x00\x04t\xae\xfe\x1c\xd2\x01\x01!\x1d\x1f\x04\x00r\xa6\x02\x18\xf3\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\x00\x00\x03\x00\x00\x00fF.a\xfe\x1c\xd3\x01\x01 \xc8\x1f\x04\x00#\x04\xee=\xb4Nh?_\x18\xcf\xbf\x8fC.;\xb9l\x06=\xdd_\x89:C\xa8\xfe\x1c\xd4\x01\x01\x1e\xf0\x1f\x04\x00\xcf\x952<\xb838\xbd-\xd1H\xc0\xbc\xac\x08\xbd\xe7q\xce\xbdp\x92\xe6<_s\xfe\x18\xd5\x01\x01\xb2\xe2K\xa4;yJ+\xbd\xb2@H\xc0\x99)*Dy\xa6\x02\x18\xf6\xe7\xb8\xfdI\xbf'b'\xfe\x1c\xd6\x01\x01\xa3m\xf0t9\xf9\x89B\xba\xc9E\xa19\x00\x00\x00\x00\x00\x00\x00\x00\xc7^W<\xfc\xb2\xe6;\xd7L\xfe\x03\xd7\x01\x01\xa5\xbe\x14\x00\x12\xc8\xfe\x0c\xd8\x01\x01\x02P\xba\x84z\xb1N\x05\x00\x04 \x04\x00A\x89\xfe\x16\xd9\x01\x01\x88r\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\xb6\xfe\x16\xda\x01\x01\xc1M\x8b\xb8<\xddV\x10=\xec\xcf#<]\xf08>\x00\x00\x00\x00?\x03\x8bK\xfe\x03\xdb\x01\x01Ms\x00\x04\xa7\x88\xfe\x15\xdc\x01\x01$\xc8\xfc\x1d\x10\x1d\x06\xf9\x05\x01\x06\x1d\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xd0\xfe\x16\xdd\x01\x01#@ \x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe0\x14'b'\xfe\x1a\xde\x01\x01\x1bA\xe6\x1e\x10\x00\x00\x00\x00\xde\xff\xfb\xffA\xfc\xdf\xff\t\x00\xe8\xff\x11\xff\x0c\x00\x7f\x01\x89\xa0\xfe\x16\xdf\x01\x01t| \x04\x00\xdf\xff\x07\x00U\xfc\xc0\xff\x0f\x00\xfb\xff\x06\xffs\xff\x18\x02\xd5(\xfe\x16\xe0\x01\x01\x81| \x04\x00\xdd\xff\x0e\x00P\xfc\xa7\xff\x1a\x00\xfd\xff\x9a\x00g\x00s\x02\x82\xbb\xfe\x0e\xe1\x01\x01\x1d| \x04\x00\xd9\x95iD\xcd\xcc6\xbeZ\x10\x8eH\xfe\x0e\xe2\x01\x01\x89| \x04\x00\x1b\xd8iD\xf5(\xd8=\x88\x15\x0e!\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x001\x01\xde;\x9a\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RY\xc1\xfe\x06\xe4\x01\x01}\xc5\x14\x00\x00\x03\x00L\\\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b\xfe\x1e\xe7\x01\x01\x18p\x9a\x1c\x10\x00\x00\x00\x00y\xa6\x02\x18\xf6\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x02\x00\xebV\x03\x0c\xee\x91\xfe\x1a\xe8\x01\x01>\xa2\x01`\xbd\xb4\xec#\xc0Rx\x0f\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8d\n\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i\xfe\x14\xea\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x99\x99\xf9?\x8f\xc2\xf5\xbc\xb4\x004\x00\xf7\xce\xfe\x03\xeb\x01\x01Ms\x00\x04/e'b'\xfe\x1c\xec\x01\x01!\xae \x04\x00s\xa6\x02\x18\xf3\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfe\xff\x00\x00\xfc\xffVF{\xf2\xfe\x1c\xed\x01\x01 \xcd \x04\x00V\xf2\x00>\xa6\xefg?sW\xd0\xbf\x84\xf3\xb1\xbc\xbe\x9a\x06\xbc\x1f\xcaC=3\xe9\xfe\x1c\xee\x01\x01\x1e\xf5 \x04\x00\xf2_\\\xbb:\xfc;\xbd\xdd\x02I\xc0\xf9\x00\xd9\xbcf~\x08=\x15\x0c\x96;\xa75\xfe\x18\xef\x01\x01\xb2\x1c;*\xbcc)1\xbd\x87mH\xc0\xb8\x1e*Dy\xa6\x02\x18\xf7\xe7\xb8\xfdq\xde\xfe\x1c\xf0\x01\x01\xa3\x1b.\x809\x1b\xafF\xba5M\xa29\x00\x00\x00\x00\x00\x00\x00\x00\x08rE<}\x13,<{\xeb\xfe\x03\xf1\x01\x01\xa5\xc5\x14\x00\x03\xf9\xfe\x0c\xf2\x01\x01\x02\xd8\xb5\x88z\xb1N\x05\x00\t!\x04\x00k\xd9\xfe\x16\xf3\x01\x01\x88s\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf0\x00\xfe\x12\xf4\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00"\x89\xfe\x16\xf5\x01\x01\xc1\xed"d<\xf7\x05\xfa\x00\x00\x00\x00?\x03\xe9\xf8\xfe\x16\xf6\x01\x01\xe16^\x1a?{\x14.>\xf5\xe26<\\bF<\x14\x10\xb2?\x00\x1f\x15\x1e\xfe\x03\xf7\x01\x01Ms\x00\x045\x05'b'\xfe\x15\xf8\x01\x01$P\xfa!\x10\x1c\x06,\x06,\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfdi\xfe\x16\xf9\x01\x01#F!\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa3\xc9\xfe\x03\xfa\x01\x01/\xff\x00\x00^\xa0\xfe\x1a\xfb\x01\x01\x1b\x9d\x95"\x10\x00\x00\x00\x00\xe2\xff\n\x00\x03\xfc\xdf\xff\x10\x00\x11\x00\x0b\xff\x08\x00\x80\x01$Z\xfe\x16\xfc\x01\x01tm!\x04\x00\xda\xff\x06\x00\xff\xfb\xea\xff\x0b\x00\x11\x00\x03\xffY\xff\r\x02\x87H\xfe\x16\xfd\x01\x01\x81n!\x04\x00\xda\xff\x14\x00\t\xfc\xe4\xff\x1c\x00\x12\x00\x9b\x00V\x00\x81\x02^p\xfe\x0e\xfe\x01\x01\x1dn!\x04\x009\x95iD\xcd\xcc@\xbe[\x10>\xeb\xfe\x0e\xff\x01\x01\x89n!\x04\x00\xc6\xd7iD\x99\x99\xcd=\x89\x15yJ\xfe\x1f\x00\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdd;\x1f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x05\x1d\xfe\x06\x01\x01\x01}\xc5\x14\x00\x00\x03\x00\x1c\xea\xfe\x04\x02\x01\x01\x98\x00\x00\x80\x8a\x1cd\xfe\x02\x03\x01\x01*\x00\x00\xf2Y\xfe\x1e\x04\x01\x01\x18\xc0\xbc"\x10\x00\x00\x00\x00z\xa6\x02\x18\xf8\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x06\x00\xebV\x03\x0c\x9b\xf1\xfe\x1a\x05\x01\x01>\\\x8f\xc2\xbe\x99\x99)\xc0p}\x1e\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9aQ+\xfe\x08\x06\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbfL'b'\xfe\t\xf2\n\x00m\x00\x00\x00\x00\x00\xdb\x00\x00\x00e\xbf\xfe\x14\x07\x01\x01J\x8f\xc2u=\x8f\xc2u=G\xe1\xfa?\x00\x00\x00\x00\xb3\x002\x00\x9c\x1e\xfe\x03\x08\x01\x01Ms\x00\x04\x1c\xf7\xfe\x1c\t\x01\x01!x!\x04\x00s\xa6\x02\x18\xf3\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfd\xff\xfe\xff\x01\x00\x19FHl\xfe\x1c\n\x01\x01 \xd2!\x04\x00\r*\x02>\x0c\xb7f?\x11d\xd1\xbf{$\x10\xbd\n=\xd4\xbc\xf2\x8ak\xbc\x84I'b'\xfe\x12\x0b\x01\x01\xfc\xf8!\x04\x004\x00\x01\x00ARMMASK\x00Wr;\xd0\xfe\t\x0c\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x8d\xb9\xfe\x1c\r\x01\x01\x1e\xfb!\x04\x00\xeb\xdb\x18\xbc\x02\x1e@\xbd\x17\x9bG@\x15\x82|\x00\x00\x00\x00?\x03\xb5\xf3\xfe\x03\x14\x01\x01Ms\x00\x04\x06\x97\xfe\x15\x15\x01\x01$i\xf6%\x10\x18\x06"\x06F\x06N\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9{\xfe\x16\x16\x01\x01#K"\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\x93'b'\xfe\x1a\x17\x01\x01\x1b\xafD&\x10\x00\x00\x00\x00\xdf\xff\x03\x00+\xfc\xe8\xff\x0b\x00x\xff\t\xff\xfc\xff\x84\x01\xf1\xa1\xfe\x16\x18\x01\x01t_"\x04\x00\xd9\xff\x07\x00;\xfc\xf8\xff\x13\x00\x8a\xff\x08\xff\\\xff\x17\x02k\xca\xfe\x16\x19\x01\x01\x81_"\x04\x00\xdf\xff\r\x00\x1e\xfc\xd1\xff0\x00\x81\xff\xa3\x00S\x00\x83\x02\xfe\x17\xfe\x0e\x1a\x01\x01\x1d_"\x04\x00N\x95iD\x1e\x85?\xbe[\x10p\x90\xfe\x0e\x1b\x01\x01\x89_"\x04\x00\xf9\xdaiD\x00\x00\x1a>\x8b\x15\t\xfe\xfe\x1f\x1c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00;\x01\xdd;O\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x80\xc8\xfe\x06\x1d\x01\x01}\xc5\x14\x00\x00\x03\x00\xa6y\xfe\x04\x1e\x01\x01\x98\x00\x00\x80\x8a\xa7\xdb\xfe\x02\x1f\x01\x01*\x00\x00\xa1]\xfe\x1e \x01\x01\x18\xe8\xcd%\x10\x00\x00\x00\x00y\xa6\x02\x18\xf8\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x08\x00\xebV\x03\x0c\xc3\x82\xfe\x1a!\x01\x01>\xe9\xa8/\xbf\xfb\xb5\x16\xc0)\xbc\x01\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xacF\xfe\x08"\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xab\xef\xfe\x14#\x01\x01J\n\xd7\xa3=\n\xd7\xa3=G\xe1\xfa?\n\xd7#\xbc\xb1\x004\x00E\xf6\xfe\x03$\x01\x01Ms\x00\x00\xee\x1d'b'\xfe\x1c%\x01\x01!A"\x04\x00r\xa6\x02\x18\xf2\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfa\xff\xfc\xff\x00\x00\x12E\x1e\xb9\xfe\x1c&\x01\x01 \xd8"\x04\x00\xcaG\xf9=\xe6\x08e?\xa6\x1d\xd1\xbf\xd2M\x84\xbd\x88\xb9E\xbdC[\xd6;\xf2e\xfe\x1c\'\x01\x01\x1e\xff"\x04\x00 \xe4\x0b:EO>\xbd\xa2\xadE@\xdd\xf3\xc5=.Ni=\xcd\x12\xed=\x8e\x08\xfe\x18(\x01\x01\xb2\r\x06\xf1\xbb,\xb06\xbd\xae\x1dF@R\x18*Dy\xa6\x02\x18\xf8\xe7\xb8\xfd7\xdc\xfe\x1c)\x01\x01\xa3"\x06\x8b9A\xdaN\xbak\\\xa49\x00\x00\x00\x00\x00\x00\x00\x00[\x0c\x18\x00\x00\x00\x00?\x03\x95\x9e'b'\xfe\x03.\x01\x01Ms\x00\x00=;\xfe\x1a/\x01\x01\x1b=\xf2)\x10\x00\x00\x00\x00\xde\xff\xf4\xff\x06\xfcK\x00L\x00]\x01\t\xff\xfb\xff\x85\x01\xb2h\xfe\x160\x01\x01tP#\x04\x00\xde\xff\xff\xff\x14\xfcI\x00^\x00G\x01\t\xffT\xff\x14\x02\x19\x17\xfe\x161\x01\x01\x81P#\x04\x00\xdd\xff\n\x00\x10\xfc6\x00a\x00M\x01\xad\x00>\x00\x82\x02P\xe7\xfe\x0e2\x01\x01\x1dP#\x04\x00\x1e\x95iD\xe1zB\xbe[\x10y\xab\xfe\x0e3\x01\x01\x89P#\x04\x00\xf5\xd8iD\x1e\x85\xf3=\x8b\x15{\xa4\xfe\x1f4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa9\x00\xdd;\x13\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xc1\x98\xfe\x065\x01\x01}\xc5\x14\x00\x00\x03\x00\x86\'\xfe\x046\x01\x01\x98\x00\x00\x80\x8aTS\xfe\x027\x01\x01*\x00\x00\xce\xe0\xfe\x1e8\x01\x01\x18\x10\xdf(\x10\x00\x00\x00\x00w\xa6\x02\x18\xf9\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\t\x00\xebV\x03\x0c\xcf"\xfe\x1a9\x01\x01>\xa8G\x8e\xbf t\xdc\xbf=z(\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x12a\xfe\x08:\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x13\x98\xfe\x15;\x01\x01$\xba?*\x10\x1d\x06\xbc\x05*\x06I\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\t\xfe\x16<\x01\x01#d#\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00/~'b'\xfe\x14=\x01\x01J\xebQ\xb8=\xebQ\xb8=\xf5(\xfc?\x00\x00\x00\x00\xb3\x00/\x00\xf2 \xfe\x03>\x01\x01Ms\x00\x00E`\xfe\x1c?\x01\x01!\xd2#\x04\x00q\xa6\x02\x18\xf0\xe7\xb8\xfdBc\n\x00\xb2\x07\x00\x00\xf9\xff\xf5\xff\xfe\xff\x1cF\xdd_\xfe\x1c@\x01\x01 \xdc#\x04\x00\x0bM\xd9=\x10\x00a?\xb4\xc2\xd2\xbf+\n\x9d\xbd\x12M\xef\xbd\x99\xbe\xb9\x00\x00\x00\x00?\x03Bs\xfe\x03H\x01\x01Ms\x00\x00\x8d\xf5\xfe\x1aI\x01\x01\x1b\xf4\x9e-\x10\x00\x00\x00\x00\xe2\xff\x01\x00+\xfc\x8d\xff*\x00%\x00\x07\xff\t\x00}\x01Q=\xfe\x16J\x01\x01tA$\x04\x00\xeb\xff\x02\x00,\xfc~\xff#\x00*\x00\x02\xfft\xff\x17\x02<\xd2\xfe\x16K\x01\x01\x81A$\x04\x00\xe0\xff\x14\x00:\xfc\x87\xff%\x000\x00\x85\x00e\x00i\x022]\xfe\x0eL\x01\x01\x1dA$\x04\x00\x1e\x95iD\xe1zB\xbe[\x10\x97\x84\xfe\x0eM\x01\x01\x89A$\x04\x00\xbe\xd8iD\xd7\xa3\xec=\x8b\x15\x8dG\xfe*N\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00[\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd7\xee\xfe\x1fO\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x07\x01\xdd;\x83\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x8a*\xfe\x06P\x01\x01}\xc2\x14\x00\x00\x03\x00\xd5\xc4\xfe\x04Q\x01\x01\x98\x00\x00\x80\x8a\xec\xab\xfe\x02R\x01\x01*\x00\x00\xe8\xb4'b'\xfe\x1eS\x01\x01\x18P\xec+\x10\x00\x00\x00\x00v\xa6\x02\x18\xf7\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x10\x00\xebV\x03\x0c\xef\x9c\xfe\x1aT\x01\x01>\x8e\xe9\t\xc0\x1e\xda\xa9\xbf\x99\xc1\x8b\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x17\xd0\xfe\x08U\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc9{\xfe\x15V\x01\x01$\xf9<.\x10D\x06\t\x06\x1d\x06V\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xc8\xfe\x16W\x01\x01#i$\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08\xb6\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae'b'\xfe\x14Y\x01\x01J\\\x8fB>\\\x8fB>\xf5(\xfc?\n\xd7#\xbd\xb3\x002\x00#]\xfe\x1cZ\x01\x01!\x9b$\x04\x00o\xa6\x02\x18\xec\xe7\xb8\xfdBc\n\x00\xb2\x07\x00\x00\xf8\xff\xf2\xff\xfd\xffHF\xc9\x0c\xfe\x1c[\x01\x01 \xe2$\x04\x00\xec\xa6\xaa=SfW?\x99D\xd2\xbf\xe8\xa4\xaf\xbdW\x9d\x15\xbe\xde:\x18=\xbc\x1c\xfe\x1c\\\x01\x01\x1e\n%\x04\x00H\xbf\xcd\xbc\xf7\xca\xbd\xbc\xa3\x01I@p\x9c\x92\xbd\xd9\\\x85=\x98>\xaa\xbc4\xe7\xfe\x18]\x01\x01\xb2v\xb3\x01\xbd=Z\x9f\xbcS\x96H\xc0\x85\x1b*Dt\xa6\x02\x18\xf5\xe7\xb8\xfd\xef\x93'b'\xfe\x1c^\x01\x01\xa3\xa3&\x959Y\xf6V\xba\x130\xa69\x00\x00\x00\x00\x00\x00\x00\x00\xe25]<%\x9a)\x00\x00\x00\x00?\x03\xc8\x8f\xfe\x16c\x01\x01\xe1\x9a\x99\x19?\x99\x99\x19>\xf5\xe26<\\bF<\x1f\xaf\xac?\x00\x1f\xbd\xc4\xfe\x03d\x01\x01Ms\x00\x00\x1fx\xfe\x1ae\x01\x01\x1bfO1\x10\x00\x00\x00\x00\xe7\xff\xfe\xff\x0f\xfc\x92\xff1\x00\x15\x00\xfc\xfe\x00\x00~\x01\x80^\xfe\x16f\x01\x01t3%\x04\x00\xeb\xff\xf8\xff(\xfc\x92\xff:\x00\t\x00\xfc\xfe\\\xff\x0b\x02\x0bl\xfe\x16g\x01\x01\x813%\x04\x00\xe2\xff\x0f\x00\x16\xfc\x89\xff2\x00\x14\x00\x80\x00Q\x00\x80\x02B&\xfe\x0eh\x01\x01\x1d3%\x04\x00\x9d\x96iD\\\x8f*\xbe[\x10\xdc\xf2\xfe\x0ei\x01\x01\x893%\x04\x00\x8f\xdaiD)\\\x13>\x8c\x15pV\xfe\x1fj\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9b;z\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x16"\xfe\x06k\x01\x01}\xc5\x14\x00\x00\x03\x00\x1b\xd2\xfe\x04l\x01\x01\x98\x00\x00\x80\x8a\x93\xae\xfe\x02m\x01\x01*\x00\x00V{\xfe\x1en\x01\x01\x18x\xfd.\x10\x00\x00\x00\x00t\xa6\x02\x18\xf5\xe7\xb8\xfd\x90j\n\x00F\x00\xff\xff\x13\x00\xebV\x03\x0c\x19\xf9\xfe\x1ao\x01\x01>p\xf50\xc0\x85\x18\x86\xbf\x99Y\x15\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xb3\xac\xfe\x08p\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00p\xdd\xfe\x15q\x01\x01$\xcb82\x105\x062\x06A\x065\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96P\xfe\x16r\x01\x01#n%\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xca\xb0'b'\xfe\t\xf3\n\x00m\x01\x00\x00\x00\x00\xda\x00\x00\x00\xec\xe6\xfe\x03s\x01\x01/\xff\x00\x00\xbf\xc7\xfe\x03t\x01\x01Ms\x00\x00g#\xfe\x14u\x01\x01J\x1e\x85k>\x1e\x85k>G\xe1\xfa?\n\xd7#<\xb3\x005\x00\xca\xaf\xfe\x12v\x01\x01\xfc\xe5%\x04\x004\x00\x01\x00ARMMASK\x00Wrw\xf7\xfe\tw\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xd7\xe5'b'\xfe\x1cx\x01\x01!d%\x04\x00m\xa6\x02\x18\xe8\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfa\xff\xf6\xff\x01\x00:F\xde;\xfe\x1cy\x01\x01 \xe7%\x04\x00E\xfe\x80=0\xe3N?\xa1\xbc\xd0\xbf\x94\xaew\xbd`m\xd7\xbd\xba\xd8e\xbc]g\xfe\x1cz\x01\x01\x1e\x0f&\x04\x004\x8a \xbd\xe0\x83\x83\xbc\xc9\xadH@\xe5\xf2\x8c\xbc\xb9\xe06=\xbbi\xdc\xbc\xc8\xdc\xfe\x18{\x01\x01\xb2\xb5\xbc@\xbd3\xc6@\xbc\xac\xe1H\xc03\x13*Ds\xa6\x02\x18\xf2\xe7\xb8\xfd\xe1\xa3\xfe\x1a|\x01\x01\x1b\x05\xfc4\x10\x00\x00\x00\x00\xf6\xff\xf6\xff\x0c\xfc\xe9\xffP\x00\xea\xff\xfd\xfe\xfa\xffx\x01\xf0\x04\xfe\x16}\x01\x01t#&\x04\x00\xf8\xff\xfb\xff\x1e\xfc\xe3\xffG\x00\xf2\xff\xf8\xfeX\xff\n\x02\xe7\x94\xfe\x16~\x01\x01\x81#&\x04\x00\xeb\xff\x0b\x00\x01\xfc\xe8\xffb\x00\xe0\xff\x97\x00D\x00|\x02\x92\xaf\xfe\x0e\x7f\x01\x01\x1d#&\x04\x00\xf3\x96iD33%\xbe\\\x10\x9f\x81\xfe\x0e\x80\x01\x01\x89#&\x04\x00\x0c\xdciD33+>\x8d\x15B\x10\xfe\x1f\x81\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x01\x01\x9b;i\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xa2\xfc\xfe\x06\x82\x01\x01}\xc5\x14\x00\x00\x03\x00\xb4\x86\xfe\x04\x83\x01\x01\x98\x00\x00\x80\x8a6\xed\xfe\x03\x84\x01\x01Ms\x00\x00\xfc`\xfe\x02\x85\x01\x01*\x00\x00"\x87\xfe\x1e\x86\x01\x01\x18\xc8\x1f5\x10\x00\x00\x00\x00p\xa6\x02\x18\xee\xe7\xb8\xfd\x90j\n\x00F\x00\xff\xff\x18\x00o]\x03\x0c\xc3\xba\xfe\x1a\x87\x01\x01>\xdeve\xc0Xz-\xbe\xcd\x18\x0e=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf5\x1a\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba\xfe\x1c\x89\x01\x01\xa3\x18a\x9a96[[\xba\xbc*\xa79\x00\x00\x00\x00\x00\x00\x00\x00d;]<\x87L+<\xb4\'\xfe\x03\x8a\x01\x01\xa5\xc5\x14\x00\x16\xd6\xfe\x0c\x8b\x01\x01\x02P$\x9dz\xb1N\x05\x007&\x04\x00\xf5>\xfe\x16\x8c\x01\x01\x88m\xa6\x02\x18\xe7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xce\xac\xfe\x16\x8d\x01\x01\xc1\xa8\xf2\xc2\x00\x00\x00\x00?\x03\xc1\x0c'b'\xfe\x15\x8e\x01\x01$\x8c46\x10V\x06\n\x06\xfd\x058\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00p^\xfe\x16\x8f\x01\x01#s&\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x7f\x9e\xfe\x03\x90\x01\x01Ms\x00\x00Z-'b'\xfe\x14\x91\x01\x01J\x8f\xc2u>\x8f\xc2u>\x99\x99\xf9?)\\\x8f=\xb3\x005\x00f\x9c\xfe\x1c\x92\x01\x01!-&\x04\x00l\xa6\x02\x18\xe5\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfd\xff\xfd\xff\x08\x00 F\xb9\\\xfe\x1c\x93\x01\x01 \xeb&\x04\x00\xc5\x7fC=\xfc)I?F\x13\xd0\xbfv\xa9\r\xbds\x83\x1f\xbd\x18\x12\xb3\xbdP\xc9'b'\xfe\x1a\x94\x01\x01\x1b\xcc\xa88\x10\x00\x00\x00\x00\xf1\xff\x10\x00\x06\xfc\xc4\xff\xe2\xff\xf3\xff\xf6\xfe\xf3\xffv\x01p\xbd\xfe\x16\x95\x01\x01t\x14\'\x04\x00\xf1\xff\x13\x00\t\xfc\xbb\xff\xe2\xff\xee\xff\xf6\xfeJ\xff\x07\x02\x95%\xfe\x16\x96\x01\x01\x81\x14\'\x04\x00\xe8\xff\x15\x00\xfd\xfb\xa8\xff\xdd\xff\xf1\xffz\x00N\x00f\x02\xcfL\xfe\x0e\x97\x01\x01\x1d\x14\'\x04\x00/\x96iD\xa4p1\xbe\\\x10K\r\xfe\x0e\x98\x01\x01\x89\x14\'\x04\x00\xe1\xdaiD\xe1z\x18>\x8d\x15\xa9x\xfe\x1f\x99\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9b;`\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R?\xed\xfe\x06\x9a\x01\x01}\xc5\x14\x00\x00\x03\x00[K\xfe\x04\x9b\x01\x01\x98\x00\x00\x80\x8ahm\xfe\x02\x9c\x01\x01*\x00\x00\xd2s\xfe\x1e\x9d\x01\x01\x18\x08-8\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfd\x9aj\n\x00F\x00\xff\xff\x15\x00o]\x03\x0c\xca\x0f\xfe\x1a\x9e\x01\x01>\x04\xe4E\xc0O\xe6\xb8\xbe\xc2%\x0b=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xfb\xda\xfe\x08\x9f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xfe\x1c\xa0\x01\x01\x1e(\'\x04\x00\xaa9y\xbd\xf6y3\xbc\xc3tH@<)\xff\xbd\xe7\xa8?\xbc\x86\xce\x9e\xbcn\x0c\xfe\x18\xa1\x01\x01\xb2\x8e"\x8c\xbdN\xc9\xc1\xbb\xf8\x0bI@=\x1a*Do\xa6\x02\x18\xec\xe7\xb8\xfd\xae\x13\xfe\x03\xa2\x01\x01Ms\x00\x00\xbd\xcb\xfe\x1c\xa3\x01\x01\xa3z0\x9f9\x7fp_\xba\x19\x05\xa89\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x8bI<\xc7\xdb9<\xc1*\xfe\x03\xa4\x01\x01\xa5\xc5\x14\x00\xebP\xfe\x0c\xa5\x01\x01\x02\xb8\xd1\xa0z\xb1N\x05\x00<\'\x04\x00K\xca\xfe\x16\xa6\x01\x01\x88l\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdc4\xfe\x16\xa7\x01\x01\xc1\xa8V\xe1\x00\x00\x00\x00?\x03\xb8\xc6'b"\xfe\x15\xa8\x01\x01$\xba1:\x10>\x06\x07\x06\x02\x06\x04\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9W\xfe\x16\xa9\x01\x01#y'\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa6\xbe\xfe\x03\xaa\x01\x01Ms\x00\x00\x01\xe6\xfe\x14\xab\x01\x01J\x99\x99\x19>\x99\x99\x19>G\xe1\xfa?\n\xd7#=\xb3\x004\x00\xee6"b"\xfe\x1c\xac\x01\x01!\xbf'\x04\x00k\xa6\x02\x18\xe5\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xff\xff\x07\x00\x04\x00&F\xca*\xfe\x1c\xad\x01\x01 \xf2'\x04\x00G^#=\x9b'I?`h\xd1\xbf8\x16C\xbc\x14\x9c\x9d=\xab\xbc+\xbd^\xbb\xfe\x1a\xae\x01\x01\x1b/X<\x10\x00\x00\x00\x00\xf2\xff\xff\xff!\xfc*\x00\xe8\xff\x15\x00\xf7\xfe\xf0\xffy\x01\tB\xfe\x16\xaf\x01\x01t\x06(\x04\x00\xfc\xff\xfc\xff#\xfc#\x00\xf5\xff\x18\x00\xf7\xfeP\xff\x08\x02\xf0L\xfe\x16\xb0\x01\x01\x81\x06(\x04\x00\xed\xff\x0f\x00\x0f\xfcC\x00\xcd\xff\x0c\x00\x88\x00I\x00n\x02\x80\x10\xfe\x0e\xb1\x01\x01\x1d\x06(\x04\x00\x07\x96iD\x85\xeb3\xbe\\\x10A\xf5\xfe\x0e\xb2\x01\x01\x89\x06(\x04\x00\xb0\xdaiD\xa4p\x15>\x8e\x15\n\xdd\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01_;\xf7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x94\x11\xfe\x06\xb4\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xe0\xfe\x04\xb5\x01\x01\x98\x00\x00\x80\x8a\x84A\xfe\x02\xb6\x01\x01*\x00\x00\x06\xf9\xfe\x1e\xb7\x01\x01\x18\x18B;\x10\x00\x00\x00\x00n\xa6\x02\x18\xeb\xe7\xb8\xfd\xb8j\n\x00F\x00\xff\xff\x0e\x00o]\x03\x0cp;\xfe\x1a\xb8\x01\x01>\xcf\xbe\xfc\xbf\xb5\xa7\x11\xbf\x14\xd6\xd7<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00py\xfe\x08\xb9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00FP\xfe\x1c\xba\x01\x01\x1e.(\x04\x00\xdcSr\xbd\x1e\xd7n\xbc\x18\xabH@\x9e\xbc\x00=\xf4\x81\xbf\xbc\xda\xfe\xd8<\xe5\x8c\xfe\x18\xbb\x01\x01\xb22\x04\x8d\xbdt-\x14\xbc4\xe3H\xc0)\x1c*Dn\xa6\x02\x18\xeb\xe7\xb8\xfd\xcf`\xfe\x03\xbc\x01\x01Ms\x00\x00\xc8\xa0"b'\xfe\x1c\xbd\x01\x01\xa3\xec\xff\xa39\xb3\x84c\xba\x12\xde\xa89\x00\x00\x00\x00\x00\x00\x00\x00p\x1dK\x00\x00\x00\x00?\x03\x87\\\xfe\x15\xc2\x01\x01$\xf9->\x10\x11\x06\x1d\x06*\x06\n\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xe2\xfe\x16\xc3\x01\x01#~(\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xfb3'b'\xfe\x03\xc4\x01\x01Ms\x00\x04mb\xfe\x14\xc5\x01\x01J\x8f\xc2u=\x8f\xc2u=G\xe1\xfa?\x8f\xc2\xf5<\xb3\x003\x00\x90\x11\xfe\x1a\xc6\x01\x01\x1b,\x06@\x10\x00\x00\x00\x00\xfc\xff\x00\x00-\xfc\xaf\x00\x1a\x00\x03\x00\xfb\xfe\xf4\xffx\x01r\xf7\xfe\x16\xc7\x01\x01t\xf7(\x04\x00\xf8\xff\x00\x001\xfc\xaa\x00\x19\x00\x10\x00\xfa\xfeQ\xff\r\x02\xeb#\xfe\x16\xc8\x01\x01\x81\xf7(\x04\x00\xf4\xff\x13\x00)\xfc\xd6\x00\xf4\xff\n\x00\x80\x00D\x00r\x02?R\xfe\x0e\xc9\x01\x01\x1d\xf7(\x04\x00\x9d\x96iD\\\x8f*\xbe\\\x10\xb7\x03\xfe\x0e\xca\x01\x01\x89\xf7(\x04\x00l\xdbiD33!>\x8e\x15\xda\xfb\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x00_;\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xc7\xff\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02'b'\xfe\x04\xcd\x01\x01\x98\x00\x00\x80\x8a\x80\xd0\xfe\x02\xce\x01\x01*\x00\x00\xa66\xfe\x1e\xcf\x01\x01\x18@S>\x10\x00\x00\x00\x00o\xa6\x02\x18\xec\xe7\xb8\xfd\xccj\n\x00F\x00\xff\xff\x06\x00o]\x03\x0c\xe8M\xfe\x1a\xd0\x01\x01>\x04\xf0&\xbf\xf5 D\xbf\\\x0f\xb0<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc1 \xfe\x08\xd1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xdf\xab\xfe\x1c\xd2\x01\x01!\x88(\x04\x00k\xa6\x02\x18\xe9\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\x00\x00\x10\x00\x02\x00;F\xe6\xa1\xfe\x1c\xd3\x01\x01 \x0b)\x04\x00w\xcc"=\xcf\xafQ?=\xc9\xd1\xbf\\3\xb69\xfan$>TG\xe1\xbc#Q\xfe\x1c\xd4\x01\x01\x1e3)\x04\x00\xf2\x8d\xfa\xbc\x80\xc9\x88\xbc\x11\xdbH@\x10>\n>e[\xdd\xbc\x11\\\xf2<\xeb\x9f\xfe\x18\xd5\x01\x01\xb2\x10\xda\'\xbdO\n<\xbc>\xb1H\xc0p\r*Do\xa6\x02\x18\xec\xe7\xb8\xfd~\x13\xfe\x03\xd6\x01\x01Ms\x00\x04z2\xfe\x1c\xd7\x01\x01\xa3b\xc6\xa89h\x8eg\xba\xa1\xac\xa99\x00\x00\x00\x00\x00\x00\x00\x00\xc4\xf7><\xab\xbb\x01<\xc13\xfe\x03\xd8\x01\x01\xa5\xc8\x14\x00\x7fh\xfe\x0c\xd9\x01\x01\x02\x18\x0f\xa9z\xb1N\x05\x00H)\x04\x00i\xdd\xfe\x16\xda\x01\x01\x88k\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00(.\xfe\x12\xdb\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00C\xf2\xfe\x16\xdc\x01\x01\xc1\x89\xfb\xd9\xf5\xe26<\\bF<\xbd\xc5\xaa?\x00\x1f\x9bo'b'\xfe\t\xf4\n\x00m\x01\x00\x00\x00\x00\xdb\x00\x00\x00/\x9d\xfe\x15\xde\x01\x01$;,B\x10\x0c\x06\x1a\x06(\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10q\xfe\x16\xdf\x01\x01#\x84)\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00c\xf4\xfe\x03\xe0\x01\x01Ms\x00\x04C\xc2\xfe\x03\xe1\x01\x01/\xff\x00\x00J\\'b"\xfe\x12\xe2\x01\x01\xfc\xd1)\x04\x004\x00\x01\x00ARMMASK\x00Wr2\x11\xfe\t\xe3\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03gF\xfe\x14\xe4\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xf5(\xfc?\n\xd7#<\xb3\x000\x00\xf7\x87\xfe\x1a\xe5\x01\x01\x1b\xab\xb3C\x10\x00\x00\x00\x00\xfb\xff\x00\x00;\xfc[\x00\xd2\xff\xf9\xff\xfc\xfe\x00\x00x\x014S\xfe\x16\xe6\x01\x01t\xe8)\x04\x00\x05\x00\xfe\xff]\xfca\x00\xe4\xff\x10\x00\xfb\xfed\xff\x11\x02\rf\xfe\x16\xe7\x01\x01\x81\xe8)\x04\x00\xfa\xff\x16\x00T\xfc\x88\x00\xb8\xff\x02\x00\x83\x00[\x00Z\x02\xd3\xf6\xfe\x0e\xe8\x01\x01\x1d\xe8)\x04\x00\x00\x98iDff\x14\xbe\\\x10\x88\xed\xfe\x0e\xe9\x01\x01\x89\xe8)\x04\x00\xd7\xdbiD\n\xd7'>\x8e\x15 \xbe\xfe\x1f\xea\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00<\x01_;\xe9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\x92\xc5\xfe\x06\xeb\x01\x01}\xb0\x14\x00\x00\x03\x00\xef\xa1\xfe\x04\xec\x01\x01\x98\x00\x00\x80\x8aDj\xfe\x02\xed\x01\x01*\x00\x00K\xfd\xfe\x1e\xee\x01\x01\x18hdA\x10\x00\x00\x00\x00o\xa6\x02\x18\xee\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\x02\x00o]\x03\x0c\xf5k\xfe\x1a\xef\x01\x01>R\xb8\xbe?\xcc\xcc\xcc\xbf\x99\x99\t\xb9\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9aN\xef\xfe\x08\xf0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x1b\xfe\x1c\xf1\x01\x01!Q)\x04\x00l\xa6\x02\x18\xee\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\x00\x00\x10\x00\x00\x001F\x83,\xfe\x1c\xf2\x01\x01 \x10*\x04\x00\xf2\xe1<=7\xbe\\?40\xd1\xbf\xc0\xab\xd1:M\x11(>\x1d.\x0e\xa1D\x80\xbdM\x08\xc1\xbeZ\xcd\xfe\x18\xf4\x01\x01\xb2\x03\xe3(\xbcb.\xb5\xbcb\xa8H@\x8f\x12*Dq\xa6\x02\x18\xf2\xe7\xb8\xfd\xa3#\xfe\x1c\xf5\x01\x01\xa3a\x85\xad9m\x83k\xba\xa9e\xaa9\x00\x00\x00\x00\x00\x00\x00\x00?\xe5@<\xb5\xa9\xcc;\x82z\xfe\x03\xf6\x01\x01\xa5\xc0\x14\x00Z\x0b\xfe\x0c\xf7\x01\x01\x02\xb8\x06\xadz\xb1N\x05\x00M*\x04\x00\x86\x8d\xfe\x16\xf8\x01\x01\x88l\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x11\xf8\xfe\x16\xf9\x01\x01\xc1)\xd9\xdb<\xc8o\x0b=g\x95\xe8;\x1e;?>\x00\x00\x00\x00?\x03\xf5\xf1\xfe\x03\xfa\x01\x01Ms\x00\x04\xe8\xbf\xfe\x15\xfb\x01\x01$\x92'F\x10f\x06\xfe\x05\x0f\x06\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00dH\xfe\x16\xfc\x01\x01#\x89*\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00$8"b'\xfe\x03\xfd\x01\x01Ms\x00\x04\xe6#\xfe\x1a\xfe\x01\x01\x1b\xc6bG\x10\x00\x00\x00\x00\xfb\xff\x00\x00\xfb\xfb\xa0\x00\x96\xff\x92\xff\x06\xff\x01\x00x\x01sJ\xfe\x16\xff\x01\x01t\xd9*\x04\x00\xfd\xff\x08\x00\x0f\xfc\x8a\x00\xaa\xffz\xff\x01\xff[\xff\x11\x024\xb0\xfe\x16\x00\x01\x01\x81\xd9*\x04\x00\xfc\xff\x1c\x00\x12\xfcq\x00\xb9\xffv\xffv\x00`\x00h\x02\xda8\xfe\x0e\x01\x01\x01\x1d\xd9*\x04\x00\x94\x96iD\xb8\x1e+\xbe\\\x10\xcf\x0c\xfe\x0e\x02\x01\x01\x89\xd9*\x04\x00\x0f\xdbiD)\\\x1b>\x8e\x15\xe9\xb7\xfe\x1f\x03\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd6\x00~;\xb8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00R\xca\x13\xfe\x06\x04\x01\x01}\xc5\x14\x00\x00\x03\x00\xd8\xe1\xfe\x04\x05\x01\x01\x98\x00\x00\x80\x8a\xfe\x8d\xfe\x02\x06\x01\x01*\x00\x00Q\xa9\xfe\x1e\x07\x01\x01\x18\xb8\x86G\x10\x00\x00\x00\x00r\xa6\x02\x18\xf6\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x0c\x00o]\x03\x0cQ\x08\xfe\x1a\x08\x01\x01>#\x01\xfb?M\xad\x11\xc0\x85k\xd2:\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x19\x03\xfe\x08\t\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x94y\xfe\x14\n\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\x99\x99\xf9?\n\xd7#<\xb0\x001\x00\x1b\xff'b'\xfe\x1c\x0b\x01\x01!\xe3*\x04\x00l\xa6\x02\x18\xf2\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xf9\xff\x06\x00\x01\x00\xe3D\xc2\x1b\xfe\x1c\x0c\x01\x01 \x16+\x04\x00v\x14T=\x80\xa0e?\x9e\x91\xd0\xbf\xdc\xe6\x91\xbd\xcc\xd9}=\xfbe}\xbc\xefE\xfe\x1c\r\x01\x01\x1e>+\x04\x00\xc2:(=\x0fiK\xbd\x18\xc2D@D\xfcC=\xf7{\r>g\x96\xaa\xbdL\xce\xfe\x18\x0e\x01\x01\xb2\xb2\xea\x02=\xd0NC\xbd\nSE@\x1e\x15*Dr\xa6\x02\x18\xf6\xe7\xb8\xfd\x9d\xd2\xfe\x1c\x0f\x01\x01\xa3\x17$\xb29w\\o\xba\xe5\x0f\xab9\x00\x00\x00\x00\x00\x00\x00\x00ER+<\xdf\xcc\x9f;l&\xfe\x03\x10\x01\x01\xa5\xb5\x14\x00\x1a:\xfe\x0c\x11\x01\x01\x028\xb0\xb0z\xb1N\x05\x00R+\x04\x00\x01\xcd\xfe\x16\x12\x01\x01\x88l\xa6\x02\x18\xf3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb6\t\xfe\x16\x13\x01\x01\xc1p\xdf\xdb<\xe4y\x12=yp\x0f;\xccr\x16>\x00\x00\x00\x00?\x03g\xae\xfe\x03\x14\x01\x01Ms\x00\x04\x06\x97'b'\xfe\x15\x15\x01\x01$\n$J\x10D\x06\x08\x06\x0e\x06\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x9c\xfe\x16\x16\x01\x01#\x8e+\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x91^'b'\xfe\x1a\x17\x01\x01\x1b\x92\x10K\x10\x00\x00\x00\x00\xe9\xff\t\x00\'\xfc\xda\xffc\x00\xe5\xff\x07\xff\x03\x00\x81\x01\x7f5\xfe\x16\x18\x01\x01t\xca+\x04\x00\xec\xff\x0b\x001\xfc\xd1\xffc\x00\xe5\xff\x05\xffb\xff\x14\x02S\xc8\xfe\x16\x19\x01\x01\x81\xca+\x04\x00\xe1\xff\x1d\x00\'\xfc\xb4\xff\x87\x00\xe3\xff\x9a\x00@\x00\x85\x02%\xdb\xfe\x0e\x1a\x01\x01\x1d\xca+\x04\x00\x99\x99iD\x99\x99\xf5\xbd]\x10ym\xfe\x0e\x1b\x01\x01\x89\xca+\x04\x00C\xdciD\xd7\xa3.>\x8f\x15\xd9I\xfe\x1f\x1c\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01~;\xbb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00RqV\xfe\x06\x1d\x01\x01}\xc5\x14\x00\x00\x03\x00\xa6y\xfe\x04\x1e\x01\x01\x98\x00\x00\x80\x8a\xa7\xdb\xfe\x02\x1f\x01\x01*\x00\x00\xa1]\xfe\x1e \x01\x01\x18\xe0\x97J\x10\x00\x00\x00\x00q\xa6\x02\x18\xf9\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x07\x00o]\x03\x0ce\x15\xfe\x1a!\x01\x01>\x93\x05$?p\xc36\xbf\x14\x0e\x10\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xba"\xfe\x08"\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xab\xef\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6\xfe\x14$\x01\x01J)\\\x8f=)\\\x8f=\x99\x99\xf9?\n\xd7\xa3\xbc\xaf\x003\x00\xdch\xfe\x1c%\x01\x01!\xac+\x04\x00k\xa6\x02\x18\xf3\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xf5\xff\xf9\xff\xfd\xff\xa7Dn\xeb\xfe\x1c&\x01\x01 \x1a,\x04\x00\xf9\xd3\x1a=\xd7\xa6f?\x83\xee\xcf\xbf\xa8\xdb\xed\xbd\xee7\x9f\xbd\xd4\xf4\x18=\x8a\x19'b"\xfe\x1c'\x01\x01\x1eC,\x04\x00>P\xbc\x00\x00\x00\x00?\x03h\xa4\xfe\x03.\x01\x01Ms\x00\x04]\\"b'\xfe\x15/\x01\x01$n!N\x10J\x06\x18\x06\r\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xde\xfe\x160\x01\x01#\x93,\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe1\xe8\xfe\x1a1\x01\x01\x1b\xd3\xbcN\x10\x00\x00\x00\x00\xec\xff\r\x00\x06\xfc\xa3\xff)\x00\xf3\xff\x01\xff\xfd\xffy\x01\xca\xbd\xfe\x162\x01\x01t\xbb,\x04\x00\xef\xff\x0f\x00 \xfc\xb6\xff4\x00\xf3\xff\xff\xfeU\xff\x0e\x02`\xca\xfe\x163\x01\x01\x81\xbb,\x04\x00\xe7\xff\x17\x00\x0e\xfc\xd0\xff\x18\x00\xff\xff\x80\x00H\x00h\x02\x90\xd8\xfe\x0e4\x01\x01\x1d\xbb,\x04\x00\xf7\x98iD\xc2\xf5\x04\xbe^\x10\xf6\xb6\xfe\x0e5\x01\x01\x89\xbb,\x04\x00\x10\xdciD\xa4p+>\x90\x15\to\xfe\x1f6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01~;@\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x86\xd7\xfe\x067\x01\x01}\xc8\x14\x00\x00\x03\x00\xeb\xa2\xfe\x048\x01\x01\x98\x00\x00\x80\x8a\x81\x88\xfe\x029\x01\x01*\x00\x00\xeff\xfe\x1e:\x01\x01\x18\x08\xa9M\x10\x00\x00\x00\x00o\xa6\x02\x18\xf9\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\t\x00o]\x03\x0c@\x9a\xfe\x1a;\x01\x01>e\x03&\xbf\x99\xf5\x96\xbe\xa4\x90\x03\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x004\xb1\xfe\x08<\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x85\xfe\x03=\x01\x01Ms\x00\x04\xf5\x8d'b'\xfe\x14>\x01\x01J\xebQ\xb8=\xebQ\xb8=\xebQ\xf8?\x00\x00\x00\x00\xaf\x003\x00\x8b\x1d\xfe\x1c?\x01\x01!u,\x04\x00i\xa6\x02\x18\xf0\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\xf6\xff\xf2\xff\x00\x00\x92D\xbf\xf9\xfe\x1c@\x01\x01 -\x04\x00\xe0\x81~<)\x8a`?\x98\xf9\xce\xbf3\x9d\xd7\xbd5m\x18\xbeR\xd5\xb7;\xe7\xc2\xfe\x1cA\x01\x01\x1eG-\x04\x00\x02`V\xbb\xd0\x1b;\xbc5\x05D@\xf4g\xa2\xbdxF\xe0<\xd49\xd2\xbc\t\x9d\xfe\x18B\x01\x01\xb2*WE\xbc\xec_\xf3\xbb\xb8\x97D@R\x08*Dm\xa6\x02\x18\xf7\xe7\xb8\xfd\x86.\xfe\t\xf5\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\xa6\xc4'b'\xfe\x1cC\x01\x01\xa3\x1e\xaf\xba92\xd5v\xbaO@\xac9\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x9fR<\xe6\xaa\x1b<\x95\xdd\xfe\x03D\x01\x01\xa5\xc5\x14\x00\x08H\xfe\x0cE\x01\x01\x02\x98\xed\xb8z\xb1N\x05\x00\\-\x04\x00\xa5\x8b\xfe\x16F\x01\x01\x88h\xa6\x02\x18\xef\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x03\xdb\xfe\x16G\x01\x01\xc1\xaa\x08a<\xe9\xe4\x90<\x0c\xeeJ;\xed\xf2$>\x00\x00\x00\x00?\x03>\x1d\xfe\x16H\x01\x01\xe1\xfe\xd4\x18?\x9b\x08!>\xf5\xe26<\\bF<\xda\xf8\xab?\x00\x1f\xb3\xea\xfe\x03I\x01\x01Ms\x00\x04R\x13\xfe\x15J\x01\x01$\xf4\x1fR\x10-\x061\x06!\x06\t\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xa8\xfe\x16K\x01\x01#\x99-\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa2f\xfe\x1aL\x01\x01\x1b=lR\x10\x00\x00\x00\x00\xf8\xff\x06\x00\x14\xfc\xbd\xff\x10\x00\x18\x00\xff\xfe\xf4\xfft\x01\xd8\xdb\xfe\x16M\x01\x01t\xad-\x04\x00\xfa\xff\x04\x00%\xfc\xb9\xff\x1a\x00\xfa\xff\xfb\xfeR\xff\n\x02\x91\x15\x88\xb8\xfe\x1fQ\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x02\x01~;\xeb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Qs\xd1\xfe\x06R\x01\x01}\xc8\x14\x00\x00\x03\x00\xa0\x86'b'\xfe\x04S\x01\x01\x98\x00\x00\x80\x8a\x160\xfe\x02T\x01\x01*\x00\x00%\xec\xfe\x1eU\x01\x01\x18\x10lP\x10\x00\x00\x00\x00m\xa6\x02\x18\xf7\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x12\x00o]\x03\x0c_*\xfe\x1aV\x01\x01>T\xbb\xd8\xbf\xae\xe63\xbe\x14\xfeE\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\\\x0e\xfe\x08W\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x93p\xfe\x12X\x01\x01\xfc\xbf-\x04\x004\x00\x01\x00ARMMASK\x00Wr#\xea\xfe\tY\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03f\xa1\xfe\x03Z\x01\x01Ms\x00\x04\xfa\xc2\xfe\x03[\x01\x01/\xff\x00\x00\xf3\\\xfe\x14\\\x01\x01J\x8f\xc2u>\x8f\xc2u>\xebQ\xf8?\x00\x00\x00\x00\xaf\x003\x00V\x08'b'\xfe\x1c]\x01\x01!\xf3-\x04\x00h\xa6\x02\x18\xeb\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\xf8\xff\xef\xff\xff\xff\x8dD?\xaf\xfe\x1c^\x01\x01 &.\x04\x00&\xd1\x00\xbc&\xc8U?~\x96\xcd\xbf\xce\xdc\xb2\xbd\x82\xac1\xbe\xaeZ?<\xe3\xa4\xfe\x1c_\x01\x01\x1eN.\x04\x00\x12Z\x8b\xbcD\x19\x13\xbc\xf6\x01D@\xffC\x19=\xda?\x1f<\n$}\xbc\xd7?\xfe\x18`\x01\x01\xb2\xcb\xef\xe2\xbc\xe4\xed\x88\xbb\xe6\x94D@\x8f\x02*Dl\xa6\x02\x18\xf4\xe7\xb8\xfd-\r\xfe\x1ca\x01\x01\xa3t\xc1\xbe9\x1d\x85z\xba\x05\xdb\xac9\x00\x00\x00\x00\x00\x00\x00\x00[\xeaZ<\xd7\xeb;<]\xd5\xfe\x03b\x01\x01\xa5\xc5\x14\x00I\xe3\xfe\x0cc\x01\x01\x028\xe5\xbcz\xb1N\x05\x00b.\x04\x00ZM\xfe\x16d\x01\x01\x88g\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x006c\xfe\x16e\x01\x01\xc1\xa4\x80\x95<\x1f\x98\x90<\xfc>\x94<\x8dj$>\x00\x00\x00\x00?\x03I(\xfe\x03f\x01\x01Ms\x00\x04\x10\x14'b'\xfe\x1ag\x01\x01\x1b^\x1dV\x10\x00\x00\x00\x00\xe9\xff\xf7\xff\x00\xfcX\xff;\xff\xf0\xff\xfb\xfe\xec\xffu\x01\xe9A\xfe\x16h\x01\x01t\x9f.\x04\x00\xf7\xff\x00\x00\x14\xfcP\xffW\xff\xf2\xff\xf8\xfeB\xff\x06\x02\xc7\xcb\xfe\x16i\x01\x01\x81\x9f.\x04\x00\xea\xff\t\x00\n\xfc3\xffU\xff\xe9\xffv\x00P\x00a\x02>\n\xfe\x0ej\x01\x01\x1d\x9f.\x04\x00\xf4\x98iD\xb8\x1e\x05\xbe_\x10\xf1\x9b\xfe\x0ek\x01\x01\x89\x9f.\x04\x00\x0f\xdbiD)\\\x1b>\x91\x15?\x81\xfe*l\x01\x01\x96s\xe7f\xbc\xfel\x01\x00_\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x006\xfc\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00ds;\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xb3\xb7\xfe\x06n\x01\x01}\xc3\x14\x00\x00\x03\x00\x12\x81\xfe\x04o\x01\x01\x98\x00\x00\x80\x8a\x94x\xfe\x02p\x01\x01*\x00\x00\xd0\xe0\xfe\x1eq\x01\x01\x188}S\x10\x00\x00\x00\x00l\xa6\x02\x18\xf4\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x18\x00A_\x03\x0c\xfc\x16\xfe\x1ar\x01\x01>GY]\xc0\xd9\xb1\xa1\xbf{\xc4\x15<\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00aF\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3\xfe\x15t\x01\x01$\xc2kV\x10\x95\x06\x1e\x06\x1f\x06>\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\nl\xfe\x16u\x01\x01#\xb3.\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00F"'b'\xfe\x03v\x01\x01Ms\x00\x04hO\xfe\x14w\x01\x01J\x00\x00\x80>\x00\x00\x80>\xe1z\xf4?\n\xd7\xa3<\xaf\x004\x00\x89E\xfe\x1cx\x01\x01!\xd1.\x04\x00f\xa6\x02\x18\xe5\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\xf8\xff\xf1\xff\x04\x00\x85D5\xbe\xfe\x1cy\x01\x01 +/\x04\x00|\x16\xd1\xbc\xaf\xb8I?M\xeb\xca\xbf\x91\x9c\xa6\xbd\xa0X\x1e\xbe\x86\xab(\xbd\xdb\xb5'b'\xfe\x1cz\x01\x01\x1eT/\x04\x00\x99\xa3N\xbdm/\x9b\xbc\x90\xeeC@\x86Fk\xbd\x16\xd1\xa6=\x8ex$<\xdf\xa1\xfe\x18{\x01\x01\xb2\xa2\xf3w\xbd?\xe2r\xbc_\x82D@{$*Dl\xa6\x02\x18\xf0\xe7\xb8\xfd\xd1\xf8\xfe\x1c|\x01\x01\xa3\x81\xc2\xc29\xa3,~\xba\x1fs\xad9\x00\x00\x00\x00\x00\x00\x00\x00\x19\xb6O\x00\x00\x00\x00?\x03\xcf\xe0\xfe\x03\x81\x01\x01Ms\x00\x04\xfd\x90\xfe\x1a\x82\x01\x01\x1b\x05\xcaY\x10\x00\x00\x00\x00\xf2\xff\x02\x00<\xfc\x15\x00k\x00\x00\x00\x00\xff\xe2\xffv\x01^\x01\xfe\x16\x83\x01\x01t\x8f/\x04\x00\xea\xff\x10\x00H\xfc\r\x00_\x00\x0b\x00\x01\xffB\xff\x0f\x02R\xb6\xfe\x16\x84\x01\x01\x81\x8f/\x04\x00\xe8\xff\x15\x004\xfc\x03\x00Z\x00\x0e\x00\x92\x00G\x00h\x02\xaeE\xfe\x0e\x85\x01\x01\x1d\x8f/\x04\x00\x1e\x95iD\xe1zB\xbe\\\x10\x9c\x00\xfe\x0e\x86\x01\x01\x89\x8f/\x04\x00\xeb\xd9iD\xb8\x1e\t>\x91\x15\xefn\xfe\x1f\x87\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01s;y\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xaeZ\xfe\x06\x88\x01\x01}\xc8\x14\x00\x00\x03\x00s\xbf\xfe\x04\x89\x01\x01\x98\x00\x00\x80\x8a\x06\t\xfe\x02\x8a\x01\x01*\x00\x00\xd6\x9e\xfe\x1e\x8b\x01\x01\x18\x88\x9fY\x10\x00\x00\x00\x00k\xa6\x02\x18\xed\xe7\xb8\xfd\xfej\n\x00F\x00\xff\xff\x19\x00\xdaa\x03\x0c\x9d\'\xfe\x1a\x8c\x01\x01>raO\xc0\x84\x06\x8c>p\xdd\xa5\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\'\xcc\xfe\x08\x8d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x82\xa9'b'\xfe\x15\x8e\x01\x01$\xa5gZ\x10K\x06\xf6\x05\xf1\x05\x17\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00?$\xfe\x16\x8f\x01\x01#\xb8/\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00,\x11\xfe\x03\x90\x01\x01Ms\x00\x04:J\xfe\x14\x91\x01\x01J\x00\x00\x80>\x00\x00\x80>\x8f\xc2\xf5?\n\xd7#\xbc\xaf\x002\x00D\x94'b'\xfe\x1c\x92\x01\x01!\x85/\x04\x00e\xa6\x02\x18\xe2\xe7\xb8\xfd\x10c\n\x00\x80\x07\x00\x00\xfb\xff\xf8\xff\xfd\xff\x81D\xa1\xe5\xfe\x1c\x93\x01\x01 00\x04\x00\x08\x08\x1a\xbd\xa4LB?S\xb9\xcb\xbf\xffWM\xbd\x9e@\xa4\xbd_\xb8\x1d=4\xc5\xfe\x1c\x94\x01\x01\x1eX0\x04\x00\x91\xf1=\xbdD\x93\x89\xbb\x9b\xdbC@\xad\xd3\x8f<\xb5l\xa2\xbb\xb85\xaa\xbb{9\xfe\x18\x95\x01\x01\xb2\x99\xcdk\xbd\x16\x96\x8e:CvD@\xae\x17*Dk\xa6\x02\x18\xe8\xe7\xb8\xfd\x00$\xfe\x1c\x96\x01\x01\xa3\xb2\xb2\xc69\xdd\xe2\x80\xba\x82\xfe\xad9\x00\x00\x00\x00\x00\x00\x00\x00*\xa5\x86<\xbbX\r<\x8c \xfe\x03\x97\x01\x01\xa5\xc8\x14\x00<\xbc\xfe\x0c\x98\x01\x01\x02\x90\xd0\xc4z\xb1N\x05\x00l0\x04\x00\x86\x8e\xfe\x16\x99\x01\x01\x88e\xa6\x02\x18\xe1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xeb\xae\xfe\x16\x9a\x01\x01\xc1\x9f\xf5\x04=\r\xef\xea\x00\x00\x00\x00?\x03\xab\xef'b"\xfe\x03\x9b\x01\x01Ms\x00\x04V\xed\xfe\x1a\x9c\x01\x01\x1b4x]\x10\x00\x00\x00\x00\xf7\xff\x05\x00\x15\xfc'\x00\xc6\xff\x08\x00\xfa\xfe\xe1\xffp\x01\xe6\x16\xfe\x16\x9d\x01\x01t\x810\x04\x00\xf5\xff\x1a\x001\xfc\x1a\x00\xe1\xff\xf1\xff\xf7\xfe8\xff\x05\x02hb\xfe\x16\x9e\x01\x01\x81\x810\x04\x00\xef\xff\x0f\x00$\xfc8\x00\xf4\xff\xda\xff\x84\x00;\x00h\x02\xf6l\xfe\x0e\x9f\x01\x01\x1d\x810\x04\x00\xf4\x97iD\xb8\x1e\x15\xbe^\x10\t\xee\xfe\x0e\xa0\x01\x01\x89\x810\x04\x00\x10\xdciD\xa4p+>\x92\x15\x9at\xfe\x1f\xa1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00*\x01s;\xfd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q3>\xfe\x06\xa2\x01\x01}\xc5\x14\x00\x00\x03\x00>d\xfe\x04\xa3\x01\x01\x98\x00\x00\x80\x8a\x0f\x1a\xfe\x02\xa4\x01\x01*\x00\x00t{\xfe\x1e\xa5\x01\x01\x18\xb0\xb0\\\x10\x00\x00\x00\x00k\xa6\x02\x18\xe8\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x1a\x00\xecc\x03\x0c*%\xfe\x1a\xa6\x01\x01>\xed\xf2-\xc0Sm\xb1=3\x83%\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xa5\xb7\xfe\x08\xa7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x10:\xfe\x15\xa8\x01\x01$\x13b^\x10{\x06#\x06\x06\x064\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\xde\xfe\x16\xa9\x01\x01#\xbc0\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00F;"b'\xfe\x03\xaa\x01\x01Ms\x00\x04a\x81\xfe\x14\xab\x01\x01J\xb8\x1e\x85>\xb8\x1e\x85>33\xf3?\x00\x00\x00\x00\xaf\x004\x00[\xe7\xfe\x1c\xac\x01\x01!\x171\x04\x00e\xa6\x02\x18\xe0\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x00\x00\xfd\xff\x00\x00vD1\xcf\xfe\x1c\xad\x01\x01 51\x04\x00\xdb\xaa\n\xbd\xa0s=?\x8a>\xca\xbfi\xe1\xc5\xbb@H\x01\xbd\x05\xc7\x179"\x8e\xfe\t\xf6\n\x00m\x02\x00\x00\x00\x00\xd9\x00\x00\x00\x1a\x02'b"\xfe\x1c\xae\x01\x01\x1e]1\x04\x00\xce\x91\x1c\xbd\x1c3_\xbcA\xc6C@\xb9bS=\xb7Uf\xbc\xbb\x8eQ\xbbF\xbb\xfe\x18\xaf\x01\x01\xb2\xaa>H\xbd\xfa\xd0\x0e\xbcb^D@\x00 *Dk\xa6\x02\x18\xe7\xe7\xb8\xfd7?\xfe\x1a\xb0\x01\x01\x1b\xf8$a\x10\x00\x00\x00\x00\xef\xff\x01\x00'\xfc*\x00\xf7\xff\x07\x00\xf9\xfe\xe3\xfft\x01\x0bG\xfe\x16\xb1\x01\x01tq1\x04\x00\xec\xff\x08\x00A\xfc \x00\x02\x00\xfb\xff\xfb\xfeB\xff\n\x02\xd9 \xfe\x16\xb2\x01\x01\x81q1\x04\x00\xeb\xff\x11\x00*\xfc5\x00\xde\xff\x0f\x00v\x00$\x00\x84\x02\x8a\xd3\xfe\x0e\xb3\x01\x01\x1dq1\x04\x00\x93\x95iD33;\xbe]\x10K\xbd\xfe\x0e\xb4\x01\x01\x89q1\x04\x00\x99\xd9iD\x00\x00\x04>\x93\x15F\x98\xfe\x1f\xb5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01B;\x8f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00QI\x92\xfe\x06\xb6\x01\x01}\xc6\x14\x00\x00\x03\x00@\xe3\xfe\x04\xb7\x01\x01\x98\x00\x00\x80\x8a~\xda\xfe\x02\xb8\x01\x01*\x00\x00'\x7f\xfe\x1e\xb9\x01\x01\x18\xd8\xc1_\x10\x00\x00\x00\x00k\xa6\x02\x18\xe7\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\r\x00\xecc\x03\x0c\xdd\x06\xfe\x1a\xba\x01\x01>\x01\xc0\x11\xc0\xc9\xbc\x95\xbe\xc2\xd5s\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xd8m\xfe\x03\xbb\x01\x01Ms\x00\x04\xa6[\xfe\x08\xbc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00_C\xfe\x1c\xbd\x01\x01\xa3u\xf8\xca9H\xc7\x82\xba%z\xae9\x00\x00\x00\x00\x00\x00\x00\x00\x04\x92\xa5<\xb25\xc3;\x89X\xfe\x03\xbe\x01\x01\xa5\xc3\x14\x00\xdaf\xfe\x0c\xbf\x01\x01\x02Xh\xc9z\xb1N\x05\x00\x861\x04\x00-1\xfe\x16\xc0\x01\x01\x88f\xa6\x02\x18\xdf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x98\x9e\xfe\x12\xc1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xd4[\xfe\x16\xc2\x01\x01\xc1\xe9\x90\x80<&\x84\x07=\xd9uM;8\xdc\x08>\x00\x00\x00\x00?\x03A)\xfe\x16\xc3\x01\x01\xe1\xecQ\x18?\x99\x99\x19>\xf5\xe26<\\bF<};\xac?\x00\x1fl\x14"b"\xfe\x12\xc4\x01\x01\xfc\xab1\x04\x004\x00\x01\x00ARMMASK\x00Wr\xf7l\xfe\t\xc5\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb5\xed\xfe\x15\xc6\x01\x01$s_b\x10S\x06\x1d\x06\xf7\x05\x0b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x17\xfe\x16\xc7\x01\x01#\xc21\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc5\x99\xfe\x03\xc8\x01\x01Ms\x00\x04\x0fY"b'\xfe\x03\xc9\x01\x01/\xff\x00\x00\x06\xc7\xfe\x14\xca\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=\xe1z\xf4?\x8f\xc2\xf5\xbc\xaf\x004\x00\xdb\xb3\xfe\x1c\xcb\x01\x01!\xe01\x04\x00f\xa6\x02\x18\xe0\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x01\x00\x01\x00\xfd\xffxD\x95K\xfe\x1c\xcc\x01\x01 :2\x04\x00\x0f\xb0\xb3\xbc\xceT=?\xb5:\xca\xbf\xc2\xc8\x83<\x92Dx<\xf7\xe7\x10=\xd3\xcb\xfe\x1a\xcd\x01\x01\x1b\x02\xd2d\x10\x00\x00\x00\x00\xeb\xff\x13\x00\x04\xfc\x16\x00\xd5\xff%\x00\x00\xff\xe2\xffu\x01\xba\xc4\xfe\x16\xce\x01\x01tb2\x04\x00\xed\xff\x15\x00\x1d\xfc\x0e\x00\xed\xff\r\x00\xfd\xfeD\xff\r\x02\x94\x12\xfe\x16\xcf\x01\x01\x81b2\x04\x00\xee\xff\x0e\x00\xff\xfb\x0f\x00\xae\xff\x1d\x00\x8d\x00L\x00b\x02\x0c\xcf\xfe\x0e\xd0\x01\x01\x1db2\x04\x00e\x95iD{\x14>\xbe^\x10\xcf\x89\xfe\x0e\xd1\x01\x01\x89b2\x04\x00&\xdaiD\xcd\xcc\x0c>\x93\x15\x88\xc5\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01B;\x8f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xaeO\xfe\x06\xd3\x01\x01}\xc5\x14\x00\x00\x03\x00eo\xfe\x04\xd4\x01\x01\x98\x00\x00\x80\x8a#\x1d'b'\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5\xfe\x1e\xd6\x01\x01\x18\x00\xd3b\x10\x00\x00\x00\x00m\xa6\x02\x18\xe6\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x0c\x00\xecc\x03\x0c\xf1\xed\xfe\x1a\xd7\x01\x01>:h\x12\xc0,\xb0g\xc0\xe1z\x95\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\x89\xa6\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83\xfe\x1c\xd9\x01\x01\x1ew2\x04\x00~\xba&\xbd0r\x82\xbc\xc3\xd6C@\xderN<\xb3I\xa9\xbd\x12\xb4\xa4\xbcn\xc1\xfe\x18\xda\x01\x01\xb2\x1dDP\xbd6E-\xbc\x8bzD@\xae\x07*Dm\xa6\x02\x18\xe6\xe7\xb8\xfde\x9d\xfe\x03\xdb\x01\x01Ms\x00\x04\xa7\x88\xfe\x1c\xdc\x01\x01\xa3\xb4\xdb\xce9b\x80\x84\xba\x92\xe4\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xda\x96\xa4\x00\x00\x00\x00?\x03K9\xfe\x15\xe1\x01\x01$\x19Zf\x10\x8c\x06%\x06!\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00:\x8b\xfe\x16\xe2\x01\x01#\xc72\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00/\xde'b'\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H\xfe\x14\xe4\x01\x01J\xaeG\xe1=\xaeG\xe1=\x85\xeb\xf1?\x8f\xc2\xf5<\xaf\x004\x00\xf4C'b"\xfe\x1c\xe5\x01\x01!\xa92\x04\x00h\xa6\x02\x18\xe1\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\x07\x00\x05\x00\x83D,w\xfe\x1c\xe6\x01\x01 @3\x04\x00\xf8\xb1\x16;c\x0b@?\x9d\x15\xc8\xbf\x9d\x07m<\xf8~\x96=N0\\\xbd\xce\x8a\xfe\x1a\xe7\x01\x01\x1b&\x80h\x10\x00\x00\x00\x00\xe6\xff\x02\x00\xfc\xfbN\x005\x00#\x00\x03\xff\xe1\xff}\x01\xcb\xea\xfe\x16\xe8\x01\x01tT3\x04\x00\xe7\xff\xfd\xff\x06\xfcO\x00J\x00\x06\x00\x02\xff5\xff\x0b\x02&\x8a\xfe\x16\xe9\x01\x01\x81T3\x04\x00\xe9\xff\x18\x00\xf9\xfbz\x00,\x00\xec\xff\x8a\x007\x00s\x020\xb3\xfe\x0e\xea\x01\x01\x1dT3\x04\x007\x98iD\xc2\xf5\x10\xbe`\x10[R\xfe\x0e\xeb\x01\x01\x89T3\x04\x00\x18\xdbiD\x85\xeb\x1b>\x94\x15\xd1\x82\xfe\x1f\xec\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00;\x01B;s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xbex\xfe\x06\xed\x01\x01}\xc6\x14\x00\x00\x03\x00\x19\x1d\xfe\x04\xee\x01\x01\x98\x00\x00\x80\x8a\xbe\xf1\xfe\x02\xef\x01\x01*\x00\x00\xf0\xca\xfe\x1e\xf0\x01\x01\x18(\xe4e\x10\x00\x00\x00\x00q\xa6\x02\x18\xe6\xe7\xb8\xfd\xc2j\n\x00F\x00\xff\xff\x0b\x00\xecc\x03\x0c\x85\xe6\xfe\x1a\xf1\x01\x01>\xa6A\xc7\xbf\xea\xcf\xcb\xbf\xaew\\\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00~\x9a\xfe\x08\xf2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x88\x10\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13\xfe\x1c\xf4\x01\x01\x1e|3\x04\x006\xb4\x1a\xbd\x8c\xb0\xea\xbc\xdf\xf1C@\xf4!%=N4\xbb=\xe8\xaa[\xbc\xf0+\xfe\x18\xf5\x01\x01\xb2J\xfdE\xbdg\x8c\xcf\xbc\n\x95D@\xae\x07*Dq\xa6\x02\x18\xe6\xe7\xb8\xfd\xf9\xee\xfe\x1c\xf6\x01\x01\xa3\xad\xb6\xd29c'\x86\xba=8\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\x06h\x85<\xde|\x83;\xa1\x8d\xfe\x03\xf7\x01\x01\xa5\xc8\x14\x00=o\xfe\x0c\xf8\x01\x01\x02\xb0S\xd1z\xb1N\x05\x00\x903\x04\x00\x94\x97\xfe\x16\xf9\x01\x01\x88h\xa6\x02\x18\xe2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1c\xe9\xfe\x16\xfa\x01\x01\xc1\xa88\xb8<\x1f\x96I=W\xbf\xc4;7Q\x1b>\x00\x00\x00\x00?\x03\xacH"b'\xfe\x15\xfb\x01\x01$\x97Yj\x10\x11\x06A\x06\x1d\x06\xef\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x02\xfe\x16\xfc\x01\x01#\xcd3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xebi\xfe\x03\xfd\x01\x01Ms\x00\x04\xe6#'b'\xfe\x14\xfe\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\xf1?\n\xd7\xa3<\xaf\x003\x00\x86\x8c\xfe\x1a\xff\x01\x01\x1b+.l\x10\x00\x00\x00\x00\xef\xff\x0b\x00%\xfc=\x00\r\x00\xec\xff\xff\xfe\xe8\xffz\x01\xa7\x82\xfe\x16\x00\x01\x01tE4\x04\x00\xf7\xff\x16\x000\xfc,\x00\x1d\x00\xfd\xff\x00\xffF\xff\x10\x02n%\xfe\x16\x01\x01\x01\x81E4\x04\x00\xe9\xff\r\x00\x08\xfc\xed\xff8\x00\xfc\xff\x92\x005\x00q\x02\xec\x96\xfe\x0e\x02\x01\x01\x1dE4\x04\x00\xaf\x97iD\xa4p\x19\xbe`\x10c\xc4\xfe\x0e\x03\x01\x01\x89E4\x04\x00=\xdaiDp=\x0e>\x95\x15\xa2m\xfe\x1f\x04\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01f;\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xa9`\xfe\x06\x05\x01\x01}\xc5\x14\x00\x00\x03\x00I\xb4\xfe\x04\x06\x01\x01\x98\x00\x00\x80\x8a\xf9[\xfe\x02\x07\x01\x01*\x00\x00\x846\xfe\x1e\x08\x01\x01\x18x\x06l\x10\x00\x00\x00\x00t\xa6\x02\x18\xe8\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0cE\xd4\xfe\x1a\t\x01\x01>\xf7.g\xbfU\xd2\xc1\xbf\\\xf7\x97\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0f-\xfe\x08\n\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00cw\xfe\x1c\x0b\x01\x01!;4\x04\x00j\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x02\x00\x08\x00\x02\x00\x81D\x8ci\xfe\x1c\x0c\x01\x01 Y4\x04\x00\xcf\xf6\xec<\x940G?\xd5\xeb\xc7\xbfWR\xb7<\xa7\x12\xb8=\xc4\xf5\xb0\xbc5X'b'\xfe\x03\r\x01\x01Ms\x00\x04}`\xfe\x1c\x0e\x01\x01\x1e\x814\x04\x00\x1c\xe0\xad\xbc\xd71\x94\xbc\x12\xddC@Y\x01\x84\xbc\x8c=\xa9\xbbVG\x06\xbdl\xa2\xfe\x18\x0f\x01\x01\xb2\x98\xe9\x01\xbdB\xded\xbcA\x80D@)\x0c*Dt\xa6\x02\x18\xe8\xe7\xb8\xfd\xb6z\xfe\x1c\x10\x01\x01\xa3\xbct\xd69\xc3\xbb\x87\xba\x9by\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xfeSr<\x97\x0e\x90;\xa9\xa6\xfe\x03\x11\x01\x01\xa5\xc2\x14\x00\xc1\xb6\xfe\x0c\x12\x01\x01\x02PK\xd5z\xb1N\x05\x00\x954\x04\x00\xfbb\xfe\x16\x13\x01\x01\x88k\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00>\xf1\xfe\x16\x14\x01\x01\xc1\xeb\x15\xf1<\xf2Ra=\xdb\x07\x85;\xf2i\x1c>\x00\x00\x00\x00?\x03\xd8j'b'\xfe\x15\x15\x01\x01$\xb4Un\x10T\x06\x06\x06\n\x06\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00s\xc2\xfe\x16\x16\x01\x01#\xd24\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xb7R\xfe\x03\x17\x01\x01Ms\x00\x04\xd6\x1d\xfe\x14\x18\x01\x01J\x8f\xc2u=\x8f\xc2u=\xd7\xa3\xf0?\n\xd7\xa3<\xaf\x003\x00\x99\x16\xfe\t\xf7\n\x00m\x04\x00\x00\x00\x00\xdb\x00\x00\x00\xaa\x82'b'\xfe\x1a\x19\x01\x01\x1b\x1c\xdfo\x10\x00\x00\x00\x00\xf0\xff\x0b\x00!\xfc\xf9\xff\xcc\xff\x02\x00\x04\xff\xec\xffy\x01\x02\xc6\xfe\x16\x1a\x01\x01t75\x04\x00\xf5\xff\x0e\x00%\xfc\xfa\xff\xc5\xff\x03\x00\x02\xffJ\xff\x11\x02\x14\xdb\xfe\x16\x1b\x01\x01\x8175\x04\x00\xef\xff\x1c\x00%\xfc\xf6\xff\xbf\xff\x0b\x00\x89\x00D\x00x\x02\x18\x06\xfe\x0e\x1c\x01\x01\x1d75\x04\x00[\x97iDR\xb8\x1e\xbe`\x10=\xa0\xfe\x0e\x1d\x01\x01\x8975\x04\x00\x82\xd9iD\\\x8f\x02>\x95\x15\xefD\xfe\x1f\x1e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00/\x01f;\x02\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfdK\xfe\x06\x1f\x01\x01}\xc2\x14\x00\x00\x03\x00\x9c\x15\xfe\x04 \x01\x01\x98\x00\x00\x80\x8a\xdf\x08\xfe\x02!\x01\x01*\x00\x00\xca\r\xfe\x1e"\x01\x01\x18\xa0\x17o\x10\x00\x00\x00\x00v\xa6\x02\x18\xeb\xe7\xb8\xfd\xd6j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0c/\xe2\xfe\x1a#\x01\x01>\xd7\x1fB\xbfB\x8e\xeb\xbf\xf5\x18\x7f\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00|]\xfe\x08$\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00E\xf2\xfe\x1c%\x01\x01!\x045\x04\x00m\xa6\x02\x18\xe7\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x02\x00\x07\x00\x03\x00\x89D\x13\xba\xfe\x1c&\x01\x01 _5\x04\x00?*u=\x01}M?\rR\xc7\xbf\xb7N\xd3<\x0f\x90\xa0=_\x80\xf7\xbc\x06\xa3\xfe\x03\'\x01\x01Ms\x00\x04^\xf0\xfe\x1c(\x01\x01\x1e\x875\x04\x00\xde9\xad\xbc\xad\xaa\n\xbd\xf5\x02D@\x9e\xc8\xcd=6\x1f\xba\xbd5g\xcc<\xf2\x80\xfe\x18)\x01\x01\xb2\xdf\xc1\x06\xbd\x85\x9e\xf0\xbc\xa2\xa4D@\\\x0f*Dv\xa6\x02\x18\xeb\xe7\xb8\xfd4\xa8'b'\xfe\x12*\x01\x01\xfc\x985\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd4\xe4\xfe\t+\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb5l\xfe\x1c,\x01\x01\xa3;\x16\xda9\xcc>\x89\xba\x16\xb7\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xa4d<#\xa3\xac;L\xe1\xfe\x03-\x01\x01\xa5\xc5\x14\x00\n7\xfe\x0c.\x01\x01\x02\xf0B\xd9z\xb1N\x05\x00\x9b5\x04\x00\xdb\xd8\xfe\x16/\x01\x01\x88m\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd4\x7f\xfe\x160\x01\x01\xc1\xfaY\x7f<\x15\x8ai=Z\xed8:\xff\x11\x1e>\x00\x00\x00\x00?\x03\t\xf0\xfe\x161\x01\x01\xe1c\x10\x18?@\xaa<>\xf5\xe26<\\bF<\x19\xe4\xac?\x00\x1f\xed\xfa\xfe\x152\x01\x01$\xeaQr\x10c\x06\x14\x06\xfe\x05\x1a\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xe9\xfe\x163\x01\x01#\xd75\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf6O\xfe\x034\x01\x01Ms\x00\x04\xf6!'b"\xfe\x1a5\x01\x01\x1br\x8as\x10\x00\x00\x00\x00\xea\xff\x03\x00+\xfc;\x00\x15\x00\xfb\xff\x05\xff\xec\xff\x80\x01\x98\xd4\xfe\x166\x01\x01t'6\x04\x00\xee\xff\x03\x00-\xfc.\x00\x1d\x00\n\x00\x05\xffJ\xff\x10\x02jo\xfe\x167\x01\x01\x81'6\x04\x00\xe6\xff\x0f\x00 \xfc5\x00+\x00\x00\x00\x8c\x00-\x00\x84\x02\x02{\xfe\x0e8\x01\x01\x1d'6\x04\x00O\x97iD\xa4p\x1f\xbe`\x10\x10\xe9\xfe\x0e9\x01\x01\x89'6\x04\x00\x9b\xdaiD{\x14\x14>\x96\x15&\x82\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x01f;\xfc\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xac\xe4\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n\xfe\x04<\x01\x01\x98\x00\x00\x80\x8ad\xb7\xfe\x02=\x01\x01*\x00\x00\x99\t\xfe\x1e>\x01\x01\x18\xc8(r\x10\x00\x00\x00\x00y\xa6\x02\x18\xee\xe7\xb8\xfd\xe0j\n\x00F\x00\xff\xff\x07\x00\xecc\x03\x0c\xc7\xc2\xfe\x1a?\x01\x01>\xc4C\x14\xbf\x90\x96\xf1\xbf\xebaC\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xdb\x1d\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002\xfe\x14A\x01\x01J)\\\x8f=)\\\x8f=\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x003\x00_=\xfe\x03B\x01\x01/\xff\x00\x00\x88\xab\xfe\x03C\x01\x01Ms\x00\x04\x815"b'\xfe\x1cD\x01\x01!\xcd5\x04\x00o\xa6\x02\x18\xea\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x00\x00\x06\x00\x03\x00\x93D\x9dT\xfe\x1cE\x01\x01 d6\x04\x00\xf0\xb7\xb1=#\nT?\x9c"\xc7\xbf1\xf4\x90\xba.\\\x8b=\n(\xfc\xbc\xcd4\xfe\x1cF\x01\x01\x1e\x8c6\x04\x00\x0e\xfb*\xbc\xad\xc2\x11\xbd\xc9\x16D@\x0f0\x84=\xbe\x13#\xbd\xd8V\'\xbcp\xe5\xfe\x18G\x01\x01\xb2\x82\xe7\xb5\xbc=\xb5\x00\xbd\xf1\xbfD@3\x13*Dy\xa6\x02\x18\xee\xe7\xb8\xfd\xcd\x8e\xfe\x1cH\x01\x01\xa3B\x90\xdd9\x96\xb3\x8a\xba%\xf2\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xc9e]<\x7f\xe8\x92;\x8c\xc6\xfe\x03I\x01\x01\xa5\xc8\x14\x00Zy\xfe\x0cJ\x01\x01\x02\xa86\xddz\xb1N\x05\x00\xa06\x04\x00\x93:\xfe\x16K\x01\x01\x88p\xa6\x02\x18\xeb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\n\xa5\xfe\x16L\x01\x01\xc1&\xb4\xea;+\xfaz=\x17|\x1b;G%+>\x00\x00\x00\x00?\x03C2'b"\xfe\x15M\x01\x01$\x1bOv\x10U\x06\x16\x06\x01\x06<\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95-\xfe\x16N\x01\x01#\xdc6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v\xf7\xfe\x03O\x01\x01Ms\x00\x04\xe3\x0e\xfe\x1aP\x01\x01\x1b':w\x10\x00\x00\x00\x00\xe9\xff\x07\x00\x05\xfc[\x00\x00\x00\x10\x00\x06\xff\xef\xff|\x01\x9f>\xfe\x16Q\x01\x01t\x197\x04\x00\xeb\xff\x08\x00\x0f\xfc5\x00\x1c\x00\r\x00\x05\xffM\xff\x10\x02\xdb#\xfe\x16R\x01\x01\x81\x197\x04\x00\xe9\xff\x10\x00\r\xfcS\x00\x11\x00\x08\x00\x8f\x007\x00\x83\x025\xf7\xfe\x0eS\x01\x01\x1d\x197\x04\x00O\x97iD\xa4p\x1f\xbea\x10e\xcc\xfe\x0eT\x01\x01\x89\x197\x04\x00\xe0\xd9iDff\x08>\x96\x15\x11s\xfe\x1fU\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd0\x00f;\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q-\xbc\xfe\x06V\x01\x01}\xc5\x14\x00\x00\x03\x00\xba\xf6\xfe\x04W\x01\x01\x98\x00\x00\x80\x8a\xf3\x0f\xfe\x02X\x01\x01*\x00\x00\xbf]\xfe\x1eY\x01\x01\x18\xf09u\x10\x00\x00\x00\x00{\xa6\x02\x18\xf0\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cgR\xfe\x1aZ\x01\x01>p;\x86>\xf3Q\x14\xc0\x00\xc0G\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x91,\xfe\x08[\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00OK"b'\xfe\x14\\\x01\x01J\xcc\xccL=\xcc\xccL=\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x003\x00 \x96\xfe\x03]\x01\x01Ms\x00\x04\xf4^\xfe\x1c^\x01\x01!_7\x04\x00q\xa6\x02\x18\xed\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfe\xff\x03\x00\x05\x00\x9cD\xc4x\xfe\x1c_\x01\x01 i7\x04\x00\xee1\xd8=`\xb9Y?\x16\xfe\xc6\xbf\xe8\xb9\xba\xbc8\xc5\x19=[bM\xbd\x99\xb3'b'\xfe\x1c`\x01\x01\x1e\x917\x04\x00\x7f\xbc\x8b\xbb\xc7\xe7\x0c\xbd\xaf>D@\x9b>Z=b\xed_=)M\x83<\xab\xcb\xfe\x18a\x01\x01\xb2\xb4\xcb\x82\xbc\x1d\xf2\x00\xbd\x98\xe6D@f\x16*D|\xa6\x02\x18\xf2\xe7\xb8\xfd\r7\xfe\x1cb\x01\x01\xa3\xd6\xd8\xe09~\x1c\x8c\xba\xf1#\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xed6c<\xf2"\xa5;\xc7\'\xfe\x03c\x01\x01\xa5\xc6\x14\x00;G\xfe\x0cd\x01\x01\x0202\xe1z\xb1N\x05\x00\xa57\x04\x00\xb84\xfe\x16e\x01\x01\x88q\xa6\x02\x18\xed\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00/!\xfe\x16f\x01\x01\xc1o\xb0U<_}l=N\x17\xde8\xf2\x1d:>\x00\x00\x00\x00?\x03\xd3\xdb\xfe\x03g\x01\x01Ms\x00\x04\xaf\x95\xfe\x15h\x01\x01$AIz\x101\x06#\x06\x0b\x06\n\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\xf9\xfe\x16i\x01\x01#\xe17\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x92L'b'\xfe\x1aj\x01\x01\x1b\xbc\xe7z\x10\x00\x00\x00\x00\xed\xff\x05\x003\xfc\t\x00$\x00\xeb\xff\x02\xff\xf3\xff\x7f\x01A\x01\xfe\x16k\x01\x01t\n8\x04\x00\xf0\xff\x00\x00!\xfc\xff\xff$\x00\x04\x00\x03\xffU\xff\x13\x02\x0e\xad\xfe\x16l\x01\x01\x81\n8\x04\x00\xe3\xff\x11\x00=\xfc%\x00\r\x00\xf8\xff\x86\x00M\x00\x8a\x02B\xda\xfe\x0em\x01\x01\x1d\n8\x04\x00 \x96iDff2\xbe`\x10\xbe\x11\xfe\x0en\x01\x01\x89\n8\x04\x00j\xd9iD=\n\x01>\x96\x15\x04\xe0\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01G;\xfa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xd6u\xfe\x06p\x01\x01}\xc8\x14\x00\x00\x03\x00\x08\xcf\xfe\x04q\x01\x01\x98\x00\x00\x80\x8a\xd5\\\xfe\x02r\x01\x01*\x00\x00k\xd7\xfe\x1es\x01\x01\x18 \x0e{\x10\x00\x00\x00\x00}\xa6\x02\x18\xf4\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cM\xe9\xfe\x1at\x01\x01>\xaa\xbb7\xbd\xf6\xfd\r\xc0\xae\xef\xa0\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xdf\xdf\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce\xfe\x14v\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\xf1?\x00\x00\x00\x00\xaf\x001\x00!\xc8\xfe\x03w\x01\x01Ms\x00\x04\xd7\xce'b'\xfe\x1cx\x01\x01!\x148\x04\x00r\xa6\x02\x18\xee\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xff\xff\x00\x00\x00\x00\xa6DD\xc0\xfe\x1cy\x01\x01 n8\x04\x00\xeb\x10\xf7=\x99\x85\\?{\x9b\xc8\xbfO\x83C\xbc\x9f\xed3;\x8a\x1e\x08\x00\x00\x00\x00?\x03/P'b"\xfe\x03\x81\x01\x01Ms\x00\x04\xfd\x90\xfe\x15\x82\x01\x01$\xd1E~\x10;\x06\x13\x06\x14\x06-\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\xca\xfe\x16\x83\x01\x01#\xe68\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00g\xa7\xfe\x1a\x84\x01\x01\x1b7\x93~\x10\x00\x00\x00\x00\xe6\xff\x0b\x00E\xfc\xfe\xff\xed\xff\t\x00\x00\xff\xf1\xff{\x01\x83\xca\xfe\x16\x85\x01\x01t\xfa8\x04\x00\xe4\xff\x1d\x00\\\xfc\x02\x00\xef\xff\xfd\xff\x01\xffT\xff\x11\x02#\x8b\xfe\x16\x86\x01\x01\x81\xfa8\x04\x00\xe2\xff\x17\x00T\xfc\xf1\xff\xfd\xff\xfa\xff\x83\x00>\x00~\x02\r\x9e\xfe\x0e\x87\x01\x01\x1d\xfa8\x04\x00O\x97iD\xa4p\x1f\xbea\x10\xa0C\xfe\x0e\x88\x01\x01\x89\xfa8\x04\x00\xf8\xd9iD\x85\xeb\t>\x97\x15$`\xfe*\x89\x01\x01\x96s\xe7f\xbc\xfcl\x01\x00a\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xd4y\xfe\x1f\x8a\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00'\x01G;\xfa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfc\x82\xfe\x06\x8b\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0A\xfe\x04\x8c\x01\x01\x98\x00\x00\x80\x8a\x1e{\xfe\x02\x8d\x01\x01*\x00\x00\xceY\xfe\x1e\x8e\x01\x01\x18\x80i~\x10\x00\x00\x00\x00~\xa6\x02\x18\xf5\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cuh\xfe\x1a\x8f\x01\x01>\xd5\xe9\xb1\xbe\x97'\x15\xc0\\\x7f\xaf\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x01\xe2\xfe\x08\x90\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00#\xcd\xfe\t\xf8\n\x00m\x03\x00\x00\x00\x00\xda\x00\x00\x00\xff\xd2"b"\xfe\x14\x91\x01\x01J\xcc\xccL=\xcc\xccL=\x85\xeb\xf1?\n\xd7#\xbd\xaf\x006\x00'O\xfe\x03\x92\x01\x01Ms\x00\x04UA\xfe\x1c\x93\x01\x01!\xf08\x04\x00t\xa6\x02\x18\xee\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x00\x00\xfe\xff\xff\xff\xa5D^j\xfe\x1c\x94\x01\x01 s9\x04\x00\xc1\x80\n>\xab\x85]?!\xe7\xc7\xbf\x9b\x05\x0e<\x8d\x16\xc0\xbc0\xe8|\x00\x00\x00\x00?\x03L\x1d\xfe\x16\x9f\x01\x01\xe1c\x10\x18?\xd6\xff9>\xf5\xe26<\\bF<\xb9\x12\xab?\x00\x1f;\x7f\xfe\x03\xa0\x01\x01Ms\x00\x04\xb2\xa7'b'\xfe\x1a\xa1\x01\x01\x1b.E\x82\x10\x00\x00\x00\x00\xdc\xff\x18\x00(\xfc\x10\x00\x04\x00\xf3\xff\x06\xff\xf2\xff}\x01KI\xfe\x16\xa2\x01\x01t\xec9\x04\x00\xe0\xff\x18\x00\x19\xfc\x0f\x00\x00\x00\xf4\xff\x04\xffU\xff\x11\x02{\xfc\xfe\x16\xa3\x01\x01\x81\xec9\x04\x00\xdc\xff\x19\x00:\xfc\t\x00\x0f\x00\xea\xff\x89\x00C\x00\x80\x02[\xd3\xfe\x0e\xa4\x01\x01\x1d\xec9\x04\x00\'\x94iD\x85\xebQ\xbea\x10,\xb3\xfe\x0e\xa5\x01\x01\x89\xec9\x04\x00"\xd9iD\xb8\x1e\xf9=\x99\x15\x147\xfe\x1f\xa6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00cG;J\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x0c7\xfe\x06\xa7\x01\x01}\xc5\x14\x00\x00\x03\x00\xfao\xfe\x04\xa8\x01\x01\x98\x00\x00\x80\x8a\xc2\xb3\xfe\x02\xa9\x01\x01*\x00\x00;U\xfe\x1e\xaa\x01\x01\x18\x90~\x81\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xf5\xe7\xb8\xfd\xf4j\n\x00F\x00\xff\xff\x06\x00\xecc\x03\x0c\x7fi\xfe\x1a\xab\x01\x01>=\xc4\x16\xbfe.)\xc0\x14\x8e\xce\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\tf\xfe\x08\xac\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x19\xfe\x15\xad\x01\x01$\xc7\x93\x82\x10*\x06\x1a\x06\x04\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\xa7\xfe\x16\xae\x01\x01#\x00:\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00,Q'b'\xfe\x14\xaf\x01\x01J\x8f\xc2u=\x8f\xc2u=\xe1z\xf4?\n\xd7#\xbd\xaf\x00.\x00\xfe\xdc\xfe\x03\xb0\x01\x01Ms\x00\x04\xca\xfc\xfe\x03\xb1\x01\x01/\xff\x00\x00\xc3b\xfe\x1c\xb2\x01\x01!\xba9\x04\x00u\xa6\x02\x18\xee\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x01\x00\xfb\xff\xf8\xff\xa2D\xe8\xc1\xfe\x1c\xb3\x01\x01 y:\x04\x00)y\x1c>\x00\x83\\?\xf0\x12\xca\xbf\xcb\xa3?<\x1e\x1eh\xbd<\xea\xab=\xa0p\xfe\x1c\xb4\x01\x01\x1e\xa1:\x04\x00\x96\xad\xf4\xbbY\x18\x00\xbdgJD@\xf9H|\xb9;\x14\x80;\x1f\x02\r<*\x02\xfe\x18\xb5\x01\x01\xb2\x17W\x9e\xbc\x9ca\xe3\xbco\xfdD@\xa4\x10*D\x80\xa6\x02\x18\xf5\xe7\xb8\xfd\x1fa'b'\xfe\x1c\xb6\x01\x01\xa3\xa5\xdd\xe99\xa4>\x90\xbaO\xb0\xb09\x00\x00\x00\x00\x00\x00\x00\x00\x96~\x81\x00\x00\x00\x00?\x03\x12\x99\xfe\x03\xbb\x01\x01Ms\x00\x04\xa6[\xfe\x1a\xbc\x01\x01\x1bW\xf0\x85\x10\x00\x00\x00\x00\xcf\xff\r\x00!\xfc\xd5\xff\xae\xff\x10\x00\x03\xff\xf1\xff}\x01\x99\xd3\xfe\x16\xbd\x01\x01t\xdd:\x04\x00\xd9\xff\x10\x00A\xfc\xdc\xff\xb6\xff\x04\x00\x04\xffW\xff\x14\x02Y\x0b\xfe\x16\xbe\x01\x01\x81\xdd:\x04\x00\xda\xff\x0f\x00\x16\xfc\xcf\xff\xd0\xff\xeb\xff\x98\x00C\x00q\x02\xce#\xfe\x0e\xbf\x01\x01\x1d\xdd:\x04\x00\xaa\x94iD\x8f\xc2I\xbea\x10\x9bn\xfe\x0e\xc0\x01\x01\x89\xdd:\x04\x00+\xd9iDp=\xfa=\x99\x15H?\xfe\x1f\xc1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x01\x9a;\xaa\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q2,\xfe\x06\xc2\x01\x01}\xc6\x14\x00\x00\x03\x00\xdf\xe3\xfe\x04\xc3\x01\x01\x98\x00\x00\x80\x8aU\x0b\xfe\x02\xc4\x01\x01*\x00\x00\xf1\xdf\xfe\x1e\xc5\x01\x01\x18\xb8\x8f\x84\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xf5\xe7\xb8\xfd\xeaj\n\x00F\x00\xff\xff\t\x00\xecc\x03\x0c\\i\xfe\x1a\xc6\x01\x01>d,\x84\xbf\xed\xf9\x8a\xc0G\xc5\x9a\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x14\xca\xfe\x08\xc7\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe1\xec\xfe\x15\xc8\x01\x01$"\x8d\x86\x10D\x065\x06.\x06.\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x82\xfe\x16\xc9\x01\x01#\x05;\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa9\xdb'b'\xfe\x03\xca\x01\x01Ms\x00\x04`R\xfe\x14\xcb\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=33\xf3?\xebQ\xb8\xbd\xaf\x003\x00tn'b"\xfe\x1c\xcc\x01\x01!K;\x04\x00w\xa6\x02\x18\xec\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x00\x00\xf9\xff\xf7\xff\xb0D\xc0g\xfe\x1c\xcd\x01\x01 ~;\x04\x00\xcc\xe8->N\xf6X?\xdao\xc9\xbfHo\x97\xba\x8a\xcc\x98\xbdF}\xb8=0K\xfe\x1c\xce\x01\x01\x1e\xa6;\x04\x00\\\x9e\x94\xbcg\xd8@\xbdppD@Q\xbb\xdd\xbb\xa6\xba\xa3=\xf1\x1c\xcf<\xab\xf9\xfe\x18\xcf\x01\x01\xb2\x12`\xf4\xbc\x99\x0c5\xbds'E@\xe1\x1a*D\x81\xa6\x02\x18\xf3\xe7\xb8\xfd\x85\x94\xfe\x1c\xd0\x01\x01\xa3\xf7\x9f\xec9\xa0\x9f\x91\xba\xdc\xd1\xb09\x00\x00\x00\x00\x00\x00\x00\x00H\xb5n<\xd4*\xbc;\x1a\xa4\xfe\x03\xd1\x01\x01\xa5\xc5\x14\x00\xf3O\xfe\x0c\xd2\x01\x01\x02\xb0\x10\xf1z\xb1N\x05\x00\xba;\x04\x00\xd5\xdd\xfe\x16\xd3\x01\x01\x88w\xa6\x02\x18\xec\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x95\x08\xfe\x16\xd4\x01\x01\xc1\x13\x1a\xad<\x00\x00\x00\x00?\x03\xdb\xfe\xfe\x03\xd5\x01\x01Ms\x00\x04\xaa\xb8\xfe\x1a\xd6\x01\x01\x1bR\x9f\x89\x10\x00\x00\x00\x00\xe1\xff\x15\x00\x1c\xfc\xb5\xff?\x00\x11\x00\x0b\xff\xef\xff\x81\x01\x84\x04\xfe\x16\xd7\x01\x01t\xce;\x04\x00\xf0\xff\x12\x00\x1e\xfc\xbe\xffO\x00\x08\x00\t\xffM\xff\x15\x02S\x9d\xfe\x16\xd8\x01\x01\x81\xce;\x04\x00\xe1\xff\x18\x00\r\xfc\x94\xff^\x00\x03\x00\x93\x00G\x00\x82\x02\xa5Z\xfe\x0e\xd9\x01\x01\x1d\xce;\x04\x00 \x96iDff2\xbeb\x10 \x8a\xfe\x0e\xda\x01\x01\x89\xce;\x04\x00\xc7\xd9iDG\xe1\x06>\x99\x15\xeb$\xfe\x1f\xdb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x9a;\xc3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q \x1b\xfe\x06\xdc\x01\x01}\xc8\x14\x00\x00\x03\x00f]\xfe\x04\xdd\x01\x01\x98\x00\x00\x80\x8a\x14/\xfe\x02\xde\x01\x01*\x00\x00o\x83\xfe\x1e\xdf\x01\x01\x18\xf8\x9c\x87\x10\x00\x00\x00\x00\x81\xa6\x02\x18\xf3\xe7\xb8\xfd\xccj\n\x00F\x00\xff\xff\x0c\x00\xecc\x03\x0c\xd8\x85\xfe\x1a\xe0\x01\x01>\\\n\xba\xbf\xbdL\x14\xc0\xf6\xa2\x8f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x96\x05\xfe\x08\xe1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xafD"b'\xfe\x15\xe2\x01\x01$7\x8b\x8a\x10_\x06\x12\x06#\x06k\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00=\xa8\xfe\x16\xe3\x01\x01#\x0b<\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd8\xe0'b'\xfe\x03\xe4\x01\x01Ms\x00\x04\x9d\xd4\xfe\x14\xe5\x01\x01J\xaeG\xe1=\xaeG\xe1=\xd7\xa3\xf0?\n\xd7#\xbd\xaf\x007\x00mE\xfe\x1c\xe6\x01\x01!\x01<\x04\x00w\xa6\x02\x18\xea\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfc\xff\xfa\xff\xff\xff\xc0DW\x96\xfe\x1c\xe7\x01\x01 \x83<\x04\x00\xfb\xba3>I\xcfT?8\n\xc7\xbf\xac\x12*\xbd\xb91\x8c\xbd#\xf35\x9a\x15#\x95\xfe\x1f\xef\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x9a;,\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q0\xd5\xfe\x06\xf0\x01\x01}\xc8\x14\x00\x00\x03\x00\x13]\xfe\x03\xf1\x01\x01Ms\x00\x04\x84\x18\xfe\x04\xf2\x01\x01\x98\x00\x00\x80\x8a\x05N\xfe\x02\xf3\x01\x01*\x00\x00\xa3\xce\xfe\x1e\xf4\x01\x01\x18\x10u\x8d\x10\x00\x00\x00\x00\x81\xa6\x02\x18\xf0\xe7\xb8\xfd|j\n\x00F\x00\xff\xff\x11\x00\xecc\x03\x0c\xfb\x18\xfe\x1a\xf5\x01\x01>[\xb6\xbf\xbf`\x13\xde\xbf\xccp\\\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xf5 \xfe\x08\xf6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00<\x06\xfe\x1c\xf7\x01\x01\xa3\x1a{\xef9\xcb\x1e\x93\xba\xde\xe9\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xcc\x98<\x05!\xa9;\xb1\xb3\xfe\x03\xf8\x01\x01\xa5\xc8\x14\x00\x8f\xde\xfe\x0c\xf9\x01\x01\x02\x88R\xf5z\xb1N\x05\x00\xd4<\x04\x00\xc2"\xfe\x16\xfa\x01\x01\x88w\xa6\x02\x18\xea\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x90\xb2\xfe\x16\xfb\x01\x01\xc1\xae\x8b\xc3<\xd0w4=x\x19X9@\xf4&>\x00\x00\x00\x00?\x03\xe7\x9d\xfe\t\xf9\n\x00m\x02\x00\x00\x00\x00\xd9\x00\x00\x00\xfe\x9d'b'\xfe\x15\xfc\x01\x01$\x93\x89\x8e\x10K\x06\xf9\x05\t\x06@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00t(\xfe\x16\xfd\x01\x01#\x10=\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xcd\x02\xfe\x03\xfe\x01\x01Ms\x00\x046\xa9\xfe\x14\xff\x01\x01J{\x14.>{\x14.>\xd7\xa3\xf0?\x8f\xc2\xf5<\xaf\x005\x00\xdd\xcd'b'\xfe\x12\x00\x01\x01\xfcr=\x04\x004\x00\x01\x00ARMMASK\x00Wr\xe6\xb2\xfe\t\x01\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xbd\xdb\xfe\x1c\x02\x01\x01!\xca<\x04\x00w\xa6\x02\x18\xe9\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfb\xff\xfa\xff\x04\x00\xbfD\xaf4\xfe\x1c\x03\x01\x01 \x89=\x04\x00\x99\xce->\xf9!Q?\xf1n\xc6\xbfXNu\xbd\x1dA\x8a\xbd\rL1\xbd\x92s\xfe\x1a\x04\x01\x01\x1bW\xfc\x90\x10\x00\x00\x00\x00\xef\xff\x0b\x00\r\xfc\xf6\xff@\x00\x12\x00\n\xff\xee\xff|\x01!\xb2\xfe\x16\x05\x01\x01t\xb1=\x04\x00\xfc\xff\x11\x00\x1f\xfc\x0c\x00:\x00\x00\x00\x04\xffH\xff\x10\x02Z\xa9\xfe\x16\x06\x01\x01\x81\xb1=\x04\x00\xe5\xff\x1c\x00\x11\xfc5\x00!\x00\xeb\xff\x96\x00I\x00{\x02G \xfe\x0e\x07\x01\x01\x1d\xb1=\x04\x00\xd4\x96iD\xb8\x1e\'\xbeb\x10\x83r\xfe\x0e\x08\x01\x01\x89\xb1=\x04\x00U\xdbiD\x8f\xc2\x1f>\x9b\x15<\xfb\xfe\x1f\t\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x14\x01\x9a;\xfd\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xebl\xfe\x06\n\x01\x01}\xc5\x14\x00\x00\x03\x00\x05\xa8\xfe\x04\x0b\x01\x01\x98\x00\x00\x80\x8a+V\xfe\x02\x0c\x01\x01*\x00\x00\x06@\xfe\x1e\r\x01\x01\x188\x86\x90\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xf0\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x10\x00\xecc\x03\x0cN\xa0\xfe\x1a\x0e\x01\x01>"\xb8\xd9\xbfx\x14\xab\xbf\xe1\xbeI\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x009\x9a\xfe\x08\x0f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00zd\xfe\x1c\x10\x01\x01\x1e\xc5=\x04\x00\x12\xee\x9c\xbc\xb3\xfa\xeb\xbc\x85\x96D@\x83\xfa\x91\xbc5Z\x13=l\xc9M;/\x03\xfe\x18\x11\x01\x01\xb2\xa3F\xf5\xbc\xa5L\xd0\xbcQ[E@{\x14*D\x80\xa6\x02\x18\xf0\xe7\xb8\xfd\xb4t\xfe\x03\x12\x01\x01Ms\x00\x04\xb7\x8a'b"\xfe\x1c\x13\x01\x01\xa3}\x0f\xf29%\x88\x94\xbaD\xe9\xb09\x00\x00\x00\x00\x00\x00\x00\x00N[\x8c<\xcb\x84Z;!\xb9\xfe\x03\x14\x01\x01\xa5\xc2\x14\x00\xa0!\xfe\x0c\x15\x01\x01\x020\x9c\xf9z\xb1N\x05\x00\xd9=\x04\x00\xc3\xe5\xfe\x16\x16\x01\x01\x88v\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdf\x9a\xfe\x16\x17\x01\x01\xc1\xa3y\xce<\xec\x9e(=\x8f\x02\x04<;\xab\x1f>\x00\x00\x00\x00?\x03\xb3\x1c\xfe\x16\x18\x01\x01\xe1\xda\xce\x17?\x99\x99\x19>\xf5\xe26<\\bF<\x1aH\xa2?\x00\x1f\xbe\x7f\xfe\x15\x19\x01\x01$\x0f\x83\x92\x10*\x06#\x06'\x06!\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xe1\xfe\x16\x1a\x01\x01#\x15>\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\xb4"b'\xfe\x03\x1b\x01\x01Ms\x00\x04\xb4&\xfe\x14\x1c\x01\x01J\n\xd7#>\n\xd7#>\xd7\xa3\xf0?\xcc\xccL=\xaf\x002\x00c^\xfe\x1c\x1d\x01\x01!\\>\x04\x00v\xa6\x02\x18\xe7\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xfc\xff\xf9\xff\x05\x00\xabD\xce~\xfe\x1c\x1e\x01\x01 \x8e>\x04\x00\xd5(">\xab%M?^\x05\xc7\xbf\x8bNC\xbdW\xb4\xa3\xbd#9N\xbd\xbf.\xfe\x03\x1f\x01\x01/\xff\x00\x00\xdc/'b'\xfe\x1a \x01\x01\x1b\x03\xac\x94\x10\x00\x00\x00\x00\xe1\xff\x1c\x00;\xfc\xfb\xff \x00\xf4\xff\x01\xff\xed\xffx\x01\xa7\xb8\xfe\x16!\x01\x01t\xa2>\x04\x00\xe1\xff\x1f\x00>\xfc\xe7\xff.\x00\xec\xff\xfe\xfeK\xff\r\x02f\x88\xfe\x16"\x01\x01\x81\xa2>\x04\x00\xdd\xff%\x002\xfc\xac\xffF\x00\xde\xff\x8c\x00U\x00o\x02Q\x90\xfe\x0e#\x01\x01\x1d\xa2>\x04\x00e\x95iD{\x14>\xbec\x10\x9cq\xfe\x0e$\x01\x01\x89\xa2>\x04\x00\x10\xd9iDG\xe1\xf6=\x9b\x15\xaa\xca\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x006\x00(;0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x13\x93\xfe\x06&\x01\x01}\xc8\x14\x00\x00\x03\x00?\x86\xfe\x04\'\x01\x01\x98\x00\x00\x80\x8a=\xe1\xfe\x02(\x01\x01*\x00\x00\xf3L\xfe\x1e)\x01\x01\x18`\x97\x93\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xee\xe7\xb8\xfdrj\n\x00F\x00\xff\xff\x10\x00\xecc\x03\x0cNI\xfe\x1a*\x01\x01>\x8f\xc2%\xc0333\xbf\x99\xed[\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\x9a]\xfe\x08+\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00n\xc7\xfe\x03,\x01\x01Ms\x00\x042W\xfe\x1c-\x01\x01\x1e\xcb>\x04\x00\xaee\xd2\xbcrN\x8f\xbc\xfaQD@t\xd7r\xbd\xd9\x06M<\\\xd9x\xbc\x99k\xfe\x18.\x01\x01\xb2\xeb\xe0\x14\xbdc\x95\\\xbcp\x18E@\xeb!*D\x7f\xa6\x02\x18\xee\xe7\xb8\xfd\xffe\xfe\x1c/\x01\x01\xa3\x9c\x90\xf49[\xf9\x95\xba\xf8\xe3\xb09\x00\x00\x00\x00\x00\x00\x00\x00\x04\x13\x82\x04\x00\x1aZ\xfe\x162\x01\x01\x88v\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcd\x0b\xfe\x163\x01\x01\xc1F\xee\x90\x00\x00\x00\x00?\x03\xb5\x11'b'\xfe\x154\x01\x01$\xed\x7f\x96\x103\x06-\x06\xe2\x05\x17\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16p\xfe\x165\x01\x01#\x1a?\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00w\xfa\xfe\x036\x01\x01Ms\x00\x04\x99*'b'\xfe\x147\x01\x01J\xebQ8>\xebQ8>\x85\xeb\xf1?\n\xd7\xa3\xbc\xaf\x001\x00\x08n\xfe\x1a8\x01\x01\x1b\x1cW\x98\x10\x00\x00\x00\x00\xe7\xff\x08\x00?\xfc\xc0\xff\x17\x00\x0e\x00\xfa\xfe\xe9\xffx\x01-\x13\xfe\x169\x01\x01t\x93?\x04\x00\xdf\xff\x0c\x00O\xfc\xca\xff\x16\x00\xfe\xff\xfd\xfeL\xff\x0c\x02\x0f\x01\xfe\x16:\x01\x01\x81\x93?\x04\x00\xe1\xff\x14\x00I\xfc\xf7\xff\xf2\xff\xf2\xfff\x00@\x00x\x02\x81G\xfe\x0e;\x01\x01\x1d\x93?\x04\x00p\x95iD)\\=\xbeb\x10\x085\xfe\x0e<\x01\x01\x89\x93?\x04\x00&\xdaiD\xcd\xcc\x0c>\x9c\x15\xb0b\xfe\x1f=\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01(;0\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00QF\xdf\xfe\x06>\x01\x01}\xc5\x14\x00\x00\x03\x00\x9fe\xfe\x04?\x01\x01\x98\x00\x00\x80\x8aca\xfe\x02@\x01\x01*\x00\x00\x9a6\xfe\x1eA\x01\x01\x18\xa0\xa4\x96\x10\x00\x00\x00\x00~\xa6\x02\x18\xeb\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\x12\x00\xecc\x03\x0c\x9f\xd5\xfe\x1aB\x01\x01>\xa3\\\x1e\xc0/\xc8x\xbf\x99\xb9~\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe5y\xfe\x08C\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf7<\xfe\x1cD\x01\x01!$?\x04\x00v\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x01\x00\xfa\xff\xfc\xff\x93D\xfc \xfe\x1cE\x01\x01 \xa7?\x04\x00c\x96!>\x80\xd0G?\x85\xdb\xc8\xbf\t U<\n\x8f}\xbd\xd8\x949=E\xb5\xfe\x03F\x01\x01Ms\x00\x04\xe0\xa2'b'\xfe\x1cG\x01\x01\x1e\xcf?\x04\x00\xdep(\xbd\x073\x1b\xbcS\x1cD@9\x8e1\xbd\x12\x80\x12\xbd\x19\xcb`\xbaP\xd8\xfe\x18H\x01\x01\xb2\xdbgU\xbd\xea\xce\x95\xbb\xb5\xe9D@\xc2\x15*D~\xa6\x02\x18\xeb\xe7\xb8\xfd\xe5m\xfe\x1cI\x01\x01\xa3\n\x0f\xf79^o\x97\xba\x90\xe8\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x98\x8a<\xe6X\x1a<)\xb6\xfe\x03J\x01\x01\xa5\xc8\x14\x00\x8a\xf3\xfe\x0cK\x01\x01\x02h9\x01{\xb1N\x05\x00\xe3?\x04\x00\x15\xc2\xfe\x16L\x01\x01\x88v\xa6\x02\x18\xe4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa6d\xfe\x16M\x01\x01\xc1\xf0\x9e\xc3<\xed\x95\x12=r\x1e\x8a:\x8f\xd5\x10>\x00\x00\x00\x00?\x03\x0eZ\xfe\x15N\x01\x01$/{\x9a\x10f\x06A\x06\x16\x06E\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x0e\xfe\x16O\x01\x01#\x1f@\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x008*'b"\xfe\x03P\x01\x01Ms\x00\x04)\xe4\xfe\x14Q\x01\x01J\xcc\xccL>\xcc\xccL>\xd7\xa3\xf0?\n\xd7#\xbd\xaf\x004\x00,y\xfe\x1aR\x01\x01\x1b6\x04\x9c\x10\x00\x00\x00\x00\xeb\xff\x0e\x00\xf2\xfb\xd3\xff\xc7\xff\n\x00\xfd\xfe\xe4\xffs\x01]\xb7\xfe\x16S\x01\x01t\x84@\x04\x00\xeb\xff\x18\x00\xe6\xfb\xd8\xff\xd5\xff\xf3\xff\xf9\xfe7\xff\x03\x02P:\xfe\x16T\x01\x01\x81\x84@\x04\x00\xe2\xff\x1f\x00\xea\xfb\xc2\xff\xf2\xff\xe7\xffz\x00(\x00{\x02\x06\xab\xfe\x0eU\x01\x01\x1d\x84@\x04\x005\x95iD=\nA\xbeb\x10@'\xfe\x0eV\x01\x01\x89\x84@\x04\x00X\xdaiD\x85\xeb\x0f>\x9c\x15X\x81\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x05\x01(;\xa8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xb1\x16\xfe\x06X\x01\x01}\x95\x14\x00\x00\x03\x00\xa8\xcd\xfe\x04Y\x01\x01\x98\x00\x00\x80\x8a&\xd4\xfe\x02Z\x01\x01*\x00\x00\x04j"b'\xfe\x1e[\x01\x01\x18\xc8\xb5\x99\x10\x00\x00\x00\x00}\xa6\x02\x18\xe8\xe7\xb8\xfd^j\n\x00F\x00\xff\xff\x13\x00\xecc\x03\x0cu\x13\xfe\x1a\\\x01\x01>\x1d\xbf\x0b\xc0\xf3\xa3\xce\xbf\x00\xe0R\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x94\xe5\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V\xfe\x1c^\x01\x01!\xed?\x04\x00w\xa6\x02\x18\xe3\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\x06\x00\x00\x00\xfe\xff\x90Dg^\xfe\x1c_\x01\x01 \xac@\x04\x00\xea\xe0->\xfd\xe3C?m\xce\xc7\xbf\xe8z|=f\n\xc0\xbb\xb3+\xd8<\x98\xe7\xfe\x03`\x01\x01Ms\x00\x04\xa1\t\xfe\x1ca\x01\x01\x1e\xd4@\x04\x00|\xc3P\xbd=\xf8\xa8\xbc~ D@f\xea\x03=\xf2\x15w\xbc\xd1\xaaW=\x08&\xfe\x18b\x01\x01\xb2C&\x81\xbd\x1f\t\x83\xbc\x05\xf1D@p\x1d*D}\xa6\x02\x18\xe6\xe7\xb8\xfd\x9bb\xfe\t\xfa\n\x00m\x02\x00\x00\x00\x00\xda\x00\x00\x00\x0c\x03\xfe\x1cc\x01\x01\xa3H\x9f\xf998\xec\x98\xba\xab\xee\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x80\x84\x00\x00\x00\x00?\x03P\xf3'b'\xfe\x15h\x01\x01$\xc6w\x9e\x10\xdf\x05=\x06\x07\x06\xd0\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03G\xfe\x16i\x01\x01#$A\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x11\xef\xfe\x03j\x01\x01Ms\x00\x04r/'b'\xfe\x12k\x01\x01\xfc^A\x04\x004\x00\x01\x00ARMMASK\x00Wr\xa5\\\xfe\tl\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03]_\xfe\x1am\x01\x01\x1b\xa5\xb2\x9f\x10\x00\x00\x00\x00\xe4\xff\x00\x00K\xfc4\x00\xe1\xff\x0f\x00\xfc\xfe\xe2\xffx\x01\x94b\xfe\x16n\x01\x01tuA\x04\x00\xe5\xff\x06\x00S\xfc#\x00\xf8\xff\x0e\x00\xff\xfeF\xff\r\x02\xc5[\xfe\x16o\x01\x01\x81uA\x04\x00\xdd\xff\x0f\x00I\xfcB\x00\xfc\xff\x08\x00\x93\x003\x00w\x02\x15v\xfe\x0ep\x01\x01\x1duA\x04\x00C\x94iD\xf5(P\xbec\x10\xa4\x1c\xfe\x0eq\x01\x01\x89uA\x04\x00\x0b\xd8iDp=\xd6=\x9d\x15\x88\x15\xfe\x1fr\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x003\x01j;\xa1\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xf4\x02\xfe\x06s\x01\x01}\xc5\x14\x00\x00\x03\x00\xf4\x1f\xfe\x04t\x01\x01\x98\x00\x00\x80\x8a\xcd.\xfe\x02u\x01\x01*\x00\x00s\x10\xfe\x1ev\x01\x01\x18\x18\xd8\x9f\x10\x00\x00\x00\x00\x7f\xa6\x02\x18\xe4\xe7\xb8\xfd,j\n\x00F\x00\xff\xff\x08\x00\xecc\x03\x0c\xdb\xb6\xfe\x1aw\x01\x01>G\xbf\xb0\xbf\x00\x82\x07\xc0\x8f^\x7f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00E\xbb\xfe\x08x\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x18\xf0\xfe\x14y\x01\x01J\n\xd7\xa3=\n\xd7\xa3=33\xf3?\n\xd7\xa3\xbd\xaf\x001\x00\x14\x7f\xfe\x03z\x01\x01Ms\x00\x04\nt\xfe\x1c{\x01\x01!\x7fA\x04\x00y\xa6\x02\x18\xe3\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\t\x00\x05\x00\xf6\xff\x9fD\x97\xda\xfe\x1c|\x01\x01 \xb1A\x04\x00\xda\xbaC>;\xf4D?z\x9d\xc9\xbf\xc4\xc2\xc3=\xfd\xead=T\xbe\xd2=\xb5\xaf'b'\xfe\x1c}\x01\x01\x1e\xd9A\x04\x00\x9b\xe4\x19\xbd\x9f\xf7\xdb\xbc\n=D@\x8ap\x9c=\xed\x81s\xbdv\x07\x93<\x92(\xfe\x18~\x01\x01\xb2\x82+L\xbda&\xb1\xbc\x01\x15E@\xf6(*D\x7f\xa6\x02\x18\xe4\xe7\xb8\xfdfI\xfe\x1c\x7f\x01\x01\xa3b3\xfc9\xbcn\x9a\xba\x08\xf1\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xed\xf1\x8a<\x83\xbe\xb7;b\xc2\xfe\x03\x80\x01\x01\xa5\xc5\x14\x00\xc5\xf0\xfe\x0c\x81\x01\x01\x02\xa8(\t{\xb1N\x05\x00\xedA\x04\x00\x94\x1a\xfe\x16\x82\x01\x01\x88y\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x15}\xfe\x12\x83\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\x04(\xfe\x16\x84\x01\x01\xc1\x1e\xf9\xd8<\xa6\x11\r=\x94ZX<\xe6W\n>\x00\x00\x00\x00?\x03\xf3\x9d\xfe\x16\x85\x01\x01\xe1c\x10\x18?\n\xd7#>\xf5\xe26<\\bF\xb9\x85Q\xbf+0)\xc0\xb8\xf0\x81\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xc2\xf9\xfe\x08\x94\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x97\xdb'b'\xfe\x14\x95\x01\x01J\n\xd7#<\n\xd7#<33\xf3?\xebQ\xb8\xbd\xaf\x002\x00<\xda\xfe\x03\x96\x01\x01Ms\x00\x04\x8bW\xfe\x1c\x97\x01\x01!GB\x04\x00{\xa6\x02\x18\xe5\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\n\x00\t\x00\xf7\xff\xacD\xd8\x0f\xfe\x1c\x98\x01\x01 \xb6B\x04\x00\x19Nc>\xd7\xb7H?\x02\xc8\xc9\xbf\x8c\xad\xde=\x87\xf3\xcb=9c\xbd=\xef3\xfe\x03\x99\x01\x01/\xff\x00\x00\x8f\xf9\xfe\x1c\x9a\x01\x01\x1e\xdeB\x04\x00\xa4\x80\xc6\xbcw\x91\x13\xbd\xa5dD@$\xc0\x8d=\x1e\xa3Y;\x05*\xac\xbc-;\xfe\x18\x9b\x01\x01\xb2EL\x15\xbd\xc6D\x01\xbd)DE@\\\x1f*D\x80\xa6\x02\x18\xe5\xe7\xb8\xfd\xa8\xc9'b'\xfe\x1c\x9c\x01\x01\xa3;\xcb\xfe9q\xf4\x9b\xba\xed\xeb\xb09\x00\x00\x00\x00\x00\x00\x00\x00-\xcf\x83<1\xad\x8a;\x90-\xfe\x03\x9d\x01\x01\xa5\xc5\x14\x00`\x11\xfe\x0c\x9e\x01\x01\x028v\r{\xb1N\x05\x00\xf3B\x04\x00\xab\x9f\xfe\x16\x9f\x01\x01\x88|\xa6\x02\x18\xe5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x91-\xfe\x16\xa0\x01\x01\xc1i\x96\xbf<\x15\xdf\x06=O=\xa5<\x17"\x1c>\x00\x00\x00\x00?\x03\xc8\xfb\xfe\x03\xa1\x01\x01Ms\x00\x04\r&\xfe\x15\xa2\x01\x01$Nq\xa6\x10\xfc\x05B\x06\x12\x06N\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00%\t\xfe\x16\xa3\x01\x01#/C\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf2:'b"\xfe\x1a\xa4\x01\x01\x1b\x8a\x10\xa7\x10\x00\x00\x00\x00\xd7\xff\x14\x00\x13\xfc\x0b\x00\xe4\xfe\x13\x00\x0b\xff\xea\xff|\x01\x0bb\xfe\x16\xa5\x01\x01tXC\x04\x00\xd3\xff$\x00 \xfc\x14\x00\xf8\xfe\xf8\xff\x03\xffC\xff\n\x02\xf3\x05\xfe\x16\xa6\x01\x01\x81XC\x04\x00\xd5\xff\x1f\x00\x0c\xfc\x11\x00\xcf\xfe\xff\xff\xa1\x00)\x00\x8c\x022{\xfe\x0e\xa7\x01\x01\x1dXC\x04\x00T\x95iD\xb8\x1e?\xbed\x10n\x8d\xfe\x0e\xa8\x01\x01\x89XC\x04\x00\xb0\xd9iD\xa4p\x05>\x9e\x15t*\xfe*\xa9\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00d\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xae\xfe\xfe\x1f\xaa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00&\x01j;m\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ql\xf2\xfe\x06\xab\x01\x01}\xc5\x14\x00\x00\x03\x00\x05\x8d\xfe\x04\xac\x01\x01\x98\x00\x00\x80\x8a'\x8c\xfe\x02\xad\x01\x01*\x00\x00M:\xfe\x1e\xae\x01\x01\x18h\xfa\xa5\x10\x00\x00\x00\x00\x82\xa6\x02\x18\xe4\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0c\x9fe\xfe\x1a\xaf\x01\x01>\xcf\xe5G\xbd\x02\xaf\x9f\xc0\xae=\xa0\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe5I\xfe\x08\xb0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x83x\xfe\x14\xb1\x01\x01J\xcc\xccL=\xcc\xccL=33\xf3?\xebQ\xb8\xbd\xaf\x006\x00\xb8\xb2\xfe\x03\xb2\x01\x01Ms\x00\x04\xa5\xf7"b'\xfe\x1c\xb3\x01\x01!\x11C\x04\x00~\xa6\x02\x18\xe7\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\x07\x00\t\x00\xf8\xff\xbaDz\x91\xfe\x1c\xb4\x01\x01 \xbcC\x04\x00\xe6\n\x82>>VM?LX\xc9\xbf\x1c\x84\x9f=\x19\xb0\xc0=]\x83\xa9=\x83\xa4\xfe\x1c\xb5\x01\x01\x1e\xe4C\x04\x00\xb4\xcf<\xbc\xa5\x81\x95\xbd\xe6\x8aD@\xdd\xff\xc7=D\xbf\x84\xbc9\x82\xb6\xbb2\xdb\xfe\x18\xb6\x01\x01\xb2\x13b\xc6\xbc]\xbb\x8c\xbd\xcdoE@G!*D\x85\xa6\x02\x18\xe5\xe7\xb8\xfd\xb8\xf4\xfe\x1c\xb7\x01\x01\xa3\xdf\xb9\x00:\x83|\x9d\xba\x89\xce\xb09\x00\x00\x00\x00\x00\x00\x00\x00\xc3.|\x00\x00\x00\x00?\x03\xecb'b"\xfe\x03\xbc\x01\x01Ms\x00\x04\xa8\xc7\xfe\x15\xbd\x01\x01$\x11p\xaa\x10-\x06'\x06\x06\x067\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00'(\xfe\x16\xbe\x01\x01#5D\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0bH\xfe\x1a\xbf\x01\x01\x1b\xf6\xbd\xaa\x10\x00\x00\x00\x00\xdd\xff\r\x00\x10\xfc(\x00m\x00\xc5\xff\x15\xff\xee\xff\x84\x01\xdbD\xfe\x16\xc0\x01\x01tID\x04\x00\xe2\xff\x0e\x00\r\xfc+\x00b\x00\xe9\xff\x11\xffI\xff\x15\x026d\xfe\x16\xc1\x01\x01\x81ID\x04\x00\xda\xff%\x00\x03\xfc\x1c\x00\x88\x00\xd0\xff\xb8\x00'\x00\x85\x02 \x80\xfe\x0e\xc2\x01\x01\x1dID\x04\x00\x06\x95iD\x00\x00D\xbec\x10\x9e\xe5\xfe\x0e\xc3\x01\x01\x89ID\x04\x00\xdb\xd8iD\xf5(\xf0=\x9e\x15q\xe6\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa0\x00j;\xcb\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xfeW\xfe\x06\xc5\x01\x01}\xc5\x14\x00\x00\x03\x00W\xeb\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy\xfe\x02\xc7\x01\x01*\x00\x00\x9fw\xfe\x1e\xc8\x01\x01\x18\x90\x0b\xa9\x10\x00\x00\x00\x00\x85\xa6\x02\x18\xe5\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\t\x00\xecc\x03\x0cH\x8b\xfe\x1a\xc9\x01\x01>>-\x9c\xbd\xe5\x06S\xc0\xe1$\x9c\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe2\xf3\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2"b'\xfe\x14\xcb\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=33\xf3?\n\xd7\xa3\xbc\xaf\x001\x00\xdf\x85\xfe\x03\xcc\x01\x01Ms\x00\x04\xd1O\xfe\x1c\xcd\x01\x01!\xa4D\x04\x00\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x00\x00\x06\x00\xfc\xff\xa6D\xd9\xf8\xfe\x1c\xce\x01\x01 \xc2D\x04\x00Y\x1f\x8b>\xf2pP?\x16\x8a\xca\xbf<\xf6?;\xb6\xcf\x81=\xbcJ)=(6\xfe\t\xfb\n\x00mF\x00\x00\x00\x00\xdb\x00\x00\x00E\x97'b'\xfe\x1c\xcf\x01\x01\x1e\xeaD\x04\x00\xd0\x00*;\x00\xeb`\xbd\xf6MD@\r!\xce=!?\x15=*\xb6\xcd\xbcgC\xfe\x18\xd0\x01\x01\xb2\xd0\xf0%\xbc\xd5\xa6O\xbd_4E@3\x13*D\x87\xa6\x02\x18\xe6\xe7\xb8\xfd\x8d\xe3\xfe\x1c\xd1\x01\x01\xa3\xba\x13\x02:\xc5\xff\x9e\xba\x00\x87\xb09\x00\x00\x00\x00\x00\x00\x00\x008\xecU<\xf54\xcf;\x96\xcc\xfe\x03\xd2\x01\x01\xa5\xc2\x14\x00\x02\x92\xfe\x0c\xd3\x01\x01\x02p\x13\x15{\xb1N\x05\x00\xfeD\x04\x00\xaf$\xfe\x16\xd4\x01\x01\x88\x80\xa6\x02\x18\xe9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb3\x00\xfe\x16\xd5\x01\x01\xc1\xa8\x9d\x80<\xc7\xc4\x12=eBg;Q\xde*>\x00\x00\x00\x00?\x03^7\xfe\x03\xd6\x01\x01Ms\x00\x04z2\xfe\x1a\xd7\x01\x01\x1b\xafl\xae\x10\x00\x00\x00\x00\xe2\xff\r\x00\x1e\xfc\xdb\xff\x1e\x00\xfe\xff\x12\xff\xf4\xff\x81\x01\x11\x08\xfe\x16\xd8\x01\x01t:E\x04\x00\xe3\xff\x15\x00\x1e\xfc\xfa\xff\x13\x00\xf4\xff\r\xffX\xff\x1b\x02\xc4c\xfe\x16\xd9\x01\x01\x81:E\x04\x00\xda\xff"\x00\x12\xfc\xcc\xff-\x00\xf2\xff\xa4\x00C\x00\x82\x02\xf5\x08\xfe\x0e\xda\x01\x01\x1d:E\x04\x00\xf0\x96iD)\\%\xbed\x10\x92\xc9\xfe\x0e\xdb\x01\x01\x89:E\x04\x00R\xd9iD=\n\xff=\x9f\x15\x89\x87\xfe\x1f\xdc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x018;\xb7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x16F\xfe\x06\xdd\x01\x01}\xc2\x14\x00\x00\x03\x00\xa0\xe1\xfe\x04\xde\x01\x01\x98\x00\x00\x80\x8a\x13\xf9\xfe\x02\xdf\x01\x01*\x00\x00\xba\x1c\xfe\x1e\xe0\x01\x01\x18\xa0 \xac\x10\x00\x00\x00\x00\x87\xa6\x02\x18\xe6\xe7\xb8\xfd\xaai\n\x00F\x00\xff\xff\x07\x00\xecc\x03\x0c\x0c*\xfe\x1a\xe1\x01\x01>\x0cu\xd0\xbe\xa0\x19,\xc0\x1f\xdb\x91\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00K\x18\xfe\x08\xe2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00XJ'b'\xfe\x12\xe3\x01\x01\xfcLE\x04\x004\x00\x01\x00ARMMASK\x00Wr*K\xfe\t\xe4\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe06\xfe\x15\xe5\x01\x01$\xc9\xc0\xae\x10n\x06)\x06#\x06T\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12t\xfe\x16\xe6\x01\x01#PE\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x08:\xfe\x03\xe7\x01\x01Ms\x00\x04M^\xfe\x14\xe8\x01\x01J\n\xd7#=\n\xd7#=33\xf3?\x00\x00\x00\x00\xaf\x003\x00\xc3T'b"\xfe\x1c\xe9\x01\x01!mE\x04\x00\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\xfc\xff\x00\x00\x01\x00\xa7D\xc98\xfe\x1c\xea\x01\x01 \xc8E\x04\x00e\x86\x8d>\xbb\x92P?r\xcf\xc9\xbf,.*\xbd`\xf0\x01<\xbbNc\xbc\xf3\xa7\xfe\x1c\xeb\x01\x01\x1e\xf0E\x04\x00d\x17'\xbbnX;\xbd\x19TD@\xca\xc3\xb4\xbd\xea\x08T=$1\x8e<\xf8D\xfe\x18\xec\x01\x01\xb2C\x98b\xbc\xaf\x8e*\xbd\xd6;E@\x99)*D\x87\xa6\x02\x18\xe6\xe7\xb8\xfd)W\xfe\x1c\xed\x01\x01\xa3um\x03:\x92\x80\xa0\xba\x00.\xb09\x00\x00\x00\x00\x00\x00\x00\x00.L^<'U\x99;\x895\xfe\x03\xee\x01\x01\xa5\xc8\x14\x00F\x98\xfe\x0c\xef\x01\x01\x02\x10\x0b\x19{\xb1N\x05\x00\x04F\x04\x00\x8a<\xfe\x16\xf0\x01\x01\x88\x80\xa6\x02\x18\xe8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00a\xcb\xfe\x16\xf1\x01\x01\xc1\xf0\xcb\x85\x00\x00\x00\x00?\x03!\xb0\xfe\x16\xf2\x01\x01\xe1\xfe\xd4\x18?)\x91D>\xf5\xe26<\\bF<|#\x9d?\x00\x1f\xd4\xc8\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13"b'\xfe\x1a\xf4\x01\x01\x1b\xc7\x1e\xb2\x10\x00\x00\x00\x00\xdf\xff\r\x00P\xfc\xdf\xff\x14\x00\x11\x00\n\xff\xf4\xff\x81\x01Z/\xfe\x16\xf5\x01\x01t,F\x04\x00\xda\xff\x16\x00W\xfc\xd6\xff%\x00\r\x00\t\xff_\xff\x1a\x02\x0e\xf0\xfe\x16\xf6\x01\x01\x81,F\x04\x00\xdb\xff\x1e\x00K\xfc\xc6\xff+\x00\x05\x00\x89\x00b\x00c\x02l\xda\xfe\x0e\xf7\x01\x01\x1d,F\x04\x00\xc2\x96iDp=(\xbed\x10\x01(\xfe\x0e\xf8\x01\x01\x89,F\x04\x00G\xd9iD\x8f\xc2\xfd=\x9f\x15\xa8v\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x96\x008;\xa4\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x13\x8a\xfe\x06\xfa\x01\x01}\xc8\x14\x00\x00\x03\x00\x9bJ\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|\xfe\x02\xfc\x01\x01*\x00\x00W\xd7\xfe\x1e\xfd\x01\x01\x18\xc81\xaf\x10\x00\x00\x00\x00\x86\xa6\x02\x18\xe6\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x04\x00\xecc\x03\x0cW\xf1\xfe\x1a\xfe\x01\x01>\xba\x0c\x8b\xbf\x03\xf3\x0b\xc0G\x05\x9e\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00,\xc0\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\xfe\x15\x00\x01\x01$\xb2\xb9\xb2\x10,\x06\xfe\x05\xff\x05@\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x88\xfe\x16\x01\x01\x01#TF\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00G\x05'b"\xfe\x03\x02\x01\x01Ms\x00\x04\xcf\xd1\xfe\x14\x03\x01\x01J\n\xd7#=\n\xd7#=33\xf3?\n\xd7#\xbd\xaf\x005\x00I\xa8\xfe\x1c\x04\x01\x01!JF\x04\x00\x80\xa6\x02\x18\xe7\xe7\xb8\xfd\xfcb\n\x00l\x07\x00\x00\xfb\xff\xfb\xff\xfd\xff\xc4D\xce\xf3\xfe\x1c\x05\x01\x01 \xccF\x04\x00\xb9'\x89>\x8eCM?\x8b6\xca\xbf\x80,d\xbd\x85IN\xbdt@\t=\xf0\xbc"b"\xfe\x03\x06\x01\x01/\xff\x00\x00\xa7\xd8\xfe\x1c\x07\x01\x01\x1e\xf5F\x04\x00\xa2\xd0\xb0\xbc\xf3\x8a$\xbd\x8b\xccD@}6^\xbd\xe0\x165\xbd\xba@a=\x9b`\xfe\x18\x08\x01\x01\xb28\xa4\x08\xbd!\xda\x0c\xbd{\xafE@\x8f\x12*D\x86\xa6\x02\x18\xe6\xe7\xb8\xfd\xba\xba\xfe\x1c\t\x01\x01\xa3M\xc2\x04:\xb6\x01\xa2\xbaj\xd5\xaf9\x00\x00\x00\x00\x00\x00\x00\x00L\x1a\xa5<\x0c\xb6\xe9;\xec\xea\xfe\x03\n\x01\x01\xa5\xc5\x14\x00\xf4\x1d\xfe\x0c\x0b\x01\x01\x02\xd0P\x1d{\xb1N\x05\x00\tG\x04\x00+]\xfe\x16\x0c\x01\x01\x88\x7f\xa6\x02\x18\xe6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb4\x9e\xfe\x16\r\x01\x01\xc1\xde\x98\xcf<\x8d\x89\x9c<\xbb\x9b\x8b;|M'>\x00\x00\x00\x00?\x03\x8e=\xfe\x03\x0e\x01\x01Ms\x00\x04\xad\xea\xfe\x1a\x0f\x01\x01\x1b\x8c\xcb\xb5\x10\x00\x00\x00\x00\xe4\xff \x002\xfc\xe3\xff\xce\xff\x1a\x00\n\xff\xf0\xff|\x01w\x0f\xfe\x16\x10\x01\x01t\x1dG\x04\x00\xe5\xff#\x007\xfc\xde\xff\xcc\xff:\x00\x03\xffC\xff\x0c\x02yc\xfe\x16\x11\x01\x01\x81\x1dG\x04\x00\xe3\xff\x1b\x00\x1d\xfc\x18\x00\xbd\xff'\x00\xa0\x00)\x00\x91\x02\\\xc5\xfe\x0e\x12\x01\x01\x1d\x1dG\x04\x00\x0b\x97iD\x14\xae#\xbed\x10\x9d\x9a\xfe\x0e\x13\x01\x01\x89\x1dG\x04\x00S\xd9iD33\xff=\x9f\x15\x12L\xfe\x1f\x14\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e8;+\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q0\xc9\xfe\x06\x15\x01\x01}\xcb\x14\x00\x00\x03\x00-C\xfe\x04\x16\x01\x01\x98\x00\x00\x80\x8am\xa4\xfe\x02\x17\x01\x01*\x00\x00M\x83\xfe\x1e\x18\x01\x01\x18\x18T\xb5\x10\x00\x00\x00\x00\x84\xa6\x02\x18\xe5\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x0e\x00\xecc\x03\x0c\xcd\xba\xfe\x1a\x19\x01\x01> \x90\x04\xc0\x98y\xdd\xbfp\xd5\x89\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xc3[\xfe\x08\x1a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb3-"b'\xfe\x15\x1b\x01\x01$O\xb7\xb6\x10,\x06\xc9\x05,\x06{\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x07\xfe\x16\x1c\x01\x01#YG\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x17\xe1\xfe\x03\x1d\x01\x01Ms\x00\x04\x05;'b'\xfe\x14\x1e\x01\x01J\x99\x99\x19>\x99\x99\x19>\x85\xeb\xf1?\n\xd7\xa3\xbc\xb0\x008\x00\x17\x1d\xfe\x1c\x1f\x01\x01!\xc7G\x04\x00~\xa6\x02\x18\xe4\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf7\xff\xf8\xff\x00\x00\x15EN\x19\xfe\x1c \x01\x01 \xd2G\x04\x00M\tz>\xca\xe2F?\x97\xd0\xc7\xbf\xe0\n\xc9\xbdR\xb5\xab\xbd4\x8c\x11\xbb\xd9\xc7\xfe\x1c!\x01\x01\x1e\xf9G\x04\x00\xc2hZ\xbc\xbc\x9c"\xbdY\x90E@\xc0ga=g\x80B=z\x18\xac\xbc\xbcC\xfe\x18"\x01\x01\xb2u\x83\xcf\xbc\xf4\xac\x0f\xbd}\x84F@\x8f\x12*D\x82\xa6\x02\x18\xe3\xe7\xb8\xfd9\x9c'b'\xfe\x1a#\x01\x01\x1b\xdex\xb9\x10\x00\x00\x00\x00\xdd\xff\x1e\x00\xfa\xfb\x12\x00#\x00\xf8\xff\x02\xff\xf1\xff\x83\x010\x8f\xfe\x16$\x01\x01t\x0eH\x04\x00\xdf\xff\x1f\x00\x08\xfc\x17\x00#\x00\n\x00\x02\xffJ\xff\r\x02\'\x05\xfe\x16%\x01\x01\x81\x0eH\x04\x00\xe2\xff$\x00\x08\xfc\x18\x00\x12\x00\x01\x00\x8e\x002\x00z\x02Qj\xfe\x0e&\x01\x01\x1d\x0eH\x04\x00\x81\x96iD\xebQ,\xbee\x10\xe5L\xfe\x0e\'\x01\x01\x89\x0eH\x04\x00O\xdbiD)\\\x1f>\xa1\x15\xbd\xc5\xfe\x1f(\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\x12;H\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q/\x8a\xfe\x06)\x01\x01}\xc8\x14\x00\x00\x03\x00s\x9a\xfe\x03*\x01\x01Ms\x00\x04\x83J\xfe\x04+\x01\x01\x98\x00\x00\x80\x8a\x12\xa1\xfe\x02,\x01\x01*\x00\x00\x85#\xfe\x1e-\x01\x01\x18Xa\xb8\x10\x00\x00\x00\x00\x82\xa6\x02\x18\xe3\xe7\xb8\xfd\x82i\n\x00F\x00\xff\xff\x0e\x00\xecc\x03\x0c.\xf1\xfe\x1a.\x01\x01>v\xc3(\xc0!\xc8v\xbf\n\xffQ\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00?\x1f\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1\xfe\x1c0\x01\x01\xa3\xd85\x06:\x97\xaa\xa3\xba*o\xaf9\x00\x00\x00\x00\x00\x00\x00\x00\xc8^\x8a<\xb2\xd5\x12<\xd6\xd2\xfe\x031\x01\x01\xa5\xc2\x14\x001\x00\xfe\x0c2\x01\x01\x02\x90\x96!{\xb1N\x05\x00"H\x04\x00\xf7\xad\xfe\x163\x01\x01\x88|\xa6\x02\x18\xe3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00E\xe2\xfe\x164\x01\x01\xc1\x1dp\x98<\xb1\x02\x87\x00\x00\x00\x00?\x03\x1b\x8f\xfe\x155\x01\x01$:\xb0\xba\x10"\x06\x8c\x05\r\x06t\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15b\xfe\x166\x01\x01#^H\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1e_'b'\xfe\x037\x01\x01Ms\x00\x04&\xab\xfe\t\xfc\n\x00m\t\x00\x00\x00\x00\xdb\x00\x00\x00e\x1b\xfe\x148\x01\x01J{\x14.>{\x14.>\x85\xeb\xf1?\x00\x00\x00\x00\xb0\x004\x00<3'b'\xfe\x1c9\x01\x01!\x90H\x04\x00z\xa6\x02\x18\xe0\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf2\xff\xf2\xff\xfe\xff\x0fE\xf6\xdf\xfe\x1c:\x01\x01 \xd7H\x04\x00\xc1\x0fR>\xa0\xe9\x01\x01\x1d\xfeH\x04\x00\x9d\x96iD\\\x8f*\xbee\x10\x16\x82\xfe\x0e?\x01\x01\x89\xfeH\x04\x00\xb2\xdaiD\x1f\x85\x15>\xa1\x15E\xbd\xfe\x1f@\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1c\x01\x12;\xd8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q&\x9f\xfe\x06A\x01\x01}\xc5\x14\x00\x00\x03\x00\x19\'\xfe\x04B\x01\x01\x98\x00\x00\x80\x8a\x7f\x82\xfe\x02C\x01\x01*\x00\x00\xf4\x9e\xfe\x1eD\x01\x01\x18\x80r\xbb\x10\x00\x00\x00\x00\x80\xa6\x02\x18\xe0\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x11\x00\xecc\x03\x0c{\xe1\xfe\x1aE\x01\x01>\xdb\'g\xc0V\xb4\x83\xbe\x14&E\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00*\x05\xfe\x08F\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xee/\xfe\x1cG\x01\x01\x1e\x13I\x04\x00`d\n\xbd\xdd\n\xfe\xbc\x82LE@3O\xf0\xbd\xf69w="\xfdR\xbd\x8d"\xfe\x18H\x01\x01\xb2\xf4&4\xbd\x037\xca\xbc\xa1MF@f\x16*D\x80\xa6\x02\x18\xe0\xe7\xb8\xfd\xf8\xcc\xfe\x03I\x01\x01Ms\x00\x04R\x13\xfe\x1cJ\x01\x01\xa3\xe6\x8b\x07:\x9e<\xa5\xba\x04\xfe\xae9\x00\x00\x00\x00\x00\x00\x00\x00\x00Kp<\xe9\x9b\x06<\x8d\xb3\xfe\x03K\x01\x01\xa5\xc2\x14\x00\x9b\xae\xfe\x0cL\x01\x01\x02\x18\x92%{\xb1N\x05\x00\'I\x04\x00\x0c\xfd\xfe\x16M\x01\x01\x88y\xa6\x02\x18\xde\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00:\xed\xfe\x16N\x01\x01\xc1\'\x9b\x86\x00\x00\x00\x00?\x03\xbe\xfa\xfe\x12O\x01\x01\xfc8I\x04\x004\x00\x01\x00ARMMASK\x00WroW\xfe\tP\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xef0'b'\xfe\x15Q\x01\x01$\x93\xac\xbe\x108\x06\xe7\x05\xfb\x05J\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\xbe\xfe\x16R\x01\x01#cI\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00v!\xfe\x03S\x01\x01Ms\x00\x04\xf9n'b"\xfe\x14T\x01\x01J\xaeGa>\xaeGa>\x85\xeb\xf1?\n\xd7\xa3\xbc\xb0\x003\x00A\xe4\xfe\x1cU\x01\x01!YI\x04\x00v\xa6\x02\x18\xda\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf4\xff\xf3\xff\xfe\xff\xd4D\xcf\xbf\xfe\x1cV\x01\x01 \xdbI\x04\x00\xac\xfe'>y{0?\xbe{\xc7\xbfgM\x02\xbefV\x0f\xbe\xd8\xf8\xd9\xa1\x15\xb1T\xfe\x1f\\\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\t\x00\x12;\xae\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xeb\xb5\xfe\x06]\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\xb4\xfe\x04^\x01\x01\x98\x00\x00\x80\x8a\xc4=\xfe\x02_\x01\x01*\x00\x00\xa7\x9a\xfe\x1e`\x01\x01\x18\xa8\x83\xbe\x10\x00\x00\x00\x00}\xa6\x02\x18\xdc\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x16\x00\xecc\x03\x0c\xad$\xfe\x1aa\x01\x01>\x97\x9f\x84\xc0\xc2\x85\x04\xbd\x99]+\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00<\n\xfe\x08b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x8c"b'\xfe\x1cc\x01\x01\x1e\x18J\x04\x00|\xc9r\xbd\x1ap*\xbc\xf4\xb4D@\xe4\xaa\x8e\xbd\x8e\xe7\xd1<)\xe5\xbf\xbcd\xc2\xfe\x18d\x01\x01\xb2>\xaa\x8f\xbd\x08CN\xbb\xdd\xb6E@\xf6\x18*D}\xa6\x02\x18\xdc\xe7\xb8\xfd\x8f\x9c\xfe\x03e\x01\x01Ms\x00\x04\xc0\x9e\xfe\x1cf\x01\x01\xa3\x81\xe2\x08:\x81\xd1\xa6\xba"\x88\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xb7C\xa4\xf5\xe26<\\bF<\r\xd2\xa2?\x00\x1fB\xb8'b'\xfe\x15m\x01\x01$\xc0\xaa\xc2\x10!\x06\'\x06"\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x0b\xfe\x16n\x01\x01#iJ\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00#q\xfe\x03o\x01\x01Ms\x00\x04\x13\xb8\xfe\x14p\x01\x01J)\\\x8f>)\\\x8f>)\\\xef?\x8f\xc2\xf5\xbc\xaf\x007\x00\x81M'b'\xfe\x1aq\x01\x01\x1b\xda\x80\xc4\x10\x00\x00\x00\x00\xe4\xff\x0e\x00\x1d\xfc\n\x00@\x00\x04\x00\xf7\xfe\xdf\xffs\x01\xb0\x88\xfe\x16r\x01\x01t\xe1J\x04\x00\xe5\xff\x15\x00"\xfc"\x00B\x00\xed\xff\xf8\xfe<\xff\x06\x02\xe4O\xfe\x16s\x01\x01\x81\xe1J\x04\x00\xe1\xff\x1f\x00\x1c\xfc\xf3\xffh\x00\xf6\xff\x8d\x00.\x00a\x02^t\xfe\x0et\x01\x01\x1d\xe1J\x04\x00f\x96iD\x00\x00.\xbee\x10\x8fH\xfe\x0eu\x01\x01\x89\xe1J\x04\x00E\xdciDR\xb8.>\xa3\x15\\\x96\xfe\x1fv\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01\x12;\x14\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x92\x08\xfe\x06w\x01\x01}\xc8\x14\x00\x00\x03\x00\xeeo\xfe\x04x\x01\x01\x98\x00\x00\x80\x8a\xe2n\xfe\x02y\x01\x01*\x00\x00\xe9\xa1\xfe\x1ez\x01\x01\x18\xf8\xa5\xc4\x10\x00\x00\x00\x00w\xa6\x02\x18\xd5\xe7\xb8\xfddi\n\x00F\x00\xff\xff\x16\x00\xebZ\x03\x0c\xbe\x0f\xfe\x1a{\x01\x01>\xb0yz\xc0\xc5\xae\xc1\xbc\xcc\xcc\xf0\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00_\x9d\xfe\x08|\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xac\xe6\xfe\x1c}\x01\x01!\xebJ\x04\x00s\xa6\x02\x18\xd5\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf9\xff\xf9\xff\xfe\xff\xb7D\x03\x01\xfe\x1c~\x01\x01 \xf5J\x04\x00\xd9B\x00>h\xe6&?i\xeb\xc5\xbf\xe1\xd0\x98\xbd\x80\x81\x97\xbd\xf7;\xbd<\xabl\xfe\x03\x7f\x01\x01/\xff\x00\x00\xdd\xfc\xfe\x1c\x80\x01\x01\x1e\x1dK\x04\x00\x1d\x0b[\xbd\x08\x1da:\x97mD@\xda\x14S=g\x02\xa3=\x86\x14W\xbd\nn\xfe\x18\x81\x01\x01\xb2\x84J\x86\xbd\xa7\x82\xf5;\xdcrE@R\x18*Dw\xa6\x02\x18\xd5\xe7\xb8\xfd\x1bs\xfe\x03\x82\x01\x01Ms\x00\x04-\x1a'b'\xfe\x1c\x83\x01\x01\xa3\xd23\n:An\xa8\xbat\x13\xae9\x00\x00\x00\x00\x00\x00\x00\x00\xcf[\xbf\xcc\xccL>{\x14\xee?\x00\x00\x00\x00\xaf\x006\x00\x1aH\xfe\x1a\x8c\x01\x01\x1b\xc0-\xc8\x10\x00\x00\x00\x00\xe4\xff\x04\x00\x0e\xfc\xf6\xff\x0b\x00\x06\x00\xf2\xfe\xe2\xffo\x01\xd7\x99\xfe\x16\x8d\x01\x01t\xd2K\x04\x00\xeb\xff\xfa\xff(\xfc\xd7\xff.\x00\x06\x00\xf3\xfe>\xff\x03\x02\xe7V\xfe\x16\x8e\x01\x01\x81\xd2K\x04\x00\xe2\xff\x15\x00\x07\xfc\xd7\xff\x05\x00 \x00r\x00.\x00j\x02L\xd3\xfe\x0e\x8f\x01\x01\x1d\xd2K\x04\x00O\x97iD\xa4p\x1f\xbef\x10;\xda\xfe\x0e\x90\x01\x01\x89\xd2K\x04\x00\x85\xdbiDR\xb8">\xa3\x15=\x05\xfe\x1f\x91\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0f\x01\x05;{\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\x96i\xfe\x06\x92\x01\x01}\xc5\x14\x00\x00\x03\x00\xf1\xf7\xfe\x04\x93\x01\x01\x98\x00\x00\x80\x8a\xa2\x12\xfe\x02\x94\x01\x01*\x00\x00>\xad\xfe\x1e\x95\x01\x01\x18\x00i\xc7\x10\x00\x00\x00\x00t\xa6\x02\x18\xd3\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0c\x7f\x1b\xfe\x1a\x96\x01\x01>_\x91\x8a\xc0Ri\x15?\xc2\t\x18\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x8bO\xfe\x08\x97\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00`\xd5'b'\xfe\x1c\x98\x01\x01!\xa0K\x04\x00q\xa6\x02\x18\xd2\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x02\x00\xfb\xff\x00\x00\xabDBz\xfe\x1c\x99\x01\x01 \xfbK\x04\x00_\xd2\xe2=\x19\xf2\x1f?\x0f\x8b\xc4\xbfP%\xe4<)mn\xbd?\xed\x08\xbc8o\xfe\x1c\x9a\x01\x01\x1e"L\x04\x008\xf3x\xbdT\x03\x7f\x00\x00\x00\x00?\x03\xa5a\xfe\x03\xa1\x01\x01Ms\x00\x04\r&'b'\xfe\x15\xa2\x01\x01$#\xa1\xca\x10F\x06\x1a\x06\xf0\x05Q\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9p\xfe\x16\xa3\x01\x01#rL\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00gz\xfe\t\xfd\n\x00m%\x00\x00\x00\x00\xdc\x00\x00\x00S \xfe\x03\xa4\x01\x01Ms\x00\x04l\xb1'b'\xfe\x1a\xa5\x01\x01\x1b;\xdd\xcb\x10\x00\x00\x00\x00\xe7\xff\x1d\x00\x16\xfc\xd8\xff\xa0\xff\x00\x00\xf2\xfe\xdc\xffi\x01\x96\x0b\xfe\x16\xa6\x01\x01t\xc3L\x04\x00\xf8\xff%\x00\x15\xfc\xd7\xff\xb1\xff\x04\x00\xf0\xfe6\xff\xfe\x01\x8b\xfe\xfe\x16\xa7\x01\x01\x81\xc3L\x04\x00\xe6\xff1\x00"\xfc\xaa\xff\xa8\xff\x0e\x00w\x00"\x00N\x023\xb6\xfe\x0e\xa8\x01\x01\x1d\xc3L\x04\x00[\x97iDR\xb8\x1e\xbee\x10+z\xfe\x0e\xa9\x01\x01\x89\xc3L\x04\x00\x86\xdciD\xcd\xcc2>\xa4\x15\xa4\xcf\xfe\x1f\xaa\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x05;\x8a\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q4\xb5\xfe\x06\xab\x01\x01}\xc2\x14\x00\x00\x03\x00\x1dJ\xfe\x04\xac\x01\x01\x98\x00\x00\x80\x8a\'\x8c\xfe\x02\xad\x01\x01*\x00\x00M:\xfe\x1e\xae\x01\x01\x18`\xc4\xca\x10\x00\x00\x00\x00t\xa6\x02\x18\xd2\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\t\x00\xebZ\x03\x0c\x99\xe1\xfe\x1a\xaf\x01\x01><\xb6x\xc0\xe0\xef,\xbf\xd7\x93\xe1\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe8\xf5\xfe\x08\xb0\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x83x\xfe\x14\xb1\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc={\x14\xee?\n\xd7#=\xaf\x005\x00?\xb5\xfe\x1c\xb2\x01\x01!|L\x04\x00s\xa6\x02\x18\xd0\xe7\xb8\xfd\xd4b\n\x00D\x07\x00\x00\x0c\x00\x00\x00\x05\x00\xb3DH-\xfe\x1c\xb3\x01\x01 \xffL\x04\x00\x00\x9a\x00>\xe1,\x1c?\xea\xbe\xc4\xbf\xf1\xa0\x02>\x19z\xfa\xb9J\x9eR\xbdmZ\xfe\x12\xb4\x01\x01\xfc%M\x04\x004\x00\x01\x00ARMMASK\x00Wr\x00\x8c\xfe\t\xb5\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb2\xdd'b'\xfe\x1c\xb6\x01\x01\x1e(M\x04\x000\x16\x86\xbd\xf5;p\xbb\xb9lD@\x81\x14$=\x1fn\xdf\xbdPSx\xbcq\xb2\xfe\x18\xb7\x01\x01\xb2\xd2\xc5\x9f\xbd\xef\xb0\xab;\xc6\x7fE@\x99\t*Dt\xa6\x02\x18\xd2\xe7\xb8\xfdCK\xfe\x03\xb8\x01\x01Ms\x00\x04v\xd1\xfe\x1c\xb9\x01\x01\xa3\xb6\xd6\x0c:\xf0\xaf\xab\xba\xff%\xad9\x00\x00\x00\x00\x00\x00\x00\x00\xe6]\xd5<\xf8P\x87;\xbd(\xfe\x03\xba\x01\x01\xa5\xc5\x14\x00\x9e;\xfe\x0c\xbb\x01\x01\x02\x98p5{\xb1N\x05\x00\xa5\x15\xc6\xab\xfe*\xc6\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00f\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xf4%\xfe\x1f\xc7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01\x05;R\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf1\xa8\xfe\x06\xc8\x01\x01}\xc5\x14\x00\x00\x03\x009\\\xfe\x04\xc9\x01\x01\x98\x00\x00\x80\x8ae\xef\xfe\x02\xca\x01\x01*\x00\x00\xd0Y\xfe\x1e\xcb\x01\x01\x18p\xd9\xcd\x10\x00\x00\x00\x00t\xa6\x02\x18\xd2\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x08\x00\xebZ\x03\x0cN\xc1\xfe\x1a\xcc\x01\x01>)JP\xc0\x10z\xe4\xbf\xeb\x11}\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x0e\xa8\xfe\x08\xcd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd3\xca\xfe\x14\xce\x01\x01J\n\xd7\xa3=\n\xd7\xa3=)\\\xef?)\\\x8f=\xaf\x003\x00H\xb3'b'\xfe\x1c\xcf\x01\x01!\xfbM\x04\x00v\xa6\x02\x18\xd0\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x0f\x00\x03\x00\x08\x00\xb9D\xc00\xfe\x1c\xd0\x01\x01 \x05N\x04\x00\xbb\xbb%>\xc8m\x1c?\xf64\xc5\xbf\x94\xe6 >%O\x0e=[\x05\xa5\xbd\x13\t\xfe\x1c\xd1\x01\x01\x1e-N\x04\x00gaX\xbd\x11\xde\x08\xbd\x8f\x81D@\xed\xca\x0e<\xe9j0\xbd\xdf3%\xbdf\xf9\xfe\x18\xd2\x01\x01\xb2\xa1\xde\x84\xbd.\xf5\xd5\xbc\x05\x9dE@\xd7\x03*Dv\xa6\x02\x18\xd2\xe7\xb8\xfd\xc2\xe2\xfe\x03\xd3\x01\x01Ms\x00\x04\x1b\xa5\xfe\x1c\xd4\x01\x01\xa3\xa5#\x0e:\x04N\xad\xba\xaa\xaf\xac9\x00\x00\x00\x00\x00\x00\x00\x00\r@\xbc<\x8a\x18p;\xd5+\xfe\x03\xd5\x01\x01\xa5\xc5\x14\x00-Y\xfe\x0c\xd6\x01\x01\x028h9{\xb1N\x05\x00AN\x04\x00\x0c6\xfe\x16\xd7\x01\x01\x88w\xa6\x02\x18\xd1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfc\xb9\xfe\x16\xd8\x01\x01\xc1\xa5\x0f\x89<+5.<\x98=_<\xb6~\t>\x00\x00\x00\x00?\x03\xcd<\xfe\x16\xd9\x01\x01\xe1\t\xac\x1c?\\\x8fB>\xf5\xe26<\\bF<\xfa[\xa0?\x00\x1f\xd2j'b"\xfe\x15\xda\x01\x01$t\x9c\xd2\x10\\\x06\t\x06\x16\x06A\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00p\xb6\xfe\x16\xdb\x01\x01#~N\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8f\xdd\xfe\x1a\xdc\x01\x01\x1bj8\xd3\x10\x00\x00\x00\x00\xee\xff\x1d\x00\x17\xfc\x1d\x00\xdf\xff\xdd\xff\x03\xff\xe1\xffy\x01\x17_\xfe\x16\xdd\x01\x01t\xa6N\x04\x00\xf4\xff\x17\x00#\xfc@\x00\xd2\xff\xf7\xff\x01\xff:\xff\n\x02\xcf\xb3\xfe\x16\xde\x01\x01\x81\xa6N\x04\x00\xe6\xff2\x00\x12\xfcV\x00\xc9\xff\xed\xff\x99\x00'\x00|\x02\xad\xa7\xfe\x0e\xdf\x01\x01\x1d\xa6N\x04\x00T\x95iD\xb8\x1e?\xbeg\x10}d\xfe\x0e\xe0\x01\x01\x89\xa6N\x04\x00\xb4\xdbiD\x14\xae%>\xa5\x15\xacM\xfe\x1f\xe1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0b\x01-;~\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xa2\\\xfe\x06\xe2\x01\x01}\xc5\x14\x00\x00\x03\x00;\xa9\xfe\x04\xe3\x01\x01\x98\x00\x00\x80\x8al\xfc\xfe\x03\xe4\x01\x01Ms\x00\x04\x9d\xd4\xfe\x02\xe5\x01\x01*\x00\x00\xa7#\xfe\x1e\xe6\x01\x01\x18x\x9c\xd0\x10\x00\x00\x00\x00v\xa6\x02\x18\xd2\xe7\xb8\xfddi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\x8f\n\xfe\x1a\xe7\x01\x01>8\xb63\xc0\xda\xdd\r\xc0)\xbcT\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xe6\x19\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl"b'\xfe\x14\xe9\x01\x01J\xebQ8>\xebQ8>\xd7\xa3\xf0?)\\\x8f=\xaf\x002\x00\x8bc\xfe\x1c\xea\x01\x01!\xc4N\x04\x00y\xa6\x02\x18\xd2\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\x0c\x00\x04\x00\x05\x00\xb1Dx\x90\xfe\x1c\xeb\x01\x01 \nO\x04\x00\xe5\x1cL>T+\x1f?\x98\xb6\xc6\xbf\n\x82\xf8=\xdb\x1e?=\x0fES\xbd\xd8!'b"\xfe\x03\xec\x01\x01Ms\x00\x04!\xf9\xfe\x1c\xed\x01\x01\x1e2O\x04\x00\x91\xb4+\xbd\xa7.9\xbd\xebpD@\xb2\xe9j<\xe0\xc9\x0f\xba\xf3\xca\xf5;'\x0c\xfe\x18\xee\x01\x01\xb2>\x1c[\xbd\xa4\x05\x1d\xbd\xa2\x8aE@3\x13*Dy\xa6\x02\x18\xd4\xe7\xb8\xfdVH\xfe\x03\xef\x01\x01/\xff\x00\x00Gl\xfe\x1c\xf0\x01\x01\xa3\x1df\x0f:Q\xe8\xae\xbat3\xac9\x00\x00\x00\x00\x00\x00\x00\x00\xea\x87\x98<\x95=\x9f;t\xa2\xfe\x03\xf1\x01\x01\xa5\xc8\x14\x00\x8cr\xfe\x0c\xf2\x01\x01\x02\xd8_={\xb1N\x05\x00FO\x04\x00c\xb9\xfe\x16\xf3\x01\x01\x88z\xa6\x02\x18\xd2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00n\x8c\xfe\x16\xf4\x01\x01\xc1\xe4l\xa3\x00\x00\x00\x00?\x03\xd2/"b"\xfe\x15\xf5\x01\x01$^\x97\xd6\x106\x06\x12\x06\x03\x06&\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe1'\xfe\x16\xf6\x01\x01#\x82O\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5q\xfe\x1a\xf7\x01\x01\x1bH\xe6\xd6\x10\x00\x00\x00\x00\xe6\xff)\x00*\xfcx\x00+\xff\xe6\xff\x06\xff\xe4\xff~\x01\xd7N\xfe\x16\xf8\x01\x01t\x97O\x04\x00\xe8\xff,\x00V\xfcY\x00G\xff\xfe\xff\x06\xff>\xff\x0e\x025\xf2\xfe\x16\xf9\x01\x01\x81\x97O\x04\x00\xe9\xff6\x008\xfc(\x00K\xff\x07\x00\x9a\x00\x1b\x00|\x02\xc5\x9e\xfe\x0e\xfa\x01\x01\x1d\x97O\x04\x00\xd3\x96iD33'\xbeg\x10\tc\xfe\x0e\xfb\x01\x01\x89\x97O\x04\x00=\xdaiDp=\x0e>\xa5\x15x\x1f\xfe\x1f\xfc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d-;u\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P4(\xfe\x06\xfd\x01\x01}\xbb\x14\x00\x00\x03\x00_S\xfe\x04\xfe\x01\x01\x98\x00\x00\x80\x8a*\x0e\xfe\x02\xff\x01\x01*\x00\x009\x7f\xfe\x1e\x00\x01\x01\x18\xc8\xbe\xd6\x10\x00\x00\x00\x00|\xa6\x02\x18\xd5\xe7\xb8\xfddi\n\x00F\x00\xff\xff\x11\x00\xebZ\x03\x0c\x0eY\xfe\x1a\x01\x01\x01>\x00\x00\xe0\xbf\\\x8fR\xc03s\x15\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\xaf\x00g\x9a\xb9[\xfe\x08\x02\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x0bZ\xfe\x03\x03\x01\x01Ms\x00\x04pP"b'\xfe\x14\x04\x01\x01J{\x14.>{\x14.>\xd7\xa3\xf0?\x00\x00\x00\x00\xaf\x005\x00~w\xfe\x1c\x05\x01\x01!\x8dO\x04\x00|\xa6\x02\x18\xd3\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\x04\x00\x01\x00\x00\x00\xb6DP\xec\xfe\x1c\x06\x01\x01 \x0fP\x04\x00zOj>\x98\xb2"?\xebN\xc6\xbf\x0f\xbeL=\xd77\x86<\xa3n\xf8;\x8f\xe9\xfe\x03\x07\x01\x01Ms\x00\x04\xaeF\xfe\x1c\x08\x01\x01\x1e7P\x04\x00\xeck\xa8\xbc\xa6\x1e\xd4\xbd\xa4\x81D@\xf6\xb8C=*\xc5Q\xbe\xa9\x1e\xa8\xbc-\xfa\xfe\x18\t\x01\x01\xb2\x95\x83\t\xbd\x9e\xd4\xc2\xbd\x7f\xa6E@\x1e\x15*D|\xa6\x02\x18\xd5\xe7\xb8\xfd\xae_'b'\xfe\x1c\n\x01\x01\xa3\xd0\x96\x10:\xc3z\xb0\xba3\xad\xab9\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xa2\x81<(c\xf7;\xf0V\xfe\x03\x0b\x01\x01\xa5\xc2\x14\x00j\xcb\xfe\x0c\x0c\x01\x01\x02\x98\xa5A{\xb1N\x05\x00LP\x04\x00\x9d\t\xfe\x16\r\x01\x01\x88|\xa6\x02\x18\xd4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00.\xf4\xfe\x16\x0e\x01\x01\xc1\xb2\xff\xa7<\xe4\n\x8d<<\x82\x90:\x02\x0c\xef=\x00\x00\x00\x00?\x03R+\xfe\t\xfe\n\x00m\x08\x00\x00\x00\x00\xdb\x00\x00\x00\x96\xca\xfe\x1a\x0f\x01\x01\x1b\xf8\x92\xda\x10\x00\x00\x00\x00\xea\xff$\x00\xec\xfb\r\x00\\\x00\x1e\x00\x18\xff\xeb\xff\x8b\x01*u\xfe\x16\x10\x01\x01t\x87P\x04\x00\xe5\xff\x12\x00\xe2\xfb\x1b\x00R\x00\x05\x00\x19\xffA\xff\x1c\x02\xec\xa4\xfe\x16\x11\x01\x01\x81\x87P\x04\x00\xee\xff0\x00\r\xfcS\x00B\x00\xef\xff\x8f\x00/\x00\x8d\x02\xd06\xfe\x0e\x12\x01\x01\x1d\x87P\x04\x00\x81\x96iD\xebQ,\xbef\x10\x05e\xfe\x0e\x13\x01\x01\x89\x87P\x04\x00\x0f\xdbiD)\\\x1b>\xa5\x15M\x80\xfe\x1f\x14\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x03\x01-;\xd7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Pq\xfc\xfe\x06\x15\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xc5\xfe\x04\x16\x01\x01\x98\x00\x00\x80\x8am\xa4\xfe\x02\x17\x01\x01*\x00\x00M\x83\xfe\x1e\x18\x01\x01\x18\xd8\xd3\xd9\x10\x00\x00\x00\x00}\xa6\x02\x18\xd6\xe7\xb8\xfddi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\x1a\x00\xfe\x1a\x19\x01\x01>\xe6\xfd\xbb\xbf,]u\xc0\xcd\x04\x84\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xcc\x05\xfe\x08\x1a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb3-\xfe\x15\x1b\x01\x01$/\xe1\xda\x10/\x06#\x068\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x8d\xfe\x16\x1c\x01\x01#\x9bP\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbb\xc1'b'\xfe\x03\x1d\x01\x01Ms\x00\x04\x05;\xfe\x14\x1e\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>)\\\xef?\n\xd7\xa3<\xaf\x006\x00uH'b'\xfe\x12\x1f\x01\x01\xfc\x13Q\x04\x004\x00\x01\x00ARMMASK\x00Wr0\x15\xfe\t \x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe8\x00\xfe\x1c!\x01\x01!WP\x04\x00{\xa6\x02\x18\xd4\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xf1\xff\xfe\xff\x05\x00\xb8D\x89T\xfe\x1c"\x01\x01 \x16Q\x04\x00\xd2\x08\\>\x91y#?V\x94\xc5\xbf\x86\xad \xbe\xd2M\xf1\xbc\xde?Z\xbd\x1c\x1c\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6\xfe\x1c$\x01\x01\x1e>Q\x04\x00\xed\x10\xa1\xbc\xccR\x89\xbd?\x85D@xv\x0e\xbd\rjk>\xf8\x1d\x03\xbb\x90=\xfe\x18%\x01\x01\xb2W\xab\xfa\xbc"\x93\x7f\xbd|\xa9E@\n\x17*D}\xa6\x02\x18\xd6\xe7\xb8\xfd|\xb7\xfe\x1c&\x01\x01\xa3\x8f\xb1\x11:\xc6\x07\xb2\xba\xe0\x13\xab9\x00\x00\x00\x00\x00\x00\x00\x00\xd2Jd\x00\x00\x00\x00?\x03\x0f\xbc'b"\xfe\x1a+\x01\x01\x1b#F\xde\x10\x00\x00\x00\x00\xe3\xff%\x00\x18\xfc\x95\xff\xae\x00\xfc\xff\x12\xff\xed\xff\x81\x01\x06U\xfe\x16,\x01\x01tzQ\x04\x00\xef\xff*\x00+\xfc\x87\xff\xc1\x00\xff\xff\x10\xffM\xff\x18\x02\xc9\x83\xfe\x16-\x01\x01\x81zQ\x04\x00\xe2\xff+\x00.\xfck\xff\xdc\x00\xfe\xff\xae\x007\x00~\x02\xa3c\xfe\x0e.\x01\x01\x1dzQ\x04\x00\xac\x97iD\x99\x99\x19\xbeg\x10\xa3\xd3\xfe\x0e/\x01\x01\x89zQ\x04\x00'\xdbiDG\xe1\x1c>\xa6\x15<\xb3\xfe\x1f0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x008\x00-;\xb7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xde\x9f\xfe\x061\x01\x01}\xc5\x14\x00\x00\x03\x00\xd3y\xfe\x042\x01\x01\x98\x00\x00\x80\x8a\xb1l\xfe\x023\x01\x01*\x00\x00\xb8\x8f\xfe\x1e4\x01\x01\x18\xe8\xe8\xdc\x10\x00\x00\x00\x00}\xa6\x02\x18\xd6\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x01\x00\xebZ\x03\x0c\xc7[\xfe\x1a5\x01\x01>N\xa4\n\xc0>\xe9\xb5\xbf\xd7\xa3\xe0\xba\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\x9b\xc9\xfe\x086\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xa3\xfe\x157\x01\x01$\xf2\xe1\xde\x10W\x06\xf6\x05\xf6\x05Z\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbbF\xfe\x168\x01\x01#\xa2Q\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x81\xbb\xfe\x039\x01\x01Ms\x00\x04+\x9b"b"\xfe\x14:\x01\x01J)\\\x8f=)\\\x8f=)\\\xef?\xcc\xccL=\xaf\x006\x00*\xb8\xfe\x1c;\x01\x01!\xe8Q\x04\x00v\xa6\x02\x18\xd3\xe7\xb8\xfd\xdeb\n\x00N\x07\x00\x00\xeb\xff\xfa\xff\x06\x00\xb9D\xf3\xf3\xfe\x1c<\x01\x01 \x1aR\x04\x00\xab\xa9'>g\x1d!?dq\xc6\xbfxeZ\xben\xb3v\xbd)$\x83\xbdo\xe4"b'\xfe\x1c=\x01\x01\x1eBR\x04\x00\xe6C"\xbd\xd7\x10\xab\xbc\xe6\x91D@\xf2\xc8\x92\xbc\x89\x92\xd6=\x7fW\xfc<\xf1\x86\xfe\x18>\x01\x01\xb2@rM\xbd\x96\xcae\xbc.\xb2E@\x85\x0b*D{\xa6\x02\x18\xd5\xe7\xb8\xfd2&\xfe\x03?\x01\x01Ms\x00\x04\x9a\x86\xfe\x1c@\x01\x01\xa36\xbb\x12:\xde\x90\xb3\xba\x8ev\xaa9\x00\x00\x00\x00\x00\x00\x00\x00i\xd8\x85\x00\x00\x00\x00?\x03\xe9U\xfe\x16F\x01\x01\xe1\xb7\xf3\x1d?\xba#F>\xf5\xe26<\\bF<\xfc\xf3\x9d?\x00\x1f\x15\xe7\xfe\x1aG\x01\x01\x1b\x00\xf1\xe1\x10\x00\x00\x00\x00\xea\xff(\x00G\xfc\x04\x00O\x00\xf7\xff\x02\xff\xe8\xffy\x01\xdf\xfd\xfe\x16H\x01\x01tjR\x04\x00\xeb\xff5\x00Q\xfc\xfb\xff[\x00\x0e\x00\xff\xfe@\xff\n\x02\x0br\xfe\x16I\x01\x01\x81jR\x04\x00\xe3\xff&\x00,\xfc\xd3\xffq\x00\x17\x00w\x004\x00|\x02\x9d?\xfe\x0eJ\x01\x01\x1djR\x04\x00\xc9\x97iD\n\xd7\x17\xbeh\x10\xa5\x00\xfe\x0eK\x01\x01\x89jR\x04\x00!\xdaiD\xe1z\x0c>\xa7\x15o/\xfe\x1fL\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00.\x01!;<\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Pj\xb6\xfe\x06M\x01\x01}\xc5\x14\x00\x00\x03\x00\xe6\xc5\xfe\x04N\x01\x01\x98\x00\x00\x80\x8aP\xc2\xfe\x02O\x01\x01*\x00\x00n/\xfe\x1eP\x01\x01\x18@\xf2\xdf\x10\x00\x00\x00\x00{\xa6\x02\x18\xd5\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x07\x00\xebZ\x03\x0cU&\xfe\x1aQ\x01\x01>\x8b](\xc0\xe7K\xf9\xbe\x00\xa0\xcc;\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00=\t\xfe\x08R\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8ac\xfe\x15S\x01\x01$:\x8d\xe2\x10L\x06!\x06\x11\x06Y\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8R\xfe\x16T\x01\x01#\x92R\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe3\xcd'b'\xfe\x03U\x01\x01Ms\x00\x04Hs\xfe\x14V\x01\x01J\\\x8fB>\\\x8fB>\xd7\xa3\xf0?\n\xd7#=\xaf\x006\x00\xee\xb9'b"\xfe\x1cW\x01\x01!\xb1R\x04\x00r\xa6\x02\x18\xd1\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xee\xff\xf9\xff\x05\x00\xbbD\xf8\x01\xfe\x1cX\x01\x01 \x0bS\x04\x00\xbf\xb2\xef=\x88k\x1d?\xfd\xec\xc6\xbfHT=\xbe\xd1\\\x91\xbd%\xfaS\xbd\xb7\xad\xfe\x1cY\x01\x01\x1e3S\x04\x00\x1a\n)\xbd\xe6p8\xbc\x8a\x8dD@\xa8\x1cS\xbd\xa5\xdb=\xbc\xb7@\xee<\xfd\xaf\xfe\x18Z\x01\x01\xb2\xb2$S\xbd.\x05L\xbb\xf3\xb4E@3\x13*Dw\xa6\x02\x18\xd4\xe7\xb8\xfd\x9e1\xfe\x03[\x01\x01Ms\x00\x04EC\xfe\x1c\\\x01\x01\xa3'\xa7\x13:\xf3\xf7\xb4\xba&\xf4\xa99\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x19\xb5<.]\xdf;\xb1b\xfe\x03]\x01\x01\xa5\xc8\x14\x00\xfc4\xfe\x0c^\x01\x01\x02X>M{\xb1N\x05\x00GS\x04\x00\xd1\x11\xfe\x16_\x01\x01\x88q\xa6\x02\x18\xd0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfa\xe2\xfe\x16`\x01\x01\xc1\xff\xd3\x92<\xe4*^;\x88o\x11;\xa1\x81\x1e>\x00\x00\x00\x00?\x03\xefQ\xfe\x1aa\x01\x01\x1b\xf6\x9e\xe5\x10\x00\x00\x00\x00\xf3\xff\x16\x00#\xfc\xdc\xff\xfa\xff\xf6\xff\xfe\xfe\xe5\xffu\x01\x00\x7f\xfe\x16b\x01\x01t[S\x04\x00\xfe\xff\t\x00M\xfc\xd5\xff\t\x00\xf9\xff\xf8\xfe<\xff\x04\x02\xa6\xa7\xfe\x16c\x01\x01\x81[S\x04\x00\xf2\xff+\x005\xfc\xa2\xff\x1e\x00\xfb\xffr\x00'\x00_\x02k\xa0\xfe\x0ed\x01\x01\x1d[S\x04\x00\xf2\x96iD\xaeG%\xbeh\x10\x91\x1a\xfe\x0ee\x01\x01\x89[S\x04\x00\xe1\xdaiD\xe1z\x18>\xa7\x15G\x01\xfe\x1ff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0e\x01!;S\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x82\x80\xfe\x06g\x01\x01}\xc8\x14\x00\x00\x03\x00\xab\x1e\xfe\x03h\x01\x01/\xff\x00\x00\xab;\xfe\x04i\x01\x01\x98\x00\x00\x80\x8a\x8b\xdc\xfe\x02j\x01\x01*\x00\x00N\xbc\xfe\x1ek\x01\x01\x18h\x03\xe3\x10\x00\x00\x00\x00s\xa6\x02\x18\xd2\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0c\xe3\xb2\xfe\x1al\x01\x01>t69\xc06\xe9\x12\xbep\xb5\x93<\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xf4?\xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9"b'\xfe\x15n\x01\x01$\x9b\x8a\xe6\x107\x06!\x06.\x06"\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00G\xc8\xfe\x16o\x01\x01#\x98S\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf4p\xfe\x03p\x01\x01Ms\x00\x00\xb95'b'\xfe\x14q\x01\x01J\xcc\xccL>\xcc\xccL>\x85\xeb\xf1?\x8f\xc2\xf5<\xb0\x004\x00v\xc5\xfe\x1cr\x01\x01!zS\x04\x00n\xa6\x02\x18\xcf\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xf1\xff\xfb\xff\x00\x00\xe8D\xb2\x86\xfe\x1cs\x01\x01 \x10T\x04\x00\xb2A\x88=\xc88\x19?c\x93\xc8\xbf}]!\xbe\xdd\xe7V\xbd)\xea\xde\xbb\n\xeb\xfe\x03t\x01\x01Ms\x00\x00g#'b'\xfe\x1cu\x01\x01\x1e9T\x04\x00\x85\xd8D\xbd\x06\xf5\x1f;\x91\xe9E@\x9a\x0c\x8c=\xc0\xe1\t=\xdfz\xc4>^\x1a\xfe\x18v\x01\x01\xb2Nkr\xbdv2,<\x8a\xdeF@{\x14*Ds\xa6\x02\x18\xd2\xe7\xb8\xfd\xad\xa0\xfe\x1aw\x01\x01\x1bGM\xe9\x10\x00\x00\x00\x00\x02\x002\x00>\xfc\x1b\x005\x00}\x01\xf4\xfe\xe9\xfft\x01\xd7\xbc\xfe\x16x\x01\x01tMT\x04\x00\xfe\xff.\x00B\xfc\x1f\x00=\x00_\x01\xf7\xfeC\xff\x06\x02%\xcd\xfe\x16y\x01\x01\x81MT\x04\x00\xf8\xff3\x000\xfcc\x007\x00J\x01\x95\x006\x00`\x02[\xc0\xfe\x0ez\x01\x01\x1dMT\x04\x00\xdd\x96iD\\\x8f&\xbei\x10\x88\xfa\xfe\x0e{\x01\x01\x89MT\x04\x00%\xd9iD\xa3p\xf9=\xa7\x15\xb7w\xfe\x1f|\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d!;u\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P@\xae\xfe\x06}\x01\x01}\xc6\x14\x00\x00\x03\x00G\xfe\xfe\x04~\x01\x01\x98\x00\x00\x80\x8a\xfd\xca\xfe\x02\x7f\x01\x01*\x00\x00$\xf9\xfe\x1e\x80\x01\x01\x18\xa0)\xe9\x10\x00\x00\x00\x00p\xa6\x02\x18\xd0\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x13\x00\xebZ\x03\x0cM\x1d\xfe\x1a\x81\x01\x01>3.m\xc0i`\xbc?\x85[b<\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x12\xdf\xfe\x08\x82\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x9c\xfe\x1c\x83\x01\x01\xa3\xf3\xb4\x14:a\x9b\xb6\xba\xe4n\xa99\x00\x00\x00\x00\x00\x00\x00\x00y\x1f\xa9<\x11X\xc1;E\xfc\xfe\x03\x84\x01\x01\xa5\xc8\x14\x00\x94m\xfe\x0c\x85\x01\x01\x02\x18\x84Q{\xb1N\x05\x00aT\x04\x00\xe9\xa9\xfe\x16\x86\x01\x01\x88l\xa6\x02\x18\xce\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa2\xd2\xfe\x16\x87\x01\x01\xc1@\xce\x0f<\xd0\x10q;G&\x0e;\x93\xde\r>\x00\x00\x00\x00?\x03\xc8\x94\xfe\t\xff\n\x00m\x06\x00\x00\x00\x00\xdb\x00\x00\x00\x875'b'\xfe\x15\x88\x01\x01$\x96\x87\xea\x10%\x05a\x04\xcb\x06\xff\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00po\xfe\x16\x89\x01\x01#\x9dT\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00l!\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P\xfe\x14\x8b\x01\x01J\\\x8fB>\\\x8fB>\x85\xeb\xf1?\n\xd7#\xbc\xaf\x00;\x00R7\xfe\x12\x8c\x01\x01\xfc\xffT\x04\x004\x00\x01\x00ARMMASK\x00Wr\xda\x97\xfe\t\x8d\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xb9A'b"\xfe\x1c\x8e\x01\x01!\x0cU\x04\x00j\xa6\x02\x18\xcd\xe7\xb8\xfd\xe8b\n\x00X\x07\x00\x00\xf3\xff\x00\x00\x01\x00\xebC\x7fU\xfe\x1c\x8f\x01\x01 \x16U\x04\x00\xde\xb5\xdf<\x08S\x15?\x0eb\xc7\xbf\xda\xb7\t\xbe^\xdf \xbc\xcaB\x86\xbc\xe4\xda\xfe\x03\x90\x01\x01Ms\x00\x00Z-\xfe\x1a\x91\x01\x01\x1b\xd4\xfa\xec\x10\x00\x00\x00\x00\x03\x00\x07\x00\xd0\xfb\xf8\xff\x84\x01m\xfd\xf2\xfe\xdc\xffo\x01\xf7\xa6\xfe\x16\x92\x01\x01t>U\x04\x00\xfa\xff\x18\x00\xda\xfb\x03\x00\x82\x01q\xfd\xee\xfe\x18\xff\xf2\x01z\x07\xfe\x16\x93\x01\x01\x81>U\x04\x00\xf4\xff\x1d\x00\xec\xfb\x1c\x00v\x01\\\xfdw\x00\x18\x00g\x02\xbb:\xfe\x0e\x94\x01\x01\x1d>U\x04\x00\xc9\x97iD\n\xd7\x17\xbei\x10\xdf\x8e\xfe\x0e\x95\x01\x01\x89>U\x04\x00\xb4\xd9iD\x14\xae\x05>\xa8\x15\x04N\xfe\x1f\x96\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x14\x01\xe8:#\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PY3\xfe\x06\x97\x01\x01}\xc5\x14\x00\x00\x03\x005\xfc\xfe\x04\x98\x01\x01\x98\x00\x00\x80\x8ao\xbb\xfe\x02\x99\x01\x01*\x00\x00q\x83\xfe\x1e\x9a\x01\x01\x18\xe06\xec\x10\x00\x00\x00\x00n\xa6\x02\x18\xce\xe7\xb8\xfdPi\n\x00F\x00\xff\xff\x0e\x00\xebZ\x03\x0cD4\xfe\x1a\x9b\x01\x01>\x13\xda`\xc0\x05\xe7\xba?)<'=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x1f\x03\xfe\x08\x9c\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xff\xf6\xfe\x1c\x9d\x01\x01\x1eRU\x04\x00\x86\x82\xb0\xbd*\x93)>\x8f.\xbf\x8aC\xfe\x18\x9e\x01\x01\xb2\x87\x9b\xca\xbd \xf3d\xa9\x15\x06\xe1\xfe\x1f\xb0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00)\x01\xe8:\xf7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xad\x07\xfe\x06\xb1\x01\x01}\xc5\x14\x00\x00\x03\x00\xc8\xeb\xfe\x04\xb2\x01\x01\x98\x00\x00\x80\x8af\xa8\xfe\x02\xb3\x01\x01*\x00\x00\xa5\t\xfe\x1e\xb4\x01\x01\x18\x08H\xef\x10\x00\x00\x00\x00m\xa6\x02\x18\xce\xe7\xb8\xfdFi\n\x00F\x00\xff\xff\x08\x00\xebZ\x03\x0c\xa5\xbb\xfe\x1a\xb5\x01\x01>.~ \xc0\xb2\xc2z\xba\xccXN=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00v\xcd\xfe\x08\xb6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00me\xfe\x1c\xb7\x01\x01\x1eWV\x04\x00/]2\xbd\xf7\xdb\x18=\xd4b2@\x93\x07>>~\xcb\xd2\xbd\xec\xd3_\xbf<9\xfe\x18\xb8\x01\x01\xb2\x9btr\xbd%=5=\xee\xf63@\x14\x0e*Dm\xa6\x02\x18\xce\xe7\xb8\xfdx\xbb\xfe\x1c\xb9\x01\x01\xa3R\xa7\x16:\\\x8b\xb9\xba]\x86\xa89\x00\x00\x00\x00\x00\x00\x00\x00\x8f`\x89<8\xb6B\xf5\xe26<\\bF<\xcc\xeb\xa2?\x00\x1f\x07J'b'\xfe\x15\xbf\x01\x01$G\x80\xf2\x10E\x069\x06\xd3\x05\xe7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00MT\xfe\x16\xc0\x01\x01#\xa8V\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00OJ\xfe\x03\xc1\x01\x01Ms\x00\x00l\x92'b'\xfe\x14\xc2\x01\x01J\n\xd7#<\n\xd7#<\xe1z\xf4?\xb8\x1e\x05>\x99\x000\x00\xff,\xfe\x1a\xc3\x01\x01\x1b\xd6X\xf4\x10\x00\x00\x00\x00\xf5\xff\x1c\x00R\xfc>\x00s\xff\xac\xfe\xff\xfe\x8d\xffp\x01\xc4K\xfe\x16\xc4\x01\x01t W\x04\x00\xf6\xff(\x00O\xfcC\x00x\xff\xa7\xfe\r\xff\xf8\xfe\xfe\x01\x991\xfe\x16\xc5\x01\x01\x81!W\x04\x00\xee\xff \x00D\xfc\x08\x00t\xff\xba\xfe\xa5\x00\xff\xffi\x02\xd0\xc2\xfe\x0e\xc6\x01\x01\x1d!W\x04\x00\xdb\x96iDR\xb8&\xbei\x10+\xe5\xfe\x0e\xc7\x01\x01\x89!W\x04\x00\xcf\xd9iD)\\\x07>\xa9\x15Iz\xfe\x1f\xc8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe8:\xf7\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PS\x0e\xfe\x06\xc9\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8\t\xfe\x04\xca\x01\x01\x98\x00\x00\x80\x8ab9\xfe\x02\xcb\x01\x01*\x00\x00\x05\xc6\xfe\x1e\xcc\x01\x01\x180Y\xf2\x10\x00\x00\x00\x00m\xa6\x02\x18\xce\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x01\x00\xebZ\x03\x0c\xcc\x0f\xfe\x1a\xcd\x01\x01>!E\xe9\xbf\xf0\xdc\x11\xc0R\x10\r=\x00\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\xcbR\xfe\x08\xce\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00$\xc4\xfe\x1c\xcf\x01\x01!\x9eV\x04\x00l\xa6\x02\x18\xcf\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x10\x00\x00\x00\n\x00\x99;\xa7\xf4\xfe\x1c\xd0\x01\x01 4W\x04\x00D\x85d=-`\x18?F\x95\xcb\xbf\x8c\xfc+>#\t\x9e;\xdc\x85\xd9\xbd\xa7\\\xfe\x03\xd1\x01\x01Ms\x00\x00\x14\xc9'b'\xfe\x1c\xd2\x01\x01\x1e]W\x04\x00\xbd\xf8\xc7\xbc\xdeW\xac\xbb\x19\xc8)@\xbf\xf4.<\xea\xf39\xbe\xe2\xfbo\xbe\x9c\xc0\xfe\x18\xd3\x01\x01\xb2\xe6\xd3!\xbd\xa0 \xe69\x0e\xfc*@{\x14*Dm\xa6\x02\x18\xce\xe7\xb8\xfd\x81\xb1\xfe\x1c\xd4\x01\x01\xa3\xff\xa0\x17:\xaa\xea\xba\xba\x94\x14\xa89\x00\x00\x00\x00\x00\x00\x00\x00\x10/\xb4<\x95\xe7\x9c\xb8\x1e\x05>\x8f\xc2\xf5?\n\xd7\xa3<\x96\x009\x00\xe1\x0e\xfe\x1a\xde\x01\x01\x1bS\x07\xf8\x10\x00\x00\x00\x00\xe8\xff#\x00!\xfc:\x00\xbb\xff9\x00\x19\xff{\xffr\x01\xeeX\xfe\x16\xdf\x01\x01t\x12X\x04\x00\xe9\xff\x1e\x00/\xfc:\x00\xc2\xff4\x00%\xff\xe4\xfe\x08\x02\x02\xb1\xfe\x16\xe0\x01\x01\x81\x12X\x04\x00\xe5\xff-\x00\x1c\xfc/\x00\xba\xff6\x00\xc0\x00\xc4\xfft\x02{\\\xfe\x0e\xe1\x01\x01\x1d\x12X\x04\x00\x1b\x98iDR\xb8\x12\xbei\x10vr\xfe\x0e\xe2\x01\x01\x89\x12X\x04\x00\xc5\xdaiDR\xb8\x16>\xaa\x15C"\xfe*\xe3\x01\x01\x96s\xe7f\xbc\xfdl\x01\x00i\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00E\x12\xfe\x1f\xe4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x00\xe8:\x17\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P|q\xfe\x06\xe5\x01\x01}\xc8\x14\x00\x00\x03\x00\x92\'\xfe\x04\xe6\x01\x01\x98\x00\x00\x80\x8at\x8e\xfe\x02\xe7\x01\x01*\x00\x00\x1c\x14'b"\xfe\x1e\xe8\x01\x01\x18Xj\xf5\x10\x00\x00\x00\x00s\xa6\x02\x18\xcf\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\r\x00\xebZ\x03\x0c\xae\xfa\xfe\x1a\xe9\x01\x01>.\x19.\xbf\x7fj\x86\xc0{TF=\x00\x00\x00\x00\x00\x00\x00\x00\x96\x00\x00\x00\x00\x00\xb7\xff\xfe\x08\xea\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x000g\xfe\x1c\xeb\x01\x01!0X\x04\x00q\xa6\x02\x18\xce\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x11\x00\x00\x00\x02\x00\xc8:0\x9b\xfe\x1c\xec\x01\x01 :X\x04\x00\x91g\xde=\x07\xd8\x17?\xf6\x1c\xcb\xbf\x94\x812>7\x028\xba\x06\xba\xf0\xbc\x02,\xfe\x03\xed\x01\x01Ms\x00\x00\xfe\x1f\xfe\t\x00\n\x00m\x06\x00\x00\x00\x00\xdb\x00\x00\x00\xba\x1c\xfe\x1c\xee\x01\x01\x1ebX\x04\x00\xb0\x8c\xe9\xbc\xcd\xa6R\xbd,\xc0'@T\xce\x84=\xde\xa6\x86\xbe\x04E\x11\xbejY\xfe\x18\xef\x01\x01\xb2c3:\xbd,v;\xbd\xf1\xf4(@\x85\x0b*Ds\xa6\x02\x18\xcf\xe7\xb8\xfd\xd6\xd3\xfe\x1c\xf0\x01\x01\xa3q\x8f\x18:\x01A\xbc\xba\x9f\xb5\xa79\x00\x00\x00\x00\x00\x00\x00\x00\xae\xc7\xaf<\x8c\\\x8c\xaa\x15\x8fT\xfe\x1f\xff\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00K\x01-;\x1e\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xbb\x80\xfe\x06\x00\x01\x01}\xc8\x14\x00\x00\x03\x00\xc2\x91\xfe\x04\x01\x01\x01\x98\x00\x00\x80\x8a\x1b\xb2\xfe\x02\x02\x01\x01*\x00\x00\'\xc6\xfe\x1e\x03\x01\x01\x18\x90\x90\xfb\x10\x00\x00\x00\x00w\xa6\x02\x18\xce\xe7\xb8\xfdxi\n\x00F\x00\xff\xff\x19\x00\x13~\x03\x0c=\xc8\xfe\x1a\x04\x01\x01>\xef\xb9\xef\xbe}\x86k\xc0\x85)\x8b=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x83/\xfe\x08\x05\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00HB\xfe\x14\x06\x01\x01J\x00\x00\x80>\x00\x00\x80>\xe1z\xf4?{\x14.>\x93\x004\x00\xe6\x1b\xfe\x1c\x07\x01\x01!\xfaX\x04\x00u\xa6\x02\x18\xcf\xe7\xb8\xfd\x06c\n\x00v\x07\x00\x00\x08\x00\x03\x00\x12\x00\xa19$\xf0\xfe\x1c\x08\x01\x01 ?Y\x04\x00Y\x00 >\xe9\xb5\x18?*,\xcb\xbf\xff\xc0\xb6=\x81\x98\x10=\xed\xd4=\xbe\\\xe5\xfe\x03\t\x01\x01Ms\x00\x00\xc3\x11'b'\xfe\x1c\n\x01\x01\x1egY\x04\x00\x83-c\xbc^;~\xbd5{$@\xf8\xaf\x03;#\xc8\x08>\xf1@\xb9\xbd+\x02\xfe\x18\x0b\x01\x01\xb2\xfe$\xf9\xbc\xcd\xd1w\xbd\xa8\xa6%@R\x08*Dw\xa6\x02\x18\xce\xe7\xb8\xfd\xea\xcd\xfe\x1c\x0c\x01\x01\xa3Yp\x19:e\x88\xbd\xba\x05\x16\xa79\x00\x00\x00\x00\x00\x00\x00\x00T\xb4\xb7<\x12L\xa2\xaa\x15B\xd3\xfe\x1f\x19\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01-;\xb9\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xac\x95\xfe\x06\x1a\x01\x01}\xc8\x14\x00\x00\x03\x00\x0f\xf7\xfe\x04\x1b\x01\x01\x98\x00\x00\x80\x8a\xbf\xa9\xfe\x02\x1c\x01\x01*\x00\x00\xcf\xf5\xfe\x1e\x1d\x01\x01\x18\xd0\x9d\xfe\x10\x00\x00\x00\x00z\xa6\x02\x18\xce\xe7\xb8\xfd\x8ci\n\x00F\x00\xff\xff\x11\x00\x13~\x03\x0c\xdfV\xfe\x1a\x1e\x01\x01>iC\x13\xbf\x99\xf0J\xc0\xf6\x92\x80=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\xcb\xa1\xfe\x08\x1f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xaa>'b'\xfe\x14 \x01\x01J{\x14.>{\x14.>=\n\xf7?\xb8\x1e\x05>\x92\x001\x00lh\xfe\x03!\x01\x01Ms\x00\x00\x8f\x8a\xfe\x1c"\x01\x01!\xc2Y\x04\x00x\xa6\x02\x18\xcf\xe7\xb8\xfd\x1ac\n\x00\x8a\x07\x00\x00\x03\x00\x02\x00\x0c\x00O9\x1c\x8b\xfe\x1c#\x01\x01 EZ\x04\x00\xe7\xce>>"J\x19?.\x18\xce\xbf9\x8f\x1b=U\xc5\xd8\xf5\xe26<\\bF<\xc0 \xa5?\x00\x1f\xbdl\xfe\x15-\x01\x01$\xf6v\x02\x11'\x06 \x06/\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9R\xfe\x16.\x01\x01#\xbeZ\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xacF\xfe\x03/\x01\x01Ms\x00\x00\x82\xba"b'\xfe\x1a0\x01\x01\x1bC\x14\x03\x11\x00\x00\x00\x00\xe3\xff\x1b\x00$\xfc\xfe\xff\xf2\xff\xb1\xff0\xffg\xff{\x01\x8a\x81\xfe\x161\x01\x01t\xe6Z\x04\x00\xe0\xff\x0e\x00=\xfc\xfd\xff\xf9\xff\xb7\xff=\xff\xd0\xfe\n\x02\x9d\xd4\xfe\x162\x01\x01\x81\xe6Z\x04\x00\xe1\xff\x1c\x00+\xfc\xe0\xff\xf4\xff\xb7\xff\xd8\x00\xaa\xff\x99\x02<.\xfe\x0e3\x01\x01\x1d\xe6Z\x04\x00\xf0\x95iD)\\5\xbei\x10\x06\x11\xfe\x0e4\x01\x01\x89\xe6Z\x04\x00\x8f\xdaiD)\\\x13>\xab\x15b\xe0\xfe\x1f5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01-;\xd2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PT\x1d\xfe\x066\x01\x01}\xc8\x14\x00\x00\x03\x00z\xf7\xfe\x047\x01\x01\x98\x00\x00\x80\x8a\xa9\x1e\xfe\x028\x01\x01*\x00\x00:\xf9\xfe\x1e9\x01\x01\x18\xc8\xb6\x01\x11\x00\x00\x00\x00}\xa6\x02\x18\xce\xe7\xb8\xfd\xa0i\n\x00F\x00\xff\xff\x10\x00\x13~\x03\x0c\x87\x9d\xfe\x1a:\x01\x01>\x120(\xbf\xf7\xdd?\xc0)j\x87=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00%\xe1\xfe\x08;\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x9d\xfe\x14<\x01\x01J\n\xd7#>\n\xd7#>\xebQ\xf8?)\\\x8f=\x91\x004\x00\xbc\xc1'b'\xfe\x1c=\x01\x01!\x8dZ\x04\x00z\xa6\x02\x18\xcf\xe7\xb8\xfd$c\n\x00\x94\x07\x00\x00\x00\x00\x02\x00\t\x00\xf98U\xba\xfe\x1c>\x01\x01 K[\x04\x00b1V>Co\x19?\xdc[\xcf\xbf\x8d&\x07;\xdfp\xb6<\xe6\xf1\xbc\xbd\x97\xe2\xfe\x03?\x01\x01Ms\x00\x00\xfa\xe1\xfe\x1c@\x01\x01\x1es[\x04\x00l\x82\xa7\xbc\xe9\xb4G\xbd8\xdc"@RD\x8a<}K\t\xbdB\xa6\xc0\xbb?#\xfe\x18A\x01\x01\xb2$\xca\x17\xbd=\xe8;\xbd\xe9\xfb#@\xeb\x11*D\x7f\xa6\x02\x18\xcc\xe7\xb8\xfdJ?\xfe\x1cB\x01\x01\xa3\xe8*\x1b:\x81\xe3\xbf\xba%&\xa59\x00\x00\x00\x00\x00\x00\x00\x00\x07~\xbb<\x9a\x13\x9b<\xa7\xd8\xfe\x03C\x01\x01\xa5\xc5\x14\x00\x06\xd4\xfe\x0cD\x01\x01\x02xIm{\xb1N\x05\x00\x87[\x04\x00C\xab\xfe\x16E\x01\x01\x88{\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9b\x9b\xfe\x16F\x01\x01\xc1\x1f\xaf\xc1<\xd6\x9f\xe9<\xd7-\xd6;y\x19\xc8=\x00\x00\x00\x00?\x03d\xf5'b'\xfe\x03G\x01\x01/\xff\x00\x00\xe9<\xfe\x15H\x01\x01$\xdfs\x06\x11;\x06E\x06z\x05\x03\x06\x00\x00\x00\x00\x00\x00\x00\x00\x005{\xfe\x16I\x01\x01#\xc3[\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00O\xa6\xfe\x03J\x01\x01Ms\x00\x00\xe2\xfe\xfe\x1aK\x01\x01\x1b\xc4\xc1\x06\x11\x00\x00\x00\x00\xe1\xff\x0e\x00\x1c\xfc\x11\x00\xf0\xff\x07\x003\xffe\xff|\x01\xec4\xfe\x16L\x01\x01t\xd7[\x04\x00\xe3\xff\x18\x00,\xfc\xf8\xff\x00\x00\x07\x00@\xff\xd2\xfe\x0c\x02\x83\xc7\xfe\x16M\x01\x01\x81\xd7[\x04\x00\xe0\xff\x18\x00"\xfc,\x00\xd2\xff\x05\x00\xc4\x00\xd6\xffo\x02\xa6\xe4\xfe\x0eN\x01\x01\x1d\xd7[\x04\x00\x9c\x96iD\xd7\xa3*\xbei\x10iK\xfe\x0eO\x01\x01\x89\xd7[\x04\x00U\xdbiD\x8f\xc2\x1f>\xac\x15Uo\xfe\x1fP\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00$\x01\xc4:\xd1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P5\xa3\xfe\x06Q\x01\x01}\xc6\x14\x00\x00\x03\x002\xfe\xfe\x04R\x01\x01\x98\x00\x00\x80\x8a\xeb}\xfe\x02S\x01\x01*\x00\x00=+\xfe\x1eT\x01\x01\x18\x08\xc4\x04\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xcc\xe7\xb8\xfd\xa0i\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c?\xb6\xfe\x1aU\x01\x01>f\x08g\xbf\xe2\x1eV\xc0\xe1\xe6\x06=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xa1N\xfe\x08V\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00>u'b'\xfe\x14W\x01\x01J\x8f\xc2u=\x8f\xc2u=\x99\x99\xf9?\xcc\xccL=\x92\x005\x00\xa6\x89\xfe\t\x01\n\x00m\x06\x00\x00\x00\x00\xd9\x00\x00\x00\xd8t\xfe\x1cX\x01\x01!\t\\\x04\x00{\xa6\x02\x18\xcf\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfd\xff\x02\x00\x04\x0089*k\xfe\x1cY\x01\x01 P\\\x04\x00\x90\xe4a>+>\x18?.\xdb\xcf\xbf\t\x9e\x12\xbdsY\xaa<\x9c\x967\xbd\x8f\x1b\xfe\x03Z\x01\x01Ms\x00\x00\x9a\xa5'b"\xfe\x1c[\x01\x01\x1ey\\\x04\x00\x01o\x82\xbc0*I\xbd\xe4I#@t-\x89\xbcz\xdc\xb9;\xae}\x18\xbe\xef\xef\xfe\x18\\\x01\x01\xb2\xe9\xa9\x03\xbd\x0c}A\xbd\xe3\x82$@\x8f\x12*D\x80\xa6\x02\x18\xcd\xe7\xb8\xfd\xeb\xff\xfe\x1c]\x01\x01\xa3\x94\x11\x1c:\xab\xf5\xc0\xba\xed\xe2\xa39\x00\x00\x00\x00\x00\x00\x00\x00q\x97\xab<\xe9\x1b\xb0<\xb6\xf6\xfe\x03^\x01\x01\xa5\xc5\x14\x00\xa35\xfe\x0c_\x01\x01\x02\x18Aq{\xb1N\x05\x00\x8c\\\x04\x00\xa1L\xfe\x16`\x01\x01\x88{\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00H\x91\xfe\x16a\x01\x01\xc1\xf7\x15g<\xf9\xc3\xce<\xe43\xd5;\xb67\xc2=\x00\x00\x00\x00?\x03\xf9/\xfe\x1ab\x01\x01\x1b\xcdp\n\x11\x00\x00\x00\x00\xe3\xff\x13\x00\xf7\xfb\x04\x00'\x00\xce\xff3\xfff\xffw\x01\x86'\xfe\x16c\x01\x01t\xc8\\\x04\x00\xe3\xff\x1d\x00\xfc\xfb\xe6\xff*\x00\xd1\xff8\xff\xc2\xfe\x00\x02\xccV\xfe\x16d\x01\x01\x81\xc8\\\x04\x00\xdd\xff\x1b\x00\x03\xfc\xb9\xff+\x00\xd4\xff\xd2\x00\xaa\xffr\x026\xeb\xfe\x0ee\x01\x01\x1d\xc8\\\x04\x00\x0b\x97iD\x14\xae#\xbej\x10^\xca\xfe\x0ef\x01\x01\x89\xc8\\\x04\x00\x0c\xdciD33+>\xad\x15\x02\xda\xfe\x1fg\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xc4:D\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P%\xe2\xfe\x06h\x01\x01}\xc5\x14\x00\x00\x03\x00\xa8,\xfe\x04i\x01\x01\x98\x00\x00\x80\x8a\x8b\xdc\xfe\x02j\x01\x01*\x00\x00N\xbc\xfe\x1ek\x01\x01\x188\x98\n\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xcd\xe7\xb8\xfd\xbei\n\x00F\x00\xff\xff\x04\x00\x13~\x03\x0c1\xac\xfe\x1al\x01\x01>b\xa5\xa6\xbf\x92\xdf*\xc0\xcd\x04B=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xa4\x1c\xfe\x08m\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xb9\xfe\x12n\x01\x01\xfc\xdb\\\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd6\xde\xfe\to\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03c\xdc"b'\xfe\x15p\x01\x01$.\xc6\n\x11=\x06\xdb\x05\x03\x06g\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00=s\xfe\x16q\x01\x01#\xde\\\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00){\xfe\x03r\x01\x01Ms\x00\x00\xd6>\xfe\x14s\x01\x01J\xcc\xccL=\xcc\xccL=\x99\x99\xf9?\n\xd7\xa3=\x91\x005\x00e\x9c'b'\xfe\x1ct\x01\x01!\xd3\\\x04\x00{\xa6\x02\x18\xcf\xe7\xb8\xfd.c\n\x00\x9e\x07\x00\x00\xfa\xff\x02\x00\x08\x00\xc68\xa3\x16\xfe\x1cu\x01\x01 U]\x04\x00{\xe3a>\x13i\x18?5<\xd0\xbf\xea\x81\x83\xbd\xfc\xa9\xa8<~\xe5\xa5\xbd\xaf\xff\xfe\x03v\x01\x01Ms\x00\x00\x08(\xfe\x1cw\x01\x01\x1e}]\x04\x00\xbb]\n\xbd\xbd \'\xbd/J"@\xe0\xf8\xc6\xbd\x8d\xd9$=\r\xcc\xc0\xbc3w\xfe\x18x\x01\x01\xb2\x1d\x15K\xbd.\x03"\xbd\xe6s#@\xae\x17*D\x81\xa6\x02\x18\xcd\xe7\xb8\xfdx/\xfe\x1cy\x01\x01\xa3\xae\xed\x1c:\xab\xfa\xc1\xba\xf4b\xa29\x00\x00\x00\x00\x00\x00\x00\x00 Z\x91\xff\xc3\xfe\x04\x02\xad\xaf\xfe\x16\x80\x01\x01\x81\xba]\x04\x00\xdf\xff\x0e\x009\xfc\x02\x00\xf8\xff\x0b\x00\xd9\x00\xad\xffj\x02(\x01\xfe\x0e\x81\x01\x01\x1d\xba]\x04\x00\xcc\x94iD\x99\x99G\xbej\x10T\x81\xfe\x0e\x82\x01\x01\x89\xba]\x04\x00R\xd9iD=\n\xff=\xae\x15C\xf0\xfe\x1f\x83\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x006\x01\xc4:\\\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00PgP\xfe\x06\x84\x01\x01}\xc8\x14\x00\x00\x03\x00\x8c]\xfe\x04\x85\x01\x01\x98\x00\x00\x80\x8a)I\xfe\x02\x86\x01\x01*\x00\x00L/\xfe\x1e\x87\x01\x01\x18\x80\xf7\r\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xce\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x03\x00\x13~\x03\x0c\xa3\x9b\xfe\x1a\x88\x01\x01>9\xa5\xaa\xbfm\xf0\x12\xc0\xc2yH=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\xfa\xa5\xfe\x08\x89\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x006\xbf\xfe\x03\x8a\x01\x01Ms\x00\x00\xf1P\xfe\x15\x8b\x01\x01$W\xbc\x0e\x11\xf9\x05\x1c\x06+\x06 \x06\x00\x00\x00\x00\x00\x00\x00\x00\x00F\x1a\xfe\x16\x8c\x01\x01#\xe2]\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xdf6'b'\xfe\x14\x8d\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xf5(\xfc?\n\xd7#=\x91\x002\x00[:\xfe\x03\x8e\x01\x01Ms\x00\x00/F\xfe\x1c\x8f\x01\x01!\xb0]\x04\x00{\xa6\x02\x18\xd0\xe7\xb8\xfdLc\n\x00\xbc\x07\x00\x00\xfc\xff\x04\x00\x01\x00\xb58\xf3\x9f\xfe\x1c\x90\x01\x01 Z^\x04\x00\xdc\xea_>\xfb\xcb\x1a?@a\xd3\xbf;\x89E\xbd%V6=\xd7s\x8f\xbc\xbd*'b'\xfe\x1c\x91\x01\x01\x1e\x83^\x04\x00a@\r\xbdH\xc4\x0f\xbd\x0b\x18"@\x0f\x06\x80<\xe00\x12=\xd5\xc9\xe6\xbc\x1b\xea\xfe\x18\x92\x01\x01\xb2X\xebR\xbd\xe5\xfc\t\xbd\x9aA#@\x00 *D\x81\xa6\x02\x18\xcf\xe7\xb8\xfd%\xe1\xfe\x1c\x93\x01\x01\xa3\xc1\xb8\x1d:[\xf5\xc2\xbaS\xab\xa09\x00\x00\x00\x00\x00\x00\x00\x00r\x04\x80<\xe1\x7f\xc7<\x1f\xf6\xfe\x03\x94\x01\x01\xa5\xc8\x14\x00\xec6\xfe\x0c\x95\x01\x01\x02X0y{\xb1N\x05\x00\x97^\x04\x007q\xfe\x16\x96\x01\x01\x88{\xa6\x02\x18\xd0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa3\x12\xfe\x16\x97\x01\x01\xc1\xf3u\xa0<\xb6\xec\xc2<\x81\x046;\xc4\xbf\xd5=\x00\x00\x00\x00?\x03\x05k\xfe\x16\x98\x01\x01\xe1\xe6\xd0"?G9X>\xf5\xe26<\\bF<\xabJ\x9e?\x00\x1f\xa6\xb6\xfe\x1a\x99\x01\x01\x1b\xed\xcd\x11\x11\x00\x00\x00\x00\xe2\xff\x0e\x00\x11\xfc\x0e\x00\xf8\xff\x03\x003\xff[\xffr\x01q\xfe\xfe\x16\x9a\x01\x01t\xab^\x04\x00\xe6\xff\x11\x00\x12\xfc\x06\x00\n\x00\x04\x00>\xff\xcb\xfe\x07\x02#\xcd\xfe\x16\x9b\x01\x01\x81\xab^\x04\x00\xdd\xff\x1b\x00\x1c\xfc\xf6\xff\x0b\x00\x06\x00\xd6\x00\xb8\xffy\x02\xe7i\xfe\x0e\x9c\x01\x01\x1d\xab^\x04\x00\x94\x95iD\xb8\x1e;\xbej\x10\xc5K\xfe\x0e\x9d\x01\x01\x89\xab^\x04\x00\xb4\xd9iD\x14\xae\x05>\xae\x15\x8e\xb3\xfe\x1f\x9e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1f\x01\xc4:\\\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xaa\xa5\xfe\x06\x9f\x01\x01}\xc5\x14\x00\x00\x03\x00\x9f@\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0\xfe\x04\xa1\x01\x01\x98\x00\x00\x80\x8a\xf5\x81\xfe\x02\xa2\x01\x01*\x00\x00\xb9#\xfe\x1e\xa3\x01\x01\x18\xa8\x08\x11\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xcf\xe7\xb8\xfd\xdci\n\x00F\x00\xff\xff\x02\x00\x13~\x03\x0c0V\xfe\x1a\xa4\x01\x01>\xc5\xees\xbf3Z\x0e\xc0\xc2]E=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xe9\xcb\xfe\x08\xa5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00J1'b'\xfe\x15\xa6\x01\x01$\x8a\xb9\x12\x11:\x06\x0b\x06\x19\x06b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\x01\xfe\x16\xa7\x01\x01#\xe7^\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf6\x16\xfe\x03\xa8\x01\x01Ms\x00\x00n\xed'b'\xfe\x14\xa9\x01\x01J\xcc\xccL=\xcc\xccL=R\xb8\xfe?\n\xd7#=\x91\x002\x00\xffI\xfe\x1c\xaa\x01\x01!-_\x04\x00|\xa6\x02\x18\xd1\xe7\xb8\xfdVc\n\x00\xc6\x07\x00\x00\xfe\xff\x06\x00\x03\x00\xa88\xab\x9e\xfe\x1c\xab\x01\x01 `_\x04\x00\xc3Vf>\x97\x98\x1e?H\x1b\xd5\xbf\x93\x1b\xb8\xbc^\xe4\x88=\xbbc\x1b\xbdlv\xfe\x1c\xac\x01\x01\x1e\x88_\x04\x00\x84\xf7\xb5\xbc\xdb\x9a\x11\xbd\xce\x02"@ 6p=\x88z5\xaf\x15\xec\x9f\xfe\x1f\xb3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\n;z\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x92\x83\xfe\x06\xb4\x01\x01}\xc5\x14\x00\x00\x03\x00\x0c\xe0\xfe\x03\xb5\x01\x01Ms\x00\x00\xcb\x0c\xfe\x04\xb6\x01\x01\x98\x00\x00\x80\x8a\x83\x97\xfe\x02\xb7\x01\x01*\x00\x00\xd3f\xfe\x1e\xb8\x01\x01\x18\xc8\xc7\x13\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xd0\xe7\xb8\xfd\xd2i\n\x00F\x00\xff\xff\x04\x00\x13~\x03\x0ckV\xfe\x1a\xb9\x01\x01>W\xaa\x06\xbf&\xc7\x0e\xc0fnK=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00N\xaa\xfe\x08\xba\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb1^\xfe\x1c\xbb\x01\x01\xa3h\x83\x1e::\xf4\xc3\xbab\x8d\x9e9\x00\x00\x00\x00\x00\x00\x00\x00\xffqt<\xb0M\xd9<\xdc\xa8\xfe\x03\xbc\x01\x01\xa5\xc5\x14\x00/&\xfe\x0c\xbd\x01\x01\x02\x00z}{\xb1N\x05\x00\xb1_\x04\x00\xb4\xb2\xfe\x16\xbe\x01\x01\x88|\xa6\x02\x18\xd2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa4\x02\xfe\x16\xbf\x01\x01\xc1\xdc\x82t<\xe3\xdf\xc3\xd1(#?ms\xd4\xbf@#\xdc\xbc\xbd\xf3J=0k\x9a\xba~\xd4\xfe\x1a\xc7\x01\x01\x1b\xbe(\x19\x11\x00\x00\x00\x00\xd7\xff\x19\x00g\xfc\xed\xffs\x00\xf7\x00(\xffk\xff}\x01j\xab\xfe\x16\xc8\x01\x01t\x8d`\x04\x00\xdc\xff%\x00w\xfc\xd6\xffq\x00&\x01>\xff\xd8\xfe\x10\x02\x16\x1e\xfe\x16\xc9\x01\x01\x81\x8d`\x04\x00\xdd\xff.\x00_\xfc\x85\xff^\x00=\x01\xc9\x00\xce\xffd\x02`C\xfe\x0e\xca\x01\x01\x1d\x8d`\x04\x00f\x96iD\x00\x00.\xbek\x10\xd5\xf5\xfe\x0e\xcb\x01\x01\x89\x8d`\x04\x00\x8f\xdaiD)\\\x13>\xaf\x15.c\xfe\x1f\xcc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0f\x01\n;\xde\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P)\x8f\xfe\x06\xcd\x01\x01}\xc5\x14\x00\x00\x03\x00\xfdW\xfe\x04\xce\x01\x01\x98\x00\x00\x80\x8a\x87\x06\xfe\x02\xcf\x01\x01*\x00\x00s\xa9\xfe\x1e\xd0\x01\x01\x18\xd8\xdc\x16\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xd2\xe7\xb8\xfd\xd2i\n\x00F\x00\xff\xff\x08\x00\x13~\x03\x0c<\x1e\xfe\x1a\xd1\x01\x01>\x8c*\x0c>\xfeo\xde\xbfG%@=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x16\xab\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5\xfe\x1c\xd3\x01\x01\x1e\xa1`\x04\x00\x15'\x15\xbc/&W\xbc\x92}%@eA\xf6\xbd{\x07d\xbcg\xe83>\x11\x8a\xfe\x18\xd4\x01\x01\xb26\x7f\xc8\xbcCG%\xbc\xae\x8c&@R\x18*D\x81\xa6\x02\x18\xd2\xe7\xb8\xfd\x12\x8f\xfe\x03\xd5\x01\x01Ms\x00\x00\xca\xdf\xfe\x1c\xd6\x01\x01\xa3a1\x1f:\xb1\xd7\xc4\xba\xa0r\x9c9\x00\x00\x00\x00\x00\x00\x00\x00J\x80Z<\xa4\x88\xda<\x0f\xd4\xfe\x03\xd7\x01\x01\xa5\xc5\x14\x00BR\xfe\x0c\xd8\x01\x01\x02\xf0\xb7\x81{\xb1N\x05\x00\xb5`\x04\x00\x18\x14\xfe\x16\xd9\x01\x01\x88}\xa6\x02\x18\xd4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xffe\xfe\x16\xda\x01\x01\xc1>\xe2\x19&?\x1cn\xd3\xbf\x9e\t\x90\xbc\xf3\x86z=\x1a\x94\x83\xbd\xaf\xbe\xfe\x1a\xe3\x01\x01\x1b\xb5\xd8\x1c\x11\x00\x00\x00\x00\xe7\xff\xfe\xff\xd8\xfb\xb2\x00\x99\x00\x04\x00.\xffc\xffv\x01\x9a2\xfe\x16\xe4\x01\x01t\x7fa\x04\x00\xe7\xff\x06\x00\xee\xfb\xac\x00\x9b\x00\xe9\xff0\xff\xb1\xfe\xf8\x01\xf9\xef\xfe\x16\xe5\x01\x01\x81\x7fa\x04\x00\xdb\xff\x17\x00\xda\xfb\xcc\x00\xa8\x00\xd4\xff\xc1\x00\x89\xff\x86\x02\x92\x10\xfe\x0e\xe6\x01\x01\x1d\x7fa\x04\x00\xc2\x95iDp=8\xbek\x10\xbfy\xfe\x0e\xe7\x01\x01\x89\x7fa\x04\x00k\xdaiD\xb8\x1e\x11>\xb0\x15\xefE\xfe\x1f\xe8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x16\x00\n;\xb7\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P1\x16\xfe\x06\xe9\x01\x01}\xc8\x14\x00\x00\x03\x00m\xc5\xfe\x04\xea\x01\x01\x98\x00\x00\x80\x8a[\xce'b'\xfe\x02\xeb\x01\x01*\x00\x00\x86\xa5\xfe\x1e\xec\x01\x01\x18@\xfb\x1c\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xd7\xe7\xb8\xfd\xd2i\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0cF\xb6\xfe\x1a\xed\x01\x01>\x1eNp\xbd\xa6\xdf\xc1\xbf\x00\xc4\x84=\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00E\xeb\xfe\x08\xee\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x84q\xfe\x1c\xef\x01\x01\x1e\xa7a\x04\x00R\xc0\x99\xbcZt2\xbd\x18Z#@\xc7\x1f\x1a>])L>\x9b)\x83;7\x7f\xfe\x18\xf0\x01\x01\xb2\x9d\xe7\x19\xbd<\x0b1\xbd\xe4\x87$@\xae\x07*D\x85\xa6\x02\x18\xd7\xe7\xb8\xfd\x10\xf8\xfe\x03\xf1\x01\x01Ms\x00\x00\xe4\x7f\xfe\x1c\xf2\x01\x01\xa3\xc6\xc9\x1f:{\xad\xc5\xba\xf0:\x9a9\x00\x00\x00\x00\x00\x00\x00\x00\xbd\xe5\x19<\x9d\x9e\xd8\x92\x004\x00\xf4%'b'\xfe\x1a\xfb\x01\x01\x1b\xaf\x86 \x11\x00\x00\x00\x00\xd9\xff\r\x00\x16\xfct\x00\'\x00\xca\xff+\xffm\xffz\x01\xe7\x17\xfe\x16\xfc\x01\x01tpb\x04\x00\xdd\xff\x13\x00,\xfcW\x00-\x00\xd6\xff4\xff\xce\xfe\x03\x02\x13\xc9\xfe\x16\xfd\x01\x01\x81pb\x04\x00\xd8\xff\x1b\x00\x03\xfcG\x00\x1f\x00\xcc\xff\xcd\x00\xb1\xff\x81\x02\xde\xc3\xfe\x0e\xfe\x01\x01\x1dpb\x04\x00}\x96iD\\\x8f,\xbel\x10\xa8\xf9\xfe\x0e\xff\x01\x01\x89pb\x04\x00\x87\xd8iD\x8f\xc2\xe5=\xb0\x15ZT\xfe*\x00\x01\x01\x96s\xe7f\xbc\xfbl\x01\x00l\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xae\xa1\xfe\x1f\x01\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x007\x01\xf4:#\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf2@\xfe\x06\x02\x01\x01}\xca\x14\x00\x00\x03\x00[\r\xfe\x04\x03\x01\x01\x98\x00\x00\x80\x8a\xe1)\xfe\x02\x04\x01\x01*\x00\x00\xea\x9e\xfe\x1e\x05\x01\x01\x18h\x0c \x11\x00\x00\x00\x00\x87\xa6\x02\x18\xd8\xe7\xb8\xfd\xc8i\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0cS\xa5\xfe\x1a\x06\x01\x01>\x85`H>\x97n\xb9\xbfpe\x93=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\x83H\xfe\x08\x07\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x12I\xfe\x1c\x08\x01\x01!Qb\x04\x00\x7f\xa6\x02\x18\xd7\xe7\xb8\xfdVc\n\x00\xc6\x07\x00\x00\xff\xff\x01\x00\x0e\x00\x0294\xee\xfe\x1c\t\x01\x01 \x84b\x04\x00\xd5R\x85>|\x8d+?\x12\xab\xd4\xbf\xc76\x83\xbc\x84\x04W<\xe5\xfa\x12\xbe\x8e_\xfe\x03\n\x01\x01Ms\x00\x00\x13\x9b\xfe\x1c\x0b\x01\x01\x1e\xacb\x04\x00\t\xf8P<\x927\xa4\xbc\x9c\xce"@ Z;=\xf0p\xb3\xbc\x8f\xf0\xd0\xbd\xee\xfe\xfe\x18\x0c\x01\x01\xb20}\x88\xbb\x91*\x95\xbc\x8c\x05$@\xae\x17*D\x87\xa6\x02\x18\xd8\xe7\xb8\xfd]\x0b'b'\xfe\x1c\r\x01\x01\xa3\xefI :\x00w\xc6\xba\r\xca\x979\x00\x00\x00\x00\x00\x00\x00\x00\r<<<\x02]\xf0<@z\xfe\x03\x0e\x01\x01\xa5\xc2\x14\x00\x0b\\\xfe\x0c\x0f\x01\x01\x02\xf8\\\x89{\xb1N\x05\x00\xc0b\x04\x00Y\xcc\xfe\x16\x10\x01\x01\x88\x7f\xa6\x02\x18\xd7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00`F\xfe\x12\x11\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x009?\xfe\x16\x12\x01\x01\xc126\xff<\xd5z(=vN\xcc;\x9f\x80\x06>\x00\x00\x00\x00?\x03z\x8f\xfe\x16\x13\x01\x01\xe1\xc1\xca!?)\x91D>\xf5\xe26<\\bF\xb0\x15\xc9\xc1\xfe\x1f\x1d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01\xf4:s\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x13\x11\xfe\x06\x1e\x01\x01}\xc2\x14\x00\x00\x03\x00\r@\xfe\x04\x1f\x01\x01\x98\x00\x00\x80\x8aZ\x96\xfe\x02 \x01\x01*\x00\x00\x1f\x92\xfe\x1e!\x01\x01\x18\x90\x1d#\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xda\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c[[\xfe\x1a"\x01\x01>\x8aY\xe8\xbe2\xa7\x08\xc0\x8f\xaa\x87=\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\x00\x00\x00\x00\xff\x0e\xfe\x08#\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x06\xea'b"\xfe\x1c$\x01\x01!\x1ac\x04\x00\x81\xa6\x02\x18\xd7\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x00\x00\xf8\xff\x07\x00\xa78\xd1Y\xfe\x1c%\x01\x01 \x89c\x04\x00\xc9\x99\x8f>\xc6E*?\xc3S\xd7\xbf\x84\x83\x1f\xbc\x08\x10\xb8\xbd\x16\xfa\x98\xbd\xae\xb3\xfe\x03&\x01\x01Ms\x00\x00\x81\x16\xfe\x1c'\x01\x01\x1e\xb1c\x04\x00\x00\x02%9#\x00\xdd\xbcN\xe1!@dP\xe4\xbdazy\xbdq\xba@\xbd\x19\x05\xfe\x18(\x01\x01\xb2\xd1\xd9x\xbc\xfb\x81\xce\xbc\xc6\x12#@\n'*D\x89\xa6\x02\x18\xda\xe7\xb8\xfdH\x04\xfe\x1c)\x01\x01\xa3\xa5\xb7 :}7\xc7\xba\xa1=\x959\x00\x00\x00\x00\x00\x00\x00\x00\x86!\\<\x0bV\xae\x1d \x94\xbf\x1e\xbf<\xc0\xcc\xe0h=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\xcc\xfd\xfe\x08=\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00P\x80\xfe\x14>\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\x01@\n\xd7#=\x91\x004\x00>B\xfe\x1c?\x01\x01!\xe3c\x04\x00\x83\xa6\x02\x18\xd5\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\x00\x00\xf5\xff\x02\x00\xdc8\x066\xfe\x1c@\x01\x01 \x8fd\x04\x008N\x9d>3/%?\xb0\xb0\xd9\xbf\xc6<\x83\xba\xb3 \xea\xbd1\xca\xd0\xbc\x1e0\xfe\x03A\x01\x01Ms\x00\x00\x8eY'b'\xfe\x12B\x01\x01\xfc\xb5d\x04\x004\x00\x01\x00ARMMASK\x00Wr\x9c\x12\xfe\tC\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\x06e\xfe\x1cD\x01\x01\x1e\xb8d\x04\x00\xd8\xd7\xeb\xba\xc5V:\xbd9\\"@/.l\xbd\xf7\x95\x91\xbd)\xa2\xf2\xbd\xdd\x0b\xfe\x18E\x01\x01\xb2\xf6%\x95\xbc\xd7\xa44\xbd!\xa3#@\x8f"*D\x8f\xa6\x02\x18\xd8\xe7\xb8\xfd<\x01\xfe\x1cF\x01\x01\xa3\xed\r!:\x86\xe8\xc7\xba\xed\xbb\x929\x00\x00\x00\x00\x00\x00\x00\x00\xb3H=<\x1c\xcd\x85<\xacC\xfe\x03G\x01\x01\xa5\xc5\x14\x00\xd8\xc2\xfe\x0cH\x01\x01\x02X\x9a\x91{\xb1N\x05\x00\xccd\x04\x00\xda\xe3\xfe\x16I\x01\x01\x88\x84\xa6\x02\x18\xd4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x8b<\xfe\x16J\x01\x01\xc1c5\xbc<\x81+q=\xcd+\x14;\x07\xb4\xb1=\x00\x00\x00\x00?\x03\x80f\xfe\x15K\x01\x01$\xdf\xa6*\x11a\x06/\x06\x12\x06G\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x1e\xfe\x16L\x01\x01#\x07e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1a\xf0\xfe\x03M\x01\x01Ms\x00\x00\xecb'b'\xfe\x1aN\x01\x01\x1b\x0c\x94+\x11\x00\x00\x00\x00\xd8\xff\x04\x00\xf6\xfb\xa8\xff\xf6\xff\xef\xff9\xffd\xffv\x01+&\xfe\x16O\x01\x01tDe\x04\x00\xe0\xff\x0e\x00\x00\xfc\x9a\xff\xf7\xff\xfb\xffA\xff\xc3\xfe\x07\x02)\x84\xfe\x16P\x01\x01\x81De\x04\x00\xd6\xff \x00\x05\xfc\xcb\xff\xee\xff\xf5\xff\xea\x00\xa2\xff\x82\x02\xab;\xfe\x0eQ\x01\x01\x1dDe\x04\x00\x93\x97iD33\x1b\xbem\x10J<\xfe\x0eR\x01\x01\x89De\x04\x00\xb0\xd9iD\xa4p\x05>\xb1\x15\xaf\x03\xfe\x1fS\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x11\x01\xf4:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xf33\xfe\x06T\x01\x01}\xc5\x14\x00\x00\x03\x00\x98]\xfe\x04U\x01\x01\x98\x00\x00\x80\x8a\t\x94\xfe\x02V\x01\x01*\x00\x00\x9e\xdb\xfe\x1eW\x01\x01\x18\xc8C)\x11\x00\x00\x00\x00\x8f\xa6\x02\x18\xd8\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c9\xc7\xfe\x1aX\x01\x01>\xeb\xde\xc5\xbf\xf2\x17H\xc0R$\x94=\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x8e\xe8\xfe\x08Y\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x15@\xfe\x14Z\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xaeG\x01@)\\\x8f=\x90\x007\x00\xac6'b'\xfe\x1c[\x01\x01!ve\x04\x00\x86\xa6\x02\x18\xd1\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\xfe\xff\xf5\xff\t\x00\x858d\xc2\xfe\x1c\\\x01\x01 \x94e\x04\x00\xc9D\xab>\xa7\x7f\x1e?*|\xd9\xbf\xc9\xa7\xaa\xbc\x1eK\xee\xbd2\xfa\xbb\xbdw0\xfe\x03]\x01\x01Ms\x00\x00\x949\xfe\x1c^\x01\x01\x1e\xbce\x04\x00\x08F\xc4\xbc\x02HG\xbd\xd7\x95!@\x17\x96)\xbc\x95"-=NE\xaa\xbcy\xde\xfe\x18_\x01\x01\xb2N<&\xbd\x85\x06I\xbd\xd1\xcc"@\xa4\x10*D\x8f\xa6\x02\x18\xd6\xe7\xb8\xfd\x9a\x9f\xfe\x1c`\x01\x01\xa3\xe3L!:1\x89\xc8\xba,-\x909\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x06c<\xd6[\x9f<8\xed\xfe\x03a\x01\x01\xa5\xbd\x14\x00\x04\xd6\xfe\x0cb\x01\x01\x02\x10\x8e\x95{\xb1N\x05\x00\xd0e\x04\x00w\x8d\xfe\x16c\x01\x01\x88\x86\xa6\x02\x18\xd1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1f\xd6\xfe\x16d\x01\x01\xc1\x7f\x128<\xfeTK=\xda\xf7;-\xfe\x16i\x01\x01t4f\x04\x00\xe4\xff\x18\x00\xfe\xfb\xfc\xff\xef\xff\xf7\xffC\xff\xc0\xfe\x04\x02U\xeb\xfe\x16j\x01\x01\x814f\x04\x00\xd9\xff!\x00\xf1\xfb\x1e\x00\xd1\xff\xf0\xff\xe1\x00\xa7\xffi\x02}\x88\xfe\x0ek\x01\x01\x1d4f\x04\x00\xf0\x96iD)\\%\xbem\x10\xbbu\xfe\x0el\x01\x01\x894f\x04\x00\xcf\xd9iD)\\\x07>\xb2\x15 \x1e\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\xa4:\xed\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xc7b\xfe\x06n\x01\x01}\xc6\x14\x00\x00\x03\x00\xb1q\xfe\x04o\x01\x01\x98\x00\x00\x80\x8a\x94x'b'\xfe\x02p\x01\x01*\x00\x00\xd0\xe0\xfe\x1eq\x01\x01\x180b/\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xd5\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x08\x00\x13~\x03\x0c?n\xfe\x1ar\x01\x01>\xf89\xca\xbf\xaaaE\xc0=x\xa1=\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00\xad%\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3\xfe\x14t\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\x85\xeb\x01@\xb8\x1e\x05>\x90\x000\x00\xad{\xfe\x1cu\x01\x01!>f\x04\x00\x87\xa6\x02\x18\xcf\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\xfe\xff\xf9\xff\x0c\x00\xfa8\t\xe3\xfe\x1cv\x01\x01 \x99f\x04\x00\x1eS\xb4>\x80\xdd\x19?\xce\x98\xdb\xbf"\xe6\xae\xbc\x14\xe8\x9c\xbd\xfe\xc9\x02\xbe\xa8E'b"\xfe\x03w\x01\x01Ms\x00\x00\xb7\xa9\xfe\x1cx\x01\x01\x1e\xc1f\x04\x00\xca\x926\xbd\x8bc\xf8\xbcC\x82$@Op\xcc\xbc=\x90&>\xa6\x8a,?\x91\x0b\xfe\x18y\x01\x01\xb2\x01\xf3z\xbd\x8f\xda\xfb\xbc\x8f^%@p\r*D\x90\xa6\x02\x18\xd5\xe7\xb8\xfd\xde'\xfe\x1cz\x01\x01\xa3/u!:\xc1%\xc9\xba\xf0u\x8d9\x00\x00\x00\x00\x00\x00\x00\x00R\xbd9<]q\xad<\xc7\xa2\xfe\x03{\x01\x01\xa5\xbd\x14\x00\xaf\xab\xfe\x0c|\x01\x01\x02\x98\x89\x99{\xb1N\x05\x00\xd5f\x04\x00\xf8\xed\xfe\x16}\x01\x01\x88\x88\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x00J\xfe\x16~\x01\x01\xc1#\xfck<\x80%>=X\x0cl<\xac\xbd\xdb=\x00\x00\x00\x00?\x031\x85\xfe\x16\x7f\x01\x01\xe1\x9c\xc4 ?\n\xd7#>\xf5\xe26<\\bF<\xc6\xc6\x9d?\x00\x1f\xd0\xd1"b'\xfe\x15\x80\x01\x01$\x9b\x9e2\x11\x85\x06C\x06\xaf\x05\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\x0c\xfe\x16\x81\x01\x01#\x12g\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x81\x0c\xfe\x1a\x82\x01\x01\x1b\xb6\xed2\x11\x00\x00\x00\x00\xed\xff\x0e\x00J\xfc\xa6\x00J\xff\xd9\x02&\xffh\xfft\x01\xfeN\xfe\x16\x83\x01\x01t&g\x04\x00\xf2\xff\x0b\x00W\xfc\x97\x00q\xff\xbb\x028\xff\xdb\xfe\r\x02\x1f\x84\xfe\x16\x84\x01\x01\x81&g\x04\x00\xe6\xff \x00P\xfc\xa9\x00D\xff\xc2\x02\xd0\x00\xc8\xffu\x02\x07X\xfe\x0e\x85\x01\x01\x1d&g\x04\x00\xa6\x95iD\x00\x00:\xbem\x10\xf9\xb8\xfe\x0e\x86\x01\x01\x89&g\x04\x00\xc6\xd9iD\xcd\xcc\x06>\xb2\x15*\xd6\xfe\x1f\x87\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00B\x01\xa4:m\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x8b\x1f\xfe\x06\x88\x01\x01}\xc5\x14\x00\x00\x03\x00<\x91\xfe\x03\x89\x01\x01Ms\x00\x00!\xda\xfe\x04\x8a\x01\x01\x98\x00\x00\x80\x8a\x01\xdf\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01\xfe\x1e\x8c\x01\x01\x18Xs2\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xd2\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x07\x00\x13~\x03\x0c\xd0\n\xfe\x1a\x8d\x01\x01>\x06\x8e\xc8\xbfK\xfb;\xc0\x14\xe6\x81=\x00\x00\x00\x00\x00\x00\x00\x00\xab\x00\x00\x00\x00\x00xT\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7'b'\xfe\x14\x8f\x01\x01J)\\\x8f=)\\\x8f=33\x03@\xcc\xccL=\x9a\x002\x00F\x8c\xfe\x1c\x90\x01\x01!\x07g\x04\x00\x89\xa6\x02\x18\xce\xe7\xb8\xfd\x92c\n\x00\x02\x08\x00\x00\x01\x00\xfc\xff\x04\x00\x1c=9\xb2\xfe\x1c\x91\x01\x01 \x9eg\x04\x00\xe7\x19\xbf>a\xf3\x17?\xd4\xf3\xdc\xbf\xd9a)<\x9be=\xbd\x14\xaa1\xbd\xb1\xe9\xfe\x03\x92\x01\x01Ms\x00\x005&\xfe\x1c\x93\x01\x01\x1e\xc6g\x04\x002\xce\x9a\xbcU\x8dT\xbd*\xc20@i\x0e\xba=F\xa7\x04\xbe\x95\x12K?\xd6C\xfe\x18\x94\x01\x01\xb2\xa7E\x11\xbd\xf0\x86J\xbd\xbd\x8f1@\xeb!*D\x90\xa6\x02\x18\xd2\xe7\xb8\xfd^\r'b'\xfe\x1c\x95\x01\x01\xa3\xb3\x8d!:K\xbc\xc9\xba\xe3\xc8\x8a9\x00\x00\x00\x00\x00\x00\x00\x00#K\x9c<7v\x07=\xa3\xd9\xfe\x03\x96\x01\x01\xa5\xc5\x14\x00\x0c\xb6\xfe\x0c\x97\x01\x01\x02P}\x9d{\xb1N\x05\x00\xdag\x04\x00\xe8J\xfe\x16\x98\x01\x01\x88\x89\xa6\x02\x18\xce\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xaf\x0f\xfe\x16\x99\x01\x01\xc1\xec?\xa0<1\xcc\xef<\xa0\x8c\x0e;\x9e\xf1\xb1=\x00\x00\x00\x00?\x03\xc3\xe9\xfe\t\x04\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x00\t\xbc\xfe\x1a\x9a\x01\x01\x1b%\x996\x11\x00\x00\x00\x00\xeb\xff\x1a\x00,\xfcD\x00\xc5\xffQ\x03\x19\xff\x92\xff}\x01U\xaf\xfe\x16\x9b\x01\x01t\x16h\x04\x00\xe6\xff%\x00/\xfc1\x00\xcb\xff4\x03&\xff\xf7\xfe\x0f\x02\xe7\x8d\xfe\x16\x9c\x01\x01\x81\x16h\x04\x00\xee\xff\x1e\x00H\xfc"\x00\xb4\xffF\x03\xb6\x00\xf2\xffv\x02C\xf6\xfe\x0e\x9d\x01\x01\x1d\x16h\x04\x00\xc2\x95iDp=8\xbem\x104\x8a\xfe\x0e\x9e\x01\x01\x89\x16h\x04\x00\xab\xdaiD\xb8\x1e\x15>\xb3\x15T\xd3\xfe\x1f\x9f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x12\x01\xa4:\xd2\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P9\xb7\xfe\x06\xa0\x01\x01}\xc5\x14\x00\x00\x03\x00\x1c\xcf\xfe\x03\xa1\x01\x01Ms\x00\x00mA\xfe\x04\xa2\x01\x01\x98\x00\x00\x80\x8a\xf2W\xfe\x02\xa3\x01\x01*\x00\x00l\xbc\xfe\x1e\xa4\x01\x01\x18\x80\x845\x11\x00\x00\x00\x00\x8f\xa6\x02\x18\xd0\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x0b\x00\x13~\x03\x0c\xc7M\xfe\x1a\xa5\x01\x01>s\xf8\x06\xc0J\xa8$\xc0\x99\x19n=\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00\x00\x00\x19\x12\x14?j\xfc\xdc\xbfj\xbd\x85\xbdtEi\xbd\x07\xb9\xa7<\xccL\xfe\x03\xaf\x01\x01Ms\x00\x00`q\xfe\x1c\xb0\x01\x01\x1e\xcbh\x04\x00\xe3b?\xbc\xfe\x8d\xa9\xbd\xffW>@-\xb5P<\xfa\x11\xa4\xbe\x82DE?\xb7\x10\xfe\x18\xb1\x01\x01\xb2\xa1\xcd\xd1\xbcp\xf7\x9b\xbd\xefK?@\\\x0f*D\x90\xa6\x02\x18\xcd\xe7\xb8\xfd\xd5\xf3\xfe\x1c\xb2\x01\x01\xa3\x1e\xb3!:\xafI\xca\xba*\x15\x889\x00\x00\x00\x00\x00\x00\x00\x00\xf2+\x80\x00\x00\x00\x00?\x03\xfeZ'b'\xfe\x1a\xb7\x01\x01\x1b\xfeG:\x11\x00\x00\x00\x00\xf7\xff\x13\x00\x0c\xfc=\x00\xd5\xfe\x8c\x02\x1b\xff\xd5\xff\x88\x01\x9e\x8b\xfe\x16\xb8\x01\x01t\x08i\x04\x00\xf9\xff\x16\x00\x1a\xfc$\x00\xbe\xfe\x91\x02\x1a\xff+\xff\x18\x02Y\xdf\xfe\x16\xb9\x01\x01\x81\x08i\x04\x00\xf4\xff\x1f\x00\x04\xfcD\x00\xd3\xfe\x81\x02\xac\x00\x19\x00\x8e\x02\xa4L\xfe\x0e\xba\x01\x01\x1d\x08i\x04\x007\x96iD\xc2\xf50\xben\x10\x84\xe0\xfe\x0e\xbb\x01\x01\x89\x08i\x04\x00\xe2\xdaiD\\\x8f\x18>\xb5\x15\xdcP\xfe\x1f\xbc\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x004\x01\xe3:/\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xe4\xbc\xfe\x06\xbd\x01\x01}\xc5\x14\x00\x00\x03\x007\t\xfe\x04\xbe\x01\x01\x98\x00\x00\x80\x8aI\xe8\xfe\x02\xbf\x01\x01*\x00\x00?\xb8\xfe\x1e\xc0\x01\x01\x18\x88G8\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xcd\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x08\x00\x13~\x03\x0c&%\xfe\x1a\xc1\x01\x01>\xa1~\xea\xbf\x8b\x0c\x8d\xc0\xc2\xdd\x93<\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x92\x10\xfe\x08\xc2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xff\xfe\x03\xc3\x01\x01Ms\x00\x00\x03\x99\xfe\x15\xc4\x01\x01$g\xe4:\x113\x06#\x06l\x06s\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00l\x91\xfe\x16\xc5\x01\x01#0i\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x06X'b'\xfe\x14\xc6\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\x85\xeb\x01@\xcc\xccL=\xb0\x003\x00\xd5\xaf\xfe\x03\xc7\x01\x01Ms\x00\x00\xdd\x8f\xfe\x1c\xc8\x01\x01!bi\x04\x00\x87\xa6\x02\x18\xca\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xe6\xff\xf8\xff\x05\x00_E0\x0b\xfe\x1c\xc9\x01\x01 \xa8i\x04\x00\xcf\x9d\xb1>~\xf3\r?r\\\xda\xbf\x15\xac\x87\xbesR\xb6\xbd\xa3Po\xbd\xfe)'b"\xfe\x1c\xca\x01\x01\x1e\xd1i\x04\x00\xbeF\x88\xbc\xf2\xaf\xa7\xbd\x0eNG@\x95\xd7Q\xbd\xaa\xdd\x8d>}\n\xa5>\xd1\x7f\xfe\x18\xcb\x01\x01\xb2\xec?\xf9\xbc\x9f\xde\xa1\xbd\xa1\xa2H@\xc2\x15*D\x90\xa6\x02\x18\xca\xe7\xb8\xfd\x10\xde\xfe\x1c\xcc\x01\x01\xa3y\xe7!:w\xd9\xca\xba)H\x859\x00\x00\x00\x00\x00\x00\x00\x00\xb7_w\xfe\x16\xd0\x01\x01\xc1\x05,\xa0;m\xa9\xe9\x00\x00\x00\x00?\x03:?\xfe\x1a\xd1\x01\x01\x1b4\xf6=\x11\x00\x00\x00\x00\xf3\xff\x1d\x00\x18\xfc\xd9\xff+\x01\xc4\x00!\xff\xf1\xff\x88\x01\xd9d\xfe\x16\xd2\x01\x01t\xf9i\x04\x00\xf8\xff\x17\x00\x1a\xfc\xe1\xff\x1f\x01\xc4\x00\x19\xffQ\xff\x1f\x02F\xec\xfe\x16\xd3\x01\x01\x81\xf9i\x04\x00\xeb\xff,\x00\x16\xfc\xf2\xff\x1e\x01\xb9\x00\xaf\x00U\x00\x85\x02r\xd8\xfe\x0e\xd4\x01\x01\x1d\xf9i\x04\x00\xab\x96iD\x14\xae)\xben\x10$\x0f\xfe\x0e\xd5\x01\x01\x89\xf9i\x04\x00\x8f\xdaiD)\\\x13>\xb5\x15\xfe\xed\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xe3:T\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\xddb\xfe\x06\xd7\x01\x01}\xc2\x14\x00\x00\x03\x00(\xf6\xfe\x04\xd8\x01\x01\x98\x00\x00\x80\x8a\x0c]\xfe\x02\xd9\x01\x01*\x00\x00wD\xfe\x1e\xda\x01\x01\x18\xd0\xa6;\x11\x00\x00\x00\x00\x90\xa6\x02\x18\xca\xe7\xb8\xfd\xdci\n\x00F\x00\xff\xff\t\x00\x13~\x03\x0c9\xa9\xfe\x1a\xdb\x01\x01>X\xac(\xc0\x14'M\xbf\xd7#\xc0<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd3T\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95\xfe\x03\xdd\x01\x01Ms\x00\x00v\xf2"b'\xfe\x15\xde\x01\x01$ \xe1>\x11\x02\x06\xf1\x05<\x06b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x19\xfe\x16\xdf\x01\x01#5j\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18?\xfe\x14\xe0\x01\x01J=\nW>=\nW>\x85\xeb\x01@\n\xd7#=\xb3\x004\x00\xc0\xb9'b"\xfe\x03\xe1\x01\x01Ms\x00\x00\x9c$\xfe\x1c\xe2\x01\x01!+j\x04\x00\x80\xa6\x02\x18\xc6\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xe0\xff\xf6\xff\x02\x009F\xe8\xa9\xfe\x1c\xe3\x01\x01 \xaej\x04\x00\xac]\x8b>S\x1c\x06?\x0c\xfd\xd9\xbf\x86\xd5\xa7\xbe\xe53\xd7\xbdD\xeb\xe0\xbcL=\xfe\x1c\xe4\x01\x01\x1e\xd6j\x04\x00\xc2\xf6\x1b\xbdq\xfa\x1f\xbc\x0c\xd2H@~\xb7\x86\xbd\xb0\xf5R>\xd0Q\x12<\xf9\x94\xfe\x18\xe5\x01\x01\xb2\xfb\xa0O\xbd|\xd0\xae\xbb\n\xd3G\xc0)\x1c*D\x8d\xa6\x02\x18\xc8\xe7\xb8\xfdx\xf9\xfe\x1a\xe6\x01\x01\x1b\xa9\xa1A\x11\x00\x00\x00\x00\xe8\xff\x07\x00#\xfc\x9b\xff\xc5\x00)\x00\x06\xff\xfb\xff~\x01a\x03\xfe\x16\xe7\x01\x01t\xe9j\x04\x00\xe4\xff\x05\x00\x14\xfc\xaf\xff\xca\x00\x03\x00\x02\xffX\xff\x0e\x02\x92C\xfe\x16\xe8\x01\x01\x81\xe9j\x04\x00\xe2\xff\x16\x00\x1d\xfc\x9c\xff\xec\x00 \x00\x86\x00B\x00\x87\x02\x1c8\xfe\x0e\xe9\x01\x01\x1d\xe9j\x04\x00\xf8\x95iDG\xe14\xben\x10\xf1\xc5\xfe\x0e\xea\x01\x01\x89\xe9j\x04\x00\x82\xd9iD\\\x8f\x02>\xb5\x15\xad\xc6\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\xe3:\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xc8\x96\xfe\x06\xec\x01\x01}\xc5\x14\x00\x00\x03\x00\xe6\xe0\xfe\x04\xed\x01\x01\x98\x00\x00\x80\x8a\xb9'\xfe\x02\xee\x01\x01*\x00\x00%U\xfe\x1e\xef\x01\x01\x18 \xc9A\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xc5\xe7\xb8\xfd\xe6i\n\x00F\x00\xff\xff\x1a\x00\xe2U\x03\x0c\x8aL\xfe\x1a\xf0\x01\x01>m\x95E\xc0=\x00\x00\x00\x00?\x03T\xec\xfe\x16\xf8\x01\x01\xe1@5\x1e?\xcc\xccL>\xf5\xe26<\\bF<\xf1K\xa2?\x00\x1f\xf7P\xfe\x03\xf9\x01\x01Ms\x00\x00XR\xfe\x15\xfa\x01\x01$\x9f\xdcB\x11\x19\x06\xfd\x05\xff\x05)\x06\x00\x00\x00\x00\x00\x00\x00\x00\x006@\xfe\x16\xfb\x01\x01#:k\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9e\x05'b'\xfe\x14\xfc\x01\x01Jp=\x8a>p=\x8a>\\\x8f\x02@\n\xd7#\xbc\xb3\x002\x00\x02\x97\xfe\x03\xfd\x01\x01Ms\x00\x00\x86D\xfe\x1c\xfe\x01\x01!\xf4j\x04\x00z\xa6\x02\x18\xc3\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\xea\xff\xf8\xff\xfc\xffGF\xe2\x01\xfe\x1c\xff\x01\x01 \xb3k\x04\x00\xac\xa2V>\x94\x80\xfe>\x0c\x06\xdb\xbf4lf\xbe)?\xae\xbdd\x00H=\xd8?'b'\xfe\t\x05\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\x7fr\xfe\x1a\x00\x01\x01\x1b^RE\x11\x00\x00\x00\x00\xe7\xff\x1f\x002\xfc\xda\xff\xe5\xff\x01\x00\xee\xfe\xf9\xffr\x01w\xc1\xfe\x16\x01\x01\x01t\xdbk\x04\x00\xeb\xff\x1a\x004\xfc\xcf\xff\xf1\xff\xf5\xff\xee\xfeV\xff\x04\x02z\x05\xfe\x16\x02\x01\x01\x81\xdbk\x04\x00\xe4\xff\'\x00"\xfc\xd6\xff\xee\xff\xfb\xffn\x00C\x00g\x02\xdc\x0e\xfe\x0e\x03\x01\x01\x1d\xdbk\x04\x00[\x95iDR\xb8>\xben\x10SJ\xfe\x0e\x04\x01\x01\x89\xdbk\x04\x00\xc7\xd9iDG\xe1\x06>\xb5\x15r`\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xc2\x00\xe3:\x11\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x99\xb9\xfe\x06\x06\x01\x01}\xc5\x14\x00\x00\x03\x00\xfaJ\xfe\x04\x07\x01\x01\x98\x00\x00\x80\x8a\x04\x16\xfe\x02\x08\x01\x01*\x00\x00p/\xfe\x1e\t\x01\x01\x18H\xdaD\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff!\x00\'N\x03\x0c\xa1J\xfe\x1a\n\x01\x01>\x1e\xacF\xc0\xbdo\x08?R0\xa4<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xdcB\xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer\xfe\x1c\x0c\x01\x01\x1e\xefk\x04\x00\xd3\x08Z\xbd\x1e_c<\xd6\xecH@@Mr\xbd!\xb7G\xbb\xab\xe5\x83\xbc\xda\xbc\xfe\x18\r\x01\x01\xb2k\x03\x88\xbdX\x85\xb1\x00\x00\x00\x00?\x03\xbc^\xfe\x03\x13\x01\x01Ms\x00\x00hl'b'\xfe\x15\x14\x01\x01$z\xdbF\x116\x067\x06\x1f\x068\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00o\xde\xfe\x16\x15\x01\x01#@l\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00N\x19\xfe\x03\x16\x01\x01/\xff\x00\x00\xdf\x83\xfe\x12\x17\x01\x01\xfc\x8el\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8ad\xfe\t\x18\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03\xe3\x9c'b'\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ\xfe\x14\x1a\x01\x01J)\\\x8f>)\\\x8f>\x85\xeb\x01@\n\xd7#\xbd\xb3\x005\x00\xd3w\xfe\x1c\x1b\x01\x01!rl\x04\x00w\xa6\x02\x18\xc2\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xf3\xff\xfc\xff\xfc\xff\x04F/c\xfe\x1c\x1c\x01\x01 \xb8l\x04\x00\xcbK.>\xc1\xcf\xf7>|\xe7\xd9\xbf\x96\xc5\x08\xbe\xe6\xcf(\xbd\xea)J=\xd3\x00\xfe\x1a\x1d\x01\x01\x1b4\xffH\x11\x00\x00\x00\x00\x04\x00\x15\x002\xfc\xca\xff3\x00/\xff\xf4\xfe\xf8\xffq\x01I=\xfe\x16\x1e\x01\x01t\xccl\x04\x00\x07\x00 \x00B\xfc\xc4\xff/\x00&\xff\xf1\xfeV\xff\x08\x02\xefW\xfe\x16\x1f\x01\x01\x81\xccl\x04\x00\xf6\xff\x1d\x009\xfc\xb0\xffF\x00\'\xff\x80\x003\x00v\x02_\xb8\xfe\x0e \x01\x01\x1d\xccl\x04\x00\x8b\x95iD\x14\xae;\xbeo\x10}\xba\xfe\x0e!\x01\x01\x89\xccl\x04\x00\x0f\xdaiD)\\\x0b>\xb6\x15O\xa5\xfe*"\x01\x01\x96s\xe7f\xbc\xf9l\x01\x00o\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\xa7\xf9\xfe\x1f#\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x1b;\xf8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x19B\xfe\x06$\x01\x01}\xc5\x14\x00\x00\x03\x00R\x03\xfe\x04%\x01\x01\x98\x00\x00\x80\x8a\xc7z\xfe\x02&\x01\x01*\x00\x00\xd2\xca\xfe\x1e\'\x01\x01\x18P\x9dG\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc1\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x1c\x00-K\x03\x0cs\xf7\xfe\x1a(\x01\x01>\xce\xd1k\xc0\x06\xab\xba?\xd7\xd3\xe9<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00a\xd2\xfe\x08)\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x004\xcc'b'\xfe\x1c*\x01\x01\x1e\xf5l\x04\x00!5d\xbd\x9d\xe0\xe8;\xe9\xb7G@\x9aCi\x98\xbdy\xca\xfe\x18+\x01\x01\xb2\x02\xf0\x8c\xbd\xc0|H<\x91\xe6H\xc0\n\x17*D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd6\xba\xfe\x1c,\x01\x01\xa3t\x95":\xbb\xc4\xcc\xba\x8c\xb4z9\x00\x00\x00\x00\x00\x00\x00\x009\xe6\xab<\xb9C\x81<\x8c\xf5\xfe\x03-\x01\x01\xa5\xc5\x14\x00\n7\xfe\x0c.\x01\x01\x02`\xa9\xb1{\xb1N\x05\x00\nm\x04\x00&\xa1\xfe\x16/\x01\x01\x88v\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xdd\x8e\xfe\x160\x01\x01\xc1\x1d9\xd5<\x17\x12\xc4<\xb1\xf8\xe3;5\xc4\x08>\x00\x00\x00\x00?\x03\x90\xd2\xfe\x031\x01\x01Ms\x00\x00\xf7\xd1\xfe\x152\x01\x01$\xef\xdaJ\x11Z\x06H\x060\x06R\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\xab\xfe\x163\x01\x01#Fm\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9d`'b'\xfe\x034\x01\x01Ms\x00\x00\x96F\xfe\x145\x01\x01J\n\xd7#>\n\xd7#>\xd7\xa3\x00@\x8f\xc2\xf5<\xb3\x005\x00h\xe2'b'\xfe\x1a6\x01\x01\x1b\xb3\xb2L\x11\x00\x00\x00\x00\xf0\xff"\x00\xef\xfbQ\x00\xc1\xff\xfe\xff\xec\xfe\xf1\xffm\x01^+\xfe\x167\x01\x01t\xbfm\x04\x00\xf3\xff+\x00\xfb\xfb\'\x00\xd0\xff\x18\x00\xe9\xfeF\xff\xfb\x01\xd8?\xfe\x168\x01\x01\x81\xbfm\x04\x00\xeb\xff/\x00\xe4\xfb\x81\x00\x91\xff\x15\x00\x88\x00;\x00c\x02\xa3\r\xfe\x0e9\x01\x01\x1d\xbfm\x04\x00\xf0\x95iD)\\5\xbeo\x10\xb1p\xfe\x0e:\x01\x01\x89\xbfm\x04\x00=\xdaiDp=\x0e>\xb6\x15N\xa2\xfe\x1f;\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01\x1b;\x01\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ow|\xfe\x06<\x01\x01}\xc5\x14\x00\x00\x03\x00\xbd\xce\xfe\x04=\x01\x01\x98\x00\x00\x80\x8a\x99\xfa\xfe\x02>\x01\x01*\x00\x00\xf7\xa1\xfe\x1e?\x01\x01\x18`\xb2J\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xc0\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x10\x00-K\x03\x0c\xf6"\xfe\x1a@\x01\x01>\x81H=\xc0\xb9\xc9\x8a?=\xce\x1d=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe3L\xfe\x08A\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xad7\xfe\x1cB\x01\x01!\x11\xa1\xf7>\xc6m\xd8\xbf\x98\xd1\xf5\xbcL\xe4\x9c<\x7fjr\xbdj\xca\xfe\x1cD\x01\x01\x1e\xfbm\x04\x00\x0b\xe5`\xbd\x1e\x93L<\x0e\xbdH@\nx\x9d=\x0e\xba\xc9\xbd\x0c\xbd\xf3\xb8\x15\xc1\xf7\xfe\x1fU\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x9f\x00\x1b;L\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xdf\xdc\xfe\x06V\x01\x01}\xc5\x14\x00\x00\x03\x00\xba\xf6\xfe\x04W\x01\x01\x98\x00\x00\x80\x8a\xf3\x0f\xfe\x02X\x01\x01*\x00\x00\xbf]\xfe\x1eY\x01\x01\x18\x88\xc3M\x11\x00\x00\x00\x00~\xa6\x02\x18\xc1\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0cp\x8c\xfe\x1aZ\x01\x01>\xc4\xd6\x1b\xc0\x9d\xdfz>\xb8f\x0f=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00K\x11\xfe\x08[\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00OK\xfe\x1c\\\x01\x01!\x05n\x04\x00v\xa6\x02\x18\xc3\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\x01\x00\x03\x00\x02\x00NF6\x10\xfe\x1c]\x01\x01 \xd7n\x04\x00\x84\x18$>;*\xfd>A\x02\xd9\xbf\xde\xb7cn\x13\xc0\xbdgh\xc0<\xa3\xfa\xfe\x18_\x01\x01\xb2\xdf\xceC\xbdb\xf1U\xbb\xef\x96G\xc0{\x14*D\x7f\xa6\x02\x18\xc2\xe7\xb8\xfd\xae\xfe\xfe\x03`\x01\x01Ms\x00\x00\xc1n\xfe\x1ca\x01\x01\xa3\xd4\xf9":\xfd6\xce\xba"\xddr9\x00\x00\x00\x00\x00\x00\x00\x00\xcch\x8b<\x80^\x1a\x00\x00\x00\x00?\x03\'\xe1\xfe\x16f\x01\x01\xe1\x92\xed\x1c?{\x14.>\xf5\xe26<\\bF<}"\xa4?\x00\x1f\xbc\x9a'b"\xfe\x15g\x01\x01$\x08\xd6R\x11O\x06\x0f\x06C\x06;\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xabC\xfe\x16h\x01\x01#Qo\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Y\x08\xfe\x03i\x01\x01Ms\x00\x04\xa2\xa5\xfe\x1aj\x01\x01\x1b\xa0\x0eT\x11\x00\x00\x00\x00\xf4\xff\x17\x00\x1b\xfc\xdd\xff\x14\x00\xf6\xff\xfc\xfe\xfe\xffs\x01\x0f\xff\xfe\x16k\x01\x01t\xa1o\x04\x00\xf2\xff\x17\x00\x1a\xfc\xe8\xff\x10\x00\xfd\xff\xf7\xfe]\xff\x0c\x02\xc0\x83\xfe\x16l\x01\x01\x81\xa1o\x04\x00\xf5\xff'\x00\x05\xfc\x10\x00\x02\x00\xe8\xff}\x00K\x00q\x02(`\xfe\x0em\x01\x01\x1d\xa1o\x04\x00\xae\x95iD\x1e\x859\xben\x10\xb7\xb6\xfe\x0en\x01\x01\x89\xa1o\x04\x00P\xd7iDG\xe1\xbe=\xb5\x15\xe0Q\xfe\x1fo\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x01\xc0:\xd9\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x8b\xcc\xfe\x06p\x01\x01}\xc5\x14\x00\x00\x03\x00G\xe1"b'\xfe\x04q\x01\x01\x98\x00\x00\x80\x8a\xd5\\\xfe\x02r\x01\x01*\x00\x00k\xd7\xfe\x1es\x01\x01\x18\xc0\xe9S\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc4\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00-K\x03\x0c]\x82\xfe\x1at\x01\x01>V!\x15\xc0\xaa\x85\xd7\xbd\\\xdb\x0f=\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00g@\xfe\x08u\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00i\xce\xfe\x14v\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=\xaeG\x01@\n\xd7\xa3<\xb4\x005\x00C\xe8\xfe\t\x06\n\x00m\x01\x00\x00\x00\x00\xda\x00\x00\x00f\xdd\xfe\x1cw\x01\x01!\x98o\x04\x00x\xa6\x02\x18\xc4\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\x01\x00\x02\x00\x02\x00NF\x95\x18\xfe\x1cx\x01\x01 \xddo\x04\x00\xa7\xee7>\x15\xee\x01?:\x91\xd9\xbf-WZ<\xbdH\xa6<\xb6Q\xd1\xbc\x1b\n\xfe\x1cy\x01\x01\x1e\x05p\x04\x00~\xaa\xfb\xbc\xb2\x94\x91\xbcd\x06I@&\x0f\xb7\xbbzNk\xbbN\xc5K<\x0f\x1f\xfe\x18z\x01\x01\xb2\xaa\x13/\xbdw\x14.\xbc%\xa5G\xc0\xd73*D\x80\xa6\x02\x18\xc4\xe7\xb8\xfd\xe0S\xfe\x03{\x01\x01Ms\x00\x04\xb5\xf5'b'\xfe\x1c|\x01\x01\xa3P\x19#:K\xf6\xce\xba\xc1ho9\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xa6n<\xa94\xe3;\x82Z\xfe\x03}\x01\x01\xa5\xc5\x14\x00\x83\t\xfe\x0c~\x01\x01\x02x\xda\xbd{\xb1N\x05\x00\x1ap\x04\x00\x8c\r\xfe\x16\x7f\x01\x01\x88x\xa6\x02\x18\xc5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xd3\xae\xfe\x16\x80\x01\x01\xc1\x99\x94g\x00\x00\x00\x00?\x03\x02\x80\xfe\x15\x81\x01\x01$\xab\xd0V\x11N\x06\xe7\x05\xef\x055\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00G\xd7\xfe\x16\x82\x01\x01#Vp\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6&'b'\xfe\x12\x83\x01\x01\xfc|p\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8b\x07\xfe\t\x84\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x030\xd0\xfe\x03\x85\x01\x01/\xff\x00\x00\x95\x99\xfe\x1a\x86\x01\x01\x1b\x83\xbeW\x11\x00\x00\x00\x00\xf7\xff\x19\x00U\xfc\xe7\xff6\x00\xfa\xff\xf9\xfe\xfe\xffz\x019\xe7\xfe\x16\x87\x01\x01t\x93p\x04\x00\xf2\xff\x12\x00S\xfc\xe2\xff8\x00\xfe\xff\xfb\xfeg\xff\x13\x02e\x00\xfe\x16\x88\x01\x01\x81\x93p\x04\x00\xf3\xff\'\x00X\xfc\xec\xff7\x00\xf8\xff\x81\x00K\x00k\x02\xf8\t\xfe\x0e\x89\x01\x01\x1d\x93p\x04\x00i\x93iD\n\xd7]\xben\x10\xb6,\xfe\x0e\x8a\x01\x01\x89\x93p\x04\x00\x98\xd8iD\n\xd7\xe7=\xb7\x15U+\xfe\x1f\x8b\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00G\x01\xc0:(\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x03\xb4\xfe\x06\x8c\x01\x01}\xc5\x14\x00\x00\x03\x00i\xcf\xfe\x04\x8d\x01\x01\x98\x00\x00\x80\x8a\xe36\xfe\x03\x8e\x01\x01Ms\x00\x00/F\xfe\x02\x8f\x01\x01*\x00\x00un\xfe\x1e\x90\x01\x01\x18\x00\xf7V\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xc6\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x84x\xfe\x1a\x91\x01\x01>=\n\xf7\xbf\xcc\xccL\xbf\xebA}\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x00\x00\x00\x00\x00\xee\x85\xfe\x08\x92\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00y\xc6\xfe\x14\x93\x01\x01J\xebQ\xb8=\xebQ\xb8=\\\x8f\x02@\x8f\xc2u\xbd\xb3\x003\x00f"'b'\xfe\x1c\x94\x01\x01!`p\x04\x00z\xa6\x02\x18\xc6\xe7\xb8\xfd\x88c\n\x00\xf8\x07\x00\x00\x02\x00\x01\x00\xf7\xff\x0fF\x0e|\xfe\x1c\x95\x01\x01 \xe3p\x04\x00m\x9fO>\x8c\xe5\x04?Z\xc2\xdb\xbfZ\x9d\xe4<\xb8\xa90=\x8d\x8b\x8b;p\xf2\xfe=\x00\x00\x00\x00?\x03\x86\x90\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97'b"\xfe\x15\x9e\x01\x01$\xbb\xcdZ\x11U\x066\x06@\x06K\x06\x00\x00\x00\x00\x00\x00\x00\x00\x004\x8c\xfe\x16\x9f\x01\x01#[q\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x86\xc2\xfe\x1a\xa0\x01\x01\x1b\xf8i[\x11\x00\x00\x00\x00\xf8\xff'\x00\xe3\xfb/\x00\xf4\xff\x05\x00\xfd\xfe\xfa\xffx\x01\x97\xf9\xfe\x16\xa1\x01\x01t\x83q\x04\x00\xf4\xff7\x00\xe2\xfb9\x00\xe7\xff\x1c\x00\xfd\xfeP\xff\r\x02\x0bG\xfe\x16\xa2\x01\x01\x81\x83q\x04\x00\xee\xff-\x00\xe5\xfbI\x00\xc1\xff)\x00\x81\x00R\x00q\x02o=\xfe\x0e\xa3\x01\x01\x1d\x83q\x04\x00\xa9\x94iD\n\xd7I\xbeo\x10B\xc4\xfe\x0e\xa4\x01\x01\x89\x83q\x04\x00\xcf\xd9iD)\\\x07>\xb8\x15\xc7Q\xfe\x1f\xa5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xc0:\x7f\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xe6\xb2\xfe\x06\xa6\x01\x01}\xc5\x14\x00\x00\x03\x00k:\xfe\x04\xa7\x01\x01\x98\x00\x00\x80\x8a\xea%\xfe\x02\xa8\x01\x01*\x00\x00\xee\xca\xfe\x1e\xa9\x01\x01\x18(\x08Z\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc7\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\nC\xfe\x1a\xaa\x01\x01>{\xee\xd7\xbf\xf8\xbf\xbe\xbf\xa4p\t\xbc\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd5\r\xfe\x08\xab\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x01\xfe\x03\xac\x01\x01Ms\x00\x00\xb0\xfb"b'\xfe\x14\xad\x01\x01J)\\\x8f=)\\\x8f=\x85\xeb\x01@\n\xd7#\xbd\xb3\x005\x00\xc6\r\xfe\x1c\xae\x01\x01!)q\x04\x00|\xa6\x02\x18\xc7\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\x00\x00\xff\xff\xfd\xff;F3^\xfe\x1c\xaf\x01\x01 \xe7q\x04\x00s\x16i>W\xe5\x06?_U\xda\xbf\xee\xcc\x1f\xba\xf4\x0f\x81\xbcC\xd1\x08=ga'b'\xfe\x1c\xb0\x01\x01\x1e\x10r\x04\x00\x04K\xb7\xbc\x03\xec\x0f\xbd~\xe8H@>\x03\x12\xbc[\xdf&\xbd\\\x1d\x9a<\xffE\xfe\x18\xb1\x01\x01\xb2\xcd\x89\x05\xbda\x98\xe7\xbcj\xd2G\xc0\x00 *D\x86\xa6\x02\x18\xc9\xe7\xb8\xfdu6\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90\xfe\x1c\xb3\x01\x01\xa3G\x18#:Dy\xd0\xba;\xaci9\x00\x00\x00\x00\x00\x00\x00\x00\xba\x7fw\xb9\x15\x82K\xfe\x1f\xbf\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1d\x01\xca:\x0b\t\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ox\xb9\xfe\x06\xc0\x01\x01}\xc5\x14\x00\x00\x03\x00\x93\xe0\xfe\x04\xc1\x01\x01\x98\x00\x00\x80\x8a\xaf\x90\xfe\x02\xc2\x01\x01*\x00\x00<\x87\xfe\x1e\xc3\x01\x01\x18h\x15]\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xc9\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\x82\xb8\xfe\x1a\xc4\x01\x01>l\x89\xfc\xbf\xd6\xf1\x97\xbf\xe1z\xa8\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x05\x11\xfe\x08\xc5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xe7\xfe\x14\xc6\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\x01@\x00\x00\x00\x00\xb3\x002\x00\xd6O'b'\xfe\x1c\xc7\x01\x01!\xbar\x04\x00}\xa6\x02\x18\xc7\xe7\xb8\xfd~c\n\x00\xee\x07\x00\x00\xfb\xff\xfd\xff\x00\x00AF\\\x9a\xfe\x1c\xc8\x01\x01 \xedr\x04\x00\xd7\xc4r>\x83\x9f\x07?t\xbc\xda\xbf\xe0\xd0h\xbd*\xbe\x17\xbd\x010\xb09\xa5q\xfe\x03\xc9\x01\x01Ms\x00\x00\xd0\xbf\xfe\x03\xca\x01\x01Ms\x00\x00\x005\xfe\x1c\xcb\x01\x01\x1e\x15s\x04\x00\xc8>\n\xbd\xcb\xf5\xf5\xbc/\xdfH@H"\xb6\xbd\xc8\xb5\x94=\x9f\x8d\x8a\xbc4\n\xfe\x18\xcc\x01\x01\xb2\x9e42\xbd\xb3\xb8\xc4\xbc\xc3\xdaG\xc0\x00 *D\x87\xa6\x02\x18\xcb\xe7\xb8\xfd\x1d*\xfe\x1c\xcd\x01\x01\xa3\xa8\xf0":\x1aA\xd1\xba\xb34g9\x00\x00\x00\x00\x00\x00\x00\x00[\x9bf<\x81\xc5\xc6;\xecp\xfe\x03\xce\x01\x01\xa5\xc5\x14\x009\xa5\xfe\x0c\xcf\x01\x01\x02p\xbd\xc9{\xb1N\x05\x00)s\x04\x00\xc7|\xfe\x16\xd0\x01\x01\x88}\xa6\x02\x18\xc7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x16t\xfe\x12\xd1\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xcc\x87\xfe\x16\xd2\x01\x01\xc1\x93\x7f\x95\x00\x00\x00\x00?\x03\x16\xfb\xfe\x16\xd3\x01\x01\xe1[d\x1b?\xebQ8>\xf5\xe26<\\bF<\r\x1c\xa3?\x00\x1fd\x03'b'\xfe\x1a\xd4\x01\x01\x1b\x13\xc7b\x11\x00\x00\x00\x00\x00\x00\x0e\x00.\xfc\xd0\xff\x1c\x00\xeb\xff\x01\xff\xfc\xff|\x016-\xfe\x16\xd5\x01\x01tfs\x04\x00\x06\x00\x0e\x00\'\xfc\xde\xff\x13\x00\xf7\xff\x00\xffZ\xff\x13\x02L\x1c\xfe\x16\xd6\x01\x01\x81fs\x04\x00\xff\xff"\x00+\xfc\xf0\xff\x13\x00\x00\x00\x93\x00S\x00z\x02\xf5\x1a\xfe\x0e\xd7\x01\x01\x1dfs\x04\x00{\x95iDR\xb8<\xbep\x10\x83\xd2\xfe\x0e\xd8\x01\x01\x89fs\x04\x00\xb4\xd9iD\x14\xae\x05>\xba\x15\xa91\xfe\x1f\xd9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\xca:;\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x18\x16\xfe\x06\xda\x01\x01}\xab\x14\x00\x00\x03\x00\xfa\xa4\xfe\x04\xdb\x01\x01\x98\x00\x00\x80\x8a\x0b\x8b\xfe\x02\xdc\x01\x01*\x00\x00\xd4\xb4\xfe\x1e\xdd\x01\x01\x18\x90&`\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xcb\xe7\xb8\xfd\xf0i\n\x00F\x00\xff\xff\x04\x00-K\x03\x0cgu\xfe\x1a\xde\x01\x01>=\xef\x07\xc0;\x84&\xbf\xd7C\xa0\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x83\x9b\xfe\x08\xdf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Y\x9b\xfe\x15\xe0\x01\x01$\xb9\x14c\x11Y\x06.\x06/\x065\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93G\xfe\x16\xe1\x01\x01#zs\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00-\xe0\xfe\x03\xe2\x01\x01Ms\x00\x00L\xae'b'\xfe\t\x07\n\x00m\x04\x00\x00\x00\x00\xda\x00\x00\x007?\xfe\x14\xe3\x01\x01J\n\xd7#=\n\xd7#=\x85\xeb\x01@\x00\x00\x00\x00\xb3\x005\x00$Y\xfe\x1c\xe4\x01\x01!\x84s\x04\x00}\xa6\x02\x18\xc7\xe7\xb8\xfdtc\n\x00\xe4\x07\x00\x00\xf8\xff\xfe\xff\x00\x008F\xaf\xff\xfe\x1c\xe5\x01\x01 \xf2s\x04\x00O\xd7q>0-\x08?Cv\xd9\xbf\x00\x8c\xae\xbd\x00\x00\x00\x00?\x03,\xc0\xfe\x1a\xed\x01\x01\x1b\x1bsf\x11\x00\x00\x00\x00\xf9\xff-\x00\xf7\xfb\xfa\xffk\x00\xe2\xff\x00\xff\xf9\xffx\x01\xd3u\xfe\x16\xee\x01\x01tVt\x04\x00\x04\x00(\x00\xf9\xfb\t\x00g\x00\xfa\xff\xfc\xfeS\xff\r\x02\xd3\xd4\xfe\x16\xef\x01\x01\x81Vt\x04\x00\xf5\xff \x00\xf0\xfb\xea\xff\x84\x00\xfa\xff\x82\x00P\x00j\x02\x1f\x0f\xfe\x0e\xf0\x01\x01\x1dVt\x04\x00\xcb\x94iD\x14\xaeG\xbep\x10\x8a\xef\xfe\x0e\xf1\x01\x01\x89Vt\x04\x00l\xdaiD33\x11>\xb9\x15\xbe9\xfe\x1f\xf2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xca:\xf1\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xd1/\xfe\x06\xf3\x01\x01}\xc5\x14\x04\x00\x03\x00\xff\xa0'b'\xfe\x04\xf4\x01\x01\x98\x00\x00\x80\x8a\x1a\xea\xfe\x02\xf5\x01\x01*\x00\x00n\x96\xfe\x1e\xf6\x01\x01\x18\xe0Hf\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xcd\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c"2\xfe\x1a\xf7\x01\x01>\xf4\x05\x01\xc0"\x07\x8d\xbe\xebQ\xdf\xba\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xbc*\xfe\x08\xf8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xba6\xfe\x12\xf9\x01\x01\xfcit\x04\x004\x00\x01\x00ARMMASK\x00Wr\x87?\xfe\t\xfa\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x039\x01\xfe\x03\xfb\x01\x01Ms\x00\x007Y\xfe\x15\xfc\x01\x01$s\x11g\x11`\x06\xe0\x05\xc6\x05>\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2D\xfe\x16\xfd\x01\x01#\x7ft\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4\xd7\xfe\x03\xfe\x01\x01Ms\x00\x00V\xce\xfe\x03\xff\x01\x01/\xff\x00\x00?7'b'\xfe\x14\x00\x01\x01J\x8f\xc2u=\x8f\xc2u=\xaeG\x01@\x00\x00\x00\x00\xb3\x006\x00?\xd6\xfe\x1c\x01\x01\x01!Lt\x04\x00|\xa6\x02\x18\xc8\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\xfa\xff\xff\xff\x00\x00\xfbE%\xcc\xfe\x1c\x02\x01\x01 \xf7t\x04\x00e\xebm>\xf1\xa8\t?N\xf1\xd7\xbf\x7f\xf4\x84\xbd\xfb\xff\xa2\xbc\\\xfd\xd3\xbbg\x95\xfe\x03\x03\x01\x01Ms\x00\x00\x107\xfe\x1c\x04\x01\x01\x1e\x1fu\x04\x00\r\xb1%\xbd\xe2m\x0b;\xd1=G@\x9b&\xdf\xbc\xeb\xfd\xb8\xbc\xb3\x1b\xb8\xbe\x84%\xfe\x18\x05\x01\x01\xb2\x1d\xc4L\xbd}\xe4\x12<\xf2\xc9H@\xc2\x15*D\x86\xa6\x02\x18\xcf\xe7\xb8\xfd\xbe\xf7'b'\xfe\x1c\x06\x01\x01\xa3Pb":C\xdb\xd2\xba\xf1\x15c9\x00\x00\x00\x00\x00\x00\x00\x00Z7E\xb9\x15\xd9[\xfe\x1f\x10\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xca:\x12\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xf2\x18\xfe\x06\x11\x01\x01}\xc2\x14\x00\x00\x03\x00A\\\xfe\x04\x12\x01\x01\x98\x00\x00\x80\x8a\x88\x9b\xfe\x02\x13\x01\x01*\x00\x00;\xec\xfe\x1e\x14\x01\x01\x18\x08Zi\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xcf\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xbe(\xfe\x1a\x15\x01\x01>H\xd3\x12\xc0\xbd\x7f[\xbf\xae\xc7\xf1<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe4\xb3\xfe\x08\x16\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00o\x16\xfe\x15\x17\x01\x01$\xfe\nk\x11\xc4\x06h\x06\xd1\x05\xa4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00,\xf8\xfe\x16\x18\x01\x01#\x83u\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00p\xac'b'\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ\xfe\x14\x1a\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xd7\xa3\x00@\x8f\xc2\xf5<\xb2\x005\x00\xfd\x1d'b'\xfe\x1c\x1b\x01\x01!\xdeu\x04\x00}\xa6\x02\x18\xc9\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\xfc\xff\xff\xff\x03\x00\xdbE\xdfH\xfe\x1c\x1c\x01\x01 \xfdu\x04\x00\x1a0s>F\xd0\x0c?\xb2\x95\xd7\xbfr\x9aJ\xbd\xd9\xec\x97\xbc\xdeW\x1f\xbdG\x8e\xfe\x03\x1d\x01\x01Ms\x00\x00e\\\xfe\x1c\x1e\x01\x01\x1e$v\x04\x00v{\xcb\xbc$\xd1\x08\xbc\x92\xe6G@\xf8\xdc\xa4\xbd\xb3e2>&c\x9f=\x0cp\xfe\x18\x1f\x01\x01\xb2\xe3 \t\xbd5_\x7f\xbb#\xf0H\xc0\x8f"*D\x86\xa6\x02\x18\xd0\xe7\xb8\xfd\x1a\xce\xfe\x1a \x01\x01\x1b\xde\xcdm\x11\x00\x00\x00\x00\xea\xff&\x00\x17\xfc\x9d\xff\x7f\x00$\x00\xff\xfe\xf8\xffx\x01\xde\xdf\xfe\x16!\x01\x01t8v\x04\x00\xf2\xff\x1a\x00\x19\xfc\x93\xff\x8d\x003\x00\xfb\xfeT\xff\n\x02S\xbd\xfe\x16"\x01\x01\x818v\x04\x00\xf0\xff&\x00\x1d\xfcE\xff\xb9\x00;\x00~\x00T\x00u\x02\xdc6\xfe\x0e#\x01\x01\x1d8v\x04\x00L\x95iD\x99\x99?\xbep\x10}\xce\xfe\x0e$\x01\x01\x898v\x04\x00&\xdbiD\xcd\xcc\x1c>\xba\x15v\xc0\xfe\x1f%\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x04\x01\xcb:\x12\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xb8\xf2\xfe\x06&\x01\x01}\xc5\x14\x00\x00\x03\x00p\xa8\xfe\x04\'\x01\x01\x98\x00\x00\x80\x8a=\xe1\xfe\x02(\x01\x01*\x00\x00\xf3L\xfe\x1e)\x01\x01\x180kl\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xd0\xe7\xb8\xfd\x04j\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\xe8\xcc\xfe\x1a*\x01\x01>\xfc\xf2\n\xc0\x94\xcf\xba>\xf5H\xc9<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf2\xf1\xfe\x08+\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00n\xc7\xfe\x1c,\x01\x01\xa3\xd4\xed!:\x00\xb9\xd3\xba>qa9\x00\x00\x00\x00\x00\x00\x00\x00+\x8a4<\xc4\n\xdf;\xf5\xa7\xfe\x03-\x01\x01\xa5\xc2\x14\x00+`\xfe\x0c.\x01\x01\x02p\xf2\xd5{\xb1N\x05\x00Lv\x04\x00\x98\xbc\xfe\x16/\x01\x01\x88}\xa6\x02\x18\xca\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00]u\xfe\x160\x01\x01\xc1\x89A\x04<\xc4\rE=\x92\'K;\xe6&\xf2=\x00\x00\x00\x00?\x03\xdd{'b'\xfe\x151\x01\x01$=\to\x11%\x06+\x06\x1b\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x0f\xfe\x162\x01\x01#\x89v\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Q\x15'b'\xfe\x143\x01\x01J\n\xd7\xa3=\n\xd7\xa3=\xd7\xa3\x00@\n\xd7#<\xb3\x007\x00\x0b\xdd\xfe\x1c4\x01\x01!\xa7v\x04\x00}\xa6\x02\x18\xcb\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x00\x00\x00\x00\x02\x00\nF\xd0~\xfe\x1c5\x01\x01 \x01w\x04\x00\xb0\x89z>\r\xd4\x0f?\xa8\xb2\xd7\xbf\x1f\xbdT;1j\xce:Y@\xec\xbc\x8d\x9a'b'\xfe\x036\x01\x01Ms\x00\x00\xf9M\xfe\x037\x01\x01Ms\x00\x00F\xcc\xfe\x1a8\x01\x01\x1b\x81}q\x11\x00\x00\x00\x00\xeb\xff\n\x00\xf1\xfb\x0f\x00\xd2\xff \x00\xf4\xfe\xf7\xffn\x01\xdb\xf6\xfe\x169\x01\x01t*w\x04\x00\xf2\xff\x11\x00\xff\xfb\x00\x00\xed\xff\x17\x00\xef\xfeH\xff\xff\x01\xcdP\xfe\x16:\x01\x01\x81*w\x04\x00\xf0\xff\x1c\x00\xea\xfb\x07\x00\xb0\xff \x00s\x001\x00f\x02h\xdf\xfe\x0e;\x01\x01\x1d*w\x04\x00f\x97iD\x00\x00\x1e\xbeq\x10\xeb\xc8\xfe\x0e<\x01\x01\x89*w\x04\x00\x8f\xdaiD)\\\x13>\xbb\x15x\xc5\xfe*=\x01\x01\x96s\xe7f\xbc\xfcl\x01\x00q\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x1bK\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xcb:\xe6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OF\x18\xfe\x06?\x01\x01}\xc8\x14\x00\x00\x03\x00A\x1e\xfe\x04@\x01\x01\x98\x00\x00\x80\x8a\x85\x19\xfe\x02A\x01\x01*\x00\x00O\xa9\xfe\x1eB\x01\x01\x18X|o\x11\x00\x00\x00\x00\x86\xa6\x02\x18\xd2\xe7\xb8\xfd\x0ej\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xcal\xfe\x1aC\x01\x01>@\xd5\xfb\xbf\xb7%\x92=)\xfc\xf3<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00Y\x93\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$\xfe\x1cE\x01\x01\x1e>w\x04\x00E\x05C\xbd/M\xd0;\xf6eH@\xa5Vr;cft\xbd<\x8d\xdf\xf5\xe26<\\bF<\xbc\xfc\x9a?\x00\x1f\xd1\xf2\xfe\x03M\x01\x01Ms\x00\x00\xecb'b'\xfe\t\x08\n\x00m\x02\x00\x00\x00\x00\xda\x00\x00\x00\x01H\xfe\x15N\x01\x01$\xfd\x05s\x11{\x06\x13\x06\x07\x060\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xf1\xfe\x16O\x01\x01#\x8ew\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00p\xae\xfe\x14P\x01\x01J\n\xd7#=\n\xd7#=\xd7\xa3\x00@\n\xd7\xa3=\xb3\x002\x00\xb24'b'\xfe\x1cQ\x01\x01!pw\x04\x00\x7f\xa6\x02\x18\xcd\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x03\x00\x02\x00\x07\x00\nF\xa4\x94\xfe\x1cR\x01\x01 \x07x\x04\x00\xb5\x82\x86>\xe2\xf7\x14?ds\xd7\xbfWz\x0c=\xa6\xe1\xdd<\xc0,\x9b\xbd\xf2\x98\xfe\x1aS\x01\x01\x1b\x8a*u\x11\x00\x00\x00\x00\xf3\xff \x00,\xfcq\x00\xe0\xff\x07\x00\xf6\xfe\xfa\xffv\x01\x8f\xc6\xfe\x16T\x01\x01t\x1bx\x04\x00\xf0\xff\x1f\x00.\xfcb\x00\xed\xff\xf5\xff\xf5\xfeY\xff\t\x02x(\xfe\x16U\x01\x01\x81\x1bx\x04\x00\xf3\xff%\x00\r\xfck\x00\xd2\xff\x04\x00\x8c\x00H\x00x\x02\xd0\xa2\xfe\x0eV\x01\x01\x1d\x1bx\x04\x00\x80\x97iDff\x1c\xber\x10pV\xfe\x0eW\x01\x01\x89\x1bx\x04\x00\x0f\xdbiD)\\\x1b>\xbc\x15s\x92\xfe\x1fX\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0f\x01\xcb:\x8c\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OF\n\xfe\x06Y\x01\x01}\xc5\x14\x00\x00\x03\x00\xf6\xea\xfe\x04Z\x01\x01\x98\x00\x00\x80\x8a!\x02\xfe\x02[\x01\x01*\x00\x00\xd1\xf5\xfe\x1e\\\x01\x01\x18\x80\x8dr\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xd4\xe7\xb8\xfd@j\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c?+\xfe\x1a]\x01\x01>\xd7\xde\xc3\xbf\xabH\xe8\xbe\\\xef\xfa<\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x0f\xdc\xfe\x08^\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00VX\xfe\x1c_\x01\x01\x1eCx\x04\x00\xc8\xaa\xd7\xbcX<\x19\xbc\x05LH@+\xb2\xb4=\xe6\x0c:\xbcA\x17\x0e\xbb\xec\r\xfe\x18`\x01\x01\xb2"<\x14\xbd\x9cL{\xbb\x12{H\xc0\x14\x0e*D\x87\xa6\x02\x18\xd4\xe7\xb8\xfd\xcc\xc0'b'\xfe\x12a\x01\x01\xfcUx\x04\x004\x00\x01\x00ARMMASK\x00Wr\xc4:\xfe\tb\x01\x01\x00\x04\x00\x00\x00\x02\x03\xd9\x04\x03S\xbe\xfe\x1cc\x01\x01\xa3\xd4\xf0 :Lg\xd5\xbah\x9d_9\x00\x00\x00\x00\x00\x00\x00\x00"\x17D=y\xd4\x82;(\x0c\t>\x00\x00\x00\x00?\x03>\xc4\xfe\x03h\x01\x01Ms\x00\x00}C\xfe\x03i\x01\x01M\xbd\x00\x00YW\xfe\x03j\x01\x01Ms\x00\x00\x12H\xfe\x15k\x01\x01$\x01\x02w\x11_\x06:\x06\xee\x05\x19\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00d\xc5\xfe\x16l\x01\x01#\x93x\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4i'b'\xfe\x03m\x01\x01/\xff\x00\x00\xca\xac\xfe\x14n\x01\x01J\n\xd7#<\n\xd7#<\xd7\xa3\x00@\x8f\xc2u=\xb3\x001\x00\x00y\xfe\x03o\x01\x01Ms\x00\x00s\xdf\xfe\x1ap\x01\x01\x1b\xb5\xd8x\x11\x00\x00\x00\x00\xff\xff\x1b\x00;\xfcy\x00Q\xff\x16\x00\xf9\xfe\xfe\xffu\x01\x15\xf9\xfe\x16q\x01\x01t\x0cy\x04\x00\x06\x00\x1a\x00q\xfcy\x00h\xff\n\x00\xf7\xfeZ\xff\n\x02a\xfe\xfe\x16r\x01\x01\x81\x0cy\x04\x00\xf9\xff)\x00c\xfct\x00p\xff\x07\x00\x82\x00P\x00v\x02\xb0\xad\xfe\x0es\x01\x01\x1d\x0cy\x04\x00{\x95iDR\xb8<\xbeq\x10\xca\xd0\xfe\x0et\x01\x01\x89\x0cy\x04\x00\xf7\xdaiD\n\xd7\x19>\xbd\x15\x00\x08\xfe\x1fu\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\xd8:\xe4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x82\xcc\xfe\x06v\x01\x01}\xc5\x14\x00\x00\x03\x000\x14'b"\xfe\x04w\x01\x01\x98\x00\x00\x80\x8a\xca\xf8\xfe\x02x\x01\x01*\x00\x00<>\xfe\x1ey\x01\x01\x18\xd0\xafx\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xd6\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c'e\xfe\x1az\x01\x01>\x8f\xc25\xbf\xe1z\xb4\xbf\xcdP \xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x89\xe2\xfe\x08{\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xef\xfe\xfe\x1c|\x01\x01!\x02y\x04\x00\x81\xa6\x02\x18\xcf\xe7\xb8\xfdjc\n\x00\xda\x07\x00\x00\x03\x00\x00\x00\x03\x00\x14F8'\xfe\x1c}\x01\x01 !y\x04\x00hJ\x93>J\x98\x19?nY\xd8\xbf\x9a\xc6 =\xa7\xcb%\xbbUX\x14\xbd+L\xfe\x1c~\x01\x01\x1eIy\x04\x00p\x15\xfb\xbb\x89\x02\xf4\xbcLgH@\x8a[\xfe=/\x96\x11\xbe\xb0\x8b\x86;\x03\xee\xfe\x18\x7f\x01\x01\xb2Y\xe8\x8e\xbcx\xc6\xc0\xbc~eH\xc0R\x18*D\x88\xa6\x02\x18\xd6\xe7\xb8\xfd\x1eb\xfe\x1c\x80\x01\x01\xa3\xa7e :OF\xd6\xba\x0b<_9\x00\x00\x00\x00\x00\x00\x00\x00?\xcfE<\x0f\xfe\x86;\x7f\x01\xfe\x03\x81\x01\x01\xa5\xc8\x14\x00\xf5\xfa\xfe\x0c\x82\x01\x01\x028\xdd\xe1{\xb1N\x05\x00]y\x04\x00\x8c\x07\xfe\x16\x83\x01\x01\x88\x82\xa6\x02\x18\xcf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xcf\x18\xfe\x16\x84\x01\x01\xc1\x8c.\x01\xb8\x1e\xa5\xbf\xaeG\xa1\xbf)\xf5\x17\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00^!\xfe\x08\x95\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00:\xde\xfe\x1c\x96\x01\x01!\xcby\x04\x00\x83\xa6\x02\x18\xcf\xe7\xb8\xfd`c\n\x00\xd0\x07\x00\x00\x00\x00\xf8\xff\xf2\xff\x1dF\x1f\xa3\xfe\x1c\x97\x01\x01 %z\x04\x00\x03\x94\x9b>=\'\x1a? \x83\xd6\xbf\x15gt\xbbJ\x83\xb0\xbd\x9d\x94\x17>\x0fo'b'\xfe\x1c\x98\x01\x01\x1eNz\x04\x00\x85B\x17\xbcW\x01\xc9\xbc\xd5xH@\x0c\xb2g\xbd\x15\xaeq=\x07\x1e\xc1\xbc\xff\x14\xfe\x18\x99\x01\x01\xb2R\x00\x8c\xbc\x8fB\xa3\xbc\x99SH\xc0\x99)*D\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\xbcS\xfe\x03\x9a\x01\x01Ms\x00\x00\x89\x0b\xfe\x1c\x9b\x01\x01\xa3\x80\xd2\x1f:9*\xd7\xba\x101_9\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x9bc\x00\x00\x00\x00?\x03m!\xfe\x15\xa0\x01\x01$\xc6\xfa~\x11[\x06\xd6\x05\xb1\x05%\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x81\xfe\x16\xa1\x01\x01#\x9ez\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\''b'\xfe\x1a\xa2\x01\x01\x1b\xd05\x80\x11\x00\x00\x00\x00\xf7\xff%\x00E\xfc\x98\xff!\x00\xfa\xff\x02\xff\x03\x00w\x01\xa6\x88\xfe\x16\xa3\x01\x01t\xefz\x04\x00\xf9\xff\x17\x00=\xfc\x9c\xff*\x00\xfb\xff\xfd\xfe^\xff\r\x02\xa7\t\xfe\x16\xa4\x01\x01\x81\xefz\x04\x00\xf0\xff \x00>\xfc\xc0\xff-\x00\xec\xff\x91\x00Y\x00{\x02B\xaf\xfe\x0e\xa5\x01\x01\x1d\xefz\x04\x00\xaa\x95iD\x8f\xc29\xber\x10>\xe9\xfe\x0e\xa6\x01\x01\x89\xefz\x04\x00\x97\xd8iD\x14\xae\xe7=\xbd\x15\x12\x97\xfe\x1f\xa7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xd8:N\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ok\xcc\xfe\x06\xa8\x01\x01}\xc5\x14\x00\x00\x03\x00\xb6s\xfe\x04\xa9\x01\x01\x98\x00\x00\x80\x8a?\xfe\xfe\x02\xaa\x01\x01*\x00\x00U\xfd\xfe\x1e\xab\x01\x01\x18 \xd2~\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\x86j\n\x00F\x00\xff\xff\x07\x00-K\x03\x0c\xc8\xb5\xfe\x1a\xac\x01\x01>{\x14\x0e\xc0\x8f\xc2u\xbf{\xd2i\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xc5:\xfe\x08\xad\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00"\x1c\xfe\x14\xae\x01\x01J)\\\x8f=)\\\x8f=G\xe1\xfa?\xaeGa\xbe\xb3\x002\x00iG'b'\xfe\x1c\xaf\x01\x01!\x94z\x04\x00\x83\xa6\x02\x18\xcd\xe7\xb8\xfd8c\n\x00\xa8\x07\x00\x00\xfe\xff\xf3\xff\xe8\xff$Fpa\xfe\x1c\xb0\x01\x01 +{\x04\x00\xc2\x98\x9d>\x80\xed\x14?\xa8x\xd0\xbf\x92S\xc1\xbc\xc2\xd4\x0e\xbe\x9d&}>\x0f\xdf\xfe\x03\xb1\x01\x01Ms\x00\x00\x15\x1a\xfe\x03\xb2\x01\x01Ms\x00\x00\xc5\x90\xfe\x1c\xb3\x01\x01\x1eS{\x04\x00e\xf1\x1a\xbd\xcdb\x86\xbc\x7f\x99H@F\xf5\x14\xbeQVg<\xe9\xcd\xe3<\x9ab\xfe\x18\xb4\x01\x01\xb2\x15K9\xbd\\:4\xbc`8H\xc0\xd7#*D\x89\xa6\x02\x18\xd7\xe7\xb8\xfd\xa8\xb3\xfe\x1c\xb5\x01\x01\xa3\x04>\x1f:\xb7\x17\xd8\xba\xb2g_9\x00\x00\x00\x00\x00\x00\x00\x00#\xd0Y\x00\x00\x00\x00?\x03\xff\xf4\xfe\x16\xbb\x01\x01\xe1\xad\x1c\x1a?\xebQ8>\xf5\xe26<\\bF<\xebk\x92?\x00\x1f40\xfe\t\t\n\x00m\x0f\x00\x00\x00\x00\xd9\x00\x00\x00\xb5\xde'b'\xfe\x15\xbc\x01\x01$T\xf8\x82\x11H\x064\x06\xfa\x05\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\xdd\xfe\x16\xbd\x01\x01#\xa3{\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00j\xfd\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\xfe\x1a\xbf\x01\x01\x1bL\xe6\x83\x11\x00\x00\x00\x00\xf7\xff\x1f\x00-\xfc\x11\x00\x00\x00 \x00\xfb\xfe\xf7\xffu\x01\xa8\x96\xfe\x16\xc0\x01\x01t\xe0{\x04\x00\xfa\xff$\x005\xfc\xf6\xff\x1c\x00\x19\x00\xfa\xfeW\xff\r\x02O\xce\xfe\x16\xc1\x01\x01\x81\xe0{\x04\x00\xf8\xff%\x004\xfc\n\x00\x02\x00\x17\x00\x89\x003\x00\x86\x02\xf2i\xfe\x0e\xc2\x01\x01\x1d\xe0{\x04\x00\x1d\x94iD\\\x8fR\xbeq\x10\x169\xfe\x0e\xc3\x01\x01\x89\xe0{\x04\x00\xaf\xd8iDR\xb8\xea=\xbc\x15iJ\xfe\x1f\xc4\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00(\x01\xd8:\x9c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xda?\xfe\x06\xc5\x01\x01}\xc2\x14\x00\x00\x03\x00O,\xfe\x04\xc6\x01\x01\x98\x00\x00\x80\x8aMy\xfe\x02\xc7\x01\x01*\x00\x00\x9fw\xfe\x1e\xc8\x01\x01\x18H\xe3\x81\x11\x00\x00\x00\x00\x8a\xa6\x02\x18\xd5\xe7\xb8\xfdhj\n\x00F\x00\xff\xff\t\x00-K\x03\x0ci:\xfe\x1a\xc9\x01\x01>\x8f\xc2%\xc0{\x14n\xbf\xdc\x1f\x95\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xcb\x04\xfe\x08\xca\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd2\xfe\x14\xcb\x01\x01J\xcc\xcc\xcc=\xcc\xcc\xcc=33\xf3?\x99\x99\x99\xbe\xb3\x002\x008&\xfe\x1c\xcc\x01\x01!\x12|\x04\x00\x83\xa6\x02\x18\xca\xe7\xb8\xfd\xf2b\n\x00b\x07\x00\x00\xfe\xff\xf5\xff\xe1\xff1F\xbeY\xfe\x1c\xcd\x01\x01 0|\x04\x00`.\x9f>\xfd=\x0f?@Y\xc8\xbf\xc2\xc8\xbd\xbc\x04\r\xef\xbd\xd7\x85\xa0>\xdak\xfe\x12\xce\x01\x01\xfcB|\x04\x004\x00\x01\x00ARMMASK\x00Wri\xf6\xfe\t\xcf\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03H\xef'b"\xfe\x1c\xd0\x01\x01\x1eX|\x04\x00)\xbbE\xbd$\x81:\xbc*\xd5H@\xfe\x88\x8f=u\xb1)\xbc,\x99\x8e=\x1ds\xfe\x18\xd1\x01\x01\xb2\xf1\xb4i\xbd\x1d\xed\xbc\xbb\x96\x03H\xc0\xae'*D\x8a\xa6\x02\x18\xd3\xe7\xb8\xfd\x93\xe0\xfe\x1c\xd2\x01\x01\xa3\x0b\x9f\x1e:X\t\xd9\xba\xdb\xf7_9\x00\x00\x00\x00\x00\x00\x00\x00e\xe4\x85<\xf5\x8d\xbc;\xf9f\xfe\x03\xd3\x01\x01\xa5\xc5\x14\x00\x9cD\xfe\x0c\xd4\x01\x01\x02\x18\xc4\xed{\xb1N\x05\x00m|\x04\x00s;\xfe\x16\xd5\x01\x01\x88\x83\xa6\x02\x18\xca\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00i\x85\xfe\x16\xd6\x01\x01\xc1(\x89\xb8<\x1c\x8e\r=\xa8\xe3\xc6;\x81\xb4\x03>\x00\x00\x00\x00?\x03<\xbf\xfe\x03\xd7\x01\x01Ms\x00\x00\xa5\xd4"b"\xfe\x15\xd8\x01\x01$\xf9\xf8\x86\x11G\x06\xf0\x05\r\x063\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6x\xfe\x16\xd9\x01\x01#\xaa|\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc07\xfe\x03\xda\x01\x01Ms\x00\x00xn\xfe\x1a\xdb\x01\x01\x1b\xff\x94\x87\x11\x00\x00\x00\x00\xfb\xff'\x006\xfc\x02\x00\xd8\xff\x07\x00\xfa\xfe\xf9\xffv\x01m\x98\xfe\x16\xdc\x01\x01t\xd2|\x04\x00\xfe\xff\x1e\x00;\xfc\x1d\x00\xd3\xff\x02\x00\xf8\xfe[\xff\x0f\x02\xf1\x81\xfe\x16\xdd\x01\x01\x81\xd2|\x04\x00\xf7\xff3\x00M\xfc\xcf\xff\xe1\xff\xec\xffx\x00h\x00i\x02\xecZ\xfe\x0e\xde\x01\x01\x1d\xd2|\x04\x009\x95iD\xcd\xcc@\xbeq\x10f=\xfe\x0e\xdf\x01\x01\x89\xd2|\x04\x00\x8f\xdaiD)\\\x13>\xbd\x15\xe2 \xfe\x1f\xe0\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xd0:\x9c\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x1e(\xfe\x06\xe1\x01\x01}\xc5\x14\x00\x00\x03\x00\x88W\xfe\x04\xe2\x01\x01\x98\x00\x00\x80\x8a\x91\xb1\xfe\x02\xe3\x01\x01*\x00\x00j{\xfe\x1e\xe4\x01\x01\x18P\xa6\x84\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xd0\xe7\xb8\xfd\xfai\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0c\xd2\x1a\xfe\x1a\xe5\x01\x01>\x8f\xc2%\xc0\xc2\xf5h\xbf\x0f\xcd\xb0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00=b\xfe\x08\xe6\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xec\\\xfe\x03\xe7\x01\x01/\xff\x00\x00\xfbA"b'\xfe\x14\xe8\x01\x01J\\\x8fB>\\\x8fB>p=\xea?\xebQ\xb8\xbe\xb3\x003\x00\x8c%\xfe\x1c\xe9\x01\x01!\xf0|\x04\x00\x83\xa6\x02\x18\xc8\xe7\xb8\xfd\xa2b\n\x00\x12\x07\x00\x00\xff\xff\xf6\xff\xdc\xffSF\xcb\x9d\xfe\x1c\xea\x01\x01 6}\x04\x00\xf9G\x9f>\x83\xbc\t?k5\xbe\xbf\x80\x95\x88\xbc\x9e\xd1\xe0\xbdp\x0b\xbc>\x13J\xfe\x1c\xeb\x01\x01\x1e^}\x04\x00K<\x1a\xbd\xb4\xd3\x98\xbc\x8e\tI\xc0\x98\xb4\xd5;\xf8\xa03;\x16\xfa,\xbcE\x91\xfe\x18\xec\x01\x01\xb2\xcf\xa58\xbdm8`\xbc\x81\xc2G\xc0)\x1c*D\x89\xa6\x02\x18\xd0\xe7\xb8\xfd\x9d\x86'b"\xfe\x1c\xed\x01\x01\xa3_\x08\x1e:\xc8\x01\xda\xba9\xc1`9\x00\x00\x00\x00\x00\x00\x00\x00\x99\xee\xb3<|\x15\x90;\x95\xee\xfe\x03\xee\x01\x01\xa5\xc2\x14\x00\xe8D\xfe\x0c\xef\x01\x01\x02\xa0\xbf\xf1{\xb1N\x05\x00s}\x04\x00p(\xfe\x16\xf0\x01\x01\x88\x83\xa6\x02\x18\xc7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf9\xfb\xfe\x16\xf1\x01\x01\xc1\xfa'\xaf<\xcb\x00\xe9\xbf\x15s:\xfe\x1f\xf9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x00\xd0:\xdd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Opf\xfe\x06\xfa\x01\x01}\xc5\x14\x00\x00\x03\x00\xd4d\xfe\x04\xfb\x01\x01\x98\x00\x00\x80\x8a2|\xfe\x02\xfc\x01\x01*\x00\x00W\xd7\xfe\x1e\xfd\x01\x01\x18\x88\xcc\x8a\x11\x00\x00\x00\x00\x89\xa6\x02\x18\xcd\xe7\xb8\xfd\xb4i\n\x00F\x00\xff\xff\x0c\x00-K\x03\x0c\xa7\\"b'\xfe\x1a\xfe\x01\x01>\xa4p=\xc0G\xe1z\xbfx\\\xc4\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xf3\xbe\xfe\x08\xff\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf9.\xfe\x03\x00\x01\x01Ms\x00\x00\xc0\xbd\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<\xfe\x14\x02\x01\x01J\x8f\xc2\xf5=\x8f\xc2\xf5=R\xb8\xde?\xcc\xcc\xcc\xbe\xb3\x003\x00uR'b'\xfe\x1c\x03\x01\x01!\xa5}\x04\x00\x84\xa6\x02\x18\xc5\xe7\xb8\xfdHb\n\x00\xb8\x06\x00\x00\xff\xff\xf6\xff\xd8\xffMF\x19\x8e\xfe\x1c\x04\x01\x01 <~\x04\x00W\x17\xa1>\xea\xa0\x02?Qd\xb2\xbf\xad"7\xbcH\x1f\xdb\xbd\xa1\xab\xcd>\xb9\xcc\xfe\x03\x05\x01\x01Ms\x00\x04\xc1M\xfe\x1c\x06\x01\x01\x1ed~\x04\x00\xac]M\xbd\xef\xbdm\xbc\x9b\xfcH@\n\xee\xbd\xbc\xddE\x01:C\xbf\x13\xbd\x92\x93\xfe\x18\x07\x01\x01\xb2\xf2\xa8m\xbd\xb2\x0f\x17\xbcx\xd4G\xc0\xb8\x1e*D\x89\xa6\x02\x18\xcd\xe7\xb8\xfd$\xe3\xfe\x1c\x08\x01\x01\xa3=\x7f\x1d:J\xfb\xda\xba2\xaba9\x00\x00\x00\x00\x00\x00\x00\x00\xb5@\xbe<\xcew\x82;C\xc1\xfe\x03\t\x01\x01\xa5\xc5\x14\x00$\x97\xfe\x0c\n\x01\x01\x02p\xaf\xf5{\xb1N\x05\x00x~\x04\x00\x82\xdb\xfe\x16\x0b\x01\x01\x88\x84\xa6\x02\x18\xc4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00F\xd7\xfe\x16\x0c\x01\x01\xc1"\xcbm<\x1c\x9b\xcf\x00\x00\x00\x00?\x03\x1bd'b'\xfe\x1a\r\x01\x01\x1b\x94\xf2\x8e\x11\x00\x00\x00\x00\xfc\xff\x1e\x00$\xfc\x17\x00\xf3\xff\x03\x00\xf9\xfe\xf8\xffu\x01]\xdc\xfe\x16\x0e\x01\x01t\xb4~\x04\x00\x08\x00!\x00.\xfc\n\x00\xf9\xff\x05\x00\xf7\xfeV\xff\x0c\x02\n\x82\xfe\x16\x0f\x01\x01\x81\xb4~\x04\x00\xfd\xff/\x00,\xfc\x15\x00\xe9\xff\x03\x00\x88\x00;\x00\x80\x02\xa9:\xfe\x0e\x10\x01\x01\x1d\xb4~\x04\x00\x0b\x98iD\x14\xae\x13\xbes\x10\x96M\xfe\x0e\x11\x01\x01\x89\xb4~\x04\x00\x99\xdaiD\x00\x00\x14>\xbe\x15\xd2r\xfe\x1f\x12\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xcc\x00\xd0:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oj\x03\xfe\x06\x13\x01\x01}\xc5\x14\x00\x00\x03\x00{0\xfe\x04\x14\x01\x01\x98\x00\x00\x80\x8a\x97?\xfe\x02\x15\x01\x01*\x00\x00\xf6\xb4\xfe\x1e\x16\x01\x01\x18\xd0+\x8e\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xc9\xe7\xb8\xfdZi\n\x00F\x00\xff\xff\x13\x00-K\x03\x0c[O\xfe\x1a\x17\x01\x01>\x8f\xc2E\xc0\\\x8f\x82\xbf\xa9\xae\xd3\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xff\xc0\xfe\x08\x18\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe9&\xfe\x15\x19\x01\x01$\xba@\x8f\x11N\x06\xdb\x05\xeb\x05C\x06\x00\x00\x00\x00\x00\x00\x00\x00\x003\xff\xfe\x16\x1a\x01\x01#\xc8~\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbe\r'b'\xfe\x14\x1b\x01\x01J\\\x8fB>\\\x8fB>\xd7\xa3\xd0?\xf5(\xdc\xbe\xb3\x003\x00UH\xfe\x1c\x1c\x01\x01!\x82~\x04\x00\x84\xa6\x02\x18\xc2\xe7\xb8\xfd\xe4a\n\x00T\x06\x00\x00\xfe\xff\xf8\xff\xd6\xffJFc\x8d\xfe\x1c\x1d\x01\x01 A\x7f\x04\x00\xb7\xcf\x9f>\x82\x7f\xf7><\x1f\xa5\xbfMi\xc0\xbc\x03\xc1\xb1\xbd\xb8\x94\xda>\xf7\x86\xfe\x03\x1e\x01\x01Ms\x00\x00\xb5\xd6\xfe\x03\x1f\x01\x01Ms\x00\x00\nW\xfe\t\n\n\x00m\x1e\x00\x00\x00\x00\xdd\x00\x00\x00\xee\x8e'b'\xfe\x1c \x01\x01\x1ei\x7f\x04\x00-\x8fP\xbd\x1c\x10s\xbc\xee\x06I@E\x1b\x89<\xf6i\x08\xbd\xc2\x00|<\x96\x8d\xfe\x18!\x01\x01\xb2/fq\xbd\x07+\x1e\xbcY\xd2G\xc0\xd7\x03*D\x88\xa6\x02\x18\xc5\xe7\xb8\xfdIS\xfe\x1c"\x01\x01\xa3#\x10\x1d:\xf6\xfa\xdb\xba\xaa\xb1b9\x00\x00\x00\x00\x00\x00\x00\x00d\xc9\xc0<\xce\xef\x8a;\x8c`\xfe\x03#\x01\x01\xa5\xbb\x14\x00\x00\xf3\xfe\x0c$\x01\x01\x02\x10\xa7\xf9{\xb1N\x05\x00}\x7f\x04\x00\x17.\xfe\x16%\x01\x01\x88\x83\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00,\xc2\xfe\x16&\x01\x01\xc1\xac\xdd\xde<\x15Q\x88<[\xd2c:\x18\x8d\xdb=\x00\x00\x00\x00?\x03|\xd7\xfe\x16\'\x01\x01\xe1\xbf\x9f\x1a?\xebQ8>\xf5\xe26<\\bF<\xf68\x95?\x00\x1f\x87Q\xfe\x03(\x01\x01Ms\x00\x00\x8c&\xfe\x1a)\x01\x01\x1b5\xa0\x92\x11\x00\x00\x00\x00\xff\xff\x10\x00\x15\xfc\x03\x00\xcd\xff\xed\xff\xfc\xfe\xf5\xffr\x01U\x9f\xfe\x16*\x01\x01t\xa5\x7f\x04\x00\x07\x00\x11\x00\'\xfc\xfd\xff\xbe\xff\xfc\xff\xf8\xfeX\xff\x0c\x02r\x9e\xfe\x16+\x01\x01\x81\xa5\x7f\x04\x00\x00\x00\x1e\x00&\xfc\xe7\xff\xa2\xff\xfe\xffu\x00U\x00[\x02\xddu\xfe\x0e,\x01\x01\x1d\xa5\x7f\x04\x00\x99\x98iD\xcd\xcc\n\xbes\x10\xf7-\xfe\x0e-\x01\x01\x89\xa5\x7f\x04\x00\x0c\xdciD33+>\xbf\x15\xd7\xd4\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00"\x01\xc8:\xcd\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O}\xf5\xfe\x06/\x01\x01}\xc5\x14\x00\x00\x03\x00KA\xfe\x040\x01\x01\x98\x00\x00\x80\x8aK\xf7\xfe\x021\x01\x01*\x00\x00\x03\xb8\xfe\x1e2\x01\x01\x18\xf8<\x91\x11\x00\x00\x00\x00\x88\xa6\x02\x18\xc5\xe7\xb8\xfd\x00i\n\x00F\x00\xff\xff\x13\x00-K\x03\x0cD\xad\xfe\x1a3\x01\x01>\xf5(L\xc0R\xb8^\xbf\xf8\xcc\xde\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x94\xe0\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8'b'\xfe\x155\x01\x01$2?\x93\x11\x1e\x06&\x06(\x06\x08\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00UG\xfe\x166\x01\x01#\xce\x7f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9fR\xfe\x147\x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>\n\xd7\xc3?\xaeG\xe1\xbe\xb3\x003\x00C\xe3\xfe\x128\x01\x01\xfc0\x80\x04\x004\x00\x01\x00ARMMASK\x00Wr\xed\x05\xfe\t9\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\xfcW'b'\xfe\x1c:\x01\x01!\x00\x80\x04\x00\x83\xa6\x02\x18\xbf\xe7\xb8\xfdva\n\x00\xe6\x05\x00\x00\xfb\xff\xfc\xff\xd4\xff6F\x877\xfe\x1c;\x01\x01 G\x80\x04\x00E:\x9b>\xc4\xa0\xea>WD\x97\xbf\xe3Un\xbd\x16\xceD\xbd\xf6\x1f\xe5>Ar\xfe\x1c<\x01\x01\x1eo\x80\x04\x00 \x9bk\xbd\xbc\xff\x9b\xbc\x9c\xc1H@\xd2\xf7\xc2\xbcL\xd7#=\xd6-H\xbc\x156\xfe\x18=\x01\x01\xb2\xa9-\x87\xbd^6m\xbc\x9e\x10H\xc0\xd7\x03*D\x87\xa6\x02\x18\xc3\xe7\xb8\xfd\xe4\xf5\xfe\x1c>\x01\x01\xa3\x19\xbf\x1c:\xbd\x00\xdd\xbah\xbcc9\x00\x00\x00\x00\x00\x00\x00\x00\x15c\xd3<\xdd;\xa6;\xde|\xfe\x03?\x01\x01\xa5\xc5\x14\x00\x1dg\xfe\x0c@\x01\x01\x02\xe8\xe8\xfd{\xb1N\x05\x00\x82\x80\x04\x00O\x8a\xfe\x16A\x01\x01\x88\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4\x06\xfe\x16B\x01\x01\xc1\xb6kl\x00\x00\x00\x00?\x03y\r'b'\xfe\x1aC\x01\x01\x1b\xdaP\x96\x11\x00\x00\x00\x00\x03\x00\x19\x00\x1e\xfc\xd4\xff \x00\x04\x00\xfe\xfe\xf3\xffv\x01\xac\x88\xfe\x16D\x01\x01t\x97\x80\x04\x00\xfb\xff\x19\x00C\xfc\xd7\xff \x00\xf6\xff\xfa\xfeU\xff\x0f\x02\x8b\xcd\xfe\x16E\x01\x01\x81\x97\x80\x04\x00\xfb\xff\x1e\x00!\xfc\xe3\xff\x1b\x00\xe3\xff\x83\x00U\x00k\x02 t\xfe\x0eF\x01\x01\x1d\x97\x80\x04\x00F\x99iD\x00\x00\x00\xbes\x10@\xe4\xfe\x0eG\x01\x01\x89\x97\x80\x04\x00\xd7\xddiD\n\xd7G>\xc0\x15\x1eO\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x009\x01\xc8:\xd8\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oy\\\xfe\x06I\x01\x01}\xc2\x14\x00\x00\x03\x00\xab\\\xfe\x04J\x01\x01\x98\x00\x00\x80\x8a\xb5\xfd\xfe\x03K\x01\x01Ms\x00\x00]\x7f\xfe\x03L\x01\x01Ms\x00\x00S\xe3\xfe\x02M\x01\x01*\x00\x00\xd5\x18\xfe\x1eN\x01\x01\x18\x00\x00\x94\x11\x00\x00\x00\x00\x87\xa6\x02\x18\xc3\xe7\xb8\xfd\xb0h\n\x00F\x00\xff\xff\r\x00-K\x03\x0c\x93@\xfe\x1aO\x01\x01>\xc2\xf58\xc0\xcc\xcc\xcc\xbe\xdc\xdf\xe7\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00D\x96\xfe\x08P\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd0h\xfe\x15Q\x01\x01$\xd3:\x97\x11Y\x06\x1a\x06\x13\x06*\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00V\xe0\xfe\x16R\x01\x01#\xd3\x80\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00d@'b'\xfe\x14S\x01\x01J\x99\x99\x19>\x99\x99\x19>\xe1z\xb4?ff\xe6\xbe\xb3\x003\x00y\xf8\xfe\x03T\x01\x01Ms\x00\x00\x97\x95\xfe\x03U\x01\x01/\xff\x00\x00\xfel\xfe\x1cV\x01\x01!\xc9\x80\x04\x00\x81\xa6\x02\x18\xbd\xe7\xb8\xfd\x08a\n\x00x\x05\x00\x00\xf9\xff\x00\x00\xd3\xff/F=Y\xfe\x1cW\x01\x01 K\x81\x04\x00\xb4\x91\x91>\x11o\xe5>\xe8\xbe\x88\xbf\xe5\xfc\x90\xbd\xca\xc9\xab;\xb1F\xea>%\xd7'b'\xfe\x1cX\x01\x01\x1eu\x81\x04\x00\x03\xebI\xbd\xbe*\x93\xbb\xba\xafH@\x8bu\x1d>3\xb7\x0c=l\xec\xb7:\xb6\xcd\xfe\x18Y\x01\x01\xb2\xce\xcas\xbd\xb9k*:\xb3)H\xc0{\x04*D\x86\xa6\x02\x18\xc0\xe7\xb8\xfd\x14\xe9\xfe\x1aZ\x01\x01\x1bY\xff\x99\x11\x00\x00\x00\x00\xf2\xff(\x004\xfc\x93\x00\x05\x00\xfe\xff\xf9\xfe\xf3\xffq\x01\xb9d\xfe\x16[\x01\x01t\x89\x81\x04\x00\xf9\xff%\x00:\xfc\x95\x00\x10\x00\x01\x00\xf6\xfeU\xff\x0c\x02~\x82\xfe\x16\\\x01\x01\x81\x89\x81\x04\x00\xf1\xff1\x00\x16\xfc\x91\x00\x03\x00\x01\x00t\x00]\x00]\x02\x99\x16\xfe\x0e]\x01\x01\x1d\x89\x81\x04\x00\x81\x98iD\xebQ\x0c\xbet\x10\xa4\x92\xfe\x0e^\x01\x01\x89\x89\x81\x04\x00\xf0\xdbiD\xa4p)>\xc1\x15\x06\xe0\xfe*_\x01\x01\x96s\xe7f\xbc\xfel\x01\x00t\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00U\x9a\xfe\x1f`\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x13\x01\xc8:\xa4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xdc}\xfe\x06a\x01\x01}\xbe\x14\x00\x00\x03\x00]\xa2\xfe\x04b\x01\x01\x98\x00\x00\x80\x8aFu\xfe\x02c\x01\x01*\x00\x00w\xfd\xfe\x1ed\x01\x01\x188&\x9a\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xbf\xe7\xb8\xfd\x06h\n\x00F\x00\xff\xff\t\x00-K\x03\x0cK]\xfe\x1ae\x01\x01>\xd7\xa3 \xc0{\x14.\xbe\xd5\x8e\xf0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe4\x86\xfe\x08f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00N\x9a\xfe\x1cg\x01\x01\xa3\xb0\x83\x1c:\xf5"\xde\xba\xe3\xf1d9\x00\x00\x00\x00\x00\x00\x00\x00L(\xe4>f\x0fu\xbf^\xd8\xe6\xbc\xc1w\xed\xfe\x1as\x01\x01\x1b]\xae\x9d\x11\x00\x00\x00\x00\xfd\xff\x16\x00\x16\xfc\xdc\xff\xc5\xff\x10\x00\xf6\xfe\xf9\xffr\x01\x13n\xfe\x16t\x01\x01tz\x82\x04\x00\xee\xff\x1a\x00\r\xfc\xc4\xff\xcf\xff\x0c\x00\xf4\xfeV\xff\t\x02O\x0e\xfe\x16u\x01\x01\x81z\x82\x04\x00\xf2\xff\x1e\x00\x04\xfc\xb4\xff\xea\xff\xfa\xff\x82\x00G\x00n\x02\xdb\xb6\xfe\x0ev\x01\x01\x1dz\x82\x04\x00\xde\x98iD\xe1z\x06\xbet\x10|\xd0\xfe\x0ew\x01\x01\x89z\x82\x04\x00l\xdbiD33!>\xc2\x15no\xfe\x1fx\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdd\x00\xc8:\x0b\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xbe\xae\xfe\x06y\x01\x01}\xc5\x14\x00\x00\x03\x00|\x08\xfe\x04z\x01\x01\x98\x00\x00\x80\x8a\x18\xf5\xfe\x02{\x01\x01*\x00\x00R\x96'b'\xfe\x1e|\x01\x01\x18`7\x9d\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc0\xe7\xb8\xfd\xa2g\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x07w\xfe\x1a}\x01\x01>\xaeG\x11\xc0\x14\xae\x07\xbf\x07\xe7\xf9\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00b\x8a\xfe\x08~\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xed\xfe\x1c\x7f\x01\x01\x1e\x8f\x82\x04\x00\xb3\xa6+\xbd\x0eD\x06\xbc-\x9aH@\x17\xe8\xa0\xbd\xa0C\xd1\xbc\x98\x06D9\xbe\x1a\xfe\x18\x80\x01\x01\xb2\xfb:N\xbd\xbb3#\xbb\xa2BH\xc0\x85\xfb)D\x84\xa6\x02\x18\xc0\xe7\xb8\xfd\x8c\xea\xfe\x1c\x81\x01\x01\xa3\xf4`\x1c:.2\xdf\xba\xba\rf9\x00\x00\x00\x00\x00\x00\x00\x00\xaej\xb1<\xad3\xac;\xac\x9a\xfe\x03\x82\x01\x01\xa5\xc5\x14\x00\xaa\xfb\xfe\x0c\x83\x01\x01\x02\xf8\xdf\x05|\xb1N\x05\x00\xa3\x82\x04\x00\xdf\xde\xfe\x16\x84\x01\x01\x88\x80\xa6\x02\x18\xbd\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x08\xe6\xfe\x16\x85\x01\x01\xc1\xb8\xae\x86\xf5\xdb\xe8>RAV\xbf!\x0b\x90;\xf6nt=sV\xf8>\xb4\xbe\xfe\x1a\x8d\x01\x01\x1b\x86^\xa1\x11\x00\x00\x00\x00\xf9\xff$\x00*\xfcN\x00\x96\xff\xfa\xff\xf7\xfe\xf4\xffq\x01t\x10\xfe\x16\x8e\x01\x01tl\x83\x04\x00\xfb\xff*\x00)\xfcA\x00\xae\xff\x0e\x00\xf4\xfeV\xff\n\x02|k\xfe\x16\x8f\x01\x01\x81l\x83\x04\x00\xf5\xff\x1e\x00!\xfc,\x00\xb3\xff\x08\x00\x85\x00?\x00\x84\x02\xeb^\xfe\x0e\x90\x01\x01\x1dl\x83\x04\x00\xf3\x9biDff\xaa\xbdt\x10\xb3\x94\xfe\x0e\x91\x01\x01\x89l\x83\x04\x00[\xdfiD{\x14`>\xc1\x15\xb8\xa6\xfe\x1f\x92\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xca\x00\xda:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xb8T\xfe\x06\x93\x01\x01}\xc2\x14\x00\x00\x03\x00xe\xfe\x04\x94\x01\x01\x98\x00\x00\x80\x8a@\xfb\xfe\x02\x95\x01\x01*\x00\x00\xeb2\xfe\x1e\x96\x01\x01\x18\x88H\xa0\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xbf\xe7\xb8\xfd4g\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x06Q\xfe\x1a\x97\x01\x01>\x8f\xc2\xf5\xbf\xa3p}\xbf\x90\xdf\xfc\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xbfh\xfe\x08\x98\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00K\xe0\xfe\x1c\x99\x01\x01\x1e\x94\x83\x04\x00\x022J\xbdF\x11Z\xbc\xe5\x06I@>X\xdc= \xa9\xcb\xbdA\x86\x95;A\x84\xfe\x18\x9a\x01\x01\xb2\xbd/t\xbd\xad\xac\xcb\xbb\xe2\xd2G\xc0{\xe4)D\x85\xa6\x02\x18\xbf\xe7\xb8\xfd\xb9e\xfe\x1c\x9b\x01\x01\xa3\xfcN\x1c:\xd47\xe0\xba\x8aWg9\x00\x00\x00\x00\x00\x00\x00\x00\x8a=\xd8\xf5\xe26<\\bF<\xe7\xdf\x91?\x00\x1fj\xaf'b'\xfe\x03\xa2\x01\x01Ms\x00\x00\xbd\xcb\xfe\x15\xa3\x01\x01$\x155\xa3\x11.\x06\r\x06%\x06(\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xa7\xfe\x16\xa4\x01\x01#\xe4\x83\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc5\xdf\xfe\x12\xa5\x01\x01\xfc\x1e\x84\x04\x004\x00\x01\x00ARMMASK\x00Wr\xa4\x13\xfe\t\xa6\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x11\x98'b'\xfe\x14\xa7\x01\x01J\n\xd7#=\n\xd7#=ff\x86?\x00\x00\x00\xbf\xb4\x004\x00\xf4A\xfe\x03\xa8\x01\x01Ms\x00\x00n\xed\xfe\x1a\xa9\x01\x01\x1bb\x0b\xa5\x11\x00\x00\x00\x00\xfe\xff\x14\x00\x18\xfc*\x00\xc7\xff\xe0\xff\xfb\xfe\xfd\xffv\x01\xb4-\xfe\x16\xaa\x01\x01t]\x84\x04\x00\x00\x00\x10\x00\x1d\xfc#\x00\xd8\xff\x00\x00\xf8\xfeW\xff\x0c\x02y\xf4\xfe\x16\xab\x01\x01\x81]\x84\x04\x00\xf8\xff"\x00\x18\xfc\n\x00\xdb\xff\x1b\x00|\x00F\x00f\x02\x7f\xc2\xfe\x0e\xac\x01\x01\x1d]\x84\x04\x00K\x9eiDR\xb8>\xbdt\x10\xaf\xd7\xfe\x0e\xad\x01\x01\x89]\x84\x04\x00\xbb\xe0iD{\x14v>\xc1\x15N\xf3\xfe\x1f\xae\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x19\x01\xda:\xca\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x11\xc7\xfe\x06\xaf\x01\x01}\xc2\x14\x00\x00\x03\x00H\x14\xfe\x04\xb0\x01\x01\x98\x00\x00\x80\x8a\x9c3\xfe\x02\xb1\x01\x01*\x00\x00\x1e>\xfe\x1e\xb2\x01\x01\x18\xb0Y\xa3\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc0\xe7\xb8\xfd\xd0f\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\xce\x0c\xfe\x1a\xb3\x01\x01>\xc2\xf5\xc8\xbf\xf6(\x9c\xbfE\xd1\xf7\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00y\x92\xfe\x08\xb4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x007n\xfe\x1c\xb5\x01\x01!\xee\x83\x04\x00\x82\xa6\x02\x18\xc0\xe7\xb8\xfd\x8c_\n\x00\xfc\x03\x00\x00\x00\x00\x06\x00\xcf\xffVF=c\xfe\x1c\xb6\x01\x01 p\x84\x04\x004\xc3\x95>\x9ci\xf0>v\x8a/\xbf\x9a\xc5\x1d;\xfb\x19\x81=&=\xff>\xc3\xd4'b'\xfe\x1c\xb7\x01\x01\x1e\x99\x84\x04\x00b4\xe7\xbc\xcc\xdc\xd0\xbca\xe6H\xc0 D\x16\xbc\n\x99\xd3\xbdt\xbf\x87=\x07\xba\xfe\x18\xb8\x01\x01\xb2f\x9d\x19\xbd`\xd1\x9e\xbc(\xacG\xc0\xc2\xe5)D\x85\xa6\x02\x18\xc0\xe7\xb8\xfd\x07c\xfe\x1c\xb9\x01\x01\xa3\xb0K\x1c:!4\xe1\xba\xb8\xaeh9\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xc5\xfd<\xaa\xdb\xb1;\xc5\xe0\xfe\x03\xba\x01\x01\xa5\xc2\x14\x00\xbfl\xfe\x0c\xbb\x01\x01\x02p\x19\x0e|\xb1N\x05\x00\xad\x84\x04\x00\x18:\xfe\x16\xbc\x01\x01\x88\x82\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfbb\xfe\x16\xbd\x01\x01\xc1V\x81\xa4<24\xa5<\xb7\xf4\x06;\x19Y\x05>\x00\x00\x00\x00?\x03\x81d\xfe\x03\xbe\x01\x01Ms\x00\x00\xa7\xab'b'\xfe\x15\xbf\x01\x01$\xfc1\xa7\x11X\x06\xdd\x05\x12\x06H\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xe5\xfe\x16\xc0\x01\x01#\xe9\x84\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00i"\xfe\x14\xc1\x01\x01J\x8f\xc2u=\x8f\xc2u=\xc2\xf5h?\x8f\xc2\xf5\xbe\xb4\x004\x008<\xfe\x03\xc2\x01\x01Ms\x00\x04\xdc\x7f'b'\xfe\x1a\xc3\x01\x01\x1b\xfe\xba\xa8\x11\x00\x00\x00\x00\xfa\xff\x13\x00\x10\xfcJ\x00\x14\x00#\x00\x02\xff\x00\x00z\x01\xee\x10\xfe\x16\xc4\x01\x01tN\x85\x04\x00\xf4\xff\x12\x00\n\xfc@\x00\x18\x00\x08\x00\xfe\xfe^\xff\x10\x02\x86\\\xfe\x16\xc5\x01\x01\x81N\x85\x04\x00\xf2\xff\x17\x00\xf5\xfb?\x00\x12\x00\xfa\xff\x8c\x00M\x00\x7f\x02?\xd4\xfe\x0e\xc6\x01\x01\x1dN\x85\x04\x00\xfd\x9diDp=R\xbdt\x10#T\xfe\x0e\xc7\x01\x01\x89N\x85\x04\x00\xf4\xe0iD\x14\xaey>\xc3\x15\x96;\xfe\x1f\xc8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00%\x01\xda:\x1d\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00OmV\xfe\x06\xc9\x01\x01}\xc2\x14\x00\x00\x03\x00\xb0\xce\xfe\x03\xca\x01\x01/\xff\x00\x00\xd6M\xfe\x04\xcb\x01\x01\x98\x00\x00\x80\x8a\x9ft\xfe\x02\xcc\x01\x01*\x00\x00\x1d\x01\xfe\x1e\xcd\x01\x01\x18\xd8j\xa6\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc1\xe7\xb8\xfdbf\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\x9e}\xfe\x1a\xce\x01\x01>)\\\xcf\xbf\xf5(\\\xbfx{\xf4\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xaen\xfe\x08\xcf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x89\xc1\xfe\x1c\xd0\x01\x01!\xb7\x84\x04\x00\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x00_\n\x00p\x03\x00\x00\xfb\xff\x03\x00\xd0\xffkF@\xba\xfe\x1c\xd1\x01\x01 v\x85\x04\x00s\xe9\x95>\xf8#\xf7>\xcfc\x0c\xbfz\xceO\xbdbX\x05=^\xfe\xf5>`\x94\xfe\x1c\xd2\x01\x01\x1e\x9e\x85\x04\x00\xe2S\xb3\xbc\xc0\xda\xd1\xbc\xe1\xdaH\xc0\xca\xc3\x1a=\xee\xf2\x93=\x1ap\x81\xbd\xf4\xa3\xfe\x18\xd3\x01\x01\xb2\xfc\x0b\x03\xbd\xb2\xf4\xad\xbc\xaa\x92G\xc0G\xd1)D\x85\xa6\x02\x18\xc1\xe7\xb8\xfd\x12\xf6'b'\xfe\x1c\xd4\x01\x01\xa3\x18U\x1c:\xaa*\xe2\xba\xaf\x17j9\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x91\xdf<\xba\xc6\x9a;\xd8\xfd\xfe\x03\xd5\x01\x01\xa5\xc5\x14\x00-Y\xfe\x0c\xd6\x01\x01\x02\xf8\x14\x12|\xb1N\x05\x00\xb3\x85\x04\x00\xe9\xe3\xfe\x16\xd7\x01\x01\x88\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf6\xaf\xfe\x16\xd8\x01\x01\xc1+\x95\xd6<\x8e\xea<\x00\x00\x00\x00?\x03E\xc4\xfe\x03\xd9\x01\x01Ms\x00\x04\xc8\x83\xfe\x15\xda\x01\x01$W,\xab\x11l\x06\x07\x06\x05\x06)\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd6\t\xfe\x16\xdb\x01\x01#\xee\x85\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x17V'b'\xfe\x1a\xdc\x01\x01\x1bIi\xac\x11\x00\x00\x00\x00\xf8\xff\x1a\x00%\xfc\xab\xff<\x00\xd0\xff\xfd\xfe\x00\x00y\x017Q\xfe\x16\xdd\x01\x01t?\x86\x04\x00\xfb\xff&\x00\x1d\xfc\xba\xff-\x00\xeb\xff\xfc\xfea\xff\x12\x02[\xd9\xfe\x16\xde\x01\x01\x81?\x86\x04\x00\xf5\xff-\x00\x17\xfc\xd6\xff\x0e\x00\xe2\xff\x82\x00?\x00\x81\x02\xfa\xff\xfe\x0e\xdf\x01\x01\x1d?\x86\x04\x00\xdd\x9diDp=Z\xbdu\x10\x82\\\xfe\x0e\xe0\x01\x01\x89?\x86\x04\x00}\xe1iD\xb8\x1e\x81>\xc3\x15$\x98\xfe\x1f\xe1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\xdc:\xf4\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ov\r\xfe\x06\xe2\x01\x01}\xc3\x14\x00\x00\x03\x00\xf6\xf1\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H\xfe\x04\xe4\x01\x01\x98\x00\x00\x80\x8a\x8e\x15\xfe\x02\xe5\x01\x01*\x00\x00\xa7#\xfe\x1e\xe6\x01\x01\x18(\x8d\xac\x11\x00\x00\x00\x00\x85\xa6\x02\x18\xc1\xe7\xb8\xfdre\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c1\xe7\xfe\x1a\xe7\x01\x01>p=\n\xc0\xd7\xa3\xf0\xbe\xe0)\xf2\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xd1B\xfe\x08\xe8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00jl\xfe\x14\xe9\x01\x01J\n\xd7#=\n\xd7#=\\\x8fB?G\xe1\xfa\xbe\xb3\x004\x00k$'b'\xfe\x1c\xea\x01\x01!I\x86\x04\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfdt^\n\x00\xe4\x02\x00\x00\xfa\xff\x00\x00\xd1\xff.\xb9\xf4>\x82\x1b\xd3\xbe\x15*\x8e\xbd\x05\xfc\x08:\x84\x8a\xf5>X\xf6\xfe\x1c\xec\x01\x01\x1e\xa4\x86\x04\x00_+\x0e\xbd\xac\xd3s\xbca\xc5H@\xca\xd4\xbb\x00\x00\x00\x00?\x03\x17\xef\xfe\x03\xf3\x01\x01Ms\x00\x04\xeb\x13'b'\xfe\x15\xf4\x01\x01$\xaf-\xaf\x11\x90\x06\x0c\x06\xec\x05\x1b\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\xbe\xfe\x16\xf5\x01\x01#\xf5\x86\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd6\xfb\xfe\t\x0c\n\x00m\x00\x00\x00\x00\x00\xda\x00\x00\x00\xf6\xe3\xfe\x1a\xf6\x01\x01\x1b\xd7\x17\xb0\x11\x00\x00\x00\x00\xec\xff&\x00\x13\xfc<\x00 \x00\xd4\xff\xf9\xfe\xfb\xffy\x01]\x9b\xfe\x16\xf7\x01\x01t1\x87\x04\x00\xe8\xff7\x00 \xfcC\x00\x18\x00\xda\xff\xfa\xfe]\xff\x0e\x02\x9d!\xfe\x16\xf8\x01\x01\x811\x87\x04\x00\xe8\xff-\x00\x15\xfc*\x00\x17\x00\xe1\xff\x87\x00N\x00y\x02C\xa4\xfe\x0e\xf9\x01\x01\x1d1\x87\x04\x00\x17\xa0iD\x14\xae\x97\xbcu\x10\xa7(\xfe\x0e\xfa\x01\x01\x891\x87\x04\x00\xec\xe2iD\x99\x99\x8c>\xc4\x15%0\xfe\x1f\xfb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f\xdc:\xc5\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oq\x97\xfe\x06\xfc\x01\x01}\xc5\x14\x00\x00\x03\x00\xa3\x91\xfe\x04\xfd\x01\x01\x98\x00\x00\x80\x8a-\xd8'b'\xfe\x02\xfe\x01\x01*\x00\x00\xec\xe0\xfe\x1e\xff\x01\x01\x18P\x9e\xaf\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\x18e\n\x00F\x00\xff\xff\x06\x00-K\x03\x0c\xcb)\xfe\x1a\x00\x01\x01>\xe1z\x14\xc0\x14\xae\xc7\xbec>\xf0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00N\xce\xfe\x08\x01\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xfcT\xfe\x03\x02\x01\x01Ms\x00\x00\xaf\xb6\xfe\x14\x03\x01\x01J\x8f\xc2u=\x8f\xc2u=\xaeG!?\x1e\x85\xeb\xbe\xb3\x004\x00\xc8\xd8\xfe\x1c\x04\x01\x01!\x12\x87\x04\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\xf2]\n\x00b\x02\x00\x00\xfc\xff\xff\xff\xd0\xff\xfdE\xe4\x06\xfe\x1c\x05\x01\x01 \x81\x87\x04\x00\xe2&\x8f>\x86@\xf4>\xcb\xfe\x8e\xbe\xee\xf4B\xbd\xaep\x84\xbc\xd2\x03\xf7>\x92\x8e'b'\xfe\x1c\x06\x01\x01\x1e\xa9\x87\x04\x00\x00g\xe3\xbcNz$\xbc\xef\xfbG@\x8e\x020<\xf8pM\xba\xde\xdcQ\xbd\xd8\x95\xfe\x18\x07\x01\x01\xb2\x82\x11\x1a\xbd/{\xad\xbb\xa7\xe5H\xc0\xf6\xb8)D\x84\xa6\x02\x18\xc3\xe7\xb8\xfd\xc6\x9c\xfe\x1c\x08\x01\x01\xa3\xe5\x94\x1c:s\x01\xe4\xba\xe5#m9\x00\x00\x00\x00\x00\x00\x00\x00\x90\xa7\xea<\x10Y\x99;\x15\x1c\xfe\x03\t\x01\x01\xa5\xc5\x14\x00$\x97\xfe\x0c\n\x01\x01\x02h\xfc\x19|\xb1N\x05\x00\xbd\x87\x04\x00\x99\x11\xfe\x16\x0b\x01\x01\x88\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc6\xa7\xfe\x16\x0c\x01\x01\xc1D[\xb0<~T:<}|\xa1;\xaf\x17\x04>\x00\x00\x00\x00?\x03\x87S\xfe\x16\r\x01\x01\xe1\t\xac\x1c?\\\x8fB>\xf5\xe26<\\bF<\xbbR\x88?\x00\x1f\xdb5\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d\xfe\x15\x0f\x01\x01$\xb6&\xb3\x11e\x06k\x06\xe5\x05\xef\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00#f\xfe\x16\x10\x01\x01#\xf9\x87\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xaeT'b'\xfe\x12\x11\x01\x01\xfc\x0b\x88\x04\x004\x00\x01\x00ARMMASK\x00Wr\x9b.\xfe\t\x12\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x1e\x9e\xfe\x1a\x13\x01\x01\x1b\x06\xc5\xb3\x11\x00\x00\x00\x00\xe6\xff#\x00%\xfcR\x00=\x00\xcb\xff\xf7\xfe\xfc\xffw\x01\x0fr\xfe\x16\x14\x01\x01t"\x88\x04\x00\xe0\xff(\x00!\xfcK\x007\x00\xda\xff\xf7\xfeW\xff\n\x02\xe6)\xfe\x16\x15\x01\x01\x81"\x88\x04\x00\xe6\xff,\x00\x0e\xfcd\x003\x00\xbb\xff\x81\x00I\x00o\x02\xbd\xc8\xfe\x0e\x16\x01\x01\x1d"\x88\x04\x00[\x9fiD\x8f\xc2\xf5\xbcu\x10\xac\xd7\xfe\x0e\x17\x01\x01\x89"\x88\x04\x00y\xe4iD\x00\x00\x99>\xc4\x15\x94\xdb\xfe\x1f\x18\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00D\x01\xdc:\x05\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O>x\xfe\x06\x19\x01\x01}\xbd\x14\x00\x00\x03\x00S\xe8\xfe\x04\x1a\x01\x01\x98\x00\x00\x80\x8aB\xe4\xfe\x02\x1b\x01\x01*\x00\x00\xd72\xfe\x1e\x1c\x01\x01\x18x\xaf\xb2\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xc0\xe7\xb8\xfd\xb4d\n\x00F\x00\xff\xff\r\x00-K\x03\x0c`\x10\xfe\x1a\x1d\x01\x01>\xcd\xcc,\xc0\xc2\xf5(\xbf=\xa0\xee\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x10)\xfe\x08\x1e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x07;\xfe\x03\x1f\x01\x01Ms\x00\x00\nW\xfe\x14 \x01\x01J\xb8\x1e\x05>\xb8\x1e\x05>\x00\x00\x00?\xd7\xa3\xf0\xbe\xb2\x005\x00\xa8u'b'\xfe\x1c!\x01\x01!\xdb\x87\x04\x00\x80\xa6\x02\x18\xbf\xe7\xb8\xfdf]\n\x00\xd6\x01\x00\x00\x00\x00\xfa\xff\xd1\xff\xcbE\xc4[\xfe\x1c"\x01\x01 \x86\x88\x04\x00\xe7\'\x8e>c\x14\xec>\xc15\x14\xbef(\xae8?\xa6\x86\xbd\'\x80\xf3>\xa3(\xfe\x1c#\x01\x01\x1e\xae\x88\x04\x00xr\xda\xbc\xed\xd9\xed\xbb\x95\x98G@\x00\xf3/\xbd\xb20\x08\xbeu\x85\xba<\xce\xd0\xfe\x18$\x01\x01\xb2\x19\xb1\r\xbd\xdb\x9d\xd9\xba\x99\xccH@\xf6\xb8)D\x83\xa6\x02\x18\xbf\xe7\xb8\xfd\x07\xcd\xfe\x1c%\x01\x01\xa3\xa4\xcc\x1c:\xc6\xe6\xe4\xba\xe4\xb5n9\x00\x00\x00\x00\x00\x00\x00\x00\x1e\xdd)=\x97\xf2m;E\x1b\xfe\x03&\x01\x01\xa5\xbd\x14\x00\xfb/\xfe\x0c\'\x01\x01\x02\xf0\xf7\x1d|\xb1N\x05\x00\xc2\x88\x04\x00\xab\x7f\xfe\x16(\x01\x01\x88\x81\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Zn\xfe\x16)\x01\x01\xc18$\xdc<\xb1\x9dB<.f\x1e;y\x9c\xf8=\x00\x00\x00\x00?\x03\xa3~\xfe\x03*\x01\x01Ms\x00\x00\xe3-'b'\xfe\x15+\x01\x01$%#\xb7\x11\x8d\x06\x13\x06\xef\x05\xdd\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xdc\xfe\x16,\x01\x01#\xfe\x88\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xd3\x03\xfe\x1a-\x01\x01\x1b\xa3q\xb7\x11\x00\x00\x00\x00\x1d\x00*\x00\x18\xfc\x81\xff\x96\xff\x18\x00\xf6\xfe\xfb\xffs\x01\x03\xbd\xfe\x16.\x01\x01t\x12\x89\x04\x00\x1a\x00;\x00$\xfc\x86\xff\x95\xff"\x00\xf8\xfeV\xff\r\x02\x9a\xd9\xfe\x16/\x01\x01\x81\x12\x89\x04\x00\x0e\x001\x006\xfcc\xff\x8f\xff&\x00y\x00@\x00k\x02\xdbi\xfe\x0e0\x01\x01\x1d\x12\x89\x04\x000\xa2iDp=j\xc5\x15\xaf\x84\xfe\x1f2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01\xdc:\n\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Oh\xdf\xfe\x063\x01\x01}\xc5\x14\x00\x00\x03\x00\xf1\xd2\xfe\x044\x01\x01\x98\x00\x00\x80\x8a\xae\xc8\xfe\x025\x01\x01*\x00\x00u\xd7\xfe\x1e6\x01\x01\x18\xa0\xc0\xb5\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xbf\xe7\xb8\xfd2d\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c&\x0c\xfe\x1a7\x01\x01>\x00\x00`\xc0p=\x8a\xbf,\xc8\xeb\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00bk\xfe\x088\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00I\x93'b'\xfe\x039\x01\x01Ms\x00\x00K\xfc\xfe\x14:\x01\x01J\xcc\xccL=\xcc\xccL=\xebQ\xb8>\x1e\x85\xeb\xbe\xb2\x005\x00l\xf5\xfe\x1c;\x01\x01!m\x89\x04\x00\x81\xa6\x02\x18\xbb\xe7\xb8\xfd\xda\\\n\x00J\x01\x00\x00\xfe\xff\xf7\xff\xd2\xff\xefE1q\xfe\x1c<\x01\x01 \x8b\x89\x04\x00\xd2\x06\x90>v#\xdc>\xd3\x9cS\xba\xa36\xea\xbc(\x9f\xb9\xbd\x12\r\xef>\x91\xe6\xfe\x03=\x01\x01/\xff\x00\x00C\x92'b'\xfe\x1c>\x01\x01\x1e\xb3\x89\x04\x00J\xd7n\xbd\x14J\xb9\xbci\x0eH@5\x1e\x17\xbe\x18]P<\xab\x88-=\xb4\xec\xfe\x18?\x01\x01\xb2o\x82\x88\xbd\xa0\x93\x99\xbc\xb6\xd4H\xc0=\x8a)D\x82\xa6\x02\x18\xbd\xe7\xb8\xfdBB\xfe\x1c@\x01\x01\xa3\xf7\x16\x1d:\x0f\xc9\xe5\xba\xf9Xp9\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xa9#=\xc7\xe4\xe4;\xf1\xf3\xfe\x03A\x01\x01\xa5\xc8\x14\x00\xe6T\xfe\x0cB\x01\x01\x02x\xf3!|\xb1N\x05\x00\xc8\x89\x04\x00A\xd2\xfe\x16C\x01\x01\x88\x81\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x18m\xfe\x16D\x01\x01\xc1\xc3\xf7\xa1<#\xb8\x03<\xca\x12\x88<#\x06\xeb=\x00\x00\x00\x00?\x03\xf0)\xfe\x03E\x01\x01Ms\x00\x00PO'b'\xfe\x1aF\x01\x01\x1b\x10"\xbb\x11\x00\x00\x00\x00\xfe\xff\x0c\x00\xf1\xfb\xa8\xff-\x00\xfd\xff\xfd\xfe\xee\xffu\x01\xa6\xa5\xfe\x16G\x01\x01t\x04\x8a\x04\x00\x0b\x00"\x00\x0c\xfc\x8e\xff=\x00\t\x00\xfe\xfeK\xff\x0c\x02l\x1e\xfe\x16H\x01\x01\x81\x04\x8a\x04\x00\xfb\xff\x16\x00\xe9\xfb\xa3\xff<\x00\xff\xffq\x00E\x00d\x02x\x86\xfe\x0eI\x01\x01\x1d\x04\x8a\x04\x00\xa7\xa5iD\xf6(\x8c=t\x10\xe8\xb4\xfe\x0eJ\x01\x01\x89\x04\x8a\x04\x00\x0f\xeaiD\x14\xae\xc5>\xc4\x15\xc0h\xfe\x1fK\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x06\x01\xb5:\x0f\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\xd8\xe5\xfe\x06L\x01\x01}\xc5\x14\x00\x00\x03\x00w\x90\xfe\x04M\x01\x01\x98\x00\x00\x80\x8aW\x14\xfe\x02N\x01\x01*\x00\x00\xbb\xb0\xfe\x1eO\x01\x01\x18\xc8\xd1\xb8\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xbd\xe7\xb8\xfd\xcec\n\x00F\x00\xff\xff\t\x00-K\x03\x0c\x80\xf2\xfe\x1aP\x01\x01>=\nw\xc0\x99\x99\x19\xbfO\x04\xe3\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x8bs\xfe\x08Q\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00}m\xfe\x15R\x01\x01$\xf6o\xbb\x11D\x062\x06\xf6\x05\xe0\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdew\xfe\x16S\x01\x01#\x18\x8a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x89n\xfe\x03T\x01\x01Ms\x00\x00\x97\x95'b'\xfe\x14U\x01\x01J\x99\x99\x19>\x99\x99\x19>=\nW>\x85\xeb\xd1\xbe\xb3\x002\x00\xaf\x1a\xfe\x1cV\x01\x01!6\x8a\x04\x00\x80\xa6\x02\x18\xb8\xe7\xb8\xfdN\\\n\x00\xbe\x00\x00\x00\xf9\xff\xff\xff\xd8\xff\x1aF\x1ce\xfe\x1cW\x01\x01 \x90\x8a\x04\x00\x93\r\x89>\xfe^\xd0>\x95\x8a\x13>\x13&\x92\xbd$v,\xbc3\x06\xcd>\xe0\xc2\xfe\x1cX\x01\x01\x1e\xb8\x8a\x04\x00\xcc"\xa3\xbd\x00\xdfQ\xbc\xb9\x95H@\x1c3g\xbdXz\x87=T\xfeE=\xc3\x84\xfe\x18Y\x01\x01\xb2\xec\xbc\xb7\xbd`$\x12\xbc\xf6NH\xc0)l)D\x82\xa6\x02\x18\xb9\xe7\xb8\xfd\x01\x05'b'\xfe\x1cZ\x01\x01\xa3\xd9p\x1d:\xd6\xab\xe6\xbag\x08r9\x00\x00\x00\x00\x00\x00\x00\x00\xad\xb2\x11=\xa0\xbf\xee;\x13I\xfe\x03[\x01\x01\xa5\xb2\x14\x00\xa6\xaf\xfe\x0c\\\x01\x01\x02\x18\xeb%|\xb1N\x05\x00\xcd\x8a\x04\x00\xf3\xae\xfe\x16]\x01\x01\x88\x7f\xa6\x02\x18\xb8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc8\xbe\xfe\x16^\x01\x01\xc1\xc4\xa0\xec<)\xca0<\x0b09=\x84o\xaf=\x00\x00\x00\x00?\x03\x9a\xfb\xfe\x03_\x01\x01Ms\x00\x00\xfb2\xfe\x1a`\x01\x01\x1b\xf5\xd0\xbe\x11\x00\x00\x00\x00\xef\xff\x1a\x00\xf6\xfbH\x00c\x00\x0b\x00\xf9\xfe\xeb\xffr\x014\x16\xfe\x16a\x01\x01t\xf6\x8a\x04\x00\xf1\xff\x13\x00\x01\xfcN\x00u\x00\x14\x00\xf9\xfeK\xff\x0b\x02\xdc\x7f\xfe\x16b\x01\x01\x81\xf6\x8a\x04\x00\xf3\xff\x1f\x00\xf5\xfbE\x00n\x00\x07\x00v\x00A\x00v\x02\x87\xaf\xfe\x0ec\x01\x01\x1d\xf6\x8a\x04\x00\xb7\xaeiD=\nW>u\x10\xbb\x12\xfe\x0ed\x01\x01\x89\xf6\x8a\x04\x00\xbd\xf1iD\\\x8f\x01?\xc5\x15\xb0_\xfe\x1fe\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00$\x01\xb5: \x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00O\x91R\xfe\x06f\x01\x01}\xc6\x14\x00\x00\x03\x00\x1b\xcd\xfe\x04g\x01\x01\x98\x00\x00\x80\x8a^\x07\xfe\x02h\x01\x01*\x00\x00\xf5\x8b\xfe\x1ei\x01\x01\x18\x18\xf4\xbe\x11\x00\x00\x00\x00\x83\xa6\x02\x18\xbb\xe7\xb8\xfd\xacb\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\xa3m\xfe\x1aj\x01\x01>{\x14N\xc0\xcc\xcc\xcc\xbd\x92i\xdf\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00`\xef\xfe\x08k\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00?\xa4\xfe\t\r\n\x00m\x03\x00\x00\x00\x00\xdd\x00\x00\x00\xa9\xd9\xfe\x15l\x01\x01$\x06m\xbf\x11U\x06\xdc\x05\xe4\x05\x10\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11O\xfe\x16m\x01\x01#\x1d\x8b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa7\x0b'b'\xfe\x03n\x01\x01Ms\x00\x00\xcc^\xfe\x14o\x01\x01J\n\xd7#=\n\xd7#=)\\\x8f=33\xb3\xbe\xb3\x00.\x00\xbc\x0b'b'\xfe\x1cp\x01\x01!\xff\x8a\x04\x00\x7f\xa6\x02\x18\xb9\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xf9\xff\x08\x00\xdd\xff7FI\xed\xfe\x1cq\x01\x01 \x95\x8b\x04\x00\x8f\xf4\x82>\xbe\xd2\xd4>\xd0\x8f\x8c>?\xf9\x8f\xbd\r\xd2\xb5=\xf98\xb8>g\x10\xfe\x1cr\x01\x01\x1e\xbe\x8b\x04\x00/l\x91\xbd[m\xd2;\xd1\xd7H@\x12\t\x10\xbd\x8c\x10\xce;\x9e\xdb\x1e=E\xf9\xfe\x18s\x01\x01\xb2\xa6\xa0\xa6\xbd\x0b,;\xf5\xe26<\\bF<\x99Y\x88?\x00\x1f\x03\xc1\xfe\x03{\x01\x01Ms\x00\x00\xd5\x92\xfe\x1a|\x01\x01\x1b\x90z\xc2\x11\x00\x00\x00\x00\x00\x00\x0e\x00\x06\xfc\x13\x00\xc7\xff$\x00\xf8\xfe\xee\xffm\x01\x0eB\xfe\x16}\x01\x01t\xe6\x8b\x04\x00\x01\x00\x1b\x00\x1c\xfc\x0f\x00\xdb\xff\x1c\x00\xf4\xfeZ\xff\r\x021M\xfe\x16~\x01\x01\x81\xe6\x8b\x04\x00\x01\x00\x1b\x00\x07\xfc\x0b\x00\xc6\xff\x1e\x00s\x00C\x00u\x02iw\xfe\x0e\x7f\x01\x01\x1d\xe6\x8b\x04\x00f\xb6iD\x00\x00\xa9>v\x10vU\xfe\x0e\x80\x01\x01\x89\xe6\x8b\x04\x00\xb0\xf9iD)\\!?\xc6\x15\x07\xdf\xfe*\x81\x01\x01\x96s\xe7f\xbc-m\x01\x00v\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00G\xad\xfe\x1f\x82\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x000\x01\xb5:\x85\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xe9e\xfe\x06\x83\x01\x01}\xc5\x14\x00\x00\x03\x00%\xd3\xfe\x04\x84\x01\x01\x98\x00\x00\x80\x8a\xd4\x04\xfe\x02\x85\x01\x01*\x00\x00"\x87\xfe\x1e\x86\x01\x01\x18@\x05\xc2\x11\x00\x00\x00\x00\x84\xa6\x02\x18\xbd\xe7\xb8\xfd\x16b\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\x07Z\xfe\x1a\x87\x01\x01>\xe1z\xf4\xbf\x8f\xc2\xf5\xbd\xd2\xac\xe0\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x89S'b'\xfe\x08\x88\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xba\xfe\x12\x89\x01\x01\xfc\xf8\x8b\x04\x004\x00\x01\x00ARMMASK\x00Wr\x8et\xfe\t\x8a\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03t!\xfe\x15\x8b\x01\x01$\xeae\xc3\x11\x19\x06\xe9\x05\xf6\x05\xde\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7#\xfe\x16\x8c\x01\x01#"\x8c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00`\xf4'b'\xfe\x03\x8d\x01\x01Ms\x00\x00\xff\xcc\xfe\x14\x8e\x01\x01J\n\xd7#=\n\xd7#=\n\xd7#\xbd\xc2\xf5\xa8\xbe\xb3\x00*\x00\xb5g\xfe\x1c\x8f\x01\x01!\x91\x8c\x04\x00~\xa6\x02\x18\xbe\xe7\xb8\xfdJ[\n\x00\xba\xff\xff\xff\xfd\xff\x12\x00\xee\xff?F\xc1{\xfe\x1c\x90\x01\x01 \x9b\x8c\x04\x00F4\x82>@\xce\xe7>\xf7\x16\xcf>@N\x18\xbd\xea\x0b9>K\x1b?>\x01F'b'\xfe\x1c\x91\x01\x01\x1e\xc3\x8c\x04\x00\xee\xf94\xbd\xe2\x01\x83\xbc\x94bH@\xdcd\xa9>S\xcc\xba\xbe\xfb0?\xbeS:\xfe\x18\x92\x01\x01\xb2\xbcFc\xbd\x1b\x97@\xbc]lH\xc0\xc2e(D\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x7f\xfe\x03\x93\x01\x01Ms\x00\x00\x8a\xa7\xfe\x1a\x94\x01\x01\x1bl+\xc6\x11\x00\x00\x00\x00A\x00\xbd\x00#\xfc:\xff\x91\x01\x05\x00\xf3\xfe\xf5\xffu\x01\xed\x88\xfe\x16\x95\x01\x01t\xd7\x8c\x04\x00=\x00\xb2\x00!\xfcb\xffj\x01\xf2\xff\xf6\xfel\xff\x12\x02\x1cO\xfe\x16\x96\x01\x01\x81\xd7\x8c\x04\x00\n\x00\xbc\x00+\xfcH\xff\x96\x01\x07\x00\x84\x00e\x00[\x026H\xfe\x0e\x97\x01\x01\x1d\xd7\x8c\x04\x00\xf0\xc4iD\xf6\xa8\x0e?v\x10\xe8\t\xfe\x0e\x98\x01\x01\x89\xd7\x8c\x04\x00\x99\tjD\x00\x00a?\xc7\x15\x9fV\xfe\x1f\x99\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xd4\x00\xff:\xfc\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x87\x07\xfe\x06\x9a\x01\x01}\xc5\x14\x00\x00\x03\x00[K\xfe\x04\x9b\x01\x01\x98\x00\x00\x80\x8ahm\xfe\x02\x9c\x01\x01*\x00\x00\xd2s\xfe\x1e\x9d\x01\x01\x18h\x16\xc5\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xbe\xe7\xb8\xfd\xd0a\n\x00F\x00\xff\xff\x08\x00-K\x03\x0c\xb9\xb7\xfe\x1a\x9e\x01\x01>\x1e\x85\xab\xbf\x00\x00\x00\x00\x86y\xeb\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xab\n\xfe\x08\x9f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x08\xf8\xfe\x1c\xa0\x01\x01\xa3\x9a@\x1e:\xc3`\xe8\xba\xc4\xd3u9\x00\x00\x00\x00\x00\x00\x00\x00\xe8n\x04=\xe2H\x9d;SU\xfe\x03\xa1\x01\x01\xa5\xc5\x14\x00\x8a\xc7\xfe\x0c\xa2\x01\x01\x02\x90$.|\xb1N\x05\x00\xeb\x8c\x04\x00\x92\xfb\xfe\x16\xa3\x01\x01\x88~\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc4c\xfe\x16\xa4\x01\x01\xc1\x07\xb4v<\x94]\x95<\xa4$\xf4=n\xac\x19>\x00\x00\x00\x00?\x03\xfc7'b"\xfe\x15\xa5\x01\x01$\x92c\xc7\x11\xae\x05I\x05]\x048\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xfe\xfe\x16\xa6\x01\x01#'\x8d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xaa\xdc\xfe\x03\xa7\x01\x01Ms\x00\x00\xdc\\\xfe\x14\xa8\x01\x01J\n\xd7#>\n\xd7#>\xaeG\xe1\xbd\x00\x00\x00\x00\xb3\x00\x0b\x00\xaa\xad"b'\xfe\x1c\xa9\x01\x01!Y\x8d\x04\x00}\xa6\x02\x18\xbe\xe7\xb8\xfd\x18[\n\x00\x88\xff\xff\xff\xfa\xff\x01\x00\x00\x00\x0cF\xcc\xa0\xfe\x1c\xaa\x01\x01 \xa0\x8d\x04\x00\x01*w>\x90\xa8\xe9>\xbb\xdb\xe7>\'\x87\x8d\xbdp[\x8cv\x10\x06>\xfe\x0e\xb0\x01\x01\x89\xc8\x8d\x04\x00{\xfciD\x1e\x85,?\xc7\x15\xc1\'\xfe\x1f\xb1\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1c\x01\xff::\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xae\x11\xfe\x06\xb2\x01\x01}\xc5\x14\x00\x00\x03\x00{\x15\xfe\x04\xb3\x01\x01\x98\x00\x00\x80\x8a\x9b\xe5\xfe\x03\xb4\x01\x01Ms\x00\x00t\x8d\xfe\x02\xb5\x01\x01*\x00\x00hQ\xfe\x1e\xb6\x01\x01\x18\xa8#\xc8\x11\x00\x00\x00\x00\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x80a\n\x00F\x00\xff\xff\x10\x00-K\x03\x0c\xe7>\xfe\x1a\xb7\x01\x01>\x00\x00 \xc0\x00\x00\x00\x00\xf7\xf2\n\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00oF\xfe\x08\xb8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xebU\xfe\x1c\xb9\x01\x01\x1e\xdc\x8d\x04\x00x8\xb6\xbc:t|;\xbdDH@%2\xfa\xbc+\xf5\xde\xbch~\x80;8\xac\xfe\x18\xba\x01\x01\xb2\xc5%\xfd\xbc\xd4L\xff;\x00\xa6H\xc0\xa4\xe0(D\x82\xa6\x02\x18\xc1\xe7\xb8\xfd\x87K'b"\xfe\x1c\xbb\x01\x01\xa3/\xb6\x1e:5'\xe9\xba\x01\rx9\x00\x00\x00\x00\x00\x00\x00\x00Z\x0b\x0e=>\xba4<-\xf0\xfe\x03\xbc\x01\x01\xa5\xc5\x14\x00/&\xfe\x0c\xbd\x01\x01\x02\x18 2|\xb1N\x05\x00\xf0\x8d\x04\x007\x91\xfe\x16\xbe\x01\x01\x88}\xa6\x02\x18\xbe\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00@l\xfe\x16\xbf\x01\x01\xc1\x9dI\x1a=\x04C\x8d<\t\xcc\\=\xd8#\x1f>\x00\x00\x00\x00?\x03\xcd\x0c\xfe\x15\xc0\x01\x01$\xba^\xcb\x11\xea\x04\xb5\x04]\x04\x99\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00M\x0b\xfe\x16\xc1\x01\x01#,\x8e\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\rN\xfe\x03\xc2\x01\x01Ms\x00\x00\xbc\x18"b'\xfe\x14\xc3\x01\x01J\xcc\xccL=\xcc\xccL=)\\\x0f\xbe\x00\x00\x00\x00\xb3\x00\x0b\x007L\xfe\x1c\xc4\x01\x01!\x0e\x8e\x04\x00}\xa6\x02\x18\xbf\xe7\xb8\xfd\xfaZ\n\x00j\xff\xff\xff\xf9\xff\x02\x00\x00\x00\x05F\x84\xc3\xfe\x1c\xc5\x01\x01 \xa5\x8e\x04\x00\x86\x0bp>\xfc \xec>!\xfe\xf8>g\x9e\x98\xbd\x81\xe3\xc7<\xf1}\x01<\x06Q'b'\xfe\x1a\xc6\x01\x01\x1b\x14\x85\xcd\x11\x00\x00\x00\x00\xf6\xff\xff\xff\'\xfc\xf5\xff\xf6\xff\x00\x00\xf5\xfe\x04\x00y\x01\x04\xe4\xfe\x16\xc7\x01\x01t\xb9\x8e\x04\x00\x00\x00\x00\x00(\xfc\xf4\xff\xfd\xff\xf9\xff\xfd\xfe\xaa\xff1\x02"\x0e\xfe\x16\xc8\x01\x01\x81\xb9\x8e\x04\x00\xfe\xff"\x00&\xfc\xf0\xff\xf9\xff\xfb\xff\x83\x00\xb0\x00f\x02 \x0b\xfe\x0e\xc9\x01\x01\x1d\xb9\x8e\x04\x00\x94\xaciDG\xe14>v\x10\xa2\x0f\xfe\x0e\xca\x01\x01\x89\xb9\x8e\x04\x00\x8f\xf2iD\n\xd7\x04?\xc9\x15\xa6\xdb\xfe\x1f\xcb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x10\x01\xff:_\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcc\x02\xfe\x06\xcc\x01\x01}\xc5\x14\x00\x00\x03\x00l\x02\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9\xfe\x04\xce\x01\x01\x98\x00\x00\x80\x8a\x87\x06\xfe\x02\xcf\x01\x01*\x00\x00s\xa9\xfe\x1e\xd0\x01\x01\x18\xb0\xe6\xca\x11\x00\x00\x00\x00\x81\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x04\x00-K\x03\x0c\x0f\xa5\xfe\x1a\xd1\x01\x01>\xf6(\x0c\xc0\xebQ8>\x12\xcb!\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x88\xe1\xfe\x08\xd2\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00(\xa5\xfe\x1c\xd3\x01\x01\x1e\xe1\x8e\x04\x00>\x10\xb8\xbc\xe6\xa0";\x0b9H@k?\xdd\xba\xf7.\x8b\xbb\xfd\xbb\x8f\xbb\x13\x18\xfe\x18\xd4\x01\x01\xb2\xa9\xd4\x00\xbd\xfaa\xaf;#\xafH\xc0\xf6H)D\x81\xa6\x02\x18\xc1\xe7\xb8\xfd\x0e^\xfe\x1c\xd5\x01\x01\xa359\x1f:)\xe5\xe9\xba\x8a\xd6z9\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x80\xe9<\x82f\x8c<\x90\xc5\xfe\x03\xd6\x01\x01\xa5\xc5\x14\x00\xfd\xd3\xfe\x0c\xd7\x01\x01\x02\xe8\x0f6|\xb1N\x05\x00\xf5\x8e\x04\x00\x9c\xb7\xfe\x16\xd8\x01\x01\x88|\xa6\x02\x18\xbf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9f\xb9\xfe\x16\xd9\x01\x01\xc1G\x83\xc9<\x9fb\x8c\x00\x00\x00\x00?\x03_6\xfe\t\x0e\n\x00mn\x00\x00\x00\x00\xd3\x00\x00\x00s3'b'\xfe\x15\xda\x01\x01$[\\\xcf\x11\xf1\x04\xb5\x04]\x04\x91\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4B\xfe\x16\xdb\x01\x01#2\x8f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe6S\xfe\x03\xdc\x01\x01Ms\x00\x00\xc9s'b'\xfe\x14\xdd\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xebQ8\xbe\x00\x00\x00\x00\xb3\x00\x0b\x00Y\xb0\xfe\x1a\xde\x01\x01\x1b\xe21\xd1\x11\x00\x00\x00\x00\x04\x00\x0f\x00\x14\xfc\xfe\xff\xfc\xff\x02\x00\xf5\xfe\x02\x00w\x01\xfe\xe5\xfe\x16\xdf\x01\x01t\xaa\x8f\x04\x00\x0f\x00\x16\x00/\xfc\x04\x00\x03\x00\xfb\xff\xfd\xfe\xa9\xff1\x02\xed\x83\xfe\x16\xe0\x01\x01\x81\xaa\x8f\x04\x00\n\x00\x1a\x00\x1d\xfc\x01\x00\xfd\xff\xf7\xffz\x00\xb3\x00a\x02\xcfP\xfe\x0e\xe1\x01\x01\x1d\xaa\x8f\x04\x004\xabiDG\xe1\x1e>w\x10M\x8b\xfe\x0e\xe2\x01\x01\x89\xaa\x8f\x04\x00\xd2\xf0iD\x8f\xc2\xfb>\xc9\x15\xc0\x07\xfe\x1f\xe3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x18\x01\xff:]\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xddn\xfe\x06\xe4\x01\x01}\xc5\x14\x00\x00\x03\x00L\\\xfe\x04\xe5\x01\x01\x98\x00\x00\x80\x8asX\xfe\x02\xe6\x01\x01*\x00\x00\xc9\x8b\xfe\x1e\xe7\x01\x01\x18 W\xd1\x11\x00\x00\x00\x00\x80\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xa2\xe6\xfe\x1a\xe8\x01\x01>\x99\x99\xf9\xbf\x1e\x85k>\xc0G9\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00rY\xfe\x08\xe9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc7i\xfe\x1c\xea\x01\x01!\xb4\x8f\x04\x00|\xa6\x02\x18\xc0\xe7\xb8\xfd\xdcZ\n\x00L\xff\xff\xff\xf9\xff\x03\x00\x00\x00\x04F\xd1\xac\xfe\x1c\xeb\x01\x01 \xbe\x8f\x04\x00\xe0\xbef>T\xf6\xf0>\x1f8\x05?,\xb9\x94\xbd\xa7l\x0f=Ib\xef;m\xe6\xfe\x03\xec\x01\x01Ms\x00\x00A\x9e'b'\xfe\x12\xed\x01\x01\xfc\xe4\x8f\x04\x004\x00\x01\x00ARMMASK\x00WrV\xfb\xfe\t\xee\x01\x01\x00\t\x00\x00\x00\x02\x03\xd1\x04\x03\x1d4\xfe\x1c\xef\x01\x01\x1e\xe7\x8f\x04\x00\xdc\x81\xb7\xbc\x84\x8e\xf2:\xef;H@\xecL\x89;\xfb\x86Y\xba\x12k\xeb\xbb\x8f\x0b\xfe\x18\xf0\x01\x01\xb2\x8f\x88\xff\xbc\xbc\xe6\x9a;\xe8\xa9H\xc0\xf6H)D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd{ \xfe\x1c\xf1\x01\x01\xa3\xc5\xc0\x1f:\x96\x9b\xea\xba{*~9\x00\x00\x00\x00\x00\x00\x00\x00\xea\x12\xe8<\xc1\x12\xa4\x00\x00\x00\x00?\x03\x14,\xfe\x16\xf6\x01\x01\xe1m\xe7\x1b?\xebQ8>\xf5\xe26<\\bF<\xcd\xb2\x83?\x00\x1f\xa19\xfe\x15\xf7\x01\x01$\xd6W\xd3\x11\xf3\x04\xc7\x04]\x04t\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00{\xe5\xfe\x16\xf8\x01\x01#7\x90\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00<\xe3\xfe\x03\xf9\x01\x01Ms\x00\x00XR'b"\xfe\x14\xfa\x01\x01J\n\xd7#<\n\xd7#<=\nW\xbe\n\xd7#\xbc\xb3\x00\x0b\x00\xe8\x8a\xfe\x1a\xfb\x01\x01\x1b\x83\xde\xd4\x11\x00\x00\x00\x00\r\x00\x1b\x00'\xfc\x03\x00\xfe\xff\x06\x00\xf4\xfe\x05\x00y\x01\x8aj\xfe\x16\xfc\x01\x01t\x9b\x90\x04\x00\x19\x00\x1e\x00*\xfc\x06\x00\x04\x00\x01\x00\xfe\xfe\xaa\xff1\x02q\xa5\xfe\x16\xfd\x01\x01\x81\x9b\x90\x04\x00\x0c\x00\x1b\x00 \xfc\xf9\xff\x08\x00\x04\x00x\x00\xb5\x00a\x02 \xb9\xfe\x0e\xfe\x01\x01\x1d\x9b\x90\x04\x00\x86\xabiD\x00\x00$>w\x10\t\xf7\xfe\x0e\xff\x01\x01\x89\x9b\x90\x04\x00\xa2\xefiD\xaeG\xf2>\xc9\x15\xfd|\xfe\x1f\x00\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x0c\x01B\xd7\xa3\xf0\xbf\x00\x00\x80>$mO\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00%\xb7\xfe\x08\x06\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbfL"b'\xfe\x03\x07\x01\x01Ms\x00\x00\xce!\xfe\x1c\x08\x01\x01!i\x90\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\xb4Z\n\x00$\xff\xff\xff\xf9\xff\x03\x00\xff\xff\x06F\x90P\xfe\x1c\t\x01\x01 \xc3\x90\x04\x00C\xe8]>"\xf1\xf3>Q\x9e\x0e?\x96\xe6\x8f\xbd\xed\xf9\x19=d\xec\x85<\xf9\xf4\xfe\x1c\n\x01\x01\x1e\xec\x90\x04\x00\x85\xeb\xb2\xbc\xb2\xd3\x03;\xcc=H@~X~\xbb\x98\x8b\xa4;\xfd\xe7f;\x84p\xfe\x18\x0b\x01\x01\xb2\xc4\xed\xf9\xbc\x00\x8f\x8e;\xab\xa8H\xc0\xb8N)D\x80\xa6\x02\x18\xc1\xe7\xb8\xfd\xbdW\xfe\x1c\x0c\x01\x01\xa3\xbeW :@O\xeb\xba4\x04\x819\x00\x00\x00\x00\x00\x00\x00\x00I\xa8\xbe<\xeam\xbc<\xca\x00\xfe\x03\r\x01\x01\xa5\xc5\x14\x00\xfa\x81\xfe\x0c\x0e\x01\x01\x02\xf8\x06>|\xb1N\x05\x00\x00\x91\x04\x00\xef\xea\xfe\x16\x0f\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb4G\xfe\x16\x10\x01\x01\xc1F\xd2\xad<\x12H\x88< \xdf\xcf<`\x9f >\x00\x00\x00\x00?\x03\xab\x87'b'\xfe\x03\x11\x01\x01Ms\x00\x00\x07g\xfe\x15\x12\x01\x01$\x8fT\xd7\x11\xf5\x04\xba\x04]\x04\x82\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00 P\xfe\x16\x13\x01\x01#<\x91\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xcb\x8e'b'\xfe\x1a\x14\x01\x01\x1b\xa5\x8d\xd8\x11\x00\x00\x00\x00\xfa\xff\x05\x00\x19\xfc\x00\x00\x01\x00\xfb\xff\xf7\xfe\x03\x00v\x01l\xc6\xfe\x16\x15\x01\x01t\x8c\x91\x04\x00\xfd\xff\x0e\x00\x1c\xfc\xff\xff\t\x00\x00\x00\xfe\xfe\xaa\xff1\x02^\x9c\xfe\x16\x16\x01\x01\x81\x8c\x91\x04\x00\x01\x00\x15\x00\x15\xfc\xf9\xff\xf7\xff\xf6\xff{\x00\xb9\x00Y\x02\xa1f\xfe\x0e\x17\x01\x01\x1d\x8c\x91\x04\x00\xe1\xaaiD\x14\xae\x19>x\x10*(\xfe\x0e\x18\x01\x01\x89\x8c\x91\x04\x00\x8b\xefiD\\\x8f\xf1>\xca\x15|7\xfe\x1f\x19\x01\x01\x01/\xfca\x00/\xfca\x00/\xfcA\x003\x01B\xcc\xcc\xec\xbf\xe1z\x94>\xe1\xaa{\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x92,\xfe\x08\x1f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xaa>\xfe\x14 \x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u\xbe\n\xd7#\xbc\xb3\x00\x00\x00\xc1\xab\xfe\x1c!\x01\x01!2\x91\x04\x00\x80\xa6\x02\x18\xc2\xe7\xb8\xfd\xa0Z\n\x00\x10\xff\xff\xff\x00\x00\xff\xff\x00\x00\x08F\xcc\n\xfe\x03"\x01\x01Ms\x00\x00_\x00'b"\xfe\x1c#\x01\x01\x1e\xdd\x91\x04\x00N\xed\xaf\xbc.q\x05;\xd8BH@\x98W\xb9\xba\x95\xd2\x9c8\xe0\x86F\xb9@\x19\xfe\x18$\x01\x01\xb2\x84x\xf7\xbc\x16\x1a\x8c;l\xa8H\xc0\xc2U)D\x80\xa6\x02\x18\xc2\xe7\xb8\xfdL\x92\xfe\x03%\x01\x01/\xff\x00\x00\x87\xe4\xfe\x1c&\x01\x01\xa3\xf9\xec :\xa9\xf1\xeb\xbaJ\x0c\x839\x00\x00\x00\x00\x00\x00\x00\x00\xf4\xb1\xaa<\x0f\xe6\xc1<\x7f^\xfe\x03'\x01\x01\xa5\xbd\x14\x00D\xae\xfe\x0c(\x01\x01\x02\x98\xfeA|\xb1N\x05\x00\xf1\x91\x04\x00\xbeV\xfe\x16)\x01\x01\x88\x80\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xff.\xfe\x16*\x01\x01\xc1\x14q\x95:\xaa]\t;\xec\x85!;\xde:\x18>\x00\x00\x00\x00\x00\x00\xcf\xc7\xfe\x15+\x01\x01$\x7f\x01\xdb\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00p\xc5\xfe\x16,\x01\x01#-\x92\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x18\x08"b'\xfe\x03-\x01\x01Ms\x00\x00\xed\xb1\xfe\x1a.\x01\x01\x1b\x1a<\xdc\x11\x00\x00\x00\x00\x07\x00\r\x00"\xfc\x04\x00\xff\xff\xfe\xff\xf7\xfe\x06\x00z\x011\xcf\xfe\x16/\x01\x01t}\x92\x04\x00\x05\x00\x13\x00,\xfc\x00\x00\x04\x00\xf9\xff\xff\xfe\xb9\xff7\x02K\xdd\xfe\x160\x01\x01\x81~\x92\x04\x00\x02\x00\x14\x00\x1a\xfc\xf9\xff\x03\x00\xf7\xff\x80\x00\xc1\x00_\x02u-\xfe\x0e1\x01\x01\x1d~\x92\x04\x00;\xa8iD\\\x8f\xde=w\x10\xb0\x16\xfe\x0e2\x01\x01\x89~\x92\x04\x00p\xediDR\xb8\xe0>\xcb\x15\x0fm\xfe\x1f3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfcA\x00\xa1\x00B\xcc\xcc\xec\xbf\xe1z\x94>\xf64\x9f\xbd\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\x18\xeb\xfe\x089\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x96\xfe\x14:\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u\xbe\n\xd7#\xbc\xb3\x00\x00\x00Q\x00'b'\xfe\x1c;\x01\x01!\xfb\x91\x04\x00\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\xa0Z\n\x00\x10\xff\xff\xff\x00\x00\x00\x00\x00\x00\tF\xf7\xda\xfe\x1c<\x01\x01\x1e\xce\x92\x04\x00\x1a\x14\xa7\xbc<\x86\xac:\xc5DH@\x17\x1bK:\xa8\xb8\xc3:\xf3\t\xef\xba\xe2\xaa\xfe\x18=\x01\x01\xb2\xfd\x99\xf0\xbc^#{;R\xacH\xc0)l)D\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\xfe\xcb\xfe\x03>\x01\x01Ms\x00\x00E`\xfe\x1c?\x01\x01\xa3\r\x85!:\x8b\x9b\xec\xba\xc9J\x859\x00\x00\x00\x00\x00\x00\x00\x007\x15}<\x87`\xd9<\xfaV\xfe\x03@\x01\x01\xa5\xc5\x14\x00\xd6^\xfe\x0cA\x01\x01\x02\x18\xa8E|\xb1N\x05\x00\xe2\x92\x04\x00L\xa5\xfe\x16B\x01\x01\x88\x7f\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfd\xd2\xfe\x16C\x01\x01\xc1\xb1\x8f\xd5:[;\x02;X\x92^<,\xd5(>\x00\x00\x00\x00\xa5\x03\xb2\xea\xfe\t\x0f\n\x00m\r\x00\x00\x00\x00\xd2\x00\x00\x00z\xcf'b'\xfe\x15D\x01\x01$\x00\xaf\xde\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf/\xfe\x16E\x01\x01#\x1e\x93\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe2\xa5\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5'b"\xfe\x1aG\x01\x01\x1b\x80\xe9\xdf\x11\x00\x00\x00\x00\x08\x00\x03\x00\x15\xfc\x01\x00\x00\x00\x00\x00\xf4\xfe\x05\x00y\x01P\xf1\xfe\x16H\x01\x01tn\x93\x04\x00\x0c\x00\n\x00'\xfc\xff\xff\x04\x00\xfd\xff\x00\xff\xb8\xff8\x02p[\xfe\x16I\x01\x01\x81n\x93\x04\x00\x06\x00\x11\x00\x19\xfc\xfa\xff\x03\x00\xfd\xff~\x00\xbf\x00a\x023b\xfe\x0eJ\x01\x01\x1do\x93\x04\x00\xdd\xa5iDG\xe1\x92=x\x10\x80\xc5\xfe\x0eK\x01\x01\x89o\x93\x04\x00\xf8\xe9iD\xc2\xf5\xc4>\xca\x15\xea!\xfe\x1fL\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x00\x9b<6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x06\x01\xfe\x06M\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xeb\xfe\x04N\x01\x01\x98\x00\x00\xa0\x8ak\xc1\xfe\x02O\x01\x01*\x00\x00n/\xfe\x1eP\x01\x01\x18\xa0M\xdd\x11\x00\x00\x00\x00\x7f\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c]+\xfe\x1aQ\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x14\x80:\xbe\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00\x00\x00\x00\x00\xe5\xb0\xfe\x08R\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8ac\xfe\x14S\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xa3p}\xbf\x00\x00\x00\x00\xb3\x00\x00\x00\x91@\xfe\x1cT\x01\x01!\x8c\x93\x04\x00~\xa6\x02\x18\xc2\xe7\xb8\xfd\xdaW\n\x00J\xfc\xff\xff\x00\x00\x00\x00\x01\x00\tF[\x9f\xfe\x1cU\x01\x01\x1e\xbe\x93\x04\x00\ns\xa3\xbc\xc8\xc8X:bGH@\xae\xc179N\xf3\x949\xaa4\x958\xf0\xe9\xfe\x18V\x01\x01\xb2\xe6\xcc\xed\xbc\x80\xc4b;m\xa9H\xc0\xae\x87)D~\xa6\x02\x18\xc2\xe7\xb8\xfd\x9c\x1a\xfe\x12W\x01\x01\xfc\xc8\x93\x04\x004\x00\x01\x00ARMMASK\x00Wr1\xdf\xfe\x03X\x01\x01Ms\x00\x00\xf5\xae\xfe\tY\x01\x01\x00\t\x00\x00\x00\x02\x03Q\x03\x03G\x10"b'\xfe\x1cZ\x01\x01\xa3\x0e ":\xd0N\xed\xba\xa1\xc0\x879\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xc9]\x00\x00\x00\x00\xa5\x03\x02\x89\xfe\x03`\x01\x01M\x0b\x00\x00\\\xd1\xfe\ta\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03!\xb0\xfe\x15b\x01\x01$\xd8X\xe2\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\xa8\xfe\x16c\x01\x01#\x0e\x94\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Q\xc3'b"\xfe\x03d\x01\x01Ms\x00\x00\x1fx\xfe\x1ae\x01\x01\x1b\xb6\x94\xe3\x11\x00\x00\x00\x00\x0b\x00\x00\x00\x1f\xfc\x00\x00\xfb\xff\x04\x00\xf6\xfe\x05\x00z\x01\x8d\xb5\xfe\x16f\x01\x01t_\x94\x04\x00\x0f\x00\t\x00$\xfc\x00\x00\xff\xff\x02\x00\xff\xfe\xb9\xff8\x02T\x82\xfe\x16g\x01\x01\x81_\x94\x04\x00\x08\x00\x0e\x00\x1c\xfc\xfe\xff\x00\x00\xf5\xff\x81\x00\xc2\x00d\x02\xf6\xa7\xfe\x0eh\x01\x01\x1d_\x94\x04\x00\x06\xa5iD\x00\x00p=x\x10\xa1[\xfe\x0ei\x01\x01\x89_\x94\x04\x00}\xe9iD\xb8\x1e\xc1>\xcb\x15\xbb\xda\xfe\x1fj\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x80e\x9b<5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xad\xb4\xfe\x06k\x01\x01}\xc2\x14\x00\x00\x03\x00\x03\x15\xfe\x04l\x01\x01\x98\x00\x00\xa0\x8a\xa8\xad\xfe\x02m\x01\x01*\x00\x00V{\xfe\x1en\x01\x01\x18\x08l\xe3\x11\x00\x00\x00\x00}\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x03\x00-K\x03\x0c\xd7\xa3\xfe\x1ao\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xa9\xfc\xfe\x08p\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00p\xdd\xfe\x14q\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xf5(\\\xbf\n\xd7\xa3<\xb3\x00\x00\x00\x92\xee\xfe\x1cr\x01\x01!U\x94\x04\x00}\xa6\x02\x18\xc1\xe7\xb8\xfd4X\n\x00\xa4\xfc\xff\xff\xff\xff\x00\x00\x02\x00\x0cF'{"b'\xfe\x1cs\x01\x01\x1e\xaf\x94\x04\x00\xddH\x9f\xbc\x00\xac\xf6\xb7\xfePH@\xaa\x0f\xeb\xba\xbf!\xae\xbb\xc6K\x84:\n`\xfe\x18t\x01\x01\xb2A\xfe\xe8\xbc\x17\x03>;_\xa5H\xc0\x14\x8e)D}\xa6\x02\x18\xc1\xe7\xb8\xfdso\xfe\x1cu\x01\x01\xa3\xd6\xbd":t\n\xee\xba8g\x8a9\x00\x00\x00\x00\x00\x00\x00\x00\xb3\xa9D<\xf4\xd9\xd6<\n\x93\xfe\x03v\x01\x01\xa5\xc8\x14\x00`%\xfe\x0cw\x01\x01\x02\x18\xfbL|\xb1N\x05\x00\xc3\x94\x04\x00o\xd0\xfe\x16x\x01\x01\x88}\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf3\xfa\xfe\x16y\x01\x01\xc1s\xc9\xed;\xfc\rb;\xc72\xf8<\xf8\xcd >\x00\x00\x00\x00\xa5\x03XA\xfe\x16z\x01\x01\xe1H\xe1\x1a?\xfd\x14\'>\xb8\xcd\xfc;\xbc:G9N&$=\x00\x1f\xa0\xfa\xfe\x03{\x01\x01Ms\x00\x00\xd5\x92'b'\xfe\x15|\x01\x01$\\\x07\xe6\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00z\xd9\xfe\x16}\x01\x01#\xff\x94\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00B\xf5\xfe\x03~\x01\x01Ms\x00\x00\xb4\x05\xfe\x1a\x7f\x01\x01\x1bG>\xe7\x11\x00\x00\x00\x00\n\x00\x06\x00\x1a\xfc\x01\x00\xff\xff\x00\x00\xf6\xfe\x06\x00z\x01[\xd9\xfe\x16\x80\x01\x01tO\x95\x04\x00\x10\x00\x12\x00#\xfc\x04\x00\x00\x00\x00\x00\xff\xfe\xb8\xff7\x02\x86\x0c\xfe\x16\x81\x01\x01\x81O\x95\x04\x00\x07\x00\x11\x00\x1f\xfc\xfd\xff\x00\x00\xfe\xff\x85\x00\xcb\x00k\x02\xa1\xd2\xfe\x0e\x82\x01\x01\x1dO\x95\x04\x00\xcb\xa4iD\xaeGa=u\x10\xef\x12\xfe\x0e\x83\x01\x01\x89O\x95\x04\x00\x87\xe8iD\xa4p\xb9>\xc8\x15\xef\x87\xfe\x1f\x84\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe0\x00\x9b<5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xbfw\xfe\x06\x85\x01\x01}\xc6\x14\x00\x00\x03\x00<\x8e\xfe\x04\x86\x01\x01\x98\x00\x00\xa0\x8a\x15\x9c\xfe\x02\x87\x01\x01*\x00\x00\x99\xb0\xfe\x1e\x88\x01\x01\x18Hy\xe6\x11\x00\x00\x00\x00}\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c)S\xfe\x1a\x89\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00jO\xfe\x08\x8a\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xb1\xfe\x14\x8b\x01\x01J\n\xd7\xa3<\n\xd7\xa3\x8d9\x00\x00\x00\x00\x00\x00\x00\x00`\xfe+<\xf4\xd0\xde\x00\x00\x00\x00\xa5\x03XD\xfe\x03\x94\x01\x01Ms\x00\x00\x84;'b'\xfe\x15\x95\x01\x01$*\xb1\xe9\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00[`\xfe\x16\x96\x01\x01#\xef\x95\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xeb\xb8\xfe\x03\x97\x01\x01/\xff\x00\x00\x82\xc9'b'\xfe\x1a\x98\x01\x01\x1b@\xea\xea\x11\x00\x00\x00\x00\r\x00\x04\x00\x19\xfc\x02\x00\x00\x00\x02\x00\xf6\xfe\x04\x00x\x01()\xfe\x16\x99\x01\x01t@\x96\x04\x00\n\x00\x04\x00!\xfc\x02\x00\x00\x00\xfd\xff\x00\xff\xb8\xff7\x02\\\xba\xfe\x16\x9a\x01\x01\x81@\x96\x04\x00\x05\x00\x10\x00\x1e\xfc\xfc\xff\x00\x00\xff\xff\x86\x00\xc2\x00\\\x02/_\xfe\x0e\x9b\x01\x01\x1d@\x96\x04\x00\xa0\xa3iDff\x16=w\x10`B\xfe\x0e\x9c\x01\x01\x89@\x96\x04\x00N\xe6iD\xd7\xa3\xa7>\xca\x15\xaf$\xfe*\x9d\x01\x01\x96s\xe7f\xbc\x0fm\x01\x00w\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x0fd\xfe\x1f\x9e\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\x9b<:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x98\x10\xfe\x06\x9f\x01\x01}\xc5\x14\x00\x00\x03\x00\x9f@\xfe\x04\xa0\x01\x01\x98\x00\x00\xa0\x8a3\xcf\xfe\x02\xa1\x01\x01*\x00\x00\xd7\x8b\xfe\x1e\xa2\x01\x01\x18\x88\x86\xe9\x11\x00\x00\x00\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xb0\xb2\xfe\x1a\xa3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xcd\xb3\xfe\x08\xa4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe74\xfe\x14\xa5\x01\x01J\n\xd7#<\n\xd7#<\xc2\xf5(\xbf\n\xd7#=\xb3\x00\x00\x00\xaa\x93\xfe\x03\xa6\x01\x01Ms\x00\x00c\xdd\xfe\x1c\xa7\x01\x01!\xe5\x95\x04\x00|\xa6\x02\x18\xc1\xe7\xb8\xfd\x06Y\n\x00v\xfd\xff\xff\xfc\xff\x00\x00\x05\x00\x12F\xd2\x9a'b"\xfe\x1c\xa8\x01\x01\x1e\x90\x96\x04\x00=5\x96\xbc\xc4\xaf\xe6\xba\xbddH@\xa1p\xca9\xa5/)8\x97\x80\x11;\xb1'\xfe\x18\xa9\x01\x01\xb2\xb3\x84\xe2\xbcZR\xd5:\x9a\x96H\xc03\x93)D|\xa6\x02\x18\xc1\xe7\xb8\xfd\x03l\xfe\x1c\xaa\x01\x01\xa3\x8e\x01$:\x03\x94\xef\xba\x89C\x909\x00\x00\x00\x00\x00\x00\x00\x00\x8e\xba\x18\x00\x00\x00\x00\xa5\x03\x9aN\xfe\t\x10\n\x00m\x1a\x00\x00\x00\x00\xd2\x00\x00\x00\xee\x90\xfe\x03\xaf\x01\x01Ms\x00\x00`q\xfe\x15\xb0\x01\x01$h]\xed\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xbe\xfe\x16\xb1\x01\x01#\xe0\x96\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1e."b'\xfe\x1a\xb2\x01\x01\x1b\xc9\x97\xee\x11\x00\x00\x00\x00\x05\x00\x08\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x06\x00z\x019H\xfe\x16\xb3\x01\x01t1\x97\x04\x00\x06\x00\t\x00 \xfc\x04\x00\x00\x00\x02\x00\x00\xff\xb7\xff7\x02\x9b\xe7\xfe\x16\xb4\x01\x01\x811\x97\x04\x00\x03\x00\x14\x00\x19\xfc\xfb\xff\x00\x00\xfd\xff\x80\x00\xc1\x00`\x02s#\xfe\x0e\xb5\x01\x01\x1d1\x97\x04\x00\x06\xa4iD\x00\x000=x\x10j\x02\xfe\x0e\xb6\x01\x01\x891\x97\x04\x00\xc5\xe7iD)\\\xb3>\xcb\x15\x8e\xd9\xfe\x1f\xb7\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xdb\xcd\xfe\x06\xb8\x01\x01}\xc3\x14\x00\x00\x03\x00>Z\xfe\x04\xb9\x01\x01\x98\x00\x00\xa0\x8a\x90\x02\xfe\x02\xba\x01\x01*\x00\x00\x9cH\xfe\x1e\xbb\x01\x01\x18\xb0\x97\xec\x11\x00\x00\x00\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xa4r\xfe\x1a\xbc\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00)\xd2\xfe\x08\xbd\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xf2F\xfe\x14\xbe\x01\x01J\n\xd7#<\n\xd7#<=\n\x17\xbf\xcc\xccL=\xb3\x00\x00\x00\x16\x83\xfe\x03\xbf\x01\x01Ms\x00\x00\x18*'b'\xfe\x1c\xc0\x01\x01!\xae\x96\x04\x00|\xa6\x02\x18\xc1\xe7\xb8\xfdBY\n\x00\xb2\xfd\xff\xff\xfb\xff\x00\x00\x05\x00\x16F\xaf\xc3\xfe\x1c\xc1\x01\x01\x1e\x81\x97\x04\x00\xb2\xe8\x93\xbcB\xcc$\xbb\x9dkH@\xec<\x98:\xb2u!\xbbcU\x8b\xb9\xde\x03\xfe\x18\xc2\x01\x01\xb2\x01N\xe1\xbcV\xed\x8b:\xb9\x8eH\xc0=\x9a)D|\xa6\x02\x18\xc0\xe7\xb8\xfd\x9c\xb7\xfe\x1c\xc3\x01\x01\xa3\x92\xa6$:5^\xf0\xba>t\x939\x00\x00\x00\x00\x00\x00\x00\x00\xdey\xee;\n\x0b\xd4\x00\x00\x00\x00\xa5\x03V\xed\xfe\x12\xc8\x01\x01\xfc\xb3\x97\x04\x004\x00\x01\x00ARMMASK\x00Wr\x88\x98\xfe\t\xc9\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03#|'b'\xfe\x03\xca\x01\x01Ms\x00\x00\x005\xfe\x15\xcb\x01\x01$\xf4\x0c\xf1\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e{\xfe\x16\xcc\x01\x01#\xd2\x97\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc9G'b'\xfe\x1a\xcd\x01\x01\x1b\x1eE\xf2\x11\x00\x00\x00\x00\x0b\x00\x06\x00\x1b\xfc\x01\x00\x00\x00\x00\x00\xf6\xfe\x05\x00x\x01\'\xb1\xfe\x16\xce\x01\x01t"\x98\x04\x00\x03\x00\n\x00%\xfc\xfa\xff\xfe\xff\xfd\xff\xfe\xfe\xb8\xff7\x02\x95\x05\xfe\x16\xcf\x01\x01\x81"\x98\x04\x00\x05\x00\x11\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x80\x00\xc0\x00X\x024\x0e\xfe\x0e\xd0\x01\x01\x1d"\x98\x04\x003\xa3iDff\xf6\xcc\x15\xdc\xf3\xfe\x1f\xd2\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfd\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00NX0\xfe\x06\xd3\x01\x01}\xc8\x14\x00\x00\x03\x00*A\xfe\x04\xd4\x01\x01\x98\x00\x00\xa0\x8a\x18\x1e\xfe\x02\xd5\x01\x01*\x00\x00\xed\xf5\xfe\x1e\xd6\x01\x01\x18\xd8\xa8\xef\x11\x00\x00\x00\x00|\xa6\x02\x18\xc0\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xb2T\xfe\x1a\xd7\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x8a%\xfe\x08\xd8\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83\xfe\x14\xd9\x01\x01J\n\xd7#<\n\xd7#<\x14\xae\x07\xbf\x8f\xc2u=\xb3\x00\x00\x00\xfa\xfc\xfe\x1c\xda\x01\x01!@\x98\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\x9cY\n\x00\x0c\xfe\xff\xff\xfa\xff\x00\x00\x06\x00\x19F\xf9o\xfe\x03\xdb\x01\x01Ms\x00\x00\xc7\xef\xfe\x1c\xdc\x01\x01\x1er\x98\x04\x00\xd6a\x90\xbc\xaa1Z\xbbEsH@\xb7\x82`\xb7\xae\x8d\xa8\xbaZi\xa7:\xd3j\xfe\x18\xdd\x01\x01\xb2\xc6\x1c\xdf\xbc`8\xe89\xa9\x87H\xc0G\xa1)D{\xa6\x02\x18\xc1\xe7\xb8\xfd\xc8\r'b'\xfe\x1c\xde\x01\x01\xa3\xf1K%:\x1b)\xf1\xba\x15\xc4\x969\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xbe\xd0;L\xba\xd4<6\x8d\xfe\x03\xdf\x01\x01\xa5\xc2\x14\x00\xdf(\xfe\x0c\xe0\x01\x01\x02\x18\xa1[|\xb1N\x05\x00\x87\x98\x04\x00\xe1\x0f\xfe\x16\xe1\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00!l\xfe\x16\xe2\x01\x01\xc1\x154\xc3<\x92/\x86<\x95\rd<\x116\x1a>\x00\x00\x00\x00\xa5\x03$\xcd\xfe\x15\xe3\x01\x01$E\xb8\xf4\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x0c\xfe\x16\xe4\x01\x01#\xc2\x98\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x04$\xfe\x03\xe5\x01\x01Ms\x00\x00B2'b'\xfe\x1a\xe6\x01\x01\x1b5\xf2\xf5\x11\x00\x00\x00\x00\x08\x00\x08\x00\x1d\xfc\x00\x00\x00\x00\xff\xff\xf6\xfe\x07\x00y\x01\xbb8\xfe\x16\xe7\x01\x01t\x13\x99\x04\x00\x06\x00\x0f\x00(\xfc\x00\x00\x00\x00\xfc\xff\xff\xfe\xb7\xff6\x02\x9aK\xfe\x16\xe8\x01\x01\x81\x13\x99\x04\x00\x02\x00\x13\x00\x1e\xfc\xfb\xff\x01\x00\xfb\xff\x86\x00\xc0\x00_\x02\x8e\x84\xfe\x0e\xe9\x01\x01\x1d\x13\x99\x04\x00\x05\xa4iD\x14\xae/=y\x10\xd3D\xfe\x0e\xea\x01\x01\x89\x13\x99\x04\x008\xe7iD\xc2\xf5\xae>\xcd\x15\xc2\x12\xfe\x1f\xeb\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xef\x00\xb2<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc5I\xfe\x06\xec\x01\x01}\xc8\x14\x00\x00\x03\x00\xa9\xce\xfe\x04\xed\x01\x01\x98\x00\x00\xa0\x8a\x82$\xfe\x02\xee\x01\x01*\x00\x00%U\xfe\x1e\xef\x01\x01\x18@\xc7\xf5\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xed#\xfe\x1a\xf0\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00<\t\xfe\x08\xf1\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x1e\xfe\x14\xf2\x01\x01J\n\xd7\xa3<\n\xd7\xa3\xfe\xff\xff\xf9\xff\x00\x00\x07\x00\x1bF\x8c\x7f'b'\xfe\x03\xf4\x01\x01Ms\x00\x00\x85\xe8\xfe\x1c\xf5\x01\x01\x1ec\x99\x04\x00*\xc2\x8c\xbc\xa6D\x8b\xbb\x03~H@iM\x19\xb9\xd7W\xc2\xba\x87G\xe7\xba\xdeT\xfe\x18\xf6\x01\x01\xb2[:\xdd\xbc\xe0uY\xb9\x9f\x7fH\xc0\xae\x87)D{\xa6\x02\x18\xc1\xe7\xb8\xfd\xd6\xfb\xfe\x1c\xf7\x01\x01\xa3\xaf\xf2%:y\xf3\xf1\xba\xdc<\x9a9\x00\x00\x00\x00\x00\x00\x00\x00\xd5\xd1\xb9;\xb0C\xe5<\xc5|\xfe\x03\xf8\x01\x01\xa5\xc5\x14\x00\x00U\xfe\x0c\xf9\x01\x01\x02\xb0F_|\xb1N\x05\x00w\x99\x04\x00\xddD\xfe\x16\xfa\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00N\x14\xfe\x16\xfb\x01\x01\xc1R\x1c\xdb<\xc7\xe5\x91<\x82\xf2\xb4;.\xa4%>\x00\x00\x00\x00\xa5\x03x\xa4\xfe\x16\xfc\x01\x01\xe1[d\x1b?P\xb4<>\xc1\xde-\xcd\x15\xb91\xfe\x1f\x05\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdb\x00\xc6<<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xdcB\xfe\x06\x06\x01\x01}\xc5\x14\x00\x00\x03\x00\xfaJ\xfe\x04\x07\x01\x01\x98\x00\x00\xa0\x8a?\x15\xfe\x02\x08\x01\x01*\x00\x00p/\xfe\x1e\t\x01\x01\x18h\xd8\xf8\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xe5\xc9\xfe\x1a\n\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00V\x9c\xfe\x08\x0b\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcer\xfe\x14\x0c\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x85\xeb\xd1\xbe)\\\x8f=\xb3\x00\x00\x00W\xa2'b"\xfe\x1c\r\x01\x01!\xd1\x99\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00Z\n\x00p\xfe\xff\xff\xf7\xff\x00\x00\x07\x00 FL'\xfe\x03\x0e\x01\x01Ms\x00\x00\xcd\x8d\xfe\x1c\x0f\x01\x01\x1eS\x9a\x04\x00W\xaf\x89\xbc9\t\xa2\xbb\xb2\x86H@\xe9\xa4\xc1\xb9\x19\xfd\xbb\xba\x0e\x9eq:\x17\xd6\xfe\x18\x10\x01\x01\xb2\xb4m\xdb\xbc\xb9EP\xba\\wH\xc0\xcd\x8c)D{\xa6\x02\x18\xc1\xe7\xb8\xfdY\xae\xfe\x03\x11\x01\x01/\xff\x00\x00\xd1\x1f\xfe\x1c\x12\x01\x01\xa3\xda\x9a&:\xb0\xba\xf2\xba\xad\xe0\x9d9\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xa3\xa9;\xbc<\xea<@\xe5\xfe\x03\x13\x01\x01\xa5\xdb\x14\x00l\x87\xfe\x0c\x14\x01\x01\x02\x18\xf4b|\xb1N\x05\x00h\x9a\x04\x00q\xf2\xfe\x16\x15\x01\x01\x88{\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x93m\xfe\x16\x16\x01\x01\xc1\x86t\xef\x00\x00\x00\x00\xa5\x03\x08\xaa"b'\xfe\x15\x17\x01\x01$N\x10\xfc\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\xec\xfe\x16\x18\x01\x01#\xa3\x9a\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc4\xac\xfe\t\x11\n\x00m\x17\x00\x00\x00\x00\xd3\x00\x00\x00\xd2\x10\xfe\x03\x19\x01\x01Ms\x00\x00\xbbJ'b'\xfe\x1a\x1a\x01\x01\x1b\xa0J\xfd\x11\x00\x00\x00\x00\t\x00\x08\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf4\xfe\x06\x00{\x01=o\xfe\x16\x1b\x01\x01t\xf4\x9a\x04\x00\t\x00\x0b\x004\xfc\x00\x00\xff\xff\x00\x00\x00\xff\xb5\xff7\x02\x19\xf9\xfe\x16\x1c\x01\x01\x81\xf4\x9a\x04\x00\x04\x00\x11\x00\x1b\xfc\xfc\xff\x01\x00\xfc\xff\x88\x00\xc0\x00f\x02j\x85\xfe\x0e\x1d\x01\x01\x1d\xf4\x9a\x04\x00\x0c\xa4iD\x99\x991=z\x10\x93\xa7\xfe\x0e\x1e\x01\x01\x89\xf4\x9a\x04\x004\xe8iD\n\xd7\xb6>\xcf\x15LW\xfe\x1f\x1f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfc\x00\xc6<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8cA\xfe\x06 \x01\x01}\xc2\x14\x00\x00\x03\x00\x1f\x9a\xfe\x04!\x01\x01\x98\x00\x00\xa0\x8a\x19F\xfe\x02"\x01\x01*\x00\x00\xa4\xa5\xfe\x1e#\x01\x01\x18\x90\xe9\xfb\x11\x00\x00\x00\x00{\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x94\xa8\xfe\x1a$\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x12l\xfe\x08%\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xf7\xfe\x14&\x01\x01J\n\xd7#<\n\xd7#<\xebQ\xb8\xbe)\\\x8f=\xb3\x00\x00\x00+y\xfe\x1c\'\x01\x01!\x9a\x9a\x04\x00{\xa6\x02\x18\xc1\xe7\xb8\xfd(Z\n\x00\x98\xfe\xff\xff\xf5\xff\x00\x00\x07\x00#FF?'b"\xfe\x03(\x01\x01Ms\x00\x00\x8c&\xfe\x1c)\x01\x01\x1eD\x9b\x04\x00\xf7\x8b\x85\xbcn\xe5\xb8\xbbS\x93H@\x8e\x84\x0f\xb8\x94\x96*\xba\xec\xe9H:\x9cg\xfe\x18*\x01\x01\xb2\xdb\xfb\xd8\xbcT\x16\xb3\xba\xe9nH\xc0\x8f\x92)D{\xa6\x02\x18\xc1\xe7\xb8\xfdZ\xa5\xfe\x1c+\x01\x01\xa3\x1cC':\xd4|\xf3\xbaA\xaa\xa19\x00\x00\x00\x00\x00\x00\x00\x009\xbc\x94;\xb9x\xe6\x00\x00\x00\x00\xa5\x03\x95i\xfe\x150\x01\x01$W\xbd\xff\x11\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9cq\xfe\x161\x01\x01#\x94\x9b\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00l\x05\xfe\x122\x01\x01\xfc\x9e\x9b\x04\x004\x00\x01\x00ARMMASK\x00Wrz\xb1"b'\xfe\t3\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03M\xd8\xfe\x034\x01\x01Ms\x00\x00\x96F\xfe\x1a5\x01\x01\x1b\xdd\xf5\x00\x12\x00\x00\x00\x00\t\x00\x06\x00\x1a\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01T\x81\xfe\x166\x01\x01t\xe4\x9b\x04\x00\x10\x00\x04\x00\x1f\xfc\xfe\xff\x00\x00\x02\x00\xff\xfe\xb6\xff6\x02\xd7\xf6\xfe\x167\x01\x01\x81\xe4\x9b\x04\x00\x03\x00\x12\x00\x1e\xfc\xfd\xff\x01\x00\xfc\xff\x83\x00\xbb\x00]\x02I\xa3\xfe\x0e8\x01\x01\x1d\xe4\x9b\x04\x00\x8f\xa3iDp=\x12=z\x10\x0fk\xfe\x0e9\x01\x01\x89\xe4\x9b\x04\x00\xac\xe7iD\x99\x99\xb2>\xcf\x15m\xec\xfe\x1f:\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xc6<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x13"\xfe\x06;\x01\x01}\xc5\x14\x00\x00\x03\x00[n\xfe\x04<\x01\x01\x98\x00\x00\xa0\x8a_\xb4\xfe\x02=\x01\x01*\x00\x00\x99\t\xfe\x1e>\x01\x01\x18\xd0\xf6\xfe\x11\x00\x00\x00\x00z\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\x023\xfe\x1a?\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x15\x01\xfe\x08@\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x002\xfe\x14A\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7\xa3\xbe\n\xd7\xa3=\xb3\x00\x00\x00\xf3*'b"\xfe\x1cB\x01\x01!b\x9b\x04\x00z\xa6\x02\x18\xc1\xe7\xb8\xfdZZ\n\x00\xca\xfe\xff\xff\xf4\xff\xff\xff\x08\x00'F7c\xfe\x1cC\x01\x01\x1e5\x9c\x04\x00%a\x83\xbc\xf2\xc6\xcf\xbb\x17\x9cH@MZ\xb38\x84\xc5\xd0\xba\x8c\xc5\xd6\xb8`\x1c\xfe\x18D\x01\x01\xb2G\xce\xd7\xbc2E\xfc\xbaXfH\xc0\x00\x90)Dy\xa6\x02\x18\xc1\xe7\xb8\xfdb\xa2\xfe\x03E\x01\x01Ms\x00\x00PO\xfe\x1cF\x01\x01\xa3\x90\xea':\xf77\xf4\xba]\x96\xa59\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x96u;\x01\xdb\xe8<7\xbd\xfe\x03G\x01\x01\xa5\xbb\x14\x00\xdf6\xfe\x0cH\x01\x01\x020Cj|\xb1N\x05\x00H\x9c\x04\x00\t\x04\xfe\x16I\x01\x01\x88y\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xc2\x8a\xfe\x12J\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x004w\xfe\x16K\x01\x01\xc1sA\x14=\xc4\xe6\xa1<\x07<\xab;n\xda\x18>\x00\x00\x00\x00\xa5\x03k\xbb"b'\xfe\x15L\x01\x01$\x9cj\x03\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00"\xb1\xfe\x16M\x01\x01#\x85\x9c\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00e\xf3\xfe\x03N\x01\x01Ms\x00\x00<\xe8'b"\xfe\x1aO\x01\x01\x1b#\xa3\x04\x12\x00\x00\x00\x00\x07\x00\x07\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00{\x01x\x1a\xfe\x16P\x01\x01t\xd5\x9c\x04\x00\x0b\x00\x0b\x00.\xfc\x00\x00\xfe\xff\x00\x00\x00\xff\xb6\xff7\x02\xfem\xfe\x16Q\x01\x01\x81\xd5\x9c\x04\x00\x03\x00\x12\x00\x1d\xfc\xfc\xff\x01\x00\xfd\xff\x87\x00\xbd\x00_\x02>\xbe\xfe\x0eR\x01\x01\x1d\xd5\x9c\x04\x00y\xa5iDff\x86={\x10\xda0\xfe\x0eS\x01\x01\x89\xd5\x9c\x04\x00\xf3\xe7iD\xcd\xcc\xb4>\xcf\x15\x9e}\xfe\x1fT\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc3\x84\xfe\x06U\x01\x01}\xc8\x14\x00\x00\x03\x00F&\xfe\x04V\x01\x01\x98\x00\x00\xa0\x8a5A\xfe\x02W\x01\x01*\x00\x00KD\xfe\x1eX\x01\x01\x18\xf8\x07\x02\x12\x00\x00\x00\x00y\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xc4>\xfe\x1aY\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xa7&\xfe\x08Z\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xe2N\xfe\x14[\x01\x01J\n\xd7\xa3<\n\xd7\xa3<)\\\x8f\xbe\n\xd7\xa3=\xb3\x00\x00\x00\x8d\xde\xfe\x1c\\\x01\x01!\xf3\x9c\x04\x00y\xa6\x02\x18\xc2\xe7\xb8\xfdxZ\n\x00\xe8\xfe\xff\xff\xf3\xff\xff\xff\x08\x00*F\t\x1c\xfe\x1c]\x01\x01\x1e%\x9d\x04\x00/l\x7f\xbc\x98\xed\xe8\xbb1\xa4H@\xd2\x0eG\xb9\xca\xcf{\xba\xe7(\x88\xb8\x85\x17\xfe\x18^\x01\x01\xb2\x1d\xc7\xd5\xbc\xf2\xfc'\xbb\x0f^H\xc0\x85\x8b)Dy\xa6\x02\x18\xc2\xe7\xb8\xfd\xc9*\xfe\x03_\x01\x01Ms\x00\x00\xfb2"b'\xfe\x1c`\x01\x01\xa3@\x90(:W\xea\xf4\xbaC\xa3\xa99\x00\x00\x00\x00\x00\x00\x00\x00\x84\x7f\\;t\xf3\xe9<#D\xfe\x03a\x01\x01\xa5\xc5\x14\x00\x99i\xfe\x0cb\x01\x01\x02\xb0\xecm|\xb1N\x05\x009\x9d\x04\x00\xe1\xdc\xfe\x16c\x01\x01\x88y\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00P\x08\xfe\x16d\x01\x01\xc19\x08#=^\xd2\x9f<\x97\x9e\x08\x00\x00\x00\x00\xa5\x03\xceC\xfe\x15e\x01\x01$\x18\x14\x07\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00G\x8e\xfe\x16f\x01\x01#u\x9d\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe4\xe3'b'\xfe\x03g\x01\x01Ms\x00\x00\xcf\xf2\xfe\x1ah\x01\x01\x1b\x9aM\x08\x12\x00\x00\x00\x00\x08\x00\x06\x00\x18\xfc\x01\x00\x00\x00\x00\x00\xf6\xfe\x07\x00{\x01\xff_\xfe\x16i\x01\x01t\xc6\x9d\x04\x00\x04\x00\x12\x00)\xfc\x01\x00\x00\x00\x00\x00\xff\xfe\xb6\xff7\x02\xacW\xfe\x16j\x01\x01\x81\xc6\x9d\x04\x00\x05\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfc\xff\x82\x00\xbd\x00`\x02\xa9\xb7\xfe\x0ek\x01\x01\x1d\xc6\x9d\x04\x00\xc1\xa5iD)\\\x8f={\x10\xc2E\xfe\x0el\x01\x01\x89\xc6\x9d\x04\x00F\xe9iDff\xbf>\xd0\x15\xb0\x9e\xfe\x1fm\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xea\x00\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nm\xa1\xfe\x06n\x01\x01}\xc8\x14\x00\x00\x03\x00\x90\xf7\xfe\x04o\x01\x01\x98\x00\x00\xa0\x8a\xaf{\xfe\x02p\x01\x01*\x00\x00\xd0\xe0\xfe\x1eq\x01\x01\x18`&\x08\x12\x00\x00\x00\x00y\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xdbe\xfe\x1ar\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x004\x1f\xfe\x08s\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x87\xd3\xfe\x14t\x01\x01J\n\xd7#<\n\xd7#<\xb8\x1e\x85\xbe\n\xd7\xa3=\xb3\x00\x00\x00\xd6s\xfe\x1cu\x01\x01!\xbc\x9d\x04\x00y\xa6\x02\x18\xc2\xe7\xb8\xfd\x96Z\n\x00\x06\xff\xff\xff\xf2\xff\xfe\xff\x08\x00-F\xda\x1a'b'\xfe\x1cv\x01\x01\x1e\x16\x9e\x04\x00\x089z\xbcZ\n\xfa\xbbS\xaeH@\x95zy\xb9\t\x0cc\xb9\rM\x957\x16\xb6\xfe\x18w\x01\x01\xb2`!\xd4\xbc\xe86H\xbb\x16VH\xc0\x14\x8e)Dy\xa6\x02\x18\xc2\xe7\xb8\xfde0\xfe\x03x\x01\x01Ms\x00\x00\x05\x18\xfe\x1cy\x01\x01\xa3,3):z\x92\xf5\xba\xe5\xd0\xad9\x00\x00\x00\x00\x00\x00\x00\x00\x18\xeaK;F\xce\xdb\x00\x00\x00\x00\xa5\x03\x94E\xfe\x16~\x01\x01\xe1m\xe7\x1b?P\xb4<>d=?\xd0\x15\n\xd0\xfe\x1f\x88\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00f\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x9f\xd8\xfe\x06\x89\x01\x01}\xc5\x14\x00\x00\x03\x00\xad\xc4\xfe\x04\x8a\x01\x01\x98\x00\x00\xa0\x8a:\xdc\xfe\x02\x8b\x01\x01*\x00\x00\x03\x01\xfe\x1e\x8c\x01\x01\x18P\xed\n\x12\x00\x00\x00\x00x\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x90~\xfe\x1a\x8d\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x89C\xfe\x08\x8e\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00u\xa7\xfe\x14\x8f\x01\x01J\n\xd7#<\n\xd7#<\x1e\x85k\xbe)\\\x8f=\xb3\x00\x00\x006\x9c'b"\xfe\x1c\x90\x01\x01!r\x9e\x04\x00x\xa6\x02\x18\xc2\xe7\xb8\xfd\xb4Z\n\x00$\xff\xff\xff\xf1\xff\xfe\xff\x08\x001F\t\xbd\xfe\x1c\x91\x01\x01\x1e\x07\x9f\x04\x00h\x19x\xbcx\x7f\x07\xbc\xa4\xb8H@&\xde\xb49'\x9c\x05\xbaN\xf2\x83\xb9HO\xfe\x18\x92\x01\x01\xb2\x87\x8d\xd3\xbc:\xeck\xbbRMH\xc0\x85\x9b)Dx\xa6\x02\x18\xc2\xe7\xb8\xfd#\xf3\xfe\x03\x93\x01\x01Ms\x00\x00\x8a\xa7\xfe\x1c\x94\x01\x01\xa3\x06\xd1):\x89/\xf6\xba\x15\x13\xb29\x00\x00\x00\x00\x00\x00\x00\x007\xc1G;\xbc\x9e\xdc<\\z\xfe\x03\x95\x01\x01\xa5\xc8\x14\x00S\xb7\xfe\x0c\x96\x01\x01\x02\x98Cu|\xb1N\x05\x00\x1b\x9f\x04\x00>\xf6\xfe\x16\x97\x01\x01\x88x\xa6\x02\x18\xc2\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00+\x80\xfe\x16\x98\x01\x01\xc1l#5=W\xd0\x98<\xadW(<\x94\xc1\x17>\x00\x00\x00\x00\xa5\x03hl"b'\xfe\x15\x99\x01\x01$\xc6o\x0e\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00j\xcf\xfe\x16\x9a\x01\x01#X\x9f\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00}Z\xfe\x12\x9b\x01\x01\xfc\x8a\x9f\x04\x004\x00\x01\x00ARMMASK\x00Wr\x98\xec\xfe\t\x9c\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc8d'b'\xfe\x03\x9d\x01\x01Ms\x00\x00\x87\x97\xfe\x1a\x9e\x01\x01\x1b\xad\xa9\x0f\x12\x00\x00\x00\x00\t\x00\x06\x00\x19\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x08\x00z\x01_q\xfe\x16\x9f\x01\x01t\xa8\x9f\x04\x00\x0b\x00\x0e\x00$\xfc\x00\x00\x00\x00\xfe\xff\xff\xfe\xb6\xff7\x02\x12\x97\xfe\x16\xa0\x01\x01\x81\xa8\x9f\x04\x00\x04\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfb\xff\x85\x00\xc0\x00b\x02{e\xfe\x0e\xa1\x01\x01\x1d\xa8\x9f\x04\x00\x1e\xa5iD{\x14v=|\x10\x0e\x05\xfe\x0e\xa2\x01\x01\x89\xa8\x9f\x04\x00S\xe9iD\xcd\xcc\xbf>\xd1\x15\xda\x8f\xfe\x1f\xa3\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x1e\x01\xd8<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x81*\xfe\x06\xa4\x01\x01}\xc5\x14\x00\x00\x03\x00I\x91\xfe\x04\xa5\x01\x01\x98\x00\x00\xa0\x8a+\xbd\xfe\x02\xa6\x01\x01*\x00\x00\xcfL\xfe\x1e\xa7\x01\x01\x18\x90\xfa\r\x12\x00\x00\x00\x00x\xa6\x02\x18\xc2\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\xc8h\xfe\x1a\xa8\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00F\xed\xfe\x08\xa9\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x96\n\xfe\x14\xaa\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xccL\xbe\n\xd7\xa3=\xb3\x00\x00\x00]\xb9\xfe\x1c\xab\x01\x01!:\x9f\x04\x00x\xa6\x02\x18\xc2\xe7\xb8\xfd\xc8Z\n\x008\xff\xff\xff\xef\xff\xfd\xff\x08\x004F\x19\xa2'b'\xfe\x1c\xac\x01\x01\x1e\xf8\x9f\x04\x00\xf82r\xbc\xba\x8d\x0e\xbc\xf7\xc3H@\xbc\xd0W:\xc9]\xe0\xbak5\x87\xb9\xce"\xfe\x18\xad\x01\x01\xb2\xf3\xd7\xd1\xbc\\\xc6\x85\xbb,EH\xc0=\x9a)Dx\xa6\x02\x18\xc2\xe7\xb8\xfd\x9e5\xfe\x1c\xae\x01\x01\xa3\x10i*:\x8d\xc0\xf6\xbaro\xb69\x00\x00\x00\x00\x00\x00\x00\x00\x94r=;|\x0c\xd9\x00\x00\x00\x00\xa5\x03g\x19\xfe\x03\xb3\x01\x01Ms\x00\x00z\x11\xfe\x15\xb4\x01\x01$\n\x1c\x12\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xbc\xfe\x16\xb5\x01\x01#H\xa0\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc6\xc9'b'\xfe\x03\xb6\x01\x01Ms\x00\x00\x1b\x86\xfe\x1a\xb7\x01\x01\x1b\xa2T\x13\x12\x00\x00\x00\x00\x07\x00\x06\x00\x1d\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00|\x01\x9a8\xfe\x16\xb8\x01\x01t\x98\xa0\x04\x00\x05\x00\x0c\x00%\xfc\x00\x00\x00\x00\xfd\xff\xff\xfe\xb5\xff7\x02\x9c\\\xfe\x16\xb9\x01\x01\x81\x98\xa0\x04\x00\x06\x00\x12\x00\x1e\xfc\xfc\xff\x00\x00\xfd\xff\x86\x00\xbe\x00d\x02_6\xfe\x0e\xba\x01\x01\x1d\x98\xa0\x04\x00\xe7\xa4iD\xebQh=|\x10\xc7\x84\xfe\x0e\xbb\x01\x01\x89\x98\xa0\x04\x00\x99\xe9iD\x00\x00\xc2>\xd2\x15\x81N\xfe*\xbc\x01\x01\x96s\xe7f\xbc\x11m\x01\x00|\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00P\xb4\xfe\x1f\xbd\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe4\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nn\x00\xfe\x06\xbe\x01\x01}\xc5\x14\x00\x00\x03\x00\x84\xf7\xfe\x04\xbf\x01\x01\x98\x00\x00\xa0\x8a\x8f\xa6\xfe\x02\xc0\x01\x01*\x00\x00\x87\xb0\xfe\x1e\xc1\x01\x01\x18\xf0U\x11\x12\x00\x00\x00\x00x\xa6\x02\x18\xc1\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c3\xd7\xfe\x1a\xc2\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xd1\xdf\xfe\x08\xc3\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00U\xfa\xfe\x14\xc4\x01\x01J\n\xd7#<\n\xd7#<{\x14.\xbe\n\xd7\xa3=\xb3\x00\x00\x00\x7f\x07'b'\xfe\x1c\xc5\x01\x01!\x16\xa0\x04\x00x\xa6\x02\x18\xc1\xe7\xb8\xfd\xe6Z\n\x00V\xff\xff\xff\xef\xff\xfd\xff\x08\x007F3/\xfe\x1c\xc6\x01\x01\x1e\xe9\xa0\x04\x00Hxn\xbc\xc4h\x15\xbc\xe0\xc9H@i\x95d\xb9\x9c+\x80\xba\xf1\n\xee\xb9\x15\x11\xfe\x18\xc7\x01\x01\xb2\xef\xe5\xd0\xbc\x13\xb4\x94\xbb\xc3>H\xc0\x85\x9b)Dw\xa6\x02\x18\xc1\xe7\xb8\xfd\x92\x9c\xfe\x1c\xc8\x01\x01\xa3.\xfa*:\xf3C\xf7\xba)\xe2\xba9\x00\x00\x00\x00\x00\x00\x00\x001\xd1L;\xe3\xbf\xd4<\x80\xea\xfe\x03\xc9\x01\x01\xa5\xc8\x14\x00\xb8\xb2\xfe\x0c\xca\x01\x01\x02\x98\x96||\xb1N\x05\x00\xfd\xa0\x04\x00\nv\xfe\x16\xcb\x01\x01\x88w\xa6\x02\x18\xc1\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00s\n\xfe\x16\xcc\x01\x01\xc1\xd9%K=k\x1a\x8e<\x81\x81\xee;\x14\xc9\x06>\x00\x00\x00\x00\xa5\x03!\xe6\xfe\x03\xcd\x01\x01Ms\x00\x00\x0e\xa9'b'\xfe\x15\xce\x01\x01$\x9e\xc7\x15\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86Z\xfe\x16\xcf\x01\x01#9\xa1\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe1\xed\xfe\x03\xd0\x01\x01Ms\x00\x00\xabH'b'\xfe\x1a\xd1\x01\x01\x1b\xf3\x00\x17\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf6\xfe\x07\x00z\x01\xed:\xfe\x16\xd2\x01\x01t\x89\xa1\x04\x00\x12\x00\x03\x002\xfc\x01\x00\x00\x00\xfe\xff\x00\xff\xb6\xff7\x02G\xd6\xfe\x16\xd3\x01\x01\x81\x89\xa1\x04\x00\x05\x00\x12\x00\x1a\xfc\xfc\xff\x01\x00\xfd\xff\x82\x00\xbd\x00]\x027n\xfe\x0e\xd4\x01\x01\x1d\x89\xa1\x04\x00\xbb\xa3iD\xb8\x1e\x1d={\x10\\\x19\xfe\x0e\xd5\x01\x01\x89\x89\xa1\x04\x00P\xe8iDR\xb8\xb7>\xd2\x15\xf0\x1c\xfe\x1f\xd6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xff\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xec\xe9\xfe\x06\xd7\x01\x01}\xc5\x14\x00\x00\x03\x0001\xfe\x04\xd8\x01\x01\x98\x00\x00\xa0\x8a7^\xfe\x02\xd9\x01\x01*\x00\x00wD\xfe\x1e\xda\x01\x01\x18\x18g\x14\x12\x00\x00\x00\x00w\xa6\x02\x18\xc1\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xf2\xde\xfe\x1a\xdb\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xaf0\xfe\x08\xdc\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xae\x95\xfe\x14\xdd\x01\x01J\n\xd7#<\n\xd7#<)\\\x0f\xbe\n\xd7\xa3=\xb3\x00\x00\x00 \xbf\xfe\x1c\xde\x01\x01!\x94\xa1\x04\x00w\xa6\x02\x18\xc0\xe7\xb8\xfd\x0e[\n\x00~\xff\xff\xff\xed\xff\xfc\xff\x08\x00:F\xd1\x98\xfe\x1c\xdf\x01\x01\x1e\xd9\xa1\x04\x00r\xaah\xbc\xa2u\x1e\xbcP\xd1H@=\xef\xb09\xa0\x15\x87\xba\xeb\xf7\x1d:\xebL\xfe\x18\xe0\x01\x01\xb21\xd5\xce\xbc\xf3\x9c\xa6\xbb\x8d7H\xc0)\x9c)Dw\xa6\x02\x18\xc0\xe7\xb8\xfd\xebF'b"\xfe\x1c\xe1\x01\x01\xa3\xba\x82+:J\xb8\xf7\xba\xf2c\xbf9\x00\x00\x00\x00\x00\x00\x00\x00\x16TZ;4_\xc9<\x86\xcb\xfe\x03\xe2\x01\x01\xa5\xc5\x14\x00\xab(\xfe\x0c\xe3\x01\x01\x020<\x80|\xb1N\x05\x00\xed\xa1\x04\x00'\xa2\xfe\x16\xe4\x01\x01\x88w\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x1b\xb5\xfe\x16\xe5\x01\x01\xc15|X=\xa9\x9c\x86<1I/\x00\x00\x00\x00\xa5\x03\xael\xfe\x03\xe6\x01\x01Ms\x00\x00\x92\xb8\xfe\x15\xe7\x01\x01$\x90r\x19\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xba\xfe\x16\xe8\x01\x01#)\xa2\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00Ll"b'\xfe\x03\xe9\x01\x01Ms\x00\x00 \t\xfe\x1a\xea\x01\x01\x1b1\xab\x1a\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1e\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x08\x00{\x01\xb8\xff\xfe\x16\xeb\x01\x01ty\xa2\x04\x00\x0b\x00\x0f\x00#\xfc\x02\x00\x00\x00\x00\x00\x00\xff\xb5\xff7\x020[\xfe\x16\xec\x01\x01\x81y\xa2\x04\x00\x03\x00\x13\x00\x1c\xfc\xfc\xff\x00\x00\xfd\xff\x84\x00\xbe\x00`\x02\xdf\xdb\xfe\x0e\xed\x01\x01\x1dy\xa2\x04\x00\xf0\xa5iD\xaeG\x95=|\x10n\xcf\xfe\x0e\xee\x01\x01\x89y\xa2\x04\x00i\xe8iD\xe1z\xb8>\xd2\x15\xfd\xb0\xfe\x1f\xef\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcc\x14\xfe\x06\xf0\x01\x01}\xb8\x14\x00\x00\x03\x00_L\xfe\x04\xf1\x01\x01\x98\x00\x00\xa0\x8a9\x9b\xfe\x02\xf2\x01\x01*\x00\x00vQ\xfe\x1e\xf3\x01\x01\x18x3\x1a\x12\x00\x00\x00\x00w\xa6\x02\x18\xc0\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xbe8\xfe\x1a\xf4\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xdf\x05\xfe\x08\xf5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcb\x08\xfe\x14\xf6\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2\xf5\xbd)\\\x8f=\xb3\x00\x00\x00Y\xf7\xfe\t\x13\n\x00m\t\x00\x00\x00\x00\xd2\x00\x00\x00\xeb\xb5\xfe\x1c\xf7\x01\x01![\xa2\x04\x00w\xa6\x02\x18\xc0\xe7\xb8\xfd\x18[\n\x00\x88\xff\xff\xff\xec\xff\xfc\xff\x07\x00=F3\x97'b'\xfe\x03\xf8\x01\x01/\xff\x00\x001\xab\xfe\x1c\xf9\x01\x01\x1e\xc9\xa2\x04\x00BOc\xbc\x0e\xbc#\xbc3\xddH@\xb7N\x0f9\xc1\xaa0\xbag\x1c\xc2\xb9\xa2\x01\xfe\x18\xfa\x01\x01\xb2\x05;\xcd\xbch]\xb6\xbb]/H\xc0\\\x9f)Dw\xa6\x02\x18\xc0\xe7\xb8\xfd\x9b\x02\xfe\x1c\xfb\x01\x01\xa3\xc1\x01,:\x99\x1c\xf8\xba\xda\xf8\xc39\x00\x00\x00\x00\x00\x00\x00\x00 \xb8m;"\xec\xca<)Y\xfe\x03\xfc\x01\x01\xa5\xc5\x14\x00\xdeC\xfe\x0c\xfd\x01\x01\x02\x98\xe9\x83|\xb1N\x05\x00\xde\xa2\x04\x00\xcej\xfe\x16\xfe\x01\x01\x88w\xa6\x02\x18\xc0\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00<\x9f\xfe\x16\xff\x01\x01\xc1@\xa7_=\xc30\x82<\x81[\xec;\\d\x0f>\x00\x00\x00\x00\xa5\x03\xdf7\xfe\x16\x00\x01\x01\xe1\xf6(\x1c?\\\x8fB>\x9fg:<\xee=\x81\xbc\x9b\xd0\xea=\x00\x1f=V\xfe\x03\x01\x01\x01Ms\x00\x00\x7f<'b'\xfe\x15\x02\x01\x01$\xe5\x1f\x1d\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19|\xfe\x16\x03\x01\x01#\x1a\xa3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x8e\x03\xfe\x03\x04\x01\x01Ms\x00\x00\x1e\xab\xfe\x1a\x05\x01\x01\x1b\x85X\x1e\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x06\x00|\x01k\xae\xfe\x16\x06\x01\x01tj\xa3\x04\x00\x04\x00\x0e\x00"\xfc\x00\x00\x00\x00\x01\x00\x00\xff\xb6\xff7\x02\xfc8\xfe\x16\x07\x01\x01\x81j\xa3\x04\x00\x04\x00\x14\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x86\x00\xc0\x00b\x02Bg\xfe\x0e\x08\x01\x01\x1dj\xa3\x04\x00\xa6\xa3iD\x00\x00\x18=|\x10v\xd7\xfe\x0e\t\x01\x01\x89j\xa3\x04\x00+\xe9iD\\\x8f\xbe>\xd3\x15e-\xfe\x1f\n\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xe6\x00\xe5<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nf\xdd\xfe\x06\x0b\x01\x01}\xc5\x14\x00\x00\x03\x00\x94\xfd\xfe\x04\x0c\x01\x01\x98\x00\x00\xa0\x8a\xf2\xbc\xfe\x02\r\x01\x01*\x00\x00\xd3\xdf\xfe\x1e\x0e\x01\x01\x18\x88H\x1d\x12\x00\x00\x00\x00v\xa6\x02\x18\xbf\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c!\xad\xfe\x1a\x0f\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x81U\xfe\x08\x10\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x81\x0b\xfe\x14\x11\x01\x01J\n\xd7#<\n\xd7#<\xebQ\xb8\xbd\n\xd7\xa3=\xb3\x00\x00\x00ZG\xfe\x12\x12\x01\x01\xfct\xa3\x04\x004\x00\x01\x00ARMMASK\x00WrG\x81\xfe\t\x13\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xf2}'b"\xfe\x1c\x14\x01\x01!%\xa3\x04\x00v\xa6\x02\x18\xbf\xe7\xb8\xfd6[\n\x00\xa6\xff\xff\xff\xec\xff\xfc\xff\x08\x00@F\xf6Q\xfe\x1c\x15\x01\x01\x1e\xba\xa3\x04\x00\xbb8]\xbc4\x04*\xbcT\xe4H@\x99\xc2\x9a9\x81\xf0\xbc\xba\xfd\xe2h\xb8\xc0V\xfe\x18\x16\x01\x01\xb2#K\xcb\xbci>\xc6\xbbN'H\xc03\x93)Dv\xa6\x02\x18\xbf\xe7\xb8\xfd\xe9\xb7\xfe\x1c\x17\x01\x01\xa3\rv,:\x12q\xf8\xbaS\x97\xc89\x00\x00\x00\x00\x00\x00\x00\x00\xab\xb5w;:\xf5\xbc<\x9cE\xfe\x03\x18\x01\x01\xa5\xc5\x14\x00\xe3M\xfe\x0c\x19\x01\x01\x02\x18\x93\x87|\xb1N\x05\x00\xce\xa3\x04\x00\xef\x0e\xfe\x16\x1a\x01\x01\x88v\xa6\x02\x18\xbf\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00|=\xfe\x16\x1b\x01\x01\xc1J\x1ei=:T|<\x86\xc3b;\xdb=\x02>\x00\x00\x00\x00\xa5\x03Ht\xfe\x03\x1c\x01\x01Ms\x00\x00\xda\xdd"b'\xfe\x15\x1d\x01\x01$;\xc9 \x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&`\xfe\x16\x1e\x01\x01#\n\xa4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xf8\x04'b'\xfe\x1a\x1f\x01\x01\x1bK\x05"\x12\x00\x00\x00\x00\x08\x00\x04\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x01{\xfb\xfe\x16 \x01\x01t[\xa4\x04\x00\x13\x00\r\x00)\xfc\x00\x00\x00\x00\x00\x00\x00\xff\xb5\xff6\x02\x92H\xfe\x16!\x01\x01\x81[\xa4\x04\x00\x04\x00\x10\x00\x1d\xfc\xfc\xff\x01\x00\xfc\xff\x85\x00\xbe\x00_\x02@\x88\xfe\x0e"\x01\x01\x1d[\xa4\x04\x00\xe1\xa2iD\xa4p\xcd<|\x10\x8e\xa7\xfe\x0e#\x01\x01\x89[\xa4\x04\x00\x81\xe6iDp=\xa9>\xd3\x15\x0c\xc0\xfe\x1f$\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xb9]\xfe\x06%\x01\x01}\xc5\x14\x00\x00\x03\x00\xc3V\xfe\x04&\x01\x01\x98\x00\x00\xa0\x8a\xfb\xaf\xfe\x02\'\x01\x01*\x00\x00\x07U\xfe\x1e(\x01\x01\x18\x00\xa0 \x12\x00\x00\x00\x00v\xa6\x02\x18\xbe\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x06s\xfe\x1a)\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x03\xbc\xfe\x08*\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc2\xfe\x14+\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f\xbd\n\xd7\xa3=\xb3\x00\x00\x00\xeb\xb3\xfe\x03,\x01\x01Ms\x00\x00R0\xfe\x1c-\x01\x01!\x00\xa4\x04\x00v\xa6\x02\x18\xbe\xe7\xb8\xfdT[\n\x00\xc4\xff\xff\xff\xea\xff\xfb\xff\x08\x00BFb\xe6'b'\xfe\x1c.\x01\x01\x1e\xac\xa4\x04\x00\xae`Y\xbczW.\xbcC\xedH@\xea\xda\xc49\x1b\xd4\xa1\xba"\xf1\x0c9\xf1\xfd\xfe\x18/\x01\x01\xb2\x1c\xe0\xc9\xbc\x02\xed\xd6\xbb\xf4\x1eH\xc0\x85\x9b)Dv\xa6\x02\x18\xbe\xe7\xb8\xfd\xab\xe9\xfe\x1c0\x01\x01\xa3t\xdd,:\xac\xb3\xf8\xba\x1b;\xcd9\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x98\x90;}\x9c\xb1\x00\x00\x00\x00\xa5\x03\x98T\xfe\x036\x01\x01Ms\x00\x00\xf9M\xfe\x157\x01\x01$\xa9x$\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00&\xc1\xfe\x168\x01\x01#\xfc\xa4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xba\x00'b"\xfe\x1a9\x01\x01\x1b&\xb4%\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x07\x00{\x018\xa3\xfe\x16:\x01\x01tL\xa5\x04\x00\t\x00\x0b\x00'\xfc\x00\x00\xff\xff\x01\x00\x00\xff\xb5\xff7\x02\x8d4\xfe\x16;\x01\x01\x81L\xa5\x04\x00\x05\x00\x12\x00\x1b\xfc\xfc\xff\x01\x00\xfc\xff\x81\x00\xbd\x00_\x02n\x0b\xfe\x0e<\x01\x01\x1dL\xa5\x04\x00\xa9\xa4iD\xd7\xa3X=}\x10\x00\t\xfe\x0e=\x01\x01\x89L\xa5\x04\x00\xe3\xe7iD\xebQ\xb4>\xd4\x15\xedF\xfe\x1f>\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x92\x00\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcch\xfe\x06?\x01\x01}\xc2\x14\x00\x00\x03\x00\x16\xf7\xfe\x04@\x01\x01\x98\x00\x00\xa0\x8a\xbe\x1a\xfe\x02A\x01\x01*\x00\x00O\xa9\xfe\x1eB\x01\x01\x18\xf0f#\x12\x00\x00\x00\x00v\xa6\x02\x18\xbd\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cQ\x0f\xfe\x1aC\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\x94\x8e\xfe\x08D\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb4$\xfe\x14E\x01\x01J\n\xd7#<\n\xd7#<\xcc\xccL\xbd\n\xd7\xa3=\xb3\x00\x00\x00g\t\xfe\x03F\x01\x01Ms\x00\x00\x80\xc5"b"\xfe\x1cG\x01\x01!\xb6\xa4\x04\x00v\xa6\x02\x18\xbd\xe7\xb8\xfd^[\n\x00\xce\xff\xff\xff\xea\xff\xfb\xff\x08\x00EF\xe8\xa6\xfe\x1cH\x01\x01\x1e\x9c\xa5\x04\x00\xc9\xcbU\xbc\x80\xff3\xbc\x0b\xf4H@\xcb\x10\t9D1\x98\xba\xbcr\xc16\xd9\x1c\xfe\x18I\x01\x01\xb2\xf8\xa4\xc8\xbcH,\xe6\xbb\xba\x15H\xc0\xeb\xa1)Dv\xa6\x02\x18\xbc\xe7\xb8\xfd\x96\xff\xfe\x1cJ\x01\x01\xa3\xb37-:9\xe4\xf8\xba\x11\xe7\xd19\x00\x00\x00\x00\x00\x00\x00\x008=\xa0;@'\xae<\x04\x9e\xfe\x03K\x01\x01\xa5\xc5\x14\x00\xba\xf9\xfe\x0cL\x01\x01\x020\xe2\x8e|\xb1N\x05\x00\xb0\xa5\x04\x00\xc6\xd7\xfe\x16M\x01\x01\x88v\xa6\x02\x18\xbc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xde\x08\xfe\x16N\x01\x01\xc1\xc8\x12~=\xbe\xe0g<\xfd\x9a\xbd;\xf1\xf1\x06>\x00\x00\x00\x00\xa5\x039\x04"b'\xfe\x03O\x01\x01Ms\x00\x00\x83i\xfe\x15P\x01\x01$\xb0%(\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b2\xfe\x16Q\x01\x01#\xec\xa5\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00+\x8f'b'\xfe\x1aR\x01\x01\x1b&`)\x12\x00\x00\x00\x00\x08\x00\x07\x00\x1b\xfc\x00\x00\x00\x00\x01\x00\xf4\xfe\x07\x00{\x01\x9d\xc5\xfe\x16S\x01\x01t=\xa6\x04\x00\x0b\x00\x08\x00 \xfc\x00\x00\xfd\xff\x00\x00\xff\xfe\xb5\xff6\x02\xd4h\xfe\x16T\x01\x01\x81=\xa6\x04\x00\x04\x00\x12\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x82\x00\xbf\x00a\x02(<\xfe\x0eU\x01\x01\x1d=\xa6\x04\x00\xf0\xa3iD\\\x8f*=|\x10\xdb\x13\xfe\x0eV\x01\x01\x89=\xa6\x04\x00~\xe7iD\xf6(\xb1>\xd4\x15\x07\xf7\xfe\x1fW\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfe\x00\xf1<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00NA\x15\xfe\x06X\x01\x01}\xc5\x14\x00\x00\x03\x00g\xbf\xfe\x04Y\x01\x01\x98\x00\x00\xa0\x8a\x1d\xd7\xfe\x02Z\x01\x01*\x00\x00\x04j\xfe\x1e[\x01\x01\x18\x18x&\x12\x00\x00\x00\x00u\xa6\x02\x18\xbc\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xb5\xe2\xfe\x1a\\\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00p\xef\xfe\x08]\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xa1V\xfe\x14^\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2\xf5\xbc\n\xd7\xa3=\xb3\x00\x00\x00\xc3\x02\xfe\x03_\x01\x01Ms\x00\x00\xfb2\xfe\x1c`\x01\x01!H\xa6\x04\x00u\xa6\x02\x18\xbc\xe7\xb8\xfd|[\n\x00\xec\xff\xff\xff\xe9\xff\xfa\xff\x08\x00IFx\xfc\xfe\t\x14\n\x00m\x1a\x00\x00\x00\x00\xd2\x00\x00\x00Wc\xfe\x1ca\x01\x01\x1e\x8d\xa6\x04\x00\t\xccP\xbc\x0e\x1c:\xbcQ\xfbH@b\x0cb:\xe4\xe2A\xba\xe26\x9d\xb9|`\xfe\x18b\x01\x01\xb2\xe7\x1a\xc7\xbc\x82f\xf5\xbb\x8a\x0cH\xc0=\x9a)Du\xa6\x02\x18\xbc\xe7\xb8\xfd\x9a.'b'\xfe\x1cc\x01\x01\xa3\x02\x84-:>\x02\xf9\xba9\x99\xd69\x00\x00\x00\x00\x00\x00\x00\x00\x85\xc8\xac;\x92`\xa4<\x99$\xfe\x03d\x01\x01\xa5\xb5\x14\x00\xbd\xa4\xfe\x0ce\x01\x01\x02\xb0\x8b\x92|\xb1N\x05\x00\xa1\xa6\x04\x00\xcbj\xfe\x16f\x01\x01\x88u\xa6\x02\x18\xbc\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x84\xf7\xfe\x16g\x01\x01\xc1y\xfd\x84=(\xf7[<\xea\xef\xfb;\x87\x05\x03>\x00\x00\x00\x00\xa5\x03\xa3\xad\xfe\x03h\x01\x01/\xff\x00\x00\xab;\xfe\x15i\x01\x01$M\xd1+\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x87\xfe\x16j\x01\x01#\xdd\xa6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xe8\xf8\xfe\x03k\x01\x01Ms\x00\x00\xad\xc9'b"\xfe\x1al\x01\x01\x1b\xe0\n-\x12\x00\x00\x00\x00\t\x00\x06\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01mj\xfe\x16m\x01\x01t-\xa7\x04\x00\x0b\x00\x07\x00$\xfc\x02\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02\xcb`\xfe\x16n\x01\x01\x81-\xa7\x04\x00\x04\x00\x13\x00\x1d\xfc\xfd\xff\x01\x00\xfd\xff\x8a\x00\xc3\x00m\x02\xa2n\xfe\x0eo\x01\x01\x1d-\xa7\x04\x00'\xa4iD\xebQ8={\x10\xeaP\xfe\x0ep\x01\x01\x89-\xa7\x04\x00\xac\xe7iD\x99\x99\xb2>\xd5\x15\xdf\x19\xfe\x1fq\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf2\x00\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N(o\xfe\x06r\x01\x01}\xc6\x14\x00\x00\x03\x00\x0b\xe2\xfe\x04s\x01\x01\x98\x00\x00\xa0\x8a\x14\xc4\xfe\x02t\x01\x01*\x00\x00\xa6\x8f\xfe\x1eu\x01\x01\x18\x80\x96,\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdNa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0cE\x1f\xfe\x1av\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00\xd7\x13\xfe\x08w\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x003\xc5\xfe\x14x\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7\xa3=\xb3\x00\x00\x00m\xd7\xfe\x1cy\x01\x01!\x10\xa7\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xe8\xff\xf9\xff\x08\x00KF\xe9\x1f\xfe\x03z\x01\x01Ms\x00\x00j\x13\xfe\x12{\x01\x01\xfc`\xa7\x04\x004\x00\x01\x00ARMMASK\x00WrPd\xfe\t|\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc6\x04"b'\xfe\x1c}\x01\x01\x1e~\xa7\x04\x00l;N\xbc\x93\x14<\xbc\xb9\x04I@\x14\x86q:?\x7f\x8a\xba\x10\x93/\xbau\x84\xfe\x18~\x01\x01\xb2\x02\xbf\xc5\xbc\xe8\x01\x02\xbce\x03H\xc0\n\x97)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xf5\xe2\xfe\x1c\x7f\x01\x01\xa3\xb2\xc0-:}\x0c\xf9\xba\xaeQ\xdb9\x00\x00\x00\x00\x00\x00\x00\x00\xb6j\xb6;\xa1=\x9f<\x1d \xfe\x03\x80\x01\x01\xa5\xc5\x14\x00\xc5\xf0\xfe\x0c\x81\x01\x01\x02\x189\x96|\xb1N\x05\x00\x92\xa7\x04\x003\x18\xfe\x16\x82\x01\x01\x88u\xa6\x02\x18\xbb\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00/\x1a\xfe\x16\x83\x01\x01\xc1\xa5\xf9\x87=\x88\x8bT<-\x12\x9f;,\xbf\x03>\x00\x00\x00\x00\xa5\x03\xc0\xcb\xfe\x16\x84\x01\x01\xe1\x7fj\x1c?{\x14.>\x02\x000<\xb9\xe1\xc1\xbb=0 >\x00\x1fz\xe0'b'\xfe\x15\x85\x01\x01$u\x82/\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x16\xfe\x16\x86\x01\x01#\xcf\xa7\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00+\x19\xfe\x03\x87\x01\x01Ms\x00\x00,\xea\xfe\x1a\x88\x01\x01\x1b\x9a\xb90\x12\x00\x00\x00\x00\x08\x00\x05\x00\x19\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01l\x16\xfe\x16\x89\x01\x01t\x1f\xa8\x04\x00\x10\x00\x06\x00*\xfc\x03\x00\xff\xff\xff\xff\x00\xff\xb5\xff7\x02\xc1P\xfe\x16\x8a\x01\x01\x81\x1f\xa8\x04\x00\x05\x00\x10\x00\x1c\xfc\xfc\xff\x01\x00\xfd\xff\x84\x00\xbe\x00\\\x02i\xed\xfe\x0e\x8b\x01\x01\x1d\x1f\xa8\x04\x00\xbd\xa2iD\x1e\x85\xbb\xd2\x15\xe8\x9b\xfe\x1f\x8d\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xa4\x00\xfd<<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc4i\xfe\x06\x8e\x01\x01}\xc5\x147\x00\x03\x00F\x80\xfe\x04\x8f\x01\x01\x98\x00\x00\xa0\x8a"\xae\xfe\x02\x90\x01\x01*\x00\x00H\xc2\xfe\x1e\x91\x01\x01\x18\xc8\xf5/\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\xc1\x93\xfe\x1a\x92\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb3\x00Z\x00\x00\x00m"\xfe\x08\x93\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xc3\xfe\x14\x94\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\n\xd7#<\n\xd7\xa3=\xb3\x00\x00\x00\xf3\xa2'b"\xfe\x1c\x95\x01\x01!\xed\xa7\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\x9a[\n\x00\n\x00\x00\x00\xe8\xff\xf9\xff\x08\x00MF\xd3\xab\xfe\x03\x96\x01\x01Ms\x00\x00\xeb0\xfe\x1c\x97\x01\x01\x1eo\xa8\x04\x00(\x93I\xbc#\x90A\xbcG\nI@y\xd4A:\xf0\x8d\x85\xba\xd7\xe8x9\x8bR\xfe\x18\x98\x01\x01\xb2\xb6\x18\xc4\xbcb\xff\t\xbc}\xfbG\xc0\x00\xa0)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xaf\xfc\xfe\x1c\x99\x01\x01\xa3\x9b\xed-:\xdc\x03\xf9\xbad\r\xe09\x00\x00\x00\x00\x00\x00\x00\x00\x0e\xe3\xc2;N\xf0\x9d\x8b=\xeelM<\x7f\x94\x9e:\xdcH\x02>\x00\x00\x00\x00\xa5\x03\xea'"b'\xfe\x15\x9e\x01\x01$\x9e*3\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x90\xfe\x16\x9f\x01\x01#\xbf\xa8\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa3\xe5\xfe\x03\xa0\x01\x01Ms\x00\x00\xd2\xc0'b"\xfe\x1a\xa1\x01\x01\x1b\x01f4\x12\x00\x00\x00\x00\x08\x00\x08\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x06\x00z\x01r\x9f\xfe\x16\xa2\x01\x01t\x0f\xa9\x04\x00\x07\x00\x0e\x005\xfc\x00\x00\xff\xff\x03\x00\xff\xfe\xb5\xff6\x02\xc2\x11\xfe\x16\xa3\x01\x01\x81\x0f\xa9\x04\x00\x04\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff\x82\x00\xbd\x00^\x02-\xfa\xfe\x0e\xa4\x01\x01\x1d\x0f\xa9\x04\x00\x97\xa4iD\xf5(T=}\x10\xf5\xb9\xfe\x0e\xa5\x01\x01\x89\x0f\xa9\x04\x00\xe3\xe7iD\xebQ\xb4>\xd4\x15\x85'\xfe\x1f\xa6\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x15\x01\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xaab\xfe\x06\xa7\x01\x01}\xc8\x14\x00\x00\x03\x00\xb5A\xfe\x04\xa8\x01\x01\x98\x00\x00\xa0\x8a\xf9\xb0\xfe\x02\xa9\x01\x01*\x00\x00;U\xfe\x1e\xaa\x01\x01\x18\xe8\xb42\x12\x00\x00\x00\x00u\xa6\x02\x18\xbb\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cX\x04\xfe\x1a\xab\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x13m\xfe\x08\xac\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x19\xfe\x14\xad\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3<\n\xd7\xa3=\xb4\x00\x00\x00\xbe\xa1\xfe\x1c\xae\x01\x01!\xa1\xa8\x04\x00u\xa6\x02\x18\xbb\xe7\xb8\xfd\xa4[\n\x00\x14\x00\x00\x00\xe7\xff\xf9\xff\x08\x00QF\x88\xb7\xfe\x03\xaf\x01\x01Ms\x00\x00`q"b'\xfe\x1c\xb0\x01\x01\x1e_\xa9\x04\x00*\xf0F\xbc\xb47B\xbc\xfa\x0bI\xc0\xdf\xd7\xca8M\xc0\xa3\xbaq\xbc\x019\xc91\xfe\x18\xb1\x01\x01\xb2\x8b\xc4\xc2\xbc4V\x11\xbcJ\xf2G\xc0=\x9a)Du\xa6\x02\x18\xbb\xe7\xb8\xfd\xd8y\xfe\x1c\xb2\x01\x01\xa3\xce\t.:$\xe7\xf8\xbaZ\xd1\xe49\x00\x00\x00\x00\x00\x00\x00\x00\xa5{\xd7;\t\x12\x95<\t\xcc\xfe\x03\xb3\x01\x01\xa5\xc5\x14\x00\x9d\x97\xfe\x0c\xb4\x01\x01\x028\xda\x9d|\xb1N\x05\x00t\xa9\x04\x00XM\xfe\x16\xb5\x01\x01\x88u\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xf0+\xfe\x16\xb6\x01\x01\xc1@*\x8f="\x19C<9\xc4\x88;\xdd\xe8\xf7=\x00\x00\x00\x00\xa5\x03M\x13\xfe\x15\xb7\x01\x01$\xfe\xd66\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00FP\xfe\x16\xb8\x01\x01#\xaf\xa9\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa5>'b'\xfe\x03\xb9\x01\x01Ms\x00\x00\xa97\xfe\x1a\xba\x01\x01\x1b\xed\x108\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x08\x00{\x01\x03:\xfe\x16\xbb\x01\x01t\x00\xaa\x04\x00\r\x00\x11\x00%\xfc\x00\x00\x01\x00\x02\x00\x00\xff\xb6\xff6\x02QD\xfe\x16\xbc\x01\x01\x81\x00\xaa\x04\x00\x03\x00\x12\x00\x1d\xfc\xfc\xff\x00\x00\xfc\xff\x81\x00\xbe\x00j\x02M\xf3\xfe\x0e\xbd\x01\x01\x1d\x00\xaa\x04\x00\x97\xa4iD\xf5(T=}\x102\xce\xfe\x0e\xbe\x01\x01\x89\x00\xaa\x04\x00"\xe8iD\xaeG\xb6>\xd5\x15)\xf8\xfe\x1f\xbf\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdc\x00\xfd<;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N!=\xfe\x06\xc0\x01\x01}\xca\x14\x00\x00\x03\x00g\xf9\xfe\x04\xc1\x01\x01\x98\x00\x00\xa0\x8a\x94\x93\xfe\x02\xc2\x01\x01*\x00\x00<\x87\xfe\x1e\xc3\x01\x01\x18\x10\xc65\x12\x00\x00\x00\x00u\xa6\x02\x18\xba\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x87\xd0\xfe\x1a\xc4\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00S\x96\xfe\x08\xc5\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xbb\xe7\xfe\x14\xc6\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2\xf5<)\\\x8f=\xb4\x00\x00\x00\x84\x81'b'\xfe\x1c\xc7\x01\x01!j\xa9\x04\x00u\xa6\x02\x18\xba\xe7\xb8\xfd\xae[\n\x00\x1e\x00\x00\x00\xe7\xff\xf8\xff\x07\x00TFf\xa0\xfe\x03\xc8\x01\x01Ms\x00\x04\x0fY\xfe\x1c\xc9\x01\x01\x1eP\xaa\x04\x00\xc9\xebC\xbc\x9f\xdcD\xbc{\x04I\xc0\xe3y\xd6\xb9t\x1fa\xba\x1e\xebR:\xc7\xf4\xfe\x18\xca\x01\x01\xb2lf\xc1\xbc\x85\x13\x18\xbc3\xe9G\xc0\xe1\x9a)Du\xa6\x02\x18\xba\xe7\xb8\xfd\xd7e\xfe\t\x15\n\x00m\n\x00\x00\x00\x00\xd2\x00\x00\x00\xef\xcf\xfe\x1c\xcb\x01\x01\xa3\xb4\x13.:!\xb6\xf8\xba~\x94\xe99\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x83\xe2;\x19\xc0\x8c<\xbf\xd5\xfe\x03\xcc\x01\x01\xa5\xc8\x14\x00\xd9%\xfe\x0c\xcd\x01\x01\x02\xd0\x7f\xa1|\xb1N\x05\x00d\xaa\x04\x00]?\xfe\x16\xce\x01\x01\x88u\xa6\x02\x18\xba\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00ay\xfe\x16\xcf\x01\x01\xc1Vd\x91=\xa8\xb6<<\x7frk;Z\xde\xf9=\x00\x00\x00\x00\xa5\x03C\x88'b'\xfe\x15\xd0\x01\x01$\x8e\x88:\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xbe\xfe\x16\xd1\x01\x01#\xa1\xaa\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x0eu\xfe\x03\xd2\x01\x01Ms\x00\x04\xa4$'b"\xfe\x1a\xd3\x01\x01\x1b-\xc4;\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf4\xfe\x07\x00{\x01\xf5:\xfe\x16\xd4\x01\x01t\xf2\xaa\x04\x00\x0b\x00\x0e\x00,\xfc\x01\x00\xfe\xff\xff\xff\xff\xfe\xb6\xff7\x024\xf6\xfe\x16\xd5\x01\x01\x81\xf2\xaa\x04\x00\x06\x00\x13\x00\x1e\xfc\xfc\xff\x00\x00\xfd\xff\x81\x00\xc1\x00^\x02\xd5\x17\xfe\x0e\xd6\x01\x01\x1d\xf2\xaa\x04\x00\x1d\xa4iD\x8f\xc25=|\x10\xc34\xfe\x0e\xd7\x01\x01\x89\xf2\xaa\x04\x00O\xe7iD\x14\xae\xaf>\xd4\x15@\x9e\xfe*\xd8\x01\x01\x96s\xe7f\xbc\x10m\x01\x00|\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00s\x94\xfe\x1f\xd9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00d\x06=:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xecT\xfe\x06\xda\x01\x01}\xcd\x14\x00\x00\x03\x00\xb2X\xfe\x04\xdb\x01\x01\x98\x00\x00\xa0\x8a0\x88\xfe\x02\xdc\x01\x01*\x00\x00\xd4\xb4\xfe\x1e\xdd\x01\x01\x188\xd78\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x9eb\xfe\x1a\xde\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00`>\xfe\x08\xdf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00Y\x9b\xfe\x14\xe0\x01\x01J\n\xd7#<\n\xd7#<\xcc\xccL=)\\\x8f=\xb4\x00\x00\x00\xb1\xb3\xfe\x03\xe1\x01\x01/\xff\x00\x00J\\\xfe\x1c\xe2\x01\x01!\xfc\xaa\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xb8[\n\x00(\x00\x00\x00\xe6\xff\xf7\xff\x07\x00XFdG\xfe\x03\xe3\x01\x01Ms\x00\x04\x93H\xfe\x1c\xe4\x01\x01\x1eB\xab\x04\x00\xb9.A\xbc>\xe1I\xbc\xf4\xfaH\xc0\x9b\xf5\xbb\xb8]y\x04\xba\x97\x0b\xb08J\x89\xfe\x18\xe5\x01\x01\xb2\x9d\xee\xbf\xbc\x8d\r \xbcz\xdfG\xc0R\x98)Du\xa6\x02\x18\xb9\xe7\xb8\xfd'[\xfe\x12\xe6\x01\x01\xfcL\xab\x04\x004\x00\x01\x00ARMMASK\x00Wr\xd5\xa3"b'\xfe\t\xe7\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\x928\xfe\x1c\xe8\x01\x01\xa3\xed\t.:\xbfq\xf8\xba\xa2T\xee9\x00\x00\x00\x00\x00\x00\x00\x00C\x8f\xf1;\xc9:\x80<\xaaK\xfe\x03\xe9\x01\x01\xa5\xc6\x14\x00\n\xaa\xfe\x0c\xea\x01\x01\x02 1\xa5|\xb1N\x05\x00W\xab\x04\x00\x83\xc5\xfe\x16\xeb\x01\x01\x88u\xa6\x02\x18\xb9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00x\xce\xfe\x16\xec\x01\x01\xc1i\xcb\x94=u\x183<\x05\x1d+;\xddh\xef=\x00\x00\x00\x00\xa5\x03\xcd\t\xfe\x15\xed\x01\x01$<6>\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00Om\xfe\x16\xee\x01\x01#\x93\xab\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1d\x8b'b'\xfe\x03\xef\x01\x01Ms\x00\x04\xf1s\xfe\x1a\xf0\x01\x01\x1b\x9cn?\x12\x00\x00\x00\x00\x08\x00\x08\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00z\x01\x97H\xfe\x16\xf1\x01\x01t\xe2\xab\x04\x00\x07\x00\x06\x00.\xfc\x00\x00\xff\xff\xfd\xff\x00\xff\xb5\xff7\x02\x00"\xfe\x16\xf2\x01\x01\x81\xe2\xab\x04\x00\x02\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfd\xff\x84\x00\xc9\x00b\x02\xfe%\xfe\x0e\xf3\x01\x01\x1d\xe3\xab\x04\x00\x1d\xa4iD\x8f\xc25=}\x10f\xcc\xfe\x0e\xf4\x01\x01\x89\xe3\xab\x04\x00\x1c\xe8iD{\x14\xb6>\xd6\x15\x02\xa6\xfe\x1f\xf5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xdf\x00\x06=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xda\xbc\xfe\x06\xf6\x01\x01}\xc8\x14\x00\x00\x03\x00d\xa8\xfe\x04\xf7\x01\x01\x98\x00\x00\xa0\x8a&?\xfe\x02\xf8\x01\x01*\x00\x00!\xb8\xfe\x1e\xf9\x01\x01\x18\x88\xf9>\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xc3d\xfe\x1a\xfa\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x9bU\xfe\x08\xfb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00M8\xfe\x14\xfc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xcc\xccL=)\\\x8f=\xb4\x00\x00\x00;\x01\xfe\x1c\xfd\x01\x01!\xc5\xab\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe5\xff\xf7\xff\x07\x00ZF~\xcc'b'\xfe\x1c\xfe\x01\x01\x1e3\xac\x04\x00\x96\xebA\xbc\xdf\x9eI\xbc\xa5\xf2H\xc0\xbe\\\xe4\xb8\xc0K\xf6\xba\xa2\x0e\xa289\x90\xfe\x18\xff\x01\x01\xb2v<\xbf\xbc4\x08\'\xbc\xfd\xd6G\xc0)\x9c)Du\xa6\x02\x18\xb9\xe7\xb8\xfdn\xeb\xfe\x03\x00\x01\x01Ms\x00\x04\xa0\xda\xfe\x1c\x01\x01\x01\xa3^\xeb-:\x94\x18\xf8\xba\x04\x17\xf39\x00\x00\x00\x00\x00\x00\x00\x00\r\xed\xfc;v\xac\x85\x81\xf91\x00\x1fu\xeb'b'\xfe\x15\x07\x01\x01$\xb4\xe1A\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00j\xc6\xfe\x16\x08\x01\x01#\x83\xac\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00R\xb8\xfe\x03\t\x01\x01Ms\x00\x04\xa3v\xfe\x1a\n\x01\x01\x1b\xfa\x19C\x12\x00\x00\x00\x00\x07\x00\x05\x00\x1a\xfc\x00\x00\x00\x00\x00\x00\xf6\xfe\x07\x00|\x01TK\xfe\x16\x0b\x01\x01t\xd3\xac\x04\x00\x07\x00\x0c\x00*\xfc\x02\x00\xff\xff\x04\x00\x00\xff\xb6\xff7\x02o\x93\xfe\x16\x0c\x01\x01\x81\xd3\xac\x04\x00\x04\x00\x14\x00\x1c\xfc\xfc\xff\x01\x00\xfd\xff\x80\x00\xbe\x00c\x02\xa3J\xfe\x0e\r\x01\x01\x1d\xd3\xac\x04\x00X\xa2iD\xc2\xf5\x88<}\x10\x10<\xfe\x0e\x0e\x01\x01\x89\xd3\xac\x04\x00\x98\xe8iD\xc2\xf5\xb9>\xd8\x15\x9d\x08\xfe\x1f\x0f\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf3\x00\x06=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8fM\xfe\x06\x10\x01\x01}\xc8\x14\x00\x00\x03\x00\x87\xe0\xfe\x04\x11\x01\x01\x98\x00\x00\xa0\x8a\xb4N\xfe\x02\x12\x01\x01*\x00\x00\xees\xfe\x1e\x13\x01\x01\x18\xc8\x06B\x12\x00\x00\x00\x00u\xa6\x02\x18\xb9\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x81\xcc\xfe\x1a\x14\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x9e\xff\xfe\x08\x15\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x98\x18\xfe\x14\x16\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\x8f\xc2u=\xb4\x00\x00\x00\x97\t'b"\xfe\x1c\x17\x01\x01!\x8d\xac\x04\x00u\xa6\x02\x18\xb9\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe6\xff\xf7\xff\x06\x00^Fi\xe1\xfe\x1c\x18\x01\x01\x1e#\xad\x04\x00\xb2\xdd>\xbc&\x18L\xbc\xbc\xe9H\xc0\x9f\xa2\x8a9oB)\xba^\xed\xae9\x85\x87\xfe\x18\x19\x01\x01\xb2\xfa\xec\xbd\xbc\xfev-\xbc(\xceG\xc0R\x98)Du\xa6\x02\x18\xb9\xe7\xb8\xfd\xb5\xf9\xfe\x1c\x1a\x01\x01\xa3\x1f\xb9-:\xf3\xac\xf7\xbaN\xda\xf79\x00\x00\x00\x00\x00\x00\x00\x00*\xef\x02<\xab4\x80<\xfcJ\xfe\x03\x1b\x01\x01\xa5\xc5\x14\x003\xc7\xfe\x0c\x1c\x01\x01\x02P|\xac|\xb1N\x05\x007\xad\x04\x00\x92\x8a\xfe\x16\x1d\x01\x01\x88u\xa6\x02\x18\xb9\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00Zk\xfe\x12\x1e\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00y\xf4\xfe\x16\x1f\x01\x01\xc1\xf9\xaa\x96='\x14'<\xb8\x8c\xf4;\xbe\xff\xff=\x00\x00\x00\x00\xa5\x03\xaa\x82"b'\xfe\x03 \x01\x01Ms\x00\x04Pl\xfe\x15!\x01\x01$\x0f\x8dE\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\xb2\xfe\x16"\x01\x01#s\xad\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x9b\xfa'b"\xfe\x03#\x01\x01Ms\x00\x04\x80\xe6\xfe\x1a$\x01\x01\x1b\x9e\xc5F\x12\x00\x00\x00\x00\t\x00\x07\x00\x1b\xfc\x01\x00\xff\xff\x00\x00\xf5\xfe\x06\x00z\x01\xfeg\xfe\x16%\x01\x01t\xc4\xad\x04\x00\x0b\x00\x0b\x00 \xfc\x02\x00\x00\x00\xfd\xff\x01\xff\xb6\xff8\x020\xa4\xfe\x16&\x01\x01\x81\xc4\xad\x04\x00\x05\x00\x13\x00\x1b\xfc\xfc\xff\x00\x00\xfc\xff\x7f\x00\xbe\x00a\x02 \x95\xfe\x0e'\x01\x01\x1d\xc4\xad\x04\x00\xef\xa4iDp=j=~\x10\xd2\xba\xfe\x0e(\x01\x01\x89\xc4\xad\x04\x00P\xe8iDR\xb8\xb7>\xd8\x15\x15)\xfe\x1f)\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\r\x01\x0e=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x11\xec\xfe\x06*\x01\x01}\xc8\x14\x00\x00\x03\x00\xc0d\xfe\x04+\x01\x01\x98\x00\x00\xa0\x8a)\xa2\xfe\x02,\x01\x01*\x00\x00\x85#\xfe\x1e-\x01\x01\x18\xf0\x17E\x12\x00\x00\x00\x00u\xa6\x02\x18\xb8\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c1\xe9\xfe\x1a.\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xb50\xfe\x08/\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xda\xd1\xfe\x140\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\x8f\xc2u=\xb4\x00\x00\x00\xed\x9f\xfe\x1c1\x01\x01!V\xad\x04\x00u\xa6\x02\x18\xb8\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe5\xff\xf6\xff\x06\x00aF\xc1\x91"b'\xfe\x1c2\x01\x01\x1e\x14\xae\x04\x00\xcc\xaa=\xbc FI\xbc\x0e\xdfH\xc0\x85F\x06\xb9B\xbd\xb5\xba\xfd\xf9\r8\xbc\x80\xfe\x183\x01\x01\xb2\xcf\x90\xbc\xbc\xef\xb32\xbc\xeb\xc4G\xc0\xc2\xa5)Du\xa6\x02\x18\xb8\xe7\xb8\xfd\xcbG\xfe\x1c4\x01\x01\xa3~q-:g-\xf7\xba6\x9d\xfc9\x00\x00\x00\x00\x00\x00\x00\x00.=\x10<\t\xe7n<\x8b5\xfe\x035\x01\x01\xa5\xc8\x14\x00A\xca\xfe\x0c6\x01\x01\x02\xd0%\xb0|\xb1N\x05\x00(\xae\x04\x00^X\xfe\x167\x01\x01\x88v\xa6\x02\x18\xb8\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x01U\xfe\x168\x01\x01\xc1x\xb2\x97=\xf0\xca\x1d<\x14\xa3/;\x8db\x05>\x00\x00\x00\x00\xa5\x03`\xc4\xfe\x039\x01\x01Ms\x00\x04+\x9b\xfe\t\x16\n\x00m\x02\x00\x00\x00\x00\xd3\x00\x00\x00\xbc.\xfe\x15:\x01\x01$[7I\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00D\xd1\xfe\x16;\x01\x01#d\xae\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xc6\xac'b'\xfe\x03<\x01\x01Ms\x00\x04J\x0c\xfe\x1a=\x01\x01\x1b%oJ\x12\x00\x00\x00\x00\t\x00\x06\x00\x1b\xfc\x00\x00\xff\xff\x00\x00\xf6\xfe\x08\x00{\x01\x9a\x16\xfe\x16>\x01\x01t\xb4\xae\x04\x00\x03\x00\t\x00*\xfc\x00\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02\x9a1\xfe\x16?\x01\x01\x81\xb4\xae\x04\x00\x05\x00\x11\x00\x1f\xfc\xfc\xff\x01\x00\xfc\xff\x84\x00\xbd\x00`\x02\xb6E\xfe\x0e@\x01\x01\x1d\xb4\xae\x04\x00\xe6\xa4iD\x00\x00h=\x7f\x10\xa4\xeb\xfe\x0eA\x01\x01\x89\xb4\xae\x04\x004\xe8iD\n\xd7\xb6>\xd8\x15C\x9b\xfe\x1fB\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x0e=<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N5E\xfe\x06C\x01\x01}\xc5\x14\x00\x00\x03\x00;\x8c\xfe\x04D\x01\x01\x98\x00\x00\xa0\x8a[%\xfe\x02E\x01\x01*\x00\x009\xc6\xfe\x1eF\x01\x01\x18H!H\x12\x00\x00\x00\x00v\xa6\x02\x18\xb8\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xbc2\xfe\x1aG\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00oE\xfe\x08H\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00h\x1f\xfe\x14I\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\xcc\xccL=\xb4\x00\x00\x00U\xf1'b'\xfe\x1cJ\x01\x01!\x1d\xae\x04\x00v\xa6\x02\x18\xb8\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe5\xff\xf7\xff\x05\x00dF:\x19\xfe\x1cK\x01\x01\x1e\x04\xaf\x04\x00\xb9\x87;\xbcMTI\xbcX\xd8H\xc0\xbf1\xc79J\xf5\xba\xb9Iq\xa19\x8ec\xfe\x18L\x01\x01\xb2\xdb\x83\xbb\xbc\n\x897\xbc\xeb\xbcG\xc0\x85\x9b)Du\xa6\x02\x18\xb7\xe7\xb8\xfd\xb1\xb1\xfe\x1cM\x01\x01\xa3\x95\x15-:\x82\x9b\xf6\xbad\xb0\x00:\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xfe\x15<>\xe9t<-\xb5\xfe\x03N\x01\x01\xa5\xb5\x14\x00\x9e4\xfe\x0cO\x01\x01\x02P\xcf\xb3|\xb1N\x05\x00\x18\xaf\x04\x00\xb2\xd8\xfe\x16P\x01\x01\x88u\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x9c\x00\xfe\x16Q\x01\x01\xc1Z\xd8\x98=\xdfL\x18\xd8\x15\xd4\t\xfe\x1f^\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x08\x01\x0e=<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x04L\xfe\x06_\x01\x01}\xcb\x14\x00\x00\x03\x00\xa0\x99\xfe\x04`\x01\x01\x98\x00\x00\xa0\x8a\x87\xed\xfe\x02a\x01\x01*\x00\x00\xcc\xca\xfe\x1eb\x01\x01\x18X6K\x12\x00\x00\x00\x00u\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\xe6\xac\xfe\x1ac\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x94.\xfe\x08d\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x14\x91\xfe\x14e\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3=\xcc\xccL=\xb4\x00\x00\x00\xe1\xd4\xfe\x1cf\x01\x01!\xaf\xaf\x04\x00u\xa6\x02\x18\xb7\xe7\xb8\xfd\xe0[\n\x00P\x00\x00\x00\xe5\xff\xf6\xff\x05\x00gFA]\xfe\x1cg\x01\x01\x1e\xf4\xaf\x04\x00\xe6\xb1:\xbc\xff\xc8J\xbc\x93\xcfH\xc0\x06\x8c0:\xf5\xf3\xa1\xba\xb3\x89D:\x8b\xaf\xfe\x18h\x01\x01\xb2\xb8\xa6\xba\xbc\x83)=\xbc$\xb4G\xc0\x99\x99)Du\xa6\x02\x18\xb7\xe7\xb8\xfdV\xa6'b'\xfe\x1ci\x01\x01\xa3\x8d\xa5,:j\xf7\xf5\xbai\x10\x03:\x00\x00\x00\x00\x00\x00\x00\x00\xf6d\x1a<\xd3\x1fg<\xadx\xfe\x03j\x01\x01\xa5\xc8\x14\x00zE\xfe\x0ck\x01\x01\x02\xd0x\xb7|\xb1N\x05\x00\x08\xb0\x04\x00\x93\xc6\xfe\x16l\x01\x01\x88u\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xb0\xd6\xfe\x16m\x01\x01\xc15L\x99=x\xe1\x0f\xd9\x15\xc2\xdf\xfe\x1fw\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00\x0e==\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x8b$\xfe\x06x\x01\x01}\xc6\x14\x00\x00\x03\x00\x83\xf5\xfe\x04y\x01\x01\x98\x00\x00\xa0\x8a$ \xfe\x02z\x01\x01*\x00\x00\x87\t\xfe\x1e{\x01\x01\x18\xf0LQ\x12\x00\x00\x00\x00u\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0cZ\x02\xfe\x1a|\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00pO\xfe\x08}\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x01\xe3\xfe\x14~\x01\x01J\n\xd7#<\n\xd7#<)\\\x8f=\n\xd7#=\xb4\x00\x00\x00*\xe3\xfe\x1c\x7f\x01\x01!v\xb0\x04\x00u\xa6\x02\x18\xb7\xe7\xb8\xfd\xd6[\n\x00F\x00\x00\x00\xe4\xff\xf6\xff\x04\x00iF\x92\xc8'b'\xfe\x1c\x80\x01\x01\x1e\xe5\xb0\x04\x00\x1e|=\xbc\x7fRI\xbc\xf0\xc6H\xc0\xcf\xf0 9\xd9S\xe4\xba\x8e\xef\x13:@D\xfe\x18\x81\x01\x01\xb28H\xba\xbc\xb6\x02D\xbcn\xacG\xc03\xa3)Du\xa6\x02\x18\xb7\xe7\xb8\xfd\n\x88\xfe\x1c\x82\x01\x01\xa3\xee ,:\xa1@\xf5\xba\xb2p\x05:\x00\x00\x00\x00\x00\x00\x00\x00f\xf0\x1d<\x12\xc0V\x00\x00\x00\x00\xa5\x03\xce\xbc\xfe\x16\x87\x01\x01\xe1\x92\xed\x1c?r\xc8<>*\x9b\x1c<\xeck5\xbb1\xfd+>\x00\x1f\xc6u\xfe\x03\x88\x01\x01Ms\x00\x04\xfe<'b'\xfe\x15\x89\x01\x01$F9T\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00V\x88\xfe\x16\x8a\x01\x01#5\xb1\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xbcQ\xfe\x1a\x8b\x01\x01\x1b\xeeqU\x12\x00\x00\x00\x00\t\x00\x04\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x019\x18\xfe\x16\x8c\x01\x01t\x85\xb1\x04\x00\n\x00\x06\x00.\xfc\x01\x00\x00\x00\x00\x00\x00\xff\xb6\xff8\x02N\x16\xfe\x16\x8d\x01\x01\x81\x85\xb1\x04\x00\x05\x00\x12\x00\x19\xfc\xfc\xff\x02\x00\xfc\xff\x82\x00\xbf\x00j\x02\x16\xdd\xfe\x0e\x8e\x01\x01\x1d\x85\xb1\x04\x009\xa5iD\xcc\xcc|=\x80\x10\xd2K\xfe\x0e\x8f\x01\x01\x89\x85\xb1\x04\x00P\xe8iDR\xb8\xb7>\xda\x15\x9de\xfe\x1f\x90\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ne\xfc\xfe\x06\x91\x01\x01}\xc5\x14\x00\x00\x03\x00B\t\xfe\x04\x92\x01\x01\x98\x00\x00\xa0\x8ad\\\xfe\x02\x93\x01\x01*\x00\x00&j\xfe\x1e\x94\x01\x01\x18\x00bT\x12\x00\x00\x00\x00v\xa6\x02\x18\xb7\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x00\x00-K\x03\x0c\x92\xe8\xfe\x1a\x95\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xdb\xae\xfe\x08\x96\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xcd\xd0\xfe\x14\x97\x01\x01J\x00\x00\x00\x00\x00\x00\x00\x00\x8f\xc2u=\n\xd7#=\xb4\x00\x00\x00\xef='b'\xfe\x03\x98\x01\x01Ms\x00\x04\x86g\xfe\x1c\x99\x01\x01!@\xb1\x04\x00v\xa6\x02\x18\xb7\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe4\xff\xf6\xff\x04\x00lF^d\xfe\x1c\x9a\x01\x01\x1e\xd6\xb1\x04\x00\xd2\xe0;\xbc\xe89J\xbc\x84\xbfH\xc0\x8c\xe3\xb99\xd6r\x92\xba(\xd0\xd19Po\xfe\x18\x9b\x01\x01\xb2TM\xb9\xbcsXI\xbcb\xa4G\xc0\x14\x9e)Dv\xa6\x02\x18\xb7\xe7\xb8\xfd\xc9\xf5\xfe\x1c\x9c\x01\x01\xa3H\x88+:\x19y\xf4\xba\xe8\xcb\x07:\x00\x00\x00\x00\x00\x00\x00\x00\x13N"<\xbf,@<\x00"\xfe\x03\x9d\x01\x01\xa5\xc5\x14\x00`\x11\xfe\x0c\x9e\x01\x01\x02\xd0\xcb\xbe|\xb1N\x05\x00\xea\xb1\x04\x00\xa74\xfe\x16\x9f\x01\x01\x88v\xa6\x02\x18\xb7\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xa1\xf2\xfe\x16\xa0\x01\x01\xc1\x8c\x03\x9b=\xce}\x05<\r\x0fA;\x9a\x17\x00>\x00\x00\x00\x00\xa5\x03\xff\x86'b'\xfe\x03\xa1\x01\x01Ms\x00\x04\r&\xfe\x15\xa2\x01\x01$\xaf\xe5W\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x04\xfe\x16\xa3\x01\x01#&\xb2\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x98%\xfe\t\x17\n\x00m5\x00\x00\x00\x00\xd4\x00\x00\x00\x98\xda'b'\xfe\x1a\xa4\x01\x01\x1bn\x1eY\x12\x00\x00\x00\x00\n\x00\x06\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x08\x00{\x01\t\xa8\xfe\x16\xa5\x01\x01tv\xb2\x04\x00\r\x00\x0c\x00&\xfc\xfe\xff\x00\x00\xfe\xff\x00\xff\xb6\xff8\x02\x97H\xfe\x16\xa6\x01\x01\x81v\xb2\x04\x00\x04\x00\x13\x00\x1e\xfc\xfc\xff\x01\x00\xfc\xff\x86\x00\xc0\x00a\x02\x9b\xb1\xfe\x0e\xa7\x01\x01\x1dv\xb2\x04\x00\xd5\xa3iD\n\xd7#=\x7f\x10\xa8\x92\xfe\x0e\xa8\x01\x01\x89v\xb2\x04\x009\xe8iD\x00\x00\xb7>\xda\x15\x13\r\xfe\x1f\xa9\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\x00\x01\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nv\x12\xfe\x06\xaa\x01\x01}\xc6\x14\x00\x00\x03\x00\xfap\xfe\x04\xab\x01\x01\x98\x00\x00\xa0\x8a\xfef\xfe\x02\xac\x01\x01*\x00\x00\x98\xa5\xfe\x1e\xad\x01\x01\x18(sW\x12\x00\x00\x00\x00v\xa6\x02\x18\xb6\xe7\xb8\xfdXa\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c#\xbe\xfe\x1a\xae\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xc4\xa4\xfe\x08\xaf\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00x\x17\xfe\x14\xb0\x01\x01J\n\xd7#<\n\xd7#<\x8f\xc2u=\x8f\xc2\xf5<\xb4\x00\x00\x00\xf53\xfe\x03\xb1\x01\x01Ms\x00\x04u}\xfe\x1c\xb2\x01\x01!\t\xb2\x04\x00v\xa6\x02\x18\xb6\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe4\xff\xf6\xff\x03\x00oF\x8f\xf6'b"\xfe\x1c\xb3\x01\x01\x1e\xc6\xb2\x04\x00f'?\xbct\xb9F\xbc\xa1\xb4H\xc0\x9e\xffv\xba\xda\x85\xdd\xba'L\xac94\x17\xfe\x18\xb4\x01\x01\xb2\xe8\xbf\xb8\xbc\xf9HN\xbc\xeb\x9bG\xc0\x00\xa0)Dv\xa6\x02\x18\xb6\xe7\xb8\xfd\x94\xa4\xfe\x1c\xb5\x01\x01\xa3z\xda*:(\xa0\xf3\xba>#\n:\x00\x00\x00\x00\x00\x00\x00\x00\xe5^+<'\x952<\x93\x1e\xfe\x03\xb6\x01\x01\xa5\xb8\x14\x006\xd1\xfe\x0c\xb7\x01\x01\x02Pu\xc2|\xb1N\x05\x00\xda\xb2\x04\x00\x10\xa3\xfe\x16\xb8\x01\x01\x88v\xa6\x02\x18\xb6\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xab\xcf\xfe\x16\xb9\x01\x01\xc1\xa3\x96\x9b=n\xad\xfc;<\xef\xba:\xe7h\xf3=\x00\x00\x00\x00\xa5\x03\xa12\xfe\x03\xba\x01\x01Ms\x00\x04\x19\xda\xfe\x15\xbb\x01\x01$q\x91[\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\n\xfe\x16\xbc\x01\x01#\x16\xb3\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\xa2\xd9\xfe\x12\xbd\x01\x01\xfc \xb3\x04\x004\x00\x01\x00ARMMASK\x00Wr5\x05\xfe\t\xbe\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xa3<"b'\xfe\x03\xbf\x01\x01/\xff\x00\x00\xceR\xfe\x1a\xc0\x01\x01\x1bm\xcd\\\x12\x00\x00\x00\x00\t\x00\x07\x00 \xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01c\xe4\xfe\x16\xc1\x01\x01tg\xb3\x04\x00\x0e\x00\x03\x00+\xfc\x03\x00\xff\xff\xfd\xff\x00\xff\xb6\xff8\x02\xc8\xbe\xfe\x16\xc2\x01\x01\x81g\xb3\x04\x00\x05\x00\x11\x00\x1d\xfc\xfd\xff\x00\x00\xfc\xff\x85\x00\xc1\x00f\x02\xe22\xfe\x0e\xc3\x01\x01\x1dg\xb3\x04\x00\x90\xa4iD\\\x8fR=\x7f\x10\x15\x0c\xfe\x0e\xc4\x01\x01\x89g\xb3\x04\x009\xe8iD\x00\x00\xb7>\xdb\x15\xc6$\xfe\x1f\xc5\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xeb\x00\x19=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xcf0\xfe\x06\xc6\x01\x01}\xc5\x14\x00\x00\x03\x00\xe4\x15\xfe\x04\xc7\x01\x01\x98\x00\x00\xa0\x8a\x8b7\xfe\x02\xc8\x01\x01*\x00\x00kn\xfe\x1e\xc9\x01\x01\x18h\x80Z\x12\x00\x00\x00\x00v\xa6\x02\x18\xb6\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\x02\x0b\xfe\x1a\xca\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x0f\x01\xfe\x08\xcb\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00=\xd7\xfe\x14\xcc\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\x8f\xc2u=\n\xd7\xa3<\xb4\x00\x00\x00\x1aH\xfe\x03\xcd\x01\x01Ms\x00\x04n\xce'b"\xfe\x1c\xce\x01\x01!\xd1\xb2\x04\x00v\xa6\x02\x18\xb6\xe7\xb8\xfd\xcc[\n\x00<\x00\x00\x00\xe5\xff\xf6\xff\x02\x00sF{\xb3\xfe\x1c\xcf\x01\x01\x1e\xb7\xb3\x04\x00\x05 =\xbc\xec\xb8H\xbcd\xacH\xc0sq\x8990_\xc3\xba\x99\xf7\x0c:\x0e\xcc\xfe\x18\xd0\x01\x01\xb2+~\xb7\xbc6\x15T\xbc\xd4\x93G\xc0{\xa4)Dw\xa6\x02\x18\xb5\xe7\xb8\xfd\r\xfc\xfe\x1c\xd1\x01\x01\xa3\x98\x18*:\xa5\xb6\xf2\xba\x0cw\x0c:\x00\x00\x00\x00\x00\x00\x00\x00\x10'1<\xf8h%<{3\xfe\x03\xd2\x01\x01\xa5\xc5\x14\x00#\xc5\xfe\x0c\xd3\x01\x01\x02\xd0\x1e\xc6|\xb1N\x05\x00\xcb\xb3\x04\x00\xf0\x1b\xfe\x16\xd4\x01\x01\x88w\xa6\x02\x18\xb5\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x05\x12\xfe\x16\xd5\x01\x01\xc1\x97\xce\x9b=\xa2\x86\xf3;\x9fA\x13;\x8c\x81\xf5=\x00\x00\x00\x00\xa5\x03\xd6C"b'\xfe\x03\xd6\x01\x01Ms\x00\x04z2\xfe\x15\xd7\x01\x01$\xdf>_\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9-\xfe\x16\xd8\x01\x01#\x07\xb4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x1c\xa1'b'\xfe\x1a\xd9\x01\x01\x1bex`\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1b\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00z\x01H\x8c\xfe\x16\xda\x01\x01tX\xb4\x04\x00\x0f\x00\x02\x003\xfc\x01\x00\xff\xff\xfd\xff\x00\xff\xb5\xff6\x02#Q\xfe\x16\xdb\x01\x01\x81X\xb4\x04\x00\x04\x00\x11\x00\x1c\xfc\xfc\xff\x00\x00\xfc\xff\x87\x00\xbd\x00b\x02\x13\xe7\xfe\x0e\xdc\x01\x01\x1dX\xb4\x04\x00I\xa3iD\xd7\xa3\x00=\x80\x10T\xf6\xfe\x0e\xdd\x01\x01\x89X\xb4\x04\x00\xdd\xe8iD\xb8\x1e\xbc>\xdc\x15\x04\x92\xfe\x1f\xde\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xfa\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xbbD\xfe\x06\xdf\x01\x01}\xc5\x14\x00\x00\x03\x00\x9a\x8d\xfe\x04\xe0\x01\x01\x98\x00\x00\xa0\x8aP)\xfe\x02\xe1\x01\x01*\x00\x00\xd1L\xfe\x1e\xe2\x01\x01\x18\x90\x91]\x12\x00\x00\x00\x00w\xa6\x02\x18\xb5\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xf49\xfe\x1a\xe3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xe5\xba\xfe\x08\xe4\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\xb6W\xfe\x14\xe5\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\xcc\xccL=\n\xd7\xa3<\xb4\x00\x00\x00\xaa\xfa\xfe\x1c\xe6\x01\x01!b\xb4\x04\x00w\xa6\x02\x18\xb5\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe4\xff\xf6\xff\x01\x00uFY\x03\xfe\x03\xe7\x01\x01Ms\x00\x04M^\xfe\x1c\xe8\x01\x01\x1e\xa8\xb4\x04\x00\x90L>\xbc\x9e\xe6I\xbc=\xa5H\xc0\xda;\xdb\xb9\x10\x05c\xba\xcb\t\xae\xb9\xa7\xa3\xfe\x18\xe9\x01\x01\xb2\xfb1\xb7\xbc\x1bhY\xbc\xb4\x8cG\xc0\x00\xa0)Dw\xa6\x02\x18\xb5\xe7\xb8\xfd\xfb\r'b'\xfe\x1c\xea\x01\x01\xa3\xc7C):B\xbd\xf1\xba\x84\xc7\x0e:\x00\x00\x00\x00\x00\x00\x00\x00(\xd76<\x1c\xfe%<\x03|\xfe\x03\xeb\x01\x01\xa5\xc5\x14\x00\xa8\x84\xfe\x0c\xec\x01\x01\x028\xcc\xc9|\xb1N\x05\x00\xbc\xb4\x04\x00\x00\x00\x00\x00\xa5\x03\xe8\x1b\xfe\x15\xef\x01\x01$\x98\xe9b\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x02\xfe\x16\xf0\x01\x01#\xf8\xb4\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00X%\xfe\x03\xf1\x01\x01Ms\x00\x04\x84\x18'b'\xfe\x1a\xf2\x01\x01\x1b]"d\x12\x00\x00\x00\x00\x07\x00\x06\x00\x1a\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x07\x00{\x01\xbe1\xfe\x16\xf3\x01\x01tH\xb5\x04\x00\n\x00\x08\x00\x18\xfc\x03\x00\x00\x00\x01\x00\xff\xfe\xb5\xff7\x02&\xf4\xfe\x16\xf4\x01\x01\x81H\xb5\x04\x00\x03\x00\x0f\x00\x1b\xfc\xfd\xff\x00\x00\xfc\xff\x8a\x00\xc2\x00`\x02\x92\xa7\xfe\x0e\xf5\x01\x01\x1dH\xb5\x04\x00\x05\xa3iD)\\\xdf<\x7f\x10.w\xfe\x0e\xf6\x01\x01\x89H\xb5\x04\x00\x00\xe8iD33\xb5>\xdc\x15\xaf9\xfe*\xf7\x01\x01\x96s\xe7f\xbc\x0em\x01\x00\x7f\x10\x00\x00\xa0\xca\xf3\xbc\xb6\xda(\xbd\xcf\xa3\x80\xbcp\x0c\x92=\xcb\x987\xbd\xbb\x10H>\xad\xff\x85\x00\xf9\x00\x9e\x0f\xfe\x1f\xf8\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf9\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nd\xfc\xfe\x06\xf9\x01\x01}\xc8\x14\x00\x00\x03\x00(\xb4\xfe\x04\xfa\x01\x01\x98\x00\x00\xa0\x8a\xf42\xfe\x02\xfb\x01\x01*\x00\x00O\x10\xfe\x1e\xfc\x01\x01\x18\x10\xacc\x12\x00\x00\x00\x00x\xa6\x02\x18\xb4\xe7\xb8\xfdba\n\x00F\x00\xff\xff\x03\x00-K\x03\x0cL\xb0\xfe\x1a\xfd\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x005\x1e\xfe\x08\xfe\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00T+\xfe\x14\xff\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\xcc\xccL=\n\xd7#<\xb4\x00\x00\x00\x1d\xd4\xfe\x1c\x00\x01\x01!*\xb5\x04\x00x\xa6\x02\x18\xb4\xe7\xb8\xfd\xc2[\n\x002\x00\x00\x00\xe3\xff\xf6\xff\x01\x00yFq\xa9'b'\xfe\x03\x01\x01\x01Ms\x00\x04\x1f[\xfe\x1c\x02\x01\x01\x1e\x98\xb5\x04\x00\x9f\xae@\xbcNeF\xbc\x8f\x99H\xc0,qS:\xb3\x12~\xba\xf3\x0cB\xb9N\xdf\xfe\x18\x03\x01\x01\xb2\x00\xaf\xb6\xbcf\xd5^\xbcK\x83G\xc0\xd7\x93)Dx\xa6\x02\x18\xb4\xe7\xb8\xfd\xba\x1f\xfe\x1c\x04\x01\x01\xa3\x88[(:\x9a\xb3\xf0\xba\xf4\x14\x11:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93;<\xdd\x1d\x15<\xe1\x16\xfe\x03\x05\x01\x01\xa5\xc2\x14\x00g\xfb\xfe\x0c\x06\x01\x01\x02\xa0y\xcd|\xb1N\x05\x00\xad\xb5\x04\x00o\xc6\xfe\x16\x07\x01\x01\x88x\xa6\x02\x18\xb4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\xfd\xe5\xfe\x12\x08\x01\x01\x85\xff\xff\xff\xff\xff\xff\xff\x00GH\x02\x18\x0f\xb3\xb6\xfdd\x00\xe4\x04\xfe\x16\t\x01\x01\xc1F$\x9b=\x9a\xa0\xdd;G\x01#\xdf\x9f<<\x14\xf8(\xbc\xec\xc9E>\x00\x1fOs'b'\xfe\x15\x0b\x01\x01$O\x96f\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00a\xca\xfe\x16\x0c\x01\x01#\xe9\xb5\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00\x04Z\xfe\x03\r\x01\x01Ms\x00\x04}`\xfe\t\x18\n\x00m\r\x00\x00\x00\x00\xd3\x00\x00\x00nb\xfe\x1a\x0e\x01\x01\x1bz\xceg\x12\x00\x00\x00\x00\x07\x00\x05\x00\x18\xfc\x00\x00\x00\x00\x00\x00\xf6\xfe\x07\x00z\x01g\x7f\xfe\x16\x0f\x01\x01t8\xb6\x04\x00\x0c\x00\x02\x00+\xfc\x00\x00\xfe\xff\x04\x00\x00\xff\xb6\xff8\x02\x1a`\xfe\x16\x10\x01\x01\x818\xb6\x04\x00\x04\x00\x12\x00\x1c\xfc\xfd\xff\x00\x00\xfc\xff\x84\x00\xbd\x00_\x02\x8f\xa0\xfe\x0e\x11\x01\x01\x1d8\xb6\x04\x00\x83\xa3iD)\\\x0f=\x81\x10\n=\xfe\x0e\x12\x01\x01\x898\xb6\x04\x00\x98\xe8iD\xc2\xf5\xb9>\xdc\x15\x8dT\xfe\x1f\x13\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xde\x00 =;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\x19\x96\xfe\x06\x14\x01\x01}\xc8\x14\x00\x00\x03\x00\xd2\xbe\xfe\x04\x15\x01\x01\x98\x00\x00\xa0\x8aQq\xfe\x02\x16\x01\x01*\x00\x00\x98\x1c\xfe\x1e\x17\x01\x01\x188\xbdf\x12\x00\x00\x00\x00x\xa6\x02\x18\xb4\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x02\x00-K\x03\x0c\xd8\xa9\xfe\x1a\x18\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xbb\xea\xfe\x08\x19\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00D#\xfe\x14\x1a\x01\x01J\n\xd7\xa3<\n\xd7\xa3<\n\xd7#=\x00\x00\x00\x00\xb4\x00\x00\x005\x12'b'\xfe\x1c\x1b\x01\x01!\xf3\xb5\x04\x00x\xa6\x02\x18\xb4\xe7\xb8\xfd\xb8[\n\x00(\x00\x00\x00\xe4\xff\xf6\xff\x00\x00|F\x03R\xfe\x03\x1c\x01\x01Ms\x00\x04\xba\xba\xfe\x1c\x1d\x01\x01\x1e\x89\xb6\x04\x00\xadN?\xbcw)E\xbcl\x91H\xc0.\xcf]9\xc8\x06\xa7\xbaA\xaa7:\t\x08\xfe\x18\x1e\x01\x01\xb2(~\xb5\xbcz\x02c\xbc\x0f|G\xc0=\x9a)Dx\xa6\x02\x18\xb4\xe7\xb8\xfd\x01\xf3\xfe\x1c\x1f\x01\x01\xa3ma\':o\x9b\xef\xba \\\x13:\x00\x00\x00\x00\x00\x00\x00\x00b1><\xe3>\t<\x8aV\xfe\x03 \x01\x01\xa5\xc5\x14\x00\xd7\x8d\xfe\x0c!\x01\x01\x02P\x1b\xd1|\xb1N\x05\x00\x9d\xb6\x04\x00\xce\xf1\xfe\x16"\x01\x01\x88x\xa6\x02\x18\xb4\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00.\xef\xfe\x16#\x01\x01\xc1\x8dF\x9b=+\xbd\xd5;j|\xa3;\xd9J\xf3=\x00\x00\x00\x00\xa5\x03\xf4\x95'b"\xfe\x15$\x01\x01$YCj\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\\\xfe\x16%\x01\x01#\xd9\xb6\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00K\x0c\xfe\x12&\x01\x01\xfc\x0b\xb7\x04\x004\x00\x01\x00ARMMASK\x00Wr\xb6\xf1\xfe\x03'\x01\x01Ms\x00\x04^\xf0\xfe\t(\x01\x01\x00\x05\x00\x00\x00\x02\x03Y\x03\x03\xc7b"b'\xfe\x1a)\x01\x01\x1bb}k\x12\x00\x00\x00\x00\x07\x00\x07\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf5\xfe\x07\x00{\x01\xd6\x1a\xfe\x16*\x01\x01t*\xb7\x04\x00\x10\x00\x0e\x00!\xfc\xff\xff\xfe\xff\xff\xff\x00\xff\xb5\xff6\x02P\xd2\xfe\x16+\x01\x01\x81*\xb7\x04\x00\x04\x00\x12\x00\x1b\xfc\xfb\xff\x01\x00\xfc\xff\x83\x00\xbe\x00]\x02Xx\xfe\x0e,\x01\x01\x1d*\xb7\x04\x00\xa7\xa3iD\xebQ\x18=\x81\x104\xfa\xfe\x0e-\x01\x01\x89*\xb7\x04\x00G\xe9iD\xa4p\xbf>\xde\x15q\xbb\xfe\x1f.\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\n\x01)=:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xc7,\xfe\x06/\x01\x01}\xbb\x14\x00\x00\x03\x00&\xd6\xfe\x040\x01\x01\x98\x00\x00\xa0\x8ap\xf4\xfe\x021\x01\x01*\x00\x00\x03\xb8\xfe\x1e2\x01\x01\x18`\xcei\x12\x00\x00\x00\x00x\xa6\x02\x18\xb3\xe7\xb8\xfdla\n\x00F\x00\xff\xff\x03\x00-K\x03\x0cv\x96\xfe\x1a3\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00(\xd3\xfe\x084\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x95\xa8\xfe\x145\x01\x01J\x8f\xc2\xf5<\x8f\xc2\xf5<\x8f\xc2\xf5<\x00\x00\x00\x00\xb4\x00\x00\x00\x93\xd0\xfe\x1c6\x01\x01!\xbc\xb6\x04\x00x\xa6\x02\x18\xb3\xe7\xb8\xfd\xae[\n\x00\x1e\x00\x00\x00\xe4\xff\xf6\xff\x00\x00\x7fF\xe4V'b'\xfe\x1c7\x01\x01\x1e{\xb7\x04\x00\xc2\x8eC\xbc`\xaeB\xbc|\x88H\xc0hz\x879\x05\xc4\xad\xba\x86\x00S:6\xb6\xfe\x188\x01\x01\xb2\xbe\x8c\xb5\xbc\xe8\xadg\xbcqrG\xc0{\x94)Dx\xa6\x02\x18\xb3\xe7\xb8\xfdA\x1c\xfe\x039\x01\x01/\xff\x00\x00\x9d\x84\xfe\x03:\x01\x01Ms\x00\x04\xfb\x11\xfe\x1c;\x01\x01\xa3\xe3T&:\x1et\xee\xbaQ\x9e\x15:\x00\x00\x00\x00\x00\x00\x00\x00F0E<\xd3R\xdd;\x029\xfe\x03<\x01\x01\xa5\xc5\x14\x00\xcd\xed\xfe\x0c=\x01\x01\x02\xb8\xc8\xd4|\xb1N\x05\x00\x8f\xb7\x04\x00q\xda\xfe\x16>\x01\x01\x88x\xa6\x02\x18\xb3\xe7\xb8\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00d\xc0\xfe\x16?\x01\x01\xc1S\t\x9b=\xa2\x86\xca;\xf4\xba\t<(_\xf7=\x00\x00\x00\x00\xa5\x03\x9b\x11\xfe\x15@\x01\x01$/\xf1m\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00H\xce\xfe\x16A\x01\x01#\xcb\xb7\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00B\t'b'\xfe\x03B\x01\x01Ms\x00\x04>\xb4\xfe\x1aC\x01\x01\x1b\xa8)o\x12\x00\x00\x00\x00\x08\x00\x05\x00\x1c\xfc\x00\x00\x00\x00\x00\x00\xf4\xfe\x08\x00|\x01\xfc\x16\xfe\x16D\x01\x01t\x1b\xb8\x04\x00\x07\x00\n\x00\x1b\xfc\x03\x00\x00\x00\x00\x00\x01\xff\xb7\xff8\x02e\xe0\xfe\x16E\x01\x01\x81\x1b\xb8\x04\x00\x05\x00\x11\x00\x1c\xfc\xfc\xff\x00\x00\xfc\xff\x80\x00\xbe\x00^\x02\xcf\xad\xfe\x0eF\x01\x01\x1d\x1b\xb8\x04\x00\xbe\xa3iD{\x14\x1e=\x80\x10\xd7\x8a\xfe\x0eG\x01\x01\x89\x1b\xb8\x04\x00\xc6\xe8iDff\xbb>\xdd\x15\x19\x12\xfe\x1fH\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xed\x00)=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Nq5\xfe\x06I\x01\x01}\xca\x14\x00\x00\x03\x00G\x82\xfe\x04J\x01\x01\x98\x00\x00\xa0\x8a\x8e\xfe\xfe\x02K\x01\x01*\x00\x00\x18@\xfe\x1eL\x01\x01\x18\x88\xdfl\x12\x00\x00\x00\x00x\xa6\x02\x18\xb3\xe7\xb8\xfdva\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c;\xb1\xfe\x1aM\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\xd0\xde\xfe\x08N\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00\x86\x02\xfe\x14O\x01\x01J\n\xd7#<\n\xd7#<\n\xd7\xa3<\x00\x00\x00\x00\xb4\x00\x00\x00\xf1/'b'\xfe\x1cP\x01\x01!\x85\xb7\x04\x00x\xa6\x02\x18\xb3\xe7\xb8\xfd\xa4[\n\x00\x14\x00\x00\x00\xe5\xff\xf6\xff\x00\x00\x82F\x95@\xfe\x1cQ\x01\x01\x1ek\xb8\x04\x00SrD\xbc?\xeaA\xbc0\x83H\xc0\xd4T\xb48\x04N\xc4\xba\x1e\x920\xb9z\xe1\xfe\x18R\x01\x01\xb2}\x89\xb5\xbc\x8aej\xbc\x90iG\xc0\xb8\x8e)Dy\xa6\x02\x18\xb4\xe7\xb8\xfd\xbc\xa6\xfe\x1cS\x01\x01\xa3\x1c7%:T?\xed\xbaF\xda\x17:\x00\x00\x00\x00\x00\x00\x00\x00\x82QJ\x00\x00\x00\x00\xa5\x03\xc7Q\xfe\x03X\x01\x01Ms\x00\x04\x95\xc9'b'\xfe\x15Y\x01\x01$O\x9eq\x12\xe8\x03\xe8\x03\xe8\x03\xe8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00B\x08\xfe\x16Z\x01\x01#\xbb\xb8\x04\x00\xdc\x05\xdc\x05\xaa\x05\xdc\x05\xe8\x03\xbd\x05\xe8\x03\x82\x03\x00\x00ZQ'b"\xfe\x1a[\x01\x01\x1b'\xd9r\x12\x00\x00\x00\x00\x08\x00\x06\x00\x1c\xfc\x00\x00\xff\xff\x00\x00\xf5\xfe\x08\x00{\x01\xe2Z\xfe\x16\\\x01\x01t\x0c\xb9\x04\x00\x0c\x00\n\x00'\xfc\x05\x00\x00\x00\x02\x00\x00\xff\xb5\xff8\x02\xa2 \xfe\x16]\x01\x01\x81\x0c\xb9\x04\x00\x05\x00\x11\x00\x1e\xfc\xfc\xff\x01\x00\xfc\xff\x84\x00\xbf\x00`\x023\xc4\xfe\x0e^\x01\x01\x1d\x0c\xb9\x04\x00b\xa4iD=\nG=\x81\x10I\xf2\xfe\x0e_\x01\x01\x89\x0c\xb9\x04\x00\xbe\xe8iD\xf5(\xbb>\xde\x15\x18U\xfe\x1f`\x01\x01\x01/\xfca\x00/\xfca\x00/\xfca\x00\xf1\x00)=;\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00N\xf9m\xfe\x06a\x01\x01}\xe8\x14\x00\x00\x03\x00_\x88\xfe\x04b\x01\x01\x98\x00\x00\xa0\x8a}v\xfe\x02c\x01\x01*\x00\x00w\xfd\xfe\x1ed\x01\x01\x18\xc8\xeco\x12\x00\x00\x00\x00y\xa6\x02\x18\xb4\xe7\xb8\xfd\x80a\n\x00F\x00\xff\xff\x01\x00-K\x03\x0c\x81`\xfe\x1ae\x01\x01>\xcc\xcc\xec\xbf\xe1z\x94>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00Z\x00\x00\x00\x0e\xa0\xfe\x08f\x01\x01\xa2\x00\x00\x00\x00\x00\x00\x00\x00N\x9a\xfe\x14g\x01\x01J\n\xd7#<\n\xd7#<\n\xd7#<\x00\x00\x00\x00\xb4\x00\x00\x00R\x11\xfe\x03h\x01\x01Ms\x00\x04\x1d$\xfe\x1ci\x01\x01!\x17\xb9\x04\x00y\xa6\x02\x18\xb4\xe7\xb8\xfd\x90[\n\x00\x00\x00\x00\x00\xe4\xff\xf6\xff\x00\x00\x84F\x13\xf5\xfe\x1cj\x01\x01\x1e\\\xb9\x04\x00\xb03E\xbc\x86XD\xbc\x00{H\xc0\x14x\xfa8N\x9a\xb8\xba\xee\xc9\x81\xb9\xcf\x1b\xfe\x18k\x01\x01\xb2\x8b\x91\xb5\xbc\xa8\xdan\xbc\xcf^G\xc0\xc2\x95)Dy\xa6\x02\x18\xb4\xe7\xb8\xfd\xdb\xdc" \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/mavLinkServer.in b/src/drivers/MAVLinkServer/mavLinkServer.in deleted file mode 100644 index e6f87c2ae..000000000 --- a/src/drivers/MAVLinkServer/mavLinkServer.in +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -python @CMAKE_INSTALL_PREFIX@/share/jderobot/python/MAVLinkServer/MAVProxy/mavproxy.py $* \ No newline at end of file diff --git a/src/drivers/MAVLinkServer/setup.py b/src/drivers/MAVLinkServer/setup.py deleted file mode 100644 index 1bb4e81f3..000000000 --- a/src/drivers/MAVLinkServer/setup.py +++ /dev/null @@ -1,55 +0,0 @@ -from setuptools import setup - -version = "1.4.38" - -setup(name='MAVProxy', - version=version, - zip_safe=True, - description='MAVProxy MAVLink ground station', - long_description='''A MAVLink protocol proxy and ground station. MAVProxy -is oriented towards command line operation, and is suitable for embedding in -small autonomous vehicles or for using on ground control stations. It also -features a number of graphical tools such as a slipmap for satellite mapping -view of the vehicles location, and status console and several useful vehicle -control modules. MAVProxy is extensible via a modules system - see the modules -subdirectory for some example modules. MAVProxy was developed by CanberraUAV -for use in the 2012 Outback Challenge, and includes a module for the -CanberraUAV search and rescue system. See -http://Dronecode.github.io/MAVProxy/ for more information -on how to use MAVProxy.''', - url='https://github.com/Dronecode/MAVProxy', - author='Andrew Tridgell', - author_email='andrew@tridgell.net', - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2.7', - 'Topic :: Scientific/Engineering'], - license='GPLv3', - packages=['MAVProxy', - 'MAVProxy.modules', - 'MAVProxy.modules.mavproxy_map', - 'MAVProxy.modules.mavproxy_misseditor', - 'MAVProxy.modules.mavproxy_smartcamera', - 'MAVProxy.modules.lib', - 'MAVProxy.modules.lib.ANUGA', - 'MAVProxy.modules.lib.optparse_gui'], - # note that we do not include all the real dependencies here (like matplotlib etc) - # as that breaks the pip install. It seems that pip is not smart enough to - # use the system versions of these dependencies, so it tries to download and install - # large numbers of modules like numpy etc which may be already installed - install_requires=['pymavlink>=1.1.50', - 'pyserial'], - scripts=['MAVProxy/mavproxy.py', - 'MAVProxy/tools/mavflightview.py', - 'MAVProxy/tools/MAVExplorer.py', - 'MAVProxy/modules/mavproxy_map/mp_slipmap.py', - 'MAVProxy/modules/mavproxy_map/mp_tile.py'], - package_data={'MAVProxy': - ['modules/mavproxy_map/data/*.jpg', - 'modules/mavproxy_map/data/*.png', - 'tools/graphs/*.xml']} - ) diff --git a/src/drivers/MAVLinkServer/setupMAVLinkServer.in b/src/drivers/MAVLinkServer/setupMAVLinkServer.in deleted file mode 100755 index 92d83e7bc..000000000 --- a/src/drivers/MAVLinkServer/setupMAVLinkServer.in +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -cd @CMAKE_INSTALL_PREFIX@/share/jderobot/python/MAVLinkServer - -python setup.py build install --user diff --git a/src/drivers/YoutubeServer/.DS_Store b/src/drivers/YoutubeServer/.DS_Store deleted file mode 100755 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0/config) - - add_custom_command(TARGET ardrone_server POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${CMAKE_CURRENT_SOURCE_DIR}/ardrone_interfaces.cfg $) - - - if(DEFINED ARDRONE_TEST_PARSER) - message(STATUS "Enable testing for ardrone_server") - add_executable(test_parser test/test_parser.cpp src/ardrone_parser.cpp src/ardrone_config.cpp) - set_target_properties(ardrone_server test_parser PROPERTIES COMPILE_DEFINITIONS "ARDRONE_TEST_PARSER") - endif() - - - add_executable(ardrone_print_gps_data test/print_gps_data.cpp) - target_link_libraries(ardrone_print_gps_data - ${ZeroCIce_LIBRARIES} - ardrone_server_msgs - ${CMAKE_THREAD_LIBS_INIT} - ${easyiceconfig_LIBRARIES}) - - - - install(TARGETS ardrone_server ardrone_print_gps_data - DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/ - COMPONENT ardrone-server - ) - - INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/ardrone_interfaces.cfg - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot/conf - COMPONENT ardrone-server - ) - INSTALL(DIRECTORY config - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot/conf - COMPONENT ardrone-server - ) - -ELSE() - message(WARNING "ardrone_server marked to build, but required dependencies were not met. - You should install third party library: ardonelib") -ENDIF() - diff --git a/src/drivers/ardrone_server/ardrone_interfaces.cfg b/src/drivers/ardrone_server/ardrone_interfaces.cfg deleted file mode 100644 index fa687a536..000000000 --- a/src/drivers/ardrone_server/ardrone_interfaces.cfg +++ /dev/null @@ -1,30 +0,0 @@ -ArDrone.Camera.Endpoints=default -h 0.0.0.0 -p 9999:ws -h 0.0.0.0 -p 11000 -ArDrone.Camera.Name=ardrone_camera -ArDrone.Camera.FramerateN=15 -ArDrone.Camera.FramerateD=1 -ArDrone.Camera.Format=RGB8 -ArDrone.Camera.ArDrone2.ImageWidth=640 -ArDrone.Camera.ArDrone2.ImageHeight=360 -ArDrone.Camera.ArDrone1.ImageWidth=320 -ArDrone.Camera.ArDrone1.ImageHeight=240 -# If you want a mirror image, set to 1 -ArDrone.Camera.Mirror=0 - - -ArDrone.Pose3D.Endpoints=default -h 0.0.0.0 -p 9998:ws -h 0.0.0.0 -p 11003 -ArDrone.Pose3D.Name=ardrone_pose3d - -ArDrone.RemoteConfig.Endpoints=default -h 0.0.0.0 -p 9997:ws -h 0.0.0.0 -p 11010 -ArDrone.RemoteConfig.Name=ardrone_remoteConfig - -ArDrone.Navdata.Endpoints=default -h 0.0.0.0 -p 9996:ws -h 0.0.0.0 -p 11012 -ArDrone.Navdata.Name=ardrone_navdata - -ArDrone.CMDVel.Endpoints=default -h 0.0.0.0 -p 9995:ws -h 0.0.0.0 -p 11002 -ArDrone.CMDVel.Name=ardrone_cmdvel - -ArDrone.Extra.Endpoints=default -h 0.0.0.0 -p 9994:ws -h 0.0.0.0 -p 11004 -ArDrone.Extra.Name=ardrone_extra - -ArDrone.NavdataGPS.Endpoints=default -h 0.0.0.0 -p 9993:ws -h 0.0.0.0 -p 11005 -ArDrone.NavdataGPS.Name=ardrone_navdatagps diff --git a/src/drivers/ardrone_server/config/config.xml b/src/drivers/ardrone_server/config/config.xml deleted file mode 100644 index 99c9042cd..000000000 --- a/src/drivers/ardrone_server/config/config.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/drivers/ardrone_server/include/ardrone_server/ardrone_config.h b/src/drivers/ardrone_server/include/ardrone_server/ardrone_config.h deleted file mode 100644 index fc9309736..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/ardrone_config.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef ARDRONECONFIG_H -#define ARDRONECONFIG_H - -#include -#include -#include -#include - -class ArDroneConfig -{ - public: - ArDroneConfig(); - virtual ~ArDroneConfig(); - //ArDrone config - bool setParameterValue(std::string key, double value); - double getParameterValue(std::string key); - std::vector getValuesAsArray(); - std::vector getParametersAsArray(); - void printParameters(); - void clearParameters(); - protected: - private: - std::map parameters; - -}; - -#endif // ARDRONECONFIG_H - diff --git a/src/drivers/ardrone_server/include/ardrone_server/ardrone_driver.h.in b/src/drivers/ardrone_server/include/ardrone_server/ardrone_driver.h.in deleted file mode 100644 index 9029d42a7..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/ardrone_driver.h.in +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef _ARDRONE_DRIVER_H_ -#define _ARDRONE_DRIVER_H_ - -class ARDroneDriver; - - -#include -#include -#include -#include -#include -#include -#include - -#include - -#define _DEG2RAD 0.01745331111 -#define _RAD2DEG 57.2957184819 - -#define DRIVER_USERNAME "ardrone_server" -#define DRIVER_APPNAME "ardrone_server" -#define CAMERA_QUEUE_SIZE (10) -#define NAVDATA_QUEUE_SIZE (25) -#define CONFIG_FILE_PATH "@CMAKE_INSTALL_PREFIX@/share/jderobot/conf/config/config.xml" -#define CONFIG_FILE_TMP "/tmp" -#define LOOPRATE 30 - - -class ARDroneDriver -{ - public: - ARDroneDriver(); - ~ARDroneDriver(); - - void run(); - bool parseConfigFile(char* filepath); - double getParameter(char* param, double defaultVal); - - void initIce(int argc, char** argv); - void initInterfaces(); - Ice::CommunicatorPtr getCommunicator(); - void configureDrone(char* configFile); - - private: - Ice::CommunicatorPtr ic; - ArDroneParser parser; - ArDroneConfig *conf; - float last_tm; - long int last_frame_id; - long int copy_current_frame_id; - int flying_state; - bool inited; - bool record_usb; -}; - -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/ardrone_parser.h b/src/drivers/ardrone_server/include/ardrone_server/ardrone_parser.h deleted file mode 100644 index 17227bd03..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/ardrone_parser.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef ARDRONEPARSER_H -#define ARDRONEPARSER_H - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define ATTR_SET "." - -#include -#include -#include -#include -#include - -#include "ardrone_config.h" - -class ArDroneParser -{ - public: - ArDroneParser(); - ArDroneParser(int id); - int readFile(std::string filepath,ArDroneConfig *conf); - void writeFile(std::string filepath,ArDroneConfig *conf); - virtual ~ArDroneParser(); - private: - int id; -}; - -#endif // ARDRONEPARSER_H - diff --git a/src/drivers/ardrone_server/include/ardrone_server/ardrone_sdk.h b/src/drivers/ardrone_server/include/ardrone_server/ardrone_sdk.h deleted file mode 100644 index a0274133a..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/ardrone_sdk.h +++ /dev/null @@ -1,88 +0,0 @@ -/** -Software License Agreement (BSD) -\file ardrone_sdk.h -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#ifndef _ARDRONE_SDK_H_ -#define _ARDRONE_SDK_H_ - -// TODO: Move these two defines to CMake -#ifndef FFMPEG_SUPPORT -#define FFMPEG_SUPPORT -#endif - -#ifndef USE_LINUX -#define USE_LINUX -#endif - -// TODO: Research more on this issue, move the flag to CMake -// The FFMPEG library INT macros fix -#if defined __cplusplus -# define __STDC_CONSTANT_MACROS -#endif - -#include - -#ifndef UINT64_C -#define UINT64_C(c) (c ## ULL) -#endif - -extern "C" { - - #include - - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #include - #include - #include - - extern video_decoder_config_t vec; -} - -#include - -#define NB_DRIVER_POST_STAGES 10 - -extern ARDroneDriver *jdeDriver; - -extern navdata_unpacked_t *shared_raw_navdata; - -extern vp_os_mutex_t navdata_lock; -extern vp_os_mutex_t video_lock; -extern vp_os_mutex_t twist_lock; - -extern int32_t looprate; -extern bool realtime_navdata; -extern bool realtime_video; - -extern int32_t should_exit; - -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/ardroneextrai.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/ardroneextrai.h deleted file mode 100644 index dd173eb45..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/ardroneextrai.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef _DRONE_EXTRAI_H_ -#define _DRONE_EXTRAI_H_ - -#include -#include -#include - -namespace ardrone_extra -{ - class ExtraI: virtual public jderobot::ArDroneExtra - { - public: - ExtraI(); - virtual ~ExtraI(); - virtual void land(Ice::Current const & c); - virtual void takeoff(Ice::Current const & c); - virtual void reset(Ice::Current const & c); - virtual void toggleCam(Ice::Current const & c); - virtual void recordOnUsb(bool record, Ice::Current const & c); - virtual void ledAnimation(Ice::Int type, Ice::Float duration, Ice::Float freq, Ice::Current const & c); - virtual void flightAnimation(Ice::Int type, Ice::Float duration, Ice::Current const & c); - virtual void flatTrim(Ice::Current const & c); - private: - - }; -} -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/cameraserver.cpp b/src/drivers/ardrone_server/include/ardrone_server/interfaces/cameraserver.cpp deleted file mode 100644 index e3a80d270..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/cameraserver.cpp +++ /dev/null @@ -1,299 +0,0 @@ -/* - * - * Copyright (C) 1997-2009 JDERobot Developers Team - * - * 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 http://www.gnu.org/licenses/. - * - * Authors : David Lobato Bravo - * Sara Marugán Alonso - * Modified by: Alberto Martín - * - */ - -#ifndef CAMERASERVER_H_ -#define CAMERASERVER_H_ - -#include "ardrone_server/teleop_twist.h" -#include "ardrone_server/video.h" - -#include -#include - - -#include -#include -#include - - -//Opencv -#include -#include - - - -#include -#include -#include -#include -#include - - -namespace cameraserver{ - -class CameraI: virtual public jderobot::Camera { - - - public: - std::string name; - std::string uri; - int framerateN; - int framerateD; - - CameraI(std::string propertyPrefix, Ice::CommunicatorPtr ic) - : prefix(propertyPrefix) { - - std::cout << "cameraserver start" << std::endl; - - imageDescription = (new jderobot::ImageDescription()); - cameraDescription = (new jderobot::CameraDescription()); - - Ice::PropertiesPtr prop = ic->getProperties(); - - //fill cameraDescription - name = prop->getProperty(prefix+"Name"); - if (name.size() == 0) - throw "Camera name not configured"; - - cameraDescription->shortDescription = prop->getProperty(prefix+"ShortDescription"); - cameraDescription->streamingUri = prop->getProperty(prefix+"StreamingUri"); - - std::string dronecam; - //fill imageDescription - if (IS_ARDRONE1){ - dronecam=prefix+"ArDrone1."; - }else{ - dronecam=prefix+"ArDrone2."; - } - imageDescription->width = prop->getPropertyAsIntWithDefault(dronecam+"ImageWidth",340); - imageDescription->height = prop->getPropertyAsIntWithDefault(dronecam+"ImageHeight",280); - //we use formats acording to colorspaces - std::string fmtStr = prop->getPropertyWithDefault(prefix+"Format","YUY2");//default format YUY2 - imageFmt = colorspaces::Image::Format::searchFormat(fmtStr); - if (!imageFmt) - throw "Format " + fmtStr + " unknown"; - - imageDescription->size = imageDescription->width * imageDescription->height * CV_ELEM_SIZE(imageFmt->cvType); - imageDescription->format = imageFmt->name; - - //fill pipeline cfg - uri = prop->getProperty(prefix+"Uri"); - framerateN = prop->getPropertyAsIntWithDefault(prefix+"FramerateN",25); - framerateD = prop->getPropertyAsIntWithDefault(prefix+"FramerateD",1); - - // mirror image - mirror = prop->getPropertyAsIntWithDefault(prefix+"Mirror",0); - replyTask = new ReplyTask(this); - replyTask->start(); // my own thread - - } - - std::string getName () { - return (cameraDescription->name); - } - - std::string getRobotName () { -// return ((context.properties())->getProperty(context.tag()+".RobotName")); - } - - virtual ~CameraI() { -// context.tracer().info("Stopping and joining thread for camera: " + cameraDescription->name); -// gbxiceutilacfr::stopAndJoin(replyTask); - } - - virtual jderobot::ImageDescriptionPtr getImageDescription(const Ice::Current& c){ - return imageDescription; - } - - virtual jderobot::CameraDescriptionPtr getCameraDescription(const Ice::Current& c){ - return cameraDescription; - } - - virtual Ice::Int setCameraDescription(const jderobot::CameraDescriptionPtr &description, const Ice::Current& c) { - return 0; - } - - virtual jderobot::ImageFormat getImageFormat(const Ice::Current& c) - { - jderobot::ImageFormat formats; - - formats.push_back(colorspaces::ImageRGB8::FORMAT_RGB8.get()->name); - - return formats; - } - virtual void getImageData_async(const jderobot::AMD_ImageProvider_getImageDataPtr& cb, const std::string& format, const Ice::Current& c){ - replyTask->pushJob(cb); - } - - virtual std::string startCameraStreaming(const Ice::Current&){ - } - - virtual void stopCameraStreaming(const Ice::Current&) { - } - - virtual void reset(const Ice::Current&) - { - } - - private: - - class ReplyTask: public IceUtil::Thread { - public: - ReplyTask(CameraI* camera) - { - std::cout << "cameraserver -> replytask start" << std::endl; - mycamera = camera; - } - - void pushJob(const jderobot::AMD_ImageProvider_getImageDataPtr& cb){ - IceUtil::Mutex::Lock sync(requestsMutex); - requests.push_back(cb); - } - - virtual void run(){ - jderobot::ImageDataPtr reply(new jderobot::ImageData); - struct timeval a, b; - int cycle = 48; - long totalb,totala; - long diff; - - int count = 0 ; - cv::Mat frame; - cv::Mat image; - int cycle_control = 1000/mycamera->framerateN; - - while(1){ - gettimeofday(&a,NULL); - totala=a.tv_sec*1000000+a.tv_usec; - - - if (IS_ARDRONE1){ - vp_os_mutex_lock(&video_lock); - image=cv::Mat(D1_STREAM_HEIGHT,D1_STREAM_WIDTH,CV_8UC3,(void*)buffer); - vp_os_mutex_unlock(&video_lock); - if (cam_state == ZAP_CHANNEL_HORI) - { - frame=image(cv::Range(0,0),cv::Range(D1_STREAM_HEIGHT,D1_STREAM_WIDTH)); - image.copyTo(frame); - frame.rows=D1_STREAM_HEIGHT; - frame.cols=D1_STREAM_WIDTH; - mycamera->imageDescription->width=D1_STREAM_WIDTH; - mycamera->imageDescription->height=D1_STREAM_HEIGHT; - } - else if (cam_state == ZAP_CHANNEL_VERT) - { - frame=image(cv::Range(0,0),cv::Range(D1_VERTSTREAM_HEIGHT,D1_VERTSTREAM_WIDTH)); - image.copyTo(frame); - frame.rows=D1_VERTSTREAM_HEIGHT; - frame.cols=D1_VERTSTREAM_WIDTH; - mycamera->imageDescription->width=D1_VERTSTREAM_WIDTH+1; - mycamera->imageDescription->height=D1_VERTSTREAM_HEIGHT+1; - } - } - if (IS_ARDRONE2){ - vp_os_mutex_lock(&video_lock); - image=cv::Mat(D2_STREAM_HEIGHT,D2_STREAM_WIDTH,CV_8UC3,(void*)buffer); - vp_os_mutex_unlock(&video_lock); - frame=image(cv::Range(0,0),cv::Range(D2_STREAM_HEIGHT,D2_STREAM_WIDTH)); - image.copyTo(frame); - frame.rows=D2_STREAM_HEIGHT; - frame.cols=D2_STREAM_WIDTH; - mycamera->imageDescription->width=D2_STREAM_WIDTH; - mycamera->imageDescription->height=D2_STREAM_HEIGHT; - } - - - if(mycamera->imageDescription->width!=frame.rows && - mycamera->imageDescription->height!=frame.cols) - cv::resize(frame, frame, - cv::Size(mycamera->imageDescription->width, - mycamera->imageDescription->height)); - - if(count==0){ - reply->description = mycamera->imageDescription; - count++; - } - - - if (mycamera->mirror) - { - cv::Mat dst; - cv::flip(frame, frame, 1); - } - - - IceUtil::Time t = IceUtil::Time::now(); - reply->timeStamp.seconds = (long)t.toSeconds(); - reply->timeStamp.useconds = (long)t.toMicroSeconds() - reply->timeStamp.seconds*1000000; - - reply->pixelData.resize(frame.rows*frame.cols*3); - - memcpy( &(reply->pixelData[0]), (unsigned char *) frame.data, frame.rows*frame.cols*3); - - - { //critical region start - IceUtil::Mutex::Lock sync(requestsMutex); - while(!requests.empty()) { - jderobot::AMD_ImageProvider_getImageDataPtr cb = requests.front(); - requests.pop_front(); - cb->ice_response(reply); - } - } //critical region end - - gettimeofday(&b,NULL); - totalb=b.tv_sec*1000000+b.tv_usec; - - diff = (totalb-totala)/1000; - diff = cycle-diff; - //std::cout << "CameraServer takes " << diff << " ms "; - - if (diff < 0 || diff > cycle_control) - diff = 0.; - else - diff = cycle_control - diff; - - //std::cout << " and sleep " << diff << " ms " << std::endl; - /*Sleep Algorithm*/ - usleep(diff * 1000); - - } - } - - CameraI* mycamera; - IceUtil::Mutex requestsMutex; - std::list requests; - }; - - typedef IceUtil::Handle ReplyTaskPtr; - std::string prefix; - colorspaces::Image::FormatPtr imageFmt; - jderobot::ImageDescriptionPtr imageDescription; - jderobot::CameraDescriptionPtr cameraDescription; - ReplyTaskPtr replyTask; - int mirror; - -}; // end class CameraI - -} //namespace - -#endif // CAMERASERVER_H_ diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/cmdveli.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/cmdveli.h deleted file mode 100644 index 10d8c8785..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/cmdveli.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef _DRONE_CMDVELI_H_ -#define _DRONE_CMDVELI_H_ - -#include "ardrone_server/teleop_twist.h" -#include -#include - -namespace cmdvel -{ - class CMDVelI: virtual public jderobot::CMDVel - { - public: - CMDVelI(); - virtual ~CMDVelI(); - virtual Ice::Int setCMDVelData(jderobot::CMDVelDataPtr const & data, Ice::Current const & c); - private: - - }; -} -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatagpsi.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatagpsi.h deleted file mode 100644 index 3b8fbb6d5..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatagpsi.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Victor Arribas Raigadas <.varribas.urjc@gmail.com> - */ - -#ifndef NAVDATAGPSI_H -#define NAVDATAGPSI_H - -#include "ardrone_server/ardrone_sdk.h" -#include "navdatagps.h" - - -namespace ardrone_server { -namespace interfaces { - - -class NavdataGPSI: public ardrone::NavdataGPS -{ -public: - NavdataGPSI(); - virtual ~NavdataGPSI(); - ardrone::NavdataGPSData getNavdataGPS(Ice::Current const &); - -private: - ardrone::NavdataGPSData gpsdata_defaults_; -}; - -}}//NS - -#endif // NAVDATAGPSI_H diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatai.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatai.h deleted file mode 100644 index b6c8d802d..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/navdatai.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef _DRONE_NAVDATAI_H_ -#define _DRONE_NAVDATAI_H_ - -#include "ardrone_server/ardrone_sdk.h" -#include -#include -#include -#include -#include -#include -#include - -namespace navdata -{ - class NavdataI: virtual public jderobot::Navdata - { - public: - NavdataI(); - virtual ~NavdataI(); - virtual jderobot::NavdataDataPtr getNavdata(Ice::Current const & c); - private: - jderobot::NavdataDataPtr data; - bool readCovParams(); - double calcAverage(std::vector &vec); - void resetCaliberation(); - bool do_caliberation; - int max_num_samples; - bool caliberated; - double acc_bias[3]; - double gyro_bias[3]; - double vel_bias[3]; - std::vector< std::vector > acc_samples; - std::vector< std::vector > gyro_samples; - std::vector< std::vector > vel_samples; - long int last_navdata_id; - long int copy_current_navdata_id; - }; -} -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/pose3di.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/pose3di.h deleted file mode 100644 index 001c72368..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/pose3di.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - * Victor Arribas Raigadas - */ - -#ifndef _DRONE_CAMERASERVER_H_ -#define _DRONE_CAMERASERVER_H_ - -#include "ardrone_server/ardrone_sdk.h" -#include "ardrone_server/ardrone_driver.h" -#include -#include - -namespace pose3D -{ - typedef struct pose3d{ - union{double x; double roll;}; - union{double y; double pitch;}; - union{double z; double yaw;}; - }pose3d_t; - #define Point3D_OP(c,a,op,b) {c.x = a.x op b.x; c.y = a.y op b.y; c.z = a.z op b.z;} - - - class Pose3DI : virtual public jderobot::Pose3D - { - public: - Pose3DI(ARDroneDriver *driver); - virtual ~Pose3DI(); - virtual jderobot::Pose3DDataPtr getPose3DData(const Ice::Current&); - virtual Ice::Int setPose3DData(const jderobot::Pose3DDataPtr& data, const Ice::Current&); - private: - void poseBoostrapWithExternals(pose3d_t current_xyz, pose3d_t current_angles); - - jderobot::Pose3DDataPtr pose3D; - ARDroneDriver *driver; - - bool gps_on, gps_valid; - bool gps_is_bootstrapped; - - Eigen::Quaternion qR; - pose3d_t xyzT; - }; - - -} - -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/interfaces/remoteconfigi.h b/src/drivers/ardrone_server/include/ardrone_server/interfaces/remoteconfigi.h deleted file mode 100644 index f35fc63ca..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/interfaces/remoteconfigi.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#ifndef _DRONE_REMOTECONFIGI_H_ -#define _DRONE_REMOTECONFIGI_H_ - -#include "ardrone_server/ardrone_driver.h" -#include -#include -#include - -namespace remoteconfig{ - class RemoteConfigI: virtual public jderobot::remoteConfig { - public: - RemoteConfigI(ARDroneDriver *driver); - virtual ~RemoteConfigI(); - virtual Ice::Int initConfiguration(const Ice::Current&); - virtual std::string read(Ice::Int id, const Ice::Current&); - virtual Ice::Int write(const std::string& data, Ice::Int id, const Ice::Current&); - virtual Ice::Int setConfiguration(Ice::Int id, const Ice::Current&); - private: - std::ofstream f2; - int idLocal; - std::string path; - ARDroneDriver *driver; - }; -} -#endif diff --git a/src/drivers/ardrone_server/include/ardrone_server/teleop_twist.h b/src/drivers/ardrone_server/include/ardrone_server/teleop_twist.h deleted file mode 100644 index 40950c6a4..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/teleop_twist.h +++ /dev/null @@ -1,64 +0,0 @@ -/** -Software License Agreement (BSD) -\file teleop_twist.h -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#ifndef _TELEOP_TWIST_H_ -#define _TELEOP_TWIST_H_ -// -#include "ardrone_sdk.h" -#include - -#define _EPS 1.0e-6 - -extern input_device_t teleop; - -void setCMDVel(jderobot::CMDVelDataPtr cmd); -void drone_land(); -void drone_reset(); -void drone_takeoff(); -bool drone_toggleCam(); -bool record_video(bool record); -bool setLedAnimation(int type, float duration, float req); -bool drone_flatTrim(); -bool setFlightAnimation(int type, float duration); - - -//All global drone configs that should be sent on init - -#define DEFAULT_CAM_STATE 0 -#define DEFAULT_NAVDATA_DEMO 0 - -extern int cam_state; -extern int set_navdata_demo_value; -extern int32_t detect_enemy_color; -extern int32_t detect_groundstripes_color; -extern int32_t detect_indoor_hull; //1: Indoor Hull -extern int32_t detect_dtype; -extern int32_t detect_hori_type; -extern int32_t detect_vert_type; -extern int32_t detect_disable_placeholder; -extern int32_t detect_enable_placeholder; - - -#endif - diff --git a/src/drivers/ardrone_server/include/ardrone_server/video.h b/src/drivers/ardrone_server/include/ardrone_server/video.h deleted file mode 100644 index c0620ce1e..000000000 --- a/src/drivers/ardrone_server/include/ardrone_server/video.h +++ /dev/null @@ -1,67 +0,0 @@ -/** -Software License Agreement (BSD) -\file video.h -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#ifndef _VIDEO_H_ -#define _VIDEO_H_ - -#include "ardrone_sdk.h" -#include - -// The maximum memory allocation -#define MAX_STREAM_WIDTH 640 -#define MAX_STREAM_HEIGHT 360 - -/** Drone 1 */ - -// Drone 1 Static Stream Size & PIP Stuff -// PIP is not supported in AR-Drone SDK 2.0 -#define D1_STREAM_WIDTH 320 -#define D1_STREAM_HEIGHT 240 - -//Vertical Camera standalone -#define D1_VERTSTREAM_WIDTH 174 -#define D1_VERTSTREAM_HEIGHT 144 - -// Vertical Camera in PIP -#define D1_MODE2_PIP_WIDTH 87 //Huh? -#define D1_MODE2_PIP_HEIGHT 72 - -//Horizontal Camera in PIP -#define D1_MODE3_PIP_WIDTH 58 -#define D1_MODE3_PIP_HEIGHT 42 - -/** Drone 2 */ - -// NO PIP, Both camera streams provide the same reseloution: Simple! -#define D2_STREAM_WIDTH 640 -#define D2_STREAM_HEIGHT 360 - -extern video_com_multisocket_config_t icc; -extern const vp_api_stage_funcs_t vp_stages_export_funcs; -extern unsigned char buffer[]; // size STREAM_WIDTH * STREAM_HEIGHT * 3 -extern long int current_frame_id; // this will be incremented for every frame -extern long int current_navdata_id; - -#endif - diff --git a/src/drivers/ardrone_server/slice/navdatagps.ice b/src/drivers/ardrone_server/slice/navdatagps.ice deleted file mode 100644 index 68fd852ab..000000000 --- a/src/drivers/ardrone_server/slice/navdatagps.ice +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Victor Arribas Raigadas <.varribas.urjc@gmail.com> - */ - -#ifndef ARDRONE_NAVDATAGPS_ICE -#define ARDRONE_NAVDATAGPS_ICE - -/* -byte 8 bits -short 16 bits -int 32 bits -long 64 bits -*/ - -//module jderobot{ -module ardrone { - - const byte MaxNumChannels = 12; - - struct SatelliteInfo{ - byte satID; /* Satellite ID */ - byte carrierToNoiseRatio; /* Satellite C/N0 */ - }; - sequence Satellites; - - struct NavdataGPSData - { - short tag; - short size; - double latitude; - double longitude; - double elevation; - double hdop; - int dataAvailable; - bool zeroValidated; - bool wptValidated; - double lat0; - double long0; - double latFused; - double longFused; - - int gpsState; - - float Xtraj; - float Xref; - float Ytraj; - float Yref; - - float thetaP; - float phiP; - float thetaI; - float phiI; - float thetaD; - float phiD; - - double vdop; - double pdop; - - float speed; - int lastFrameTimestamp; - float degree; - float degreeMagnetic; - float ehpe; - float ehve; - - float channelsNoiseRatio; /* Signal to noise ratio (average of the four best satellites) */ - int nbsat; /* Number of acquired satellites */ - Satellites channels; - - bool isGpsPlugged; - int ephemerisStatus; - - float vxTraj; - float vyTraj; - - - int firmwareStatus; - - }; - - interface NavdataGPS { - idempotent NavdataGPSData getNavdataGPS(); - }; - - -//}; //ardrone -}; //jderobot -#endif diff --git a/src/drivers/ardrone_server/src/ardrone_config.cpp b/src/drivers/ardrone_server/src/ardrone_config.cpp deleted file mode 100644 index b925a3a19..000000000 --- a/src/drivers/ardrone_server/src/ardrone_config.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/ardrone_config.h" - -ArDroneConfig::ArDroneConfig() -{ - //ctor -} - -ArDroneConfig::~ArDroneConfig() -{ - //dtor -} - -void ArDroneConfig::clearParameters() -{ - parameters.clear(); -} -bool ArDroneConfig::setParameterValue(std::string key, double value) -{ - std::pair::iterator,bool> ret; - ret=parameters.insert(std::pair(key,value)); - if(ret.second==false){ - return false; - } -#ifdef ARDRONE_TEST_PARSER - std::cout << "PUT Parameter: " << key << " value: " << value << std::endl; -#endif - return true; -} -double ArDroneConfig::getParameterValue(std::string key) -{ - std::map::iterator it; - it=parameters.find(key); - if(it==parameters.end()){ - return -1; - } -#ifdef ARDRONE_TEST_PARSER - std::cout << "GET Parameter: " << key << " value: " << it->second << std::endl; -#endif - return it->second; -} -std::vector ArDroneConfig::getValuesAsArray() -{ - std::vector values; - for(std::map::const_iterator it=parameters.begin(); it!=parameters.end(); ++it) - { - values.push_back(it->second); - } - return values; -} -std::vector ArDroneConfig::getParametersAsArray() -{ - std::vector values; - for(std::map::const_iterator it=parameters.begin(); it!=parameters.end(); ++it) - { - values.push_back(it->first); - } - return values; -} - -void ArDroneConfig::printParameters() -{ - std::vector keys=this->getParametersAsArray(); - - - for(std::vector::size_type i = 0; i != keys.size(); i++) { - std::string key=keys[i]; - std::cout << key << " = "<< this->getParameterValue(key) << std::endl; - - } -} - diff --git a/src/drivers/ardrone_server/src/ardrone_driver.cpp b/src/drivers/ardrone_server/src/ardrone_driver.cpp deleted file mode 100644 index 3a28cbfa8..000000000 --- a/src/drivers/ardrone_server/src/ardrone_driver.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/ardrone_driver.h" -#include "ardrone_server/interfaces/pose3di.h" -#include "ardrone_server/interfaces/remoteconfigi.h" -#include "ardrone_server/interfaces/cameraserver.cpp" /// FOUND A VERY DANGEROUS PROBLEM HERE -#include "ardrone_server/interfaces/navdatai.h" -#include "ardrone_server/interfaces/cmdveli.h" -#include "ardrone_server/interfaces/ardroneextrai.h" -#include "ardrone_server/interfaces/navdatagpsi.h" -#include -#include "easyiceconfig/EasyIce.h" - - -ARDroneDriver::ARDroneDriver() -{ - - parser= ArDroneParser(); - conf=new ArDroneConfig(); - inited = false; - last_tm=0.0; - record_usb=false; -} - -ARDroneDriver::~ARDroneDriver() -{ - delete conf; -} - -void ARDroneDriver::run() -{ - - boost::posix_time::ptime startTime=boost::posix_time::second_clock::local_time(); - float dt=0.005; - while(true) - { - boost::posix_time::ptime loop_start_time=boost::posix_time::microsec_clock::local_time(); - - if(!inited) - { - boost::posix_time::ptime initiedTime=boost::posix_time::second_clock::local_time(); - boost::posix_time::time_duration inited_duration = initiedTime - startTime; - - if(inited_duration.total_seconds()>5.0){ - inited=true; - std::cout << "Initied!!" << std::endl; - - - vp_os_mutex_lock(&navdata_lock); - PRINT("Successfully connected to '%s' (AR-Drone %d.0 - Firmware: %s) - Battery(\%): %d\n", - ardrone_control_config.ardrone_name, - (IS_ARDRONE1) ? 1 : 2, - ardrone_control_config.num_version_soft, - shared_raw_navdata->navdata_demo.vbat_flying_percentage); - PRINT("Navdata Publish Settings:\n"); - PRINT(" Drone Navdata Send Speed: %s\n", ardrone_application_default_config.navdata_demo==0 ? "200Hz (navdata_demo=0)" : "15Hz (navdata_demo=1)\n"); - - vp_os_mutex_unlock(&navdata_lock); - - if (ardrone_control_config.num_version_soft[0] == '0') - { - PRINT("The AR-Drone has a suspicious Firmware number. It usually means the network link is unreliable.\n"); - } - - } - - - }else{ - - vp_os_mutex_lock(&navdata_lock); - navdata_unpacked_t navdata_raw = *shared_raw_navdata; - vp_os_mutex_unlock(&navdata_lock); - - if(!realtime_video) - { - //De momento no se plantea - } - - if(!realtime_navdata) - { - //De momento no se plantea - - } - } - - //looprate - boost::posix_time::ptime loop_finish_time=boost::posix_time::microsec_clock::local_time(); - boost::posix_time::time_duration loop_diff = loop_finish_time - loop_start_time; - - - if(loop_diff.total_milliseconds() > LOOPRATE) - { - loop_diff=boost::posix_time::milliseconds(0); - }else{ - loop_diff=boost::posix_time::milliseconds(looprate-loop_diff.total_milliseconds()); - } - dt=loop_diff.total_milliseconds(); - usleep(loop_diff.total_microseconds()); - if(should_exit==1) - break; - } - ic->shutdown(); - std::cout << "finish ardrone_server" << std::endl; -} - -bool ARDroneDriver::parseConfigFile(char* filepath) -{ - std::string file(filepath); - if(parser.readFile(file,conf)==-1) - return false; - else - return true; -} - -double ARDroneDriver::getParameter(char* param, double defaultVal) -{ - std::string name(param); - double value=conf->getParameterValue(name); - if(value==-1) - { - return defaultVal; - } - return value; -} - -void ARDroneDriver::configureDrone(char* configFile) -{ - if(!this->parseConfigFile(configFile)) - std::cerr << "Config file not found!! Establising default values." << std::endl; - - - float eulerMax=this->getParameter("euler_angle_max",0.21); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(euler_angle_max, &eulerMax, NULL); - - int set_navdata_demo_value = this->getParameter("navdata_demo",DEFAULT_NAVDATA_DEMO); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(navdata_demo, &set_navdata_demo_value, NULL); - cam_state=this->getParameter("video_channel",DEFAULT_CAM_STATE); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(video_channel, &cam_state, NULL); - int altMax=this->getParameter("altitude_max",3000); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(altitude_max, &altMax, NULL); - int altMin=this->getParameter("altitude_min",50); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(altitude_min, &altMin, NULL); - - float vzMax=this->getParameter("control_vz_max",700); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(control_vz_max, &vzMax, NULL); - float yawSpeed=this->getParameter("control_yaw",1.75); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(control_yaw, &yawSpeed, NULL); - int isOutdoor=this->getParameter("outdoor",1); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(outdoor, &isOutdoor, NULL); - int withoutShell=this->getParameter("flight_without_shell",0); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(flight_without_shell, &withoutShell, NULL); - int frameSize=this->getParameter("bitrate",4000); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(bitrate, &frameSize, NULL); - int maxframeSize=this->getParameter("max_bitrate",4000); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(max_bitrate, &maxframeSize, NULL); - - int detect_type=this->getParameter("detect_type",10); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(detect_type, &detect_type, NULL); - - int detections_h=this->getParameter("detections_select_h",32); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(detections_select_h, &detections_h, NULL); - - int detections_v=this->getParameter("detections_select_v_hsync",128); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(detections_select_v_hsync, &detections_v, NULL); - - /* - * Orange Green : 1 - * Orange Yellow: 2 - * Orange Blue: 3 - */ - - int enemy_colors=this->getParameter("enemy_colors",3); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(enemy_colors, &enemy_colors, NULL); - - int enemy_shell=this->getParameter("enemy_without_shell",0); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(enemy_without_shell, &enemy_shell, NULL); - -} - -void ARDroneDriver::initIce(int argc, char** argv) -{ - ic = EasyIce::initialize(argc, argv); -} - -Ice::CommunicatorPtr ARDroneDriver::getCommunicator() -{ - return ic; -} - -void ARDroneDriver::initInterfaces() -{ - try{ - Ice::PropertiesPtr prop = ic->getProperties(); - - //Interface camera - std::string CameraEndpoints = prop->getProperty("ArDrone.Camera.Endpoints"); - Ice::ObjectAdapterPtr adapterCamera =ic->createObjectAdapterWithEndpoints("ArDroneCameraServer", CameraEndpoints); - std::string cameraName = prop->getProperty("ArDrone.Camera.Name"); - Ice::ObjectPtr object = new cameraserver::CameraI("ArDrone.Camera.", ic); - adapterCamera->add(object, ic->stringToIdentity(cameraName)); - adapterCamera->activate(); - //Interface pose3D - std::string pose3DName = prop->getProperty("ArDrone.Pose3D.Name"); - std::string Pose3DEndpoints = prop->getProperty("ArDrone.Pose3D.Endpoints"); - Ice::ObjectAdapterPtr adapterPose3D =ic->createObjectAdapterWithEndpoints("ArDronePose3D", Pose3DEndpoints); - Ice::ObjectPtr pose3DO =new pose3D::Pose3DI(this); - adapterPose3D->add(pose3DO,ic->stringToIdentity(pose3DName)); - adapterPose3D->activate(); - //Interface remoteConfig - std::string remoteName = prop->getProperty("ArDrone.RemoteConfig.Name"); - std::string remoteEndpoints = prop->getProperty("ArDrone.RemoteConfig.Endpoints"); - Ice::ObjectAdapterPtr adapterremote =ic->createObjectAdapterWithEndpoints("ArDroneRemoteConfig",remoteEndpoints); - Ice::ObjectPtr remoteO =new remoteconfig::RemoteConfigI(this); - adapterremote->add(remoteO,ic->stringToIdentity(remoteName)); - adapterremote->activate(); - //Interface Navdata - std::string navName = prop->getProperty("ArDrone.Navdata.Name"); - std::string navEndpoints = prop->getProperty("ArDrone.Navdata.Endpoints"); - Ice::ObjectAdapterPtr adapternav =ic->createObjectAdapterWithEndpoints("ArDroneNavdata",navEndpoints); - Ice::ObjectPtr navO =new navdata::NavdataI(); - adapternav->add(navO,ic->stringToIdentity(navName)); - adapternav->activate(); - //Interface CMDVel - std::string cmdName = prop->getProperty("ArDrone.CMDVel.Name"); - std::string cmdEndpoints = prop->getProperty("ArDrone.CMDVel.Endpoints"); - Ice::ObjectAdapterPtr adaptercmd =ic->createObjectAdapterWithEndpoints("ArDroneCMDVel",cmdEndpoints); - Ice::ObjectPtr cmdO =new cmdvel::CMDVelI(); - adaptercmd->add(cmdO,ic->stringToIdentity(cmdName)); - adaptercmd->activate(); - //Interface Extra - std::string extraName = prop->getProperty("ArDrone.Extra.Name"); - std::string extraEndpoints = prop->getProperty("ArDrone.Extra.Endpoints"); - Ice::ObjectAdapterPtr adapterextra =ic->createObjectAdapterWithEndpoints("ArDroneExtra",extraEndpoints); - Ice::ObjectPtr extraO =new ardrone_extra::ExtraI(); - adapterextra->add(extraO,ic->stringToIdentity(extraName)); - adapterextra->activate(); - //Interface NavdataGPS - std::string gpsName = prop->getProperty("ArDrone.NavdataGPS.Name"); - if (!gpsName.empty()){ - Ice::ObjectAdapterPtr adapternavGPS =ic->createObjectAdapter("ArDrone.NavdataGPS"); - Ice::ObjectPtr navGPSO = new ardrone_server::interfaces::NavdataGPSI(); - adapternavGPS->add(navGPSO,ic->stringToIdentity(gpsName)); - adapternavGPS->activate(); - } - - }catch (const Ice::Exception& ex) { - std::cerr << ex << std::endl; - should_exit = 1; - exit(-1); - } catch (const char* msg) { - std::cerr << msg << std::endl; - should_exit = 1; - exit(-1); - } -} - -void controlCHandler (int signal) -{ - should_exit = 1; -} -//////////////////////////////////////////////////////////////////////////////// -// custom_main -//////////////////////////////////////////////////////////////////////////////// - -int main(int argc, char** argv) -{ - C_RESULT res = C_FAIL; - char * drone_ip_address = NULL; - - jdeDriver = new ARDroneDriver(); - - - signal (SIGABRT, &controlCHandler); - signal (SIGTERM, &controlCHandler); - signal (SIGINT, &controlCHandler); - - - // Configure wifi - vp_com_wifi_config_t *config = (vp_com_wifi_config_t*)wifi_config(); - - if(config) - { - vp_os_memset( &wifi_ardrone_ip[0], 0, ARDRONE_IPADDRESS_SIZE ); - - // TODO: Check if IP is valid - if(drone_ip_address){ - printf("===================+> %s\n", drone_ip_address); - strncpy( &wifi_ardrone_ip[0], drone_ip_address, ARDRONE_IPADDRESS_SIZE - 1); - }else{ - printf("===================+> %s\n", config->server); - strncpy( &wifi_ardrone_ip[0], config->server, ARDRONE_IPADDRESS_SIZE - 1); - } - } - - while (-1 == getDroneVersion (".", wifi_ardrone_ip, &ardroneVersion)){ - printf ("Getting AR.Drone version ...\n"); - vp_os_delay (250); - } - - // Setup communication channels - res = ardrone_tool_setup_com( NULL ); - if( FAILED(res) ){ - PRINT("Wifi initialization failed. It means either:\n"); - PRINT("\t* you're not root (it's mandatory because you can set up wifi connection only as root)\n"); - PRINT("\t* wifi device is not present (on your pc or on your card)\n"); - PRINT("\t* you set the wrong name for wifi interface (for example rausb0 instead of wlan0) \n"); - PRINT("\t* ap is not up (reboot card or remove wifi usb dongle)\n"); - PRINT("\t* wifi device has no antenna\n"); - }else{ - // setup the application and user profiles for the driver - - jdeDriver->initIce(argc,argv); - char* appname = (char*) DRIVER_APPNAME; - char* usrname = (char*) DRIVER_USERNAME; - ardrone_gen_appid (appname, "2.0", app_id, app_name, APPLI_NAME_SIZE); - ardrone_gen_usrid (usrname, usr_id, usr_name, USER_NAME_SIZE); - - // and finally initialize everything! - // this will then call our sdk, which then starts the ::run() method of this file as an ardrone client thread - - res = ardrone_tool_init(wifi_ardrone_ip, strlen(wifi_ardrone_ip), NULL, app_name, usr_name, NULL, NULL, MAX_FLIGHT_STORING_SIZE, NULL); - - - while( SUCCEED(res) && ardrone_tool_exit() == FALSE ){ - res = ardrone_tool_update(); - } - res = ardrone_tool_shutdown(); - } - - return SUCCEED(res) ? 0 : -1; -} - - diff --git a/src/drivers/ardrone_server/src/ardrone_parser.cpp b/src/drivers/ardrone_server/src/ardrone_parser.cpp deleted file mode 100644 index 2ee1fef8a..000000000 --- a/src/drivers/ardrone_server/src/ardrone_parser.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/ardrone_parser.h" -#include - -using namespace boost; -using namespace boost::property_tree; - - -std::string float2string(float number) -{ - std::stringstream ss; - ss << number; - return ss.str(); -} - - -float string2float(std::string val) -{ - float temp; - std::istringstream(val) >> temp; - return temp; -} - - - -ArDroneParser::ArDroneParser() -{ - - -} - -ArDroneParser::ArDroneParser(int id) -{ - //ctor - this->id=id; -} - -ArDroneParser::~ArDroneParser() -{ - //dtor -} - - -const ptree& empty_ptree(){ - static ptree t; - return t; -} - -void ArDroneParser::writeFile(std::string filepath,ArDroneConfig *conf) -{ - using boost::property_tree::ptree; - ptree pt; - - boost::property_tree::ptree rootNode; - - std::vector keys=conf->getParametersAsArray(); - for(std::vector::size_type i = 0; i != keys.size(); i++) { - std::string key=keys[i]; - boost::property_tree::ptree node; - node.put(".name", key); - node.put(".value", float2string(conf->getParameterValue(key))); - rootNode.add_child("param",node); - } - rootNode.put(".name", "ardrone_server"); - pt.add_child("component", rootNode); - boost::property_tree::xml_writer_settings settings('\t', 1); - write_xml(filepath, pt, std::locale(), settings); -} - -int ArDroneParser::readFile(std::string filepath,ArDroneConfig *conf) -{ - - ptree tree; - read_xml(filepath, tree); - const ptree & formats = tree.get_child("component", empty_ptree()); - BOOST_FOREACH(const ptree::value_type & f, formats){ - std::string at = f.first + ATTR_SET; - std::string name,value; - const ptree & attributes = f.second.get_child("", empty_ptree()); - - BOOST_FOREACH(const ptree::value_type &v, attributes){ - std::string first(v.first.data()); - if(first.compare("name")==0) - { - name=v.second.data(); - } - if(first.compare("value")==0) - { - value=v.second.data(); - conf->setParameterValue(name,string2float(value)); - } - } - } - -} diff --git a/src/drivers/ardrone_server/src/ardrone_sdk.cpp b/src/drivers/ardrone_server/src/ardrone_sdk.cpp deleted file mode 100644 index 67be02b4e..000000000 --- a/src/drivers/ardrone_server/src/ardrone_sdk.cpp +++ /dev/null @@ -1,232 +0,0 @@ -/** -Software License Agreement (BSD) -\file ardrone_sdk.cpp -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#include "ardrone_server/ardrone_sdk.h" -#include "ardrone_server/teleop_twist.h" -#include "ardrone_server/video.h" - -navdata_unpacked_t *shared_raw_navdata; - - -vp_os_mutex_t navdata_lock; -vp_os_mutex_t video_lock; -vp_os_mutex_t twist_lock; - -long int current_navdata_id = 0; - -ARDroneDriver* jdeDriver; - -Ice::CommunicatorPtr ic; -int32_t looprate; -bool realtime_navdata; -bool realtime_video; - -int32_t should_exit; - -extern "C" { - vp_stages_latency_estimation_config_t vlat; - - - DEFINE_THREAD_ROUTINE(update_jde, data) - { - PRINT("Thread `update_jde` started \n "); - ARDroneDriver* driver = (ARDroneDriver *) data; - driver->run(); - return (THREAD_RET) 0; - } - - C_RESULT ardrone_tool_init_custom(void) - { - should_exit = 0; - vp_os_mutex_init(&navdata_lock); - vp_os_mutex_init(&video_lock); - vp_os_mutex_init(&twist_lock); - - //jdeDriver = new ARDroneDriver(); - int _w, _h; - - if (IS_ARDRONE2) - { - ardrone_application_default_config.video_codec = H264_360P_CODEC; - _w = D2_STREAM_WIDTH; - _h = D2_STREAM_HEIGHT; - } - else if (IS_ARDRONE1) - { - ardrone_application_default_config.video_codec = UVLC_CODEC; - _w = D1_STREAM_WIDTH; - _h = D1_STREAM_HEIGHT; - - } - else - { - printf("Something must be really wrong with the SDK!"); - } - - - realtime_navdata=false; - realtime_video=false; - looprate=LOOPRATE; - // SET SOME NON-STANDARD DEFAULT VALUES FOR THE DRIVER - // THESE CAN BE OVERWRITTEN BY ROS PARAMETERS (below) - ardrone_application_default_config.bitrate_ctrl_mode = VBC_MODE_DISABLED; - if (IS_ARDRONE2) - { - ardrone_application_default_config.max_bitrate = 4000; - } - - ardrone_application_default_config.navdata_options = NAVDATA_OPTION_FULL_MASK; - ardrone_application_default_config.video_channel = ZAP_CHANNEL_HORI; - ardrone_application_default_config.control_level = (0 << CONTROL_LEVEL_COMBINED_YAW); - ardrone_application_default_config.flying_mode = FLYING_MODE_FREE_FLIGHT; - - jdeDriver->configureDrone((char*)CONFIG_FILE_PATH); - cam_state=jdeDriver->getParameter("video_channel",0); - - char buffer[MULTICONFIG_ID_SIZE+1]; - - sprintf(buffer,"-%s",usr_id); - printf("Deleting Profile %s\n",buffer); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT (profile_id, buffer, NULL); - - sprintf(buffer,"-%s",app_id); - printf("Deleting Application %s\n",buffer); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT (application_id, buffer, NULL); - - // Now continue with the rest of the initialization - - ardrone_tool_input_add(&teleop); - uint8_t post_stages_index = 0; - - //Alloc structs - specific_parameters_t * params = (specific_parameters_t *)vp_os_calloc(1,sizeof(specific_parameters_t)); - specific_stages_t * driver_pre_stages = (specific_stages_t*)vp_os_calloc(1, sizeof(specific_stages_t)); - specific_stages_t * driver_post_stages = (specific_stages_t*)vp_os_calloc(1, sizeof(specific_stages_t)); - vp_api_picture_t * in_picture = (vp_api_picture_t*) vp_os_calloc(1, sizeof(vp_api_picture_t)); - vp_api_picture_t * out_picture = (vp_api_picture_t*) vp_os_calloc(1, sizeof(vp_api_picture_t)); - - in_picture->width = _w; - in_picture->height = _h; - - out_picture->framerate = 20; - out_picture->format = PIX_FMT_RGB24; - out_picture->width = _w; - out_picture->height = _h; - - out_picture->y_buf = (uint8_t*) vp_os_malloc( _w * _h * 3 ); - out_picture->cr_buf = NULL; - out_picture->cb_buf = NULL; - - out_picture->y_line_size = _w * 3; - out_picture->cb_line_size = 0; - out_picture->cr_line_size = 0; - - //Alloc the lists - driver_pre_stages->stages_list = NULL; - driver_post_stages->stages_list = (vp_api_io_stage_t*)vp_os_calloc(NB_DRIVER_POST_STAGES,sizeof(vp_api_io_stage_t)); - - - driver_post_stages->stages_list[post_stages_index].name = "ExtractData"; - driver_post_stages->stages_list[post_stages_index].type = VP_API_OUTPUT_SDL; - driver_post_stages->stages_list[post_stages_index].cfg = NULL; - driver_post_stages->stages_list[post_stages_index++].funcs = vp_stages_export_funcs; - - driver_pre_stages->length = 0; - driver_post_stages->length = post_stages_index; - - params->in_pic = in_picture; - params->out_pic = out_picture; - params->pre_processing_stages_list = driver_pre_stages; - params->post_processing_stages_list = driver_post_stages; - params->needSetPriority = 1; - params->priority = 31; - // Using the provided threaded pipeline implementation from SDK - START_THREAD(video_stage, params); - video_stage_init(); - if (ARDRONE_VERSION() >= 2) - { - START_THREAD (video_recorder, NULL); - video_recorder_init (); - video_recorder_resume_thread(); - } - // Threads do not start automatically - video_stage_resume_thread(); - ardrone_tool_set_refresh_time(25); - //jdeDriver->configure_drone(); - - - jdeDriver->initInterfaces(); - START_THREAD(update_jde, jdeDriver); - return C_OK; - } - - C_RESULT ardrone_tool_shutdown_custom() - { - PRINT("Shutting down ... \n "); - JOIN_THREAD(update_jde); - delete jdeDriver; - video_stage_resume_thread(); - ardrone_tool_input_remove(&teleop); - return C_OK; - } - - C_RESULT navdata_custom_init(void *) { - return C_OK; - } - - C_RESULT navdata_custom_process(const navdata_unpacked_t * const pnd) { - vp_os_mutex_lock(&navdata_lock); - - shared_raw_navdata = (navdata_unpacked_t*)pnd; - - vp_os_mutex_unlock(&navdata_lock); - return C_OK; - } - - C_RESULT navdata_custom_release() { - return C_OK; - } - - bool_t ardrone_tool_exit() { - return (should_exit == 1); - } - - BEGIN_THREAD_TABLE - THREAD_TABLE_ENTRY(video_stage, 31) - THREAD_TABLE_ENTRY(update_jde, 43) - THREAD_TABLE_ENTRY(video_recorder, 20) - THREAD_TABLE_ENTRY(navdata_update, 31) - // THREAD_TABLE_ENTRY(ATcodec_Commands_Client, 43) - THREAD_TABLE_ENTRY(ardrone_control, 31) - END_THREAD_TABLE - - BEGIN_NAVDATA_HANDLER_TABLE - NAVDATA_HANDLER_TABLE_ENTRY( - navdata_custom_init, - navdata_custom_process, - navdata_custom_release, - NULL) - END_NAVDATA_HANDLER_TABLE -} - diff --git a/src/drivers/ardrone_server/src/interfaces/ardroneextrai.cpp b/src/drivers/ardrone_server/src/interfaces/ardroneextrai.cpp deleted file mode 100644 index b8ae147e6..000000000 --- a/src/drivers/ardrone_server/src/interfaces/ardroneextrai.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/interfaces/ardroneextrai.h" - -namespace ardrone_extra -{ - - ExtraI::ExtraI() - { - std::cout << "extra start" << std::endl; - } - - ExtraI::~ExtraI() - { - - } - - void ExtraI::toggleCam(Ice::Current const & c) - { - drone_toggleCam(); - } - void ExtraI::land(Ice::Current const & c) - { - drone_land(); - } - - void ExtraI::takeoff(Ice::Current const & c) - { - drone_takeoff(); - } - - void ExtraI::reset(Ice::Current const & c) - { - drone_reset(); - } - - void ExtraI::recordOnUsb(bool record, Ice::Current const & c) - { - if (IS_ARDRONE2){ - record_video(record); - } - } - - void ExtraI::ledAnimation(Ice::Int type, Ice::Float duration, Ice::Float freq, Ice::Current const & c) - { - setLedAnimation(type, duration, freq); - } - - void ExtraI::flightAnimation(Ice::Int type, Ice::Float duration, Ice::Current const & c) - { - if (IS_ARDRONE2){ - setFlightAnimation(type,duration); - } - - } - - void ExtraI::flatTrim(Ice::Current const & c) - { - drone_flatTrim(); - } -} diff --git a/src/drivers/ardrone_server/src/interfaces/cmdveli.cpp b/src/drivers/ardrone_server/src/interfaces/cmdveli.cpp deleted file mode 100644 index af40c6a29..000000000 --- a/src/drivers/ardrone_server/src/interfaces/cmdveli.cpp +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/interfaces/cmdveli.h" - -namespace cmdvel -{ - CMDVelI::CMDVelI() - { - std::cout << "cmdvel start" << std::endl; - - } - - CMDVelI::~CMDVelI() - { - - } - - Ice::Int CMDVelI::setCMDVelData(jderobot::CMDVelDataPtr const & data, Ice::Current const & c) - { - setCMDVel(data); - } -} - - - diff --git a/src/drivers/ardrone_server/src/interfaces/navdatagpsi.cpp b/src/drivers/ardrone_server/src/interfaces/navdatagpsi.cpp deleted file mode 100644 index 1addbbdba..000000000 --- a/src/drivers/ardrone_server/src/interfaces/navdatagpsi.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Victor Arribas Raigadas <.varribas.urjc@gmail.com> - */ - -#include "ardrone_server/interfaces/navdatagpsi.h" - - -using namespace ardrone_server::interfaces; - - -NavdataGPSI::NavdataGPSI() -{ - std::cout << "navdatagps start" << std::endl; - memset(&gpsdata_defaults_, 0, sizeof(ardrone::NavdataGPSData)); - gpsdata_defaults_.channels = ardrone::Satellites(ardrone::MaxNumChannels); - assert(sizeof(ardrone::SatelliteInfo) == sizeof(uint8_t)*2); -} - -NavdataGPSI::~NavdataGPSI() -{ - std::cout << "navdatagps end" << std::endl; -} - -ardrone::NavdataGPSData NavdataGPSI::getNavdataGPS(Ice::Current const & /*c*/) -{ - vp_os_mutex_lock(&navdata_lock); - navdata_unpacked_t navdata_raw = *shared_raw_navdata; - vp_os_mutex_unlock(&navdata_lock); - - ardrone::NavdataGPSData gpsdata = gpsdata_defaults_; - - gpsdata.tag = navdata_raw.navdata_gps_info.tag; - gpsdata.size = navdata_raw.navdata_gps_info.size; - gpsdata.latitude = navdata_raw.navdata_gps_info.latitude; - gpsdata.longitude = navdata_raw.navdata_gps_info.longitude; - gpsdata.elevation = navdata_raw.navdata_gps_info.elevation; - gpsdata.hdop = navdata_raw.navdata_gps_info.hdop; - gpsdata.dataAvailable = navdata_raw.navdata_gps_info.data_available; - gpsdata.zeroValidated = navdata_raw.navdata_gps_info.zero_validated; - gpsdata.wptValidated = navdata_raw.navdata_gps_info.wpt_validated; - gpsdata.lat0 = navdata_raw.navdata_gps_info.lat0; - gpsdata.long0 = navdata_raw.navdata_gps_info.long0; - gpsdata.latFused = navdata_raw.navdata_gps_info.lat_fused; - gpsdata.longFused = navdata_raw.navdata_gps_info.long_fused; - gpsdata.gpsState = navdata_raw.navdata_gps_info.gps_state; - gpsdata.Xtraj = navdata_raw.navdata_gps_info.X_traj; - gpsdata.Xref = navdata_raw.navdata_gps_info.X_ref; - gpsdata.Ytraj = navdata_raw.navdata_gps_info.Y_traj; - gpsdata.Yref = navdata_raw.navdata_gps_info.Y_ref; - gpsdata.thetaP = navdata_raw.navdata_gps_info.theta_p; - gpsdata.phiP = navdata_raw.navdata_gps_info.phi_p; - gpsdata.thetaI = navdata_raw.navdata_gps_info.theta_i; - gpsdata.phiI = navdata_raw.navdata_gps_info.phi_i; - gpsdata.thetaD = navdata_raw.navdata_gps_info.theta_d; - gpsdata.phiD = navdata_raw.navdata_gps_info.phi_d; - gpsdata.vdop = navdata_raw.navdata_gps_info.vdop; - gpsdata.pdop = navdata_raw.navdata_gps_info.pdop; - gpsdata.speed = navdata_raw.navdata_gps_info.speed; - gpsdata.lastFrameTimestamp = navdata_raw.navdata_gps_info.lastFrameTimestamp; - gpsdata.degree = navdata_raw.navdata_gps_info.degree; - gpsdata.degreeMagnetic = navdata_raw.navdata_gps_info.degree_magnetic; - gpsdata.ehpe = navdata_raw.navdata_gps_info.ehpe; - gpsdata.ehve = navdata_raw.navdata_gps_info.ehve; - gpsdata.channelsNoiseRatio = navdata_raw.navdata_gps_info.c_n0; - gpsdata.nbsat = navdata_raw.navdata_gps_info.nbsat; - memcpy(gpsdata.channels.data(), &(navdata_raw.navdata_gps_info.channels[0]), ardrone::MaxNumChannels*sizeof(ardrone::SatelliteInfo)); //TODO: keep an eye on it! - gpsdata.isGpsPlugged = navdata_raw.navdata_gps_info.is_gps_plugged; - gpsdata.ephemerisStatus = navdata_raw.navdata_gps_info.ephemerisStatus; - gpsdata.vxTraj = navdata_raw.navdata_gps_info.vx_traj; - gpsdata.vyTraj = navdata_raw.navdata_gps_info.vy_traj; - gpsdata.firmwareStatus = navdata_raw.navdata_gps_info.firmwareStatus; - -// for (int i=0; i - */ - -#include "ardrone_server/interfaces/navdatai.h" - -namespace navdata -{ - NavdataI::NavdataI() - { - std::cout << "navdata start" << std::endl; - data=new jderobot::NavdataData(); - last_navdata_id = -1; - // Fill constant parts of IMU Message - // If no rosparam is set then the default value of 0.0 will be assigned to all covariance values - - for (int i = 0; i < 9; i++) - { - - } - readCovParams(); - - - // Caliberation - max_num_samples = 50; - /*do_caliberation = (ros::param::get("~do_imu_caliberation", do_caliberation)) ? do_caliberation : false; - if (do_caliberation) { - resetCaliberation(); - ROS_WARN("Automatic IMU Caliberation is active."); - }*/ - } - NavdataI::~NavdataI() - { - - } - jderobot::NavdataDataPtr NavdataI::getNavdata(Ice::Current const & c) - { - - vp_os_mutex_lock(&navdata_lock); - navdata_unpacked_t navdata_raw = *shared_raw_navdata; - vp_os_mutex_unlock(&navdata_lock); - - if ((do_caliberation) && (!caliberated)) - { - /*acc_samples[0].push_back(navdata_raw.navdata_phys_measures.phys_accs[ACC_X]); - acc_samples[1].push_back(navdata_raw.navdata_phys_measures.phys_accs[ACC_Y]); - acc_samples[2].push_back(navdata_raw.navdata_phys_measures.phys_accs[ACC_Z]); - gyro_samples[0].push_back(navdata_raw.navdata_phys_measures.phys_gyros[GYRO_X]); - gyro_samples[1].push_back(navdata_raw.navdata_phys_measures.phys_gyros[GYRO_Y]); - gyro_samples[2].push_back(navdata_raw.navdata_phys_measures.phys_gyros[GYRO_Z]); - vel_samples[0].push_back(navdata_raw.navdata_demo.vx); - vel_samples[1].push_back(navdata_raw.navdata_demo.vy); - vel_samples[2].push_back(navdata_raw.navdata_demo.vz); - if (acc_samples[0].size() == max_num_samples) - { - for (int j = 0; j < 3; j++) - { - acc_bias[j] = calcAverage(acc_samples[j]); - gyro_bias[j] = calcAverage(gyro_samples[j]); - vel_bias[j] = calcAverage(vel_samples[j]); - } - - caliberated = true; - }*/ - } - if ((do_caliberation) && (caliberated)) - { - /*for (int j = 0; j < 3; j++) - { - if (j != 2) navdata_raw.navdata_phys_measures.phys_accs[j] -= acc_bias[j]; - navdata_raw.navdata_phys_measures.phys_gyros[j] -= gyro_bias[j]; - } - navdata_raw.navdata_demo.vx -= vel_bias[0]; - navdata_raw.navdata_demo.vy -= vel_bias[1]; - navdata_raw.navdata_demo.vz -= vel_bias[2];*/ - } - - if (IS_ARDRONE2){ - data->vehicle=1; - }else{ - data->vehicle=0; - } - - data->batteryPercent=navdata_raw.navdata_demo.vbat_flying_percentage; - data->state = (navdata_raw.navdata_demo.ctrl_state >> 16); - - data->rotX = navdata_raw.navdata_demo.phi / 1000.0; // tilt left/right - data->rotY = -navdata_raw.navdata_demo.theta / 1000.0; // tilt forward/backward - data->rotZ = -navdata_raw.navdata_demo.psi / 1000.0; // orientation - - data->altd = navdata_raw.navdata_demo.altitude; // cm - data->vx = navdata_raw.navdata_demo.vx; // mm/sec - data->vy = -navdata_raw.navdata_demo.vy; // mm/sec - data->vz = -navdata_raw.navdata_demo.vz; // mm/sec - - data->tm = (navdata_raw.navdata_time.time & 0x001FFFFF) + (navdata_raw.navdata_time.time >> 21)*1000000; - data->ax = navdata_raw.navdata_phys_measures.phys_accs[ACC_X] / 1000.0; // g - data->ay = -navdata_raw.navdata_phys_measures.phys_accs[ACC_Y] / 1000.0; // g - data->az = -navdata_raw.navdata_phys_measures.phys_accs[ACC_Z] / 1000.0; // g - - // New stuff - if (IS_ARDRONE2) - { - data->magX = (int32_t)navdata_raw.navdata_magneto.mx; - data->magY = (int32_t)navdata_raw.navdata_magneto.my; - data->magZ = (int32_t)navdata_raw.navdata_magneto.mz; - - data->pressure = navdata_raw.navdata_pressure_raw.Pression_meas; // typo in the SDK! - data->temp = navdata_raw.navdata_pressure_raw.Temperature_meas; - - data->windSpeed = navdata_raw.navdata_wind_speed.wind_speed; - data->windAngle = navdata_raw.navdata_wind_speed.wind_angle; - data->windCompAngle = navdata_raw.navdata_wind_speed.wind_compensation_phi; - } - else - { - data->magX = data->magY = data->magZ = 0; - data->pressure = 0.0; - data->temp = 0.0; - data->windSpeed = 0.0; - data->windAngle = 0.0; - data->windCompAngle = 0.0; - } - - // Tag Detection, need to clear vectors first because it's a member variable now - data->tagsType.clear(); - data->tagsXc.clear(); - data->tagsYc.clear(); - data->tagsWidth.clear(); - data->tagsHeight.clear(); - data->tagsOrientation.clear(); - data->tagsDistance.clear(); - - - data->tagsCount = navdata_raw.navdata_vision_detect.nb_detected; - for (int i = 0; i < navdata_raw.navdata_vision_detect.nb_detected; i++) - { - /* - * The tags_type is in raw format. In order to extract the information - * macros from ardrone_api.h is needed. - * - * #define DETECTION_MAKE_TYPE(source,tag) ( ((source)<<16) | (tag) ) - * #define DETECTION_EXTRACT_SOURCE(type) ( ((type)>>16) & 0x0FF ) - * #define DETECTION_EXTRACT_TAG(type) ( (type) & 0x0FF ) - * - * Please also note that the xc, yc, width and height are in [0,1000] range - * and must get converted back based on image resolution. - */ - data->tagsType.push_back(navdata_raw.navdata_vision_detect.type[i]); - - data->tagsXc.push_back(navdata_raw.navdata_vision_detect.xc[i]); - data->tagsYc.push_back(navdata_raw.navdata_vision_detect.yc[i]); - data->tagsWidth.push_back(navdata_raw.navdata_vision_detect.width[i]); - data->tagsHeight.push_back(navdata_raw.navdata_vision_detect.height[i]); - data->tagsOrientation.push_back(navdata_raw.navdata_vision_detect.orientation_angle[i]); - data->tagsDistance.push_back(navdata_raw.navdata_vision_detect.dist[i]); - } - - /* IMU */ - /*imu_msg.header.frame_id = droneFrameBase; - imu_msg.header.stamp = navdata_receive_time;*/ - - // IMU - Linear Acc - /*imu_msg.linear_acceleration.x = legacynavdata_msg.ax * 9.8; - imu_msg.linear_acceleration.y = legacynavdata_msg.ay * 9.8; - imu_msg.linear_acceleration.z = legacynavdata_msg.az * 9.8;*/ - - // IMU - Rotation Matrix - - - // IMU - Gyro (Gyro is being sent in deg/sec) - // TODO: Should Gyro be added to Navdata? - /*imu_msg.angular_velocity.x = navdata_raw.navdata_phys_measures.phys_gyros[GYRO_X] * DEG_TO_RAD; - imu_msg.angular_velocity.y = -navdata_raw.navdata_phys_measures.phys_gyros[GYRO_Y] * DEG_TO_RAD; - imu_msg.angular_velocity.z = -navdata_raw.navdata_phys_measures.phys_gyros[GYRO_Z] * DEG_TO_RAD; - - mag_msg.header.frame_id = droneFrameBase; - mag_msg.header.stamp = navdata_receive_time; - const float mag_normalizer = sqrt( legacynavdata_msg.magX * legacynavdata_msg.magX + legacynavdata_msg.magY * legacynavdata_msg.magY + legacynavdata_msg.magZ * legacynavdata_msg.magZ );*/ - - // TODO: Check if it is really needed that magnetometer message includes normalized value - return data; - } - - bool NavdataI::readCovParams() - { - return false; - } - double NavdataI::calcAverage(std::vector &vec) - { - double ret = 0.0; - for (unsigned int i = 0; i < vec.size(); i++) - { - ret += vec.at(i); - } - return (ret / vec.size()); - } - - void NavdataI::resetCaliberation() - { - caliberated = false; - acc_samples.clear(); - gyro_samples.clear(); - vel_samples.clear(); - for (int i = 0; i < 3; i++) - { - acc_bias[i] = 0.0; - vel_bias[i] = 0.0; - gyro_bias[i] = 0.0; - acc_samples.push_back(std::vector ()); - gyro_samples.push_back(std::vector ()); - vel_samples.push_back(std::vector ()); - } - } -} diff --git a/src/drivers/ardrone_server/src/interfaces/pose3di.cpp b/src/drivers/ardrone_server/src/interfaces/pose3di.cpp deleted file mode 100644 index 6d477cf7d..000000000 --- a/src/drivers/ardrone_server/src/interfaces/pose3di.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - * Victor Arribas Raigadas - */ - -#include "ardrone_server/interfaces/pose3di.h" -#include - - -namespace { - /// Weak cartesian calculation based on Spherical Coordinates. - /// See: - /// * https://en.wikipedia.org/wiki/Spherical_coordinate_system - /// * https://en.wikipedia.org/wiki/Flattening - /// * http://gis.stackexchange.com/questions/23793/how-do-i-calculate-a-xyz-position-of-a-gps-position-relative-to-an-other-gps-pos# - /// * http://geographiclib.sourceforge.net/cgi-bin/GeodSolve - - #define deg2rad(x) (PI*(x)/180.0) /* from grades to radians */ - #define wgs84_radius 6378137 - #define wgs84_flattening (1 - 1/298.257223563) - - void spherical2cartesian(double lat, double lon, double alt, double &x, double &y, double &z){ - lat = deg2rad(lat); - lon = deg2rad(lon); - double r = wgs84_radius + alt; - x = r*cos(lat)*cos(lon); - y = r*cos(lat)*sin(lon); - z = r*sin(lat)*wgs84_flattening; - } -} - -namespace { - typedef Eigen::Quaternion quat; - Eigen::Quaternion qFromRPY(float roll, float pitch, float yaw){ - quat q; - Eigen::AngleAxis aaZ( yaw, Eigen::Vector3f::UnitZ()); - Eigen::AngleAxis aaY( pitch, Eigen::Vector3f::UnitY()); - Eigen::AngleAxis aaX( roll, Eigen::Vector3f::UnitX()); - q = aaZ * aaY * aaX; - return q; - } -} - - -namespace pose3D -{ - Pose3DI::Pose3DI(ARDroneDriver *driver): - driver(driver), - gps_on(false), gps_valid(false), gps_is_bootstrapped(false) - { - std::cout << "pose3d start" << std::endl; - pose3D = new jderobot::Pose3DData(0,0,0,0, 0,0,0,0); - xyzT = {0,0,0}; - qR.setIdentity(); - } - - Pose3DI::~Pose3DI() - { - - } - - jderobot::Pose3DDataPtr Pose3DI::getPose3DData(const Ice::Current&) - { - vp_os_mutex_lock(&navdata_lock); - navdata_unpacked_t navdata_raw = *shared_raw_navdata; - vp_os_mutex_unlock(&navdata_lock); - - pose3d_t xyz = {0,0,0}; - pose3d_t angles = {0,0,0}; - - /// Get orientation - angles.roll = deg2rad( navdata_raw.navdata_demo.phi / 1000.0); - angles.pitch = deg2rad(-navdata_raw.navdata_demo.theta / 1000.0); - angles.yaw = deg2rad(-navdata_raw.navdata_demo.psi / 1000.0); - - /// Get GPS position - bool is_gps_plugged = navdata_raw.navdata_gps_info.is_gps_plugged; - uint32_t firmwareStatus = navdata_raw.navdata_gps_info.firmwareStatus; - uint32_t gps_state = navdata_raw.navdata_gps_info.gps_state; - float64_t latitude = navdata_raw.navdata_gps_info.latitude; - float64_t longitude = navdata_raw.navdata_gps_info.longitude; - float64_t elevation = navdata_raw.navdata_gps_info.elevation; - - /// Check GPS status - gps_on = (is_gps_plugged && firmwareStatus == 1); - gps_valid = (gps_state == 1); - - if (gps_on && gps_valid){ - spherical2cartesian(latitude, longitude, elevation, xyz.x, xyz.y, xyz.z); - - if (!gps_is_bootstrapped){ - gps_is_bootstrapped = true; - printf("GPS boostrap at %f, %f, %f\n", latitude, longitude, elevation); - - poseBoostrapWithExternals(xyz, angles); - } - } - if (!gps_on){ - if (gps_is_bootstrapped){ - gps_is_bootstrapped = false; - printf("GPS disconnected\n"); - } - } - - /// Origin base change - //Rotation - Eigen::Quaternion q = qFromRPY(angles.roll, angles.pitch, angles.yaw); - q = qR*q; - // Translation - Point3D_OP(xyz, xyz, +, xyzT); - - /// Push values - pose3D->q0=q.w(); - pose3D->q1=q.x(); - pose3D->q2=q.y(); - pose3D->q3=q.z(); - - pose3D->x = xyz.x; - pose3D->y = xyz.y; - pose3D->z = xyz.z; - pose3D->h = gps_valid? 1 : 0; - - return pose3D; - } - - - Ice::Int Pose3DI::setPose3DData(const jderobot::Pose3DDataPtr& data, const Ice::Current&) - { - - pose3D->x=data->x; - pose3D->y=data->y; - pose3D->z=data->z; - pose3D->h=data->h; - pose3D->q0=data->q0; - pose3D->q1=data->q1; - pose3D->q2=data->q2; - pose3D->q3=data->q3; - return 1; - } - - - void Pose3DI::poseBoostrapWithExternals(pose3d_t current_xyz, pose3d_t current_angles) - { - pose3d_t diff, target; - //// Compose Translation - /// Default behavior must be T={0,0,0} - target.x = driver->getParameter("origin_x", current_xyz.x); - target.y = driver->getParameter("origin_y", current_xyz.y); - target.z = driver->getParameter("origin_z", current_xyz.z); - Point3D_OP(diff, target, -, current_xyz); - xyzT = diff; - - //// Compose Rotation - /// Default behavior must be identity - target.roll = current_angles.roll + deg2rad(driver->getParameter("origin_roll", 0)); - target.pitch = current_angles.pitch + deg2rad(driver->getParameter("origin_pitch", 0)); - target.yaw = deg2rad(driver->getParameter("origin_yaw", current_angles.yaw)); - Point3D_OP(diff, target, -, current_angles); - qR = qFromRPY(diff.roll, diff.pitch, diff.yaw); - -#if 0 // for test purposes only - quat q_t = qFromRPY(target.roll, target.pitch, target.yaw); - quat q_c = qFromRPY(current_angles.roll, current_angles.pitch, current_angles.yaw); - quat qR2 = q_t*q_c.inverse(); - - printf("Pose3D boostrap with transforms.\n"); - printf("\t XYZ transform: %.2f, %.2f, %.2f\n", - -xyzT.x, -xyzT.y, -xyzT.z); - printf("\t Orientation transform: %.4f, %.4f, %.4f\n", - -diff.x, -diff.y, -diff.z); - - printf("qR: %.2f, %.2f, %.2f, %.2f\n", qR.x(), qR.y(), qR.z(), qR.w()); - printf("qR2: %.2f, %.2f, %.2f, %.2f\n", qR2.x(), qR2.y(), qR2.z(), qR2.w()); -#endif - } -} diff --git a/src/drivers/ardrone_server/src/interfaces/remoteconfigi.cpp b/src/drivers/ardrone_server/src/interfaces/remoteconfigi.cpp deleted file mode 100644 index 0b9a3e2ac..000000000 --- a/src/drivers/ardrone_server/src/interfaces/remoteconfigi.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Alberto Martín Florido - */ - -#include "ardrone_server/interfaces/remoteconfigi.h" -#include -#include -#include - -namespace remoteconfig{ - - RemoteConfigI::RemoteConfigI(ARDroneDriver *driver) - { - std::cout << "remoteconfig start" << std::endl; - this->driver=driver; - idLocal=0; - } - - RemoteConfigI::~RemoteConfigI() - { - delete driver; - } - - Ice::Int RemoteConfigI::initConfiguration(const Ice::Current&) - { - std::cout << "RemoteConfig: initializing" << std::endl; - if (idLocal==0){ - /* initialize random seed: */ - srand ( time(NULL) ); - - /* generate secret number: */ - idLocal = rand() + 1; - - std::stringstream ss;//create a stringstream - ss << idLocal << ".xml";//add number to the stream - - path=ss.str(); - f2.open(ss.str().c_str(), std::ofstream::out); - std::cout << "-----------------" << idLocal << std::endl; - return idLocal; - } - else - return 0; - } - - std::string RemoteConfigI::read(Ice::Int id, const Ice::Current&) - { - return std::string(""); - } - - Ice::Int RemoteConfigI::write(const std::string& data, Ice::Int id, const Ice::Current&) - { - if (id == idLocal){ - f2 << data << std::endl; - return 1; - } - else{ - return 0; - } - } - - Ice::Int RemoteConfigI::setConfiguration(Ice::Int id, const Ice::Current&) - { - if (id == idLocal){ - id=0; - idLocal=0; - f2.close(); - std::cout << "RemoteConfig: file completed" << std::endl; - driver->configureDrone((char*)path.c_str()); - - if(remove(path.c_str())!=0){ - std::cout << "RemoteConfig: Error deleting file" << std::endl; - } - return 1; - } - return 0; - } -} diff --git a/src/drivers/ardrone_server/src/teleop_twist.cpp b/src/drivers/ardrone_server/src/teleop_twist.cpp deleted file mode 100644 index 15e4a458d..000000000 --- a/src/drivers/ardrone_server/src/teleop_twist.cpp +++ /dev/null @@ -1,258 +0,0 @@ -/** -Software License Agreement (BSD) -\file teleop_twist.cpp -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#include "ardrone_server/teleop_twist.h" -#include "utils/ardrone_date.h" - -inline float max(float a, float b) { return a > b ? a : b; } -inline float min(float a, float b) { return a < b ? a : b; } - -bool needs_takeoff = false; -bool needs_land = false; -bool needs_reset = false; - -float old_left_right = -10.0; -float old_front_back = -10.0; -float old_up_down = -10.0; -float old_turn = -10.0; - -int cam_state = DEFAULT_CAM_STATE; // 0 for forward and 1 for vertical, change to enum later -int set_navdata_demo_value = DEFAULT_NAVDATA_DEMO; -int32_t detect_enemy_color = ARDRONE_DETECTION_COLOR_ORANGE_YELLOW; -int32_t detect_dtype = CAD_TYPE_MULTIPLE_DETECTION_MODE; -int32_t detect_hori_type = TAG_TYPE_MASK(TAG_TYPE_SHELL_TAG_V2); -int32_t detect_vert_type = TAG_TYPE_MASK(TAG_TYPE_BLACK_ROUNDEL); -int32_t detect_indoor_hull = 0; -int32_t detect_disable_placeholder = 0; -int32_t detect_enable_placeholder = 1; - -jderobot::CMDVelDataPtr cmd_vel=new jderobot::CMDVelData(); - -const LED_ANIMATION_IDS ledAnimMap[14] = { - BLINK_GREEN_RED, BLINK_GREEN, BLINK_RED, BLINK_ORANGE, - SNAKE_GREEN_RED, FIRE, STANDARD, RED, GREEN, RED_SNAKE,BLANK, - LEFT_GREEN_RIGHT_RED, LEFT_RED_RIGHT_GREEN, BLINK_STANDARD}; - - -bool drone_toggleCam() -{ - const int _modes = 2; - cam_state = (cam_state + 1) % _modes; - ARDRONE_TOOL_CONFIGURATION_ADDEVENT (video_channel, &cam_state, NULL); - fprintf(stderr, "Setting camera channel to : %d.\n", cam_state); - return true; -} - - -bool record_video(bool record) -{ - char record_command[ARDRONE_DATE_MAXSIZE + 64]; - int32_t new_codec; - if(record) { - char date[ARDRONE_DATE_MAXSIZE]; - time_t t = time(NULL); - // For some reason the linker can't find this, so we'll just do it manually, cutting and pasting - // ardrone_time2date(t, ARDRONE_FILE_DATE_FORMAT, date); - strftime(date, ARDRONE_DATE_MAXSIZE, ARDRONE_FILE_DATE_FORMAT, localtime(&t)); - snprintf(record_command, sizeof(record_command), "%d,%s", USERBOX_CMD_START, date); - new_codec = MP4_360P_H264_720P_CODEC; - } else { - snprintf(record_command, sizeof(record_command), "%d", USERBOX_CMD_STOP ); - new_codec = H264_360P_CODEC; - } - - vp_os_mutex_lock(&twist_lock); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT (video_codec, &new_codec, NULL ); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT (userbox_cmd, record_command, NULL ); - vp_os_mutex_unlock(&twist_lock); - - return true; -} - -bool setLedAnimation(int type, float duration, float freq) -{ - LED_ANIMATION_IDS anim_id = ledAnimMap[type % 14]; // Don't trick me - vp_os_mutex_lock(&twist_lock); - ardrone_at_set_led_animation(anim_id, (float) fabs(freq), (uint32_t) abs(duration)); - vp_os_mutex_unlock(&twist_lock); - - return true; -} - -bool setFlightAnimation(int type, float duration) -{ - char param[20]; - const int anim_type = type % ARDRONE_NB_ANIM_MAYDAY; - const int anim_duration = (duration > 0) ? duration : MAYDAY_TIMEOUT[anim_type]; - snprintf(param, sizeof (param), "%d,%d", anim_type, anim_duration); - vp_os_mutex_lock(&twist_lock); - ARDRONE_TOOL_CONFIGURATION_ADDEVENT(flight_anim, param, NULL); - vp_os_mutex_unlock(&twist_lock); - - return true; -} - -bool drone_flatTrim() -{ - vp_os_mutex_lock(&twist_lock); - ardrone_at_set_flat_trim(); - vp_os_mutex_unlock(&twist_lock); - fprintf(stderr, "\nFlat Trim Set.\n"); -} - -void setCMDVel(jderobot::CMDVelDataPtr cmd) -{ - vp_os_mutex_lock(&twist_lock); - // Main 4DOF - cmd_vel->linearX = max(min(-cmd->linearX, 1.0), -1.0); - cmd_vel->linearY = max(min(-cmd->linearY, 1.0), -1.0); - cmd_vel->linearZ = max(min(cmd->linearZ, 1.0), -1.0); - cmd_vel->angularZ = max(min(-cmd->angularZ, 1.0), -1.0); - // These 2DOF just change the auto hover behaviour - // No bound() required - cmd_vel->angularX = cmd->angularX; - cmd_vel->angularY = cmd->angularY; - vp_os_mutex_unlock(&twist_lock); -} - -void drone_land() -{ - vp_os_mutex_lock(&twist_lock); - needs_land = true; - vp_os_mutex_unlock(&twist_lock); -} - -void drone_reset() -{ - vp_os_mutex_lock(&twist_lock); - needs_reset = true; - vp_os_mutex_unlock(&twist_lock); -} - -void drone_takeoff() -{ - vp_os_mutex_lock(&twist_lock); - needs_takeoff = true; - vp_os_mutex_unlock(&twist_lock); -} -C_RESULT open_teleop(void) -{ - return C_OK; -} - -C_RESULT update_teleop(void) -{ - // This function *toggles* the emergency state, so we only want to toggle the emergency - // state when we are in the emergency state (because we want to get out of it). - vp_os_mutex_lock(&twist_lock); - if (needs_reset) - { - ardrone_tool_set_ui_pad_select(1); - needs_reset = false; - } - else if (needs_takeoff) - { - ardrone_tool_set_ui_pad_start(1); - needs_takeoff = false; - } - else if (needs_land) - { - ardrone_tool_set_ui_pad_start(0); - needs_land = false; - } - else - { - - float left_right = static_cast(cmd_vel->linearY); - if(std::fabs(left_right) == 0) //for negatives values closed to 0 - left_right = 0; - float front_back = static_cast(cmd_vel->linearX); - if(std::fabs(front_back) == 0) //for negatives values closed to 0 - front_back = 0; - float up_down = static_cast(cmd_vel->linearZ); - if(std::fabs(up_down) == 0) //for negatives values closed to 0 - up_down = 0; - float turn = static_cast(cmd_vel->angularZ); - if(std::fabs(turn) == 0) //for negatives values closed to 0 - turn = 0; - - bool is_changed = !( - (fabs(left_right - old_left_right) < _EPS) && - (fabs(front_back - old_front_back) < _EPS) && - (fabs(up_down - old_up_down) < _EPS) && - (fabs(turn - old_turn) < _EPS) - ); - - // These lines are for testing, they should be moved to configurations - // Bit 0 of control_flag == 0: should we hover? - // Bit 1 of control_flag == 1: should we use combined yaw mode? - - int32_t control_flag = 0x00; - int32_t combined_yaw = 0x00; - - // Auto hover detection based on ~0 values for 4DOF cmd_vel - int32_t hover = (int32_t) - ( - (fabs(left_right) < _EPS) && - (fabs(front_back) < _EPS) && - (fabs(up_down) < _EPS) && - (fabs(turn) < _EPS) && - // Set angular.x or angular.y to a non-zero value to disable entering hover - // even when 4DOF control command is ~0 - (fabs(cmd_vel->angularX) < _EPS) && - (fabs(cmd_vel->angularY) < _EPS) - ); - - control_flag |= ((1 - hover) << 0); - control_flag |= (combined_yaw << 1); - //ROS_INFO (">>> Control Flag: %d", control_flag); - - old_left_right = left_right; - old_front_back = front_back; - old_up_down = up_down; - old_turn = turn; - //is_changed = true; - if ((is_changed) || (hover)) - { - ardrone_tool_set_progressive_cmd(control_flag, left_right, front_back, up_down, turn, 0.0, 0.0); - } - - } - vp_os_mutex_unlock(&twist_lock); - return C_OK; -} - -C_RESULT close_teleop(void) -{ - return C_OK; -} - -input_device_t teleop = { - "Teleop", - open_teleop, - update_teleop, - close_teleop -}; - - diff --git a/src/drivers/ardrone_server/src/video.cpp b/src/drivers/ardrone_server/src/video.cpp deleted file mode 100644 index d64caace5..000000000 --- a/src/drivers/ardrone_server/src/video.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/** -Software License Agreement (BSD) -\file video.cpp -\authors Mani Monajjemi -\copyright Copyright (c) 2012, Autonomy Lab (Simon Fraser University), All rights reserved. -Redistribution and use in source and binary forms, with or without modification, are permitted provided that -the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this list of conditions and the - following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Autonomy Lab nor the names of its contributors may be used to endorse or promote - products derived from this software without specific prior written permission. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WAR- -RANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, IN- -DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -modified by: Alberto Martín Florido -*/ - -#include "ardrone_server/video.h" - -#define NB_STAGES 10 -#define CAMIF_H_CAMERA_USED CAMIF_CAMERA_OVTRULY - -unsigned char buffer[MAX_STREAM_WIDTH * MAX_STREAM_HEIGHT * 3]; -long int current_frame_id = 0; - -extern "C" C_RESULT export_stage_open( void *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) -{ - return (SUCCESS); -} - -extern "C" C_RESULT export_stage_transform( void *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) -{ - - vp_os_mutex_lock(&video_lock); - memcpy(buffer, in->buffers[0], in->size); - current_frame_id++; - vp_os_mutex_unlock(&video_lock); - return (SUCCESS); -} - -extern "C" C_RESULT export_stage_close( void *cfg, vp_api_io_data_t *in, vp_api_io_data_t *out) -{ - return (SUCCESS); -} - -const vp_api_stage_funcs_t vp_stages_export_funcs = -{ - NULL, - (vp_api_stage_open_t)export_stage_open, - (vp_api_stage_transform_t)export_stage_transform, - (vp_api_stage_close_t)export_stage_close -}; diff --git a/src/drivers/ardrone_server/test/print_gps_data.cpp b/src/drivers/ardrone_server/test/print_gps_data.cpp deleted file mode 100644 index 8332c5acc..000000000 --- a/src/drivers/ardrone_server/test/print_gps_data.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 1997-2015 JDE Developers Team - * - * 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 http://www.gnu.org/licenses/. - * Authors : - * Victor Arribas Raigadas <.varribas.urjc@gmail.com> - */ - -#include -#include -#include -#include -#include "easyiceconfig/EasyIce.h" - -#include - -void print_data(ardrone::NavdataGPSData data); - -int main(int argc, char* argv[]) { - Ice::CommunicatorPtr ic = EasyIce::initialize(argc, argv); - - //Ice::ObjectPrx prx = ic->propertyToProxy("ArDrone.NavdataGPS.Proxy"); - Ice::ObjectPrx prx = ic->stringToProxy("ardrone_navdatagps:tcp -h 0.0.0.0 -p 9993"); - if (0 == prx){ - std::cerr << "NavdataGPS configuration not specified" << std::endl; - return 1; - } - - ardrone::NavdataGPSPrx gpsprx; - try{ - gpsprx = ardrone::NavdataGPSPrx::checkedCast(prx); - }catch(Ice::ConnectFailedException e){ - std::cerr << e << std::endl; - return 2; - } - - //for(char c; std::cin >> c; c <= 0){ - while (!ic->isShutdown()){ - ardrone::NavdataGPSData data = gpsprx->getNavdataGPS(); - print_data(data); - sleep(1); - } - - ic->waitForShutdown(); - std::cout << "Ice clean exit" << std::endl; - - return 0; -} - - -void print_data(ardrone::NavdataGPSData data){ - static boost::format data_fmt( -"GPS Data\n\ -├── status:\n\ -│ ├── connected: %d\n\ -│ ├── firmware status: %d\n\ -│ ├── gps state: %d\n\ -│ └── nbsat: %d\n\ -├── COORDINATES: %.4f %.4f %.4f\n\ -├── Go Home coords: %.4f %.4f\n\ -└── timestamp: %d\n" - ); - - std::cout << data_fmt - %data.isGpsPlugged % data.firmwareStatus - % data.gpsState % data.nbsat - % data.latitude % data.longitude % data.elevation - % data.lat0 %data.long0 - % data.lastFrameTimestamp - ; -} diff --git a/src/drivers/ardrone_server/test/test_parser.cpp b/src/drivers/ardrone_server/test/test_parser.cpp deleted file mode 100644 index 0d340aace..000000000 --- a/src/drivers/ardrone_server/test/test_parser.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "../src/ardrone_config.h" -#include "../src/ardrone_parser.h" -#include - -int main(int argc, char* argv[]){ - if (argc < 2){ - printf("Usage: %s \n", argv[0]); - return 1; - } - - ArDroneConfig config; - ArDroneParser parser; - - parser.readFile(argv[1], &config); - config.printParameters(); - - return 0; -} diff --git a/src/drivers/camserver/CMakeLists.txt b/src/drivers/camserver/CMakeLists.txt deleted file mode 100644 index 36552bbb1..000000000 --- a/src/drivers/camserver/CMakeLists.txt +++ /dev/null @@ -1,43 +0,0 @@ - -SET( SOURCE_FILES camserver.cpp) - -add_definitions(-DGLADE_DIR="${gladedir}") - -include_directories( - ${INTERFACES_CPP_DIR} - ${LIBS_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${easyiceconfig_INCLUDE_DIRS} -) - -link_directories( - ${easyiceconfig_LIBRARY_DIRS} -) - -add_executable (camserver ${SOURCE_FILES}) - -TARGET_LINK_LIBRARIES(camserver - jderobotutil - ${OpenCV_LIBRARIES} - ${OpenCVGUI_LIBRARIES} - colorspacesmm - JderobotInterfaces - ${easyiceconfig_LIBRARIES} - ${ZeroCIce_LIBRARIES} - ${CMAKE_THREAD_LIBS_INIT} - ${ZLIB_LIBRARIES} - logger - crypto - ns - ${GLOG_LIBRARIES} -) - -INSTALL(TARGETS camserver - DESTINATION ${CMAKE_INSTALL_PREFIX}/bin/ - COMPONENT camserver - ) - -INSTALL (FILES ${CMAKE_CURRENT_SOURCE_DIR}/camserver.cfg - DESTINATION ${CMAKE_INSTALL_PREFIX}/share/jderobot/conf - COMPONENT camserver -) diff --git a/src/drivers/camserver/camserver.cfg b/src/drivers/camserver/camserver.cfg deleted file mode 100644 index 14ddb2ab2..000000000 --- a/src/drivers/camserver/camserver.cfg +++ /dev/null @@ -1,22 +0,0 @@ -# client/server mode -# rpc=1 ; request=0 -CameraSrv.DefaultMode=1 -CameraSrv.TopicManager=IceStorm/TopicManager:default -t 5000 -p 10000 - -#General Config -CameraSrv.Endpoints=default -h 0.0.0.0 -p 9999:ws -h 0.0.0.0 -p 11000 -CameraSrv.NCameras=1 -CameraSrv.Camera.0.Name=cameraA -#0 corresponds to /dev/video0, 1 to /dev/video1, and so on... -CameraSrv.Camera.0.Uri=0 -CameraSrv.Camera.0.FramerateN=25 -CameraSrv.Camera.0.FramerateD=1 -CameraSrv.Camera.0.Format=RGB8 -CameraSrv.Camera.0.ImageWidth=640 -CameraSrv.Camera.0.ImageHeight=480 - -# If you want a mirror image, set to 1 -CameraSrv.Camera.0.Mirror=1 - -NamingService.Enabled=0 -NamingService.Proxy=NamingServiceJdeRobot:default -h 0.0.0.0 -p 10000 diff --git a/src/drivers/camserver/camserver.cpp b/src/drivers/camserver/camserver.cpp deleted file mode 100644 index 74800a414..000000000 --- a/src/drivers/camserver/camserver.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* - * - * Copyright (C) 1997-2009 JDERobot Developers Team - * - * 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 http://www.gnu.org/licenses/. - * - * Authors : David Lobato Bravo - * Sara Marugán Alonso - * - */ - - -#include -#include -#include -#include -#include -#include - - -//Opencv -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "easyiceconfig/EasyIce.h" - -bool flag=false; /** boolean to keep a check on signal */ - -namespace camserver{ - -class CameraI: public jderobot::CameraHandler { - public: - CameraI(std::string propertyPrefix, Ice::CommunicatorPtr ic):jderobot::CameraHandler(propertyPrefix,ic){ - //we use formats acording to colorspace - std::string fmtStr = prop->getPropertyWithDefault(prefix+"Format","YUY2");//default format YUY2 - imageFmt = colorspaces::Image::Format::searchFormat(fmtStr); - if (!imageFmt) - throw "Format " + fmtStr + " unknown"; - - imageDescription->size = imageDescription->width * imageDescription->height * CV_ELEM_SIZE(imageFmt->cvType); - imageDescription->format = imageFmt->name; - - // mirror image - mirror = prop->getPropertyAsIntWithDefault(prefix+"Mirror",0); - - //fill pipeline cfg - uri = prop->getProperty(prefix+"Uri"); - framerateN = prop->getPropertyAsIntWithDefault(prefix+"FramerateN",25); - framerateD = prop->getPropertyAsIntWithDefault(prefix+"FramerateD",1); - - std::cout << "URI: " << uri << std::endl; - - if(uri.size()>3) - capture.open(uri); - else - capture.open(atoi(uri.c_str())); - - if(capture.isOpened()){ - replyTask = new ReplyTask(this, framerateN, capture, cv::Size(imageDescription->width, imageDescription->height)); - - // check client/server service mode - int rpc = prop->getPropertyAsIntWithDefault("CameraSrv.DefaultMode",1); - - if(rpc){ - rpc_mode=true; - } - else{ - // check publish/subscribe service mode - Ice::ObjectPrx obj = ic->propertyToProxy("CameraSrv.TopicManager"); - - if(obj!=0){ - // IceStorm publisher initialization - IceStorm::TopicManagerPrx topicManager = IceStorm::TopicManagerPrx::checkedCast(obj); - IceStorm::TopicPrx topic; - try{ - topic = topicManager->retrieve(cameraDescription->name); - } - catch(const IceStorm::NoSuchTopic&){ - topic = topicManager->create(cameraDescription->name); - } - Ice::ObjectPrx pub = topic->getPublisher()->ice_oneway(); - - imageConsumer=jderobot::ImageConsumerPrx::uncheckedCast(pub); - } - else{ - imageConsumer=0; - } - } - - - replyTask->start(); // my own thread - - }else{ - exit(-1); - } - - } - void getImageData_async(const jderobot::AMD_ImageProvider_getImageDataPtr& cb, const std::string& format, const Ice::Current& c){ - replyTask->pushJob(cb, format); - } - - - - private: - class ReplyTask: public jderobot::CameraTask { - public: - ReplyTask(const jderobot::Camera* camera, int fps, cv::VideoCapture& cap, cv::Size configSize):jderobot::CameraTask(camera,fps), capture(cap), configSize(configSize){ - - } - - virtual void createCustomImage(cv::Mat& image){ - cv::Mat frame; - if(!capture.isOpened()){ - exit(-1); - } - if(flag){ - capture.release(); - exit(-1); - } - - capture >> frame; - - if(!frame.data){ - capture.set(CV_CAP_PROP_POS_AVI_RATIO, 0.0); - capture >> frame; - } - cv::cvtColor(frame, frame, CV_RGB2BGR); - - if(configSize!=frame.size()) - cv::resize(frame, frame,configSize); - frame.copyTo(image); - } - - private: - cv::VideoCapture capture; - cv::Size configSize; - - }; - cv::VideoCapture capture; - - std::string uri; - int framerateN; - int framerateD; - bool rpc_mode; - - - typedef IceUtil::Handle ReplyTaskPtr; - ReplyTaskPtr replyTask; -}; - -} //namespace - - -jderobot::ns* namingService = NULL; - - -void signalHandler(int signum){ /*** signal handler to handle SIGINT signal */ - flag=true; -} - -int main(int argc, char** argv) -{ - std::vector cameras; - signal(SIGINT,signalHandler); - Ice::CommunicatorPtr ic; - try{ - ic = EasyIce::initialize(argc, argv); - - Ice::PropertiesPtr prop = ic->getProperties(); - - - - // check default service mode - /*int rpc = prop->getPropertyAsIntWithDefault("CameraSrv.DefaultMode",0); - - if(rpc!=0){ - // check publish/subscribe service mode - Ice::ObjectPrx obj = ic->propertyToProxy("CameraSrv.TopicManager"); - - if(obj==0){ - // no service mode configuration - std::cerr << "Error: camserver needs server configuration mode\n" << std::endl; - fflush(NULL); - - exit(0); - } - }*/ - - std::string Endpoints = prop->getProperty("CameraSrv.Endpoints"); - - // Naming Service - int nsActive = prop->getPropertyAsIntWithDefault("NamingService.Enabled", 0); - - if (nsActive) - { - std::string ns_proxy = prop->getProperty("NamingService.Proxy"); - try - { - namingService = new jderobot::ns(ic, ns_proxy); - } - catch (Ice::ConnectionRefusedException& ex) - { - LOG(ERROR) << "Impossible to connect with NameService!"; - exit(-1); - } - } - - int nCameras = prop->getPropertyAsInt("CameraSrv.NCameras"); - cameras.resize(nCameras); - Ice::ObjectAdapterPtr adapter =ic->createObjectAdapterWithEndpoints("CamServer", Endpoints); - for (int i=0; igetProperty(objPrefix + "Name"); - Ice::ObjectPtr object = new camserver::CameraI(objPrefix, ic); - - adapter->add(object, ic->stringToIdentity(cameraName)); - - if (namingService) - namingService->bind(cameraName, Endpoints, object->ice_staticId()); - - } - adapter->activate(); - ic->waitForShutdown(); - - }catch (const Ice::Exception& ex) { - std::cerr << ex<<" 1 " << std::endl; - exit(-1); - } catch (const char* msg) { - std::cerr << msg<< " 2 " << std::endl; - exit(-1); - } - -} diff --git a/src/drivers/camserverWeb/.DS_Store b/src/drivers/camserverWeb/.DS_Store deleted file mode 100755 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 { - // Dereference the window object, usually you would store windows - // in an array if your app supports multi windows, this is the time - // when you should delete the corresponding element. - win = null - }) -} - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on('ready', createWindow) - -// Quit when all windows are closed. -app.on('window-all-closed', () => { - // On macOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== 'darwin') { - app.quit() - } -}) - -app.on('activate', () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (win === null) { - createWindow() - } -}) diff --git a/src/drivers/camserverWeb/package-lock.json b/src/drivers/camserverWeb/package-lock.json deleted file mode 100755 index 576c5c9a3..000000000 --- a/src/drivers/camserverWeb/package-lock.json +++ /dev/null @@ -1,2222 +0,0 @@ -{ - "name": "CameraServer", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.1.tgz", - "integrity": "sha512-X/pIUOcgpX7xxKsmdPCMKeDBefsGH/4D/IuJ1gIHbqgWI0qEy/yMKeqaN/sT+rzV9UpAXAfd0kLOVExRmZrXIg==", - "dev": true - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "requires": { - "mime-types": "2.1.17", - "negotiator": "0.6.1" - } - }, - "after": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", - "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=" - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", - "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" - }, - "base64id": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", - "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "benchmark": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", - "integrity": "sha1-Lx4vpMNZ8REiqhgwgiGOlX45DHM=" - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", - "optional": true - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "bufferutil": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz", - "integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=", - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "2.8.0" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.1" - } - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "debug": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz", - "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=", - "requires": { - "ms": "0.7.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.4.tgz", - "integrity": "sha512-2f1cx0G3riMFODXFftF5AHXy+oHfhpntZHTDN66Hxtl09gmEr42B3piNEod9MEmw72f75LX2JfeYceqq1PF8cA==", - "dev": true, - "requires": { - "@types/node": "8.10.1", - "electron-download": "3.3.0", - "extract-zip": "1.6.6" - } - }, - "electron-download": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", - "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", - "dev": true, - "requires": { - "debug": "2.6.1", - "fs-extra": "0.30.0", - "home-path": "1.0.5", - "minimist": "1.2.0", - "nugget": "2.0.1", - "path-exists": "2.1.0", - "rc": "1.2.6", - "semver": "5.5.0", - "sumchecker": "1.3.1" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "engine.io": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.6.11.tgz", - "integrity": "sha1-JTOpemWHbED/z5U5e375tJXEI/4=", - "requires": { - "accepts": "1.1.4", - "base64id": "0.1.0", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "ws": "1.1.0" - }, - "dependencies": { - "accepts": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.4.tgz", - "integrity": "sha1-1xyW99QdD+2iw4zRToonwEFY30o=", - "requires": { - "mime-types": "2.0.14", - "negotiator": "0.4.9" - } - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=" - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "requires": { - "mime-db": "1.12.0" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "negotiator": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz", - "integrity": "sha1-kuRrbbU8fkIe1koryU8IvnYw3z8=" - }, - "ws": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.0.tgz", - "integrity": "sha1-wdb9FRXTzv8fCuJ1m/X9dwMKrR0=", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - } - } - }, - "engine.io-client": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.6.11.tgz", - "integrity": "sha1-fSUNj6HCGBGezeUTkEWKV9UXE3Y=", - "requires": { - "component-emitter": "1.1.2", - "component-inherit": "0.0.3", - "debug": "2.2.0", - "engine.io-parser": "1.2.4", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.1", - "parseqs": "0.0.2", - "parseuri": "0.0.4", - "ws": "1.0.1", - "xmlhttprequest-ssl": "1.5.1", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "ws": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.0.1.tgz", - "integrity": "sha1-fQsqLljN3YGQOcKcneZQReGzEOk=", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - } - } - }, - "engine.io-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.2.4.tgz", - "integrity": "sha1-4Il7C/FOeS1M0qWVBVORnFaUjEI=", - "requires": { - "after": "0.8.1", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.2", - "blob": "0.0.4", - "has-binary": "0.1.6", - "utf8": "2.1.0" - }, - "dependencies": { - "has-binary": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", - "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter2": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-2.2.2.tgz", - "integrity": "sha1-QH6nHCAgzVdTggOrfnpr3Pt2ktU=" - }, - "express": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.2.tgz", - "integrity": "sha1-rxB/wUhQRFfy3Kmm8lcdcSm5ezU=", - "requires": { - "accepts": "1.3.4", - "array-flatten": "1.1.1", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.1", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.0.6", - "fresh": "0.5.0", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.5", - "qs": "6.4.0", - "range-parser": "1.2.0", - "send": "0.15.1", - "serve-static": "1.12.1", - "setprototypeof": "1.0.3", - "statuses": "1.3.1", - "type-is": "1.6.15", - "utils-merge": "1.0.0", - "vary": "1.1.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extract-zip": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", - "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", - "dev": true, - "requires": { - "concat-stream": "1.6.0", - "debug": "2.6.9", - "mkdirp": "0.5.0", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "dev": true, - "requires": { - "pend": "1.2.0" - } - }, - "finalhandler": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", - "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.17" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "getusermedia": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/getusermedia/-/getusermedia-2.0.1.tgz", - "integrity": "sha1-+Br5eVvFk0ZJgT99CS3WUDCzRlU=", - "requires": { - "webrtc-adapter": "2.1.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "requires": { - "isarray": "0.0.1" - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, - "home-path": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", - "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=", - "dev": true - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "ipaddr.js": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", - "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", - "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "mesh": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mesh/-/mesh-1.1.3.tgz", - "integrity": "sha1-mEtb79EBVrSo3NF7Oe8k7q/qv0Y=", - "requires": { - "obj-stream": "0.0.23", - "sift": "1.1.1", - "xtend": "4.0.1" - }, - "dependencies": { - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" - }, - "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" - }, - "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "requires": { - "mime-db": "1.30.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" - }, - "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", - "optional": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.1" - } - }, - "nugget": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", - "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", - "dev": true, - "requires": { - "debug": "2.6.1", - "minimist": "1.2.0", - "pretty-bytes": "1.0.4", - "progress-stream": "1.2.0", - "request": "2.85.0", - "single-line-log": "1.1.2", - "throttleit": "0.0.2" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "obj-stream": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/obj-stream/-/obj-stream-0.0.23.tgz", - "integrity": "sha1-irMv+AMmx7EDN9Vips81Qr5fEB0=", - "requires": { - "protoclass": "0.0.6" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parsejson": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", - "integrity": "sha1-mxDGwNglq1ieaFFTgm3go7oni8w=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.2.tgz", - "integrity": "sha1-nf5wss3aw4i95PNbHyQPpYrb5sc=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", - "integrity": "sha1-gGWCo5iH4eoY3V4v4OAZAiaOk1A=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pngparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pngparse/-/pngparse-2.0.1.tgz", - "integrity": "sha1-hoUt5N40n077HoUudSVlXlrF37g=" - }, - "pretty-bytes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", - "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", - "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", - "dev": true, - "requires": { - "speedometer": "0.1.4", - "through2": "0.2.3" - } - }, - "protoclass": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/protoclass/-/protoclass-0.0.6.tgz", - "integrity": "sha1-10C75oRNEBpLZcXFxD2T50N4OR8=" - }, - "proxy-addr": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", - "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.4.0" - } - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "rc": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", - "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", - "dev": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - }, - "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "ros": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ros/-/ros-1.0.4.tgz", - "integrity": "sha1-qmOwCIsfLXRf0M+yV/eeDibmK6c=", - "requires": { - "mesh": "1.1.3", - "obj-stream": "0.0.23", - "xtend": "4.0.1" - }, - "dependencies": { - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - } - } - }, - "roslib": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/roslib/-/roslib-0.20.0.tgz", - "integrity": "sha512-hH76Hc5ag8DMK+oxjQmtPQv/H6BD1LXxJux+tGnz8Yt2ITwoihw5ghWNmV+vJ05CjkJsC0kzWQCSimX3pnpyWA==", - "requires": { - "eventemitter2": "2.2.2", - "object-assign": "4.1.1", - "pngparse": "2.0.1", - "socket.io": "1.4.8", - "ws": "1.1.5", - "xmldom": "0.1.27" - } - }, - "roslibjs-client": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/roslibjs-client/-/roslibjs-client-0.2.1.tgz", - "integrity": "sha1-og5lA6xRWBJysX8h1q9lzSmeRVE=", - "requires": { - "bluebird": "3.5.1", - "eventemitter2": "4.1.2", - "roslib": "git+https://github.com/milvusrobotics/roslibjs.git#3ec62eb2bb4bf50276963481536e11bc3bf97ffb" - }, - "dependencies": { - "eventemitter2": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", - "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=" - }, - "roslib": { - "version": "git+https://github.com/milvusrobotics/roslibjs.git#3ec62eb2bb4bf50276963481536e11bc3bf97ffb", - "requires": { - "eventemitter2": "1.0.5", - "object-assign": "4.1.1", - "pngparse": "2.0.1", - "ws": "0.8.1", - "xmldom": "0.1.27" - }, - "dependencies": { - "eventemitter2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-1.0.5.tgz", - "integrity": "sha1-+YNhBRexc3wLncZDvsqTiTwE3xg=" - } - } - }, - "ws": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-0.8.1.tgz", - "integrity": "sha1-a2UnO5kZPF8Gekz1gJWY93fjt1k=", - "requires": { - "bufferutil": "1.2.1", - "options": "0.0.6", - "ultron": "1.0.2", - "utf-8-validate": "1.2.2" - } - } - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "sdp": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz", - "integrity": "sha1-jgOPbdsUvXZa4fS1IW4SCUUR4NA=" - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "send": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.1.tgz", - "integrity": "sha1-igI1TCbm9cynAAZfXwzeupDse18=", - "requires": { - "debug": "2.6.1", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.0", - "http-errors": "1.6.2", - "mime": "1.3.4", - "ms": "0.7.2", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.3.1" - } - }, - "serve-static": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.1.tgz", - "integrity": "sha1-dEOpZePO1kes61Y5+ga/TRu+ADk=", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.15.1" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - }, - "sift": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-1.1.1.tgz", - "integrity": "sha1-5hycQzrsqrGxcTxrs/VQvr8jRrQ=" - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "single-line-log": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", - "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", - "dev": true, - "requires": { - "string-width": "1.0.2" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.2.1" - } - }, - "socket.io": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.4.8.tgz", - "integrity": "sha1-5XbzMM0L7WTlWz/SbfmRFBiEhns=", - "requires": { - "debug": "2.2.0", - "engine.io": "1.6.11", - "has-binary": "0.1.7", - "socket.io-adapter": "0.4.0", - "socket.io-client": "1.4.8", - "socket.io-parser": "2.2.6" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "socket.io-adapter": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz", - "integrity": "sha1-+5+CqxqmUpC/csNleVW5MKmRok8=", - "requires": { - "debug": "2.2.0", - "socket.io-parser": "2.2.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - }, - "socket.io-parser": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.2.tgz", - "integrity": "sha1-PXr2tkSX6Va32f53X5mXFgJ/lBc=", - "requires": { - "benchmark": "1.0.0", - "component-emitter": "1.1.2", - "debug": "0.7.4", - "isarray": "0.0.1", - "json3": "3.2.6" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" - } - } - } - } - }, - "socket.io-client": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.4.8.tgz", - "integrity": "sha1-SBskHnPfFA6hpPsDSGqFrQl/VVg=", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.0", - "debug": "2.2.0", - "engine.io-client": "1.6.11", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.4", - "socket.io-parser": "2.2.6", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.0.tgz", - "integrity": "sha1-zNETqGOI0GSC0D3j/H35hSa6jv4=" - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "socket.io-parser": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.2.6.tgz", - "integrity": "sha1-ON/WHfUNz4qx2eIJEyK/kCuii5k=", - "requires": { - "benchmark": "1.0.0", - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } - } - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "sumchecker": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", - "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", - "dev": true, - "requires": { - "debug": "2.6.1", - "es6-promise": "4.2.4" - } - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "through2": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", - "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", - "dev": true, - "requires": { - "readable-stream": "1.1.14", - "xtend": "2.1.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.17" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "utf-8-validate": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz", - "integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=", - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "2.4.0" - }, - "dependencies": { - "nan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", - "optional": true - } - } - }, - "utf8": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.0.tgz", - "integrity": "sha1-DP7FyAUtRKI+OqqQgQToB1+V39U=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "webrtc-adapter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-2.1.0.tgz", - "integrity": "sha1-YStbxs6Oc8nQZgA4oh+SVahnvz4=", - "requires": { - "sdp": "1.5.4" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "xmldom": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", - "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" - }, - "xmlhttprequest-ssl": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz", - "integrity": "sha1-O3dB/qSoZnWXbpCNKW1ERZYfqmc=" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "requires": { - "object-keys": "0.4.0" - } - }, - "yaml": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-0.3.0.tgz", - "integrity": "sha1-wxphbQes28IBLXOmulsbC90YWn8=" - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "dev": true, - "requires": { - "fd-slicer": "1.0.1" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - } - } -} diff --git a/src/drivers/camserverWeb/package.json b/src/drivers/camserverWeb/package.json deleted file mode 100755 index b81068014..000000000 --- a/src/drivers/camserverWeb/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "CamServerWeb", - "version": "0.1.0", - "main": "main.js", - "scripts": { - "start": "electron ." - }, - "devDependencies": { - "electron": "^1.8.4", - "js-yaml": "^3.10.0" - }, - "dependencies": { - "jquery": "^3.3.1" - } -} diff --git a/src/drivers/camserverWeb/public/config.yml b/src/drivers/camserverWeb/public/config.yml deleted file mode 100755 index e2b55b8ed..000000000 --- a/src/drivers/camserverWeb/public/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -serv: - dir: "localhost" - port: "9090" -topic: '/usb_cam/image_raw/compressed' -msgs: "sensor_msgs/CompressedImage" -fps: 20 diff --git a/src/drivers/camserverWeb/public/css/bootstrap.min.css b/src/drivers/camserverWeb/public/css/bootstrap.min.css deleted file mode 100755 index a5f95e37f..000000000 --- a/src/drivers/camserverWeb/public/css/bootstrap.min.css +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=5c9895f0d94dc160deb5) - * Config saved to config.json and https://gist.github.com/5c9895f0d94dc160deb5 - *//*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#58d9ff;background-color:#333}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#fbfbfb;text-decoration:none}a:hover,a:focus{color:#d5d5d5;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#333;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#285f8f}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#285f8f}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:992px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#333}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#58d9ff;border:0;border-bottom:1px solid #58d9ff}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #58d9ff;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#d8f6ff}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#ccc;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#ccc;background-color:#333;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#ccc;background-color:#1a1a1a;border-color:#8c8c8c}.btn-default:hover{color:#ccc;background-color:#1a1a1a;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#ccc;background-color:#1a1a1a;border-color:#adadad}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#ccc;background-color:#080808;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#333;border-color:#ccc}.btn-default .badge{color:#333;background-color:#ccc}.btn-primary{color:#337ab7;background-color:#333;border-color:#337ab7}.btn-primary:focus,.btn-primary.focus{color:#337ab7;background-color:#1a1a1a;border-color:#173853}.btn-primary:hover{color:#337ab7;background-color:#1a1a1a;border-color:#265a87}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#337ab7;background-color:#1a1a1a;border-color:#265a87}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#337ab7;background-color:#080808;border-color:#173853}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#333;border-color:#337ab7}.btn-primary .badge{color:#333;background-color:#337ab7}.btn-success{color:#5cb85c;background-color:#333;border-color:#5cb85c}.btn-success:focus,.btn-success.focus{color:#5cb85c;background-color:#1a1a1a;border-color:#2d672d}.btn-success:hover{color:#5cb85c;background-color:#1a1a1a;border-color:#419641}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#5cb85c;background-color:#1a1a1a;border-color:#419641}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#5cb85c;background-color:#080808;border-color:#2d672d}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#333;border-color:#5cb85c}.btn-success .badge{color:#333;background-color:#5cb85c}.btn-info{color:#58d9ff;background-color:#333;border-color:#58d9ff}.btn-info:focus,.btn-info.focus{color:#58d9ff;background-color:#1a1a1a;border-color:#00a6d8}.btn-info:hover{color:#58d9ff;background-color:#1a1a1a;border-color:#1bcbff}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#58d9ff;background-color:#1a1a1a;border-color:#1bcbff}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#58d9ff;background-color:#080808;border-color:#00a6d8}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#333;border-color:#58d9ff}.btn-info .badge{color:#333;background-color:#58d9ff}.btn-warning{color:#f0ad4e;background-color:#333;border-color:#f0ad4e}.btn-warning:focus,.btn-warning.focus{color:#f0ad4e;background-color:#1a1a1a;border-color:#b06d0f}.btn-warning:hover{color:#f0ad4e;background-color:#1a1a1a;border-color:#eb9316}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#f0ad4e;background-color:#1a1a1a;border-color:#eb9316}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#f0ad4e;background-color:#080808;border-color:#b06d0f}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#333;border-color:#f0ad4e}.btn-warning .badge{color:#333;background-color:#f0ad4e}.btn-danger{color:#d9534f;background-color:#333;border-color:#d9534f}.btn-danger:focus,.btn-danger.focus{color:#d9534f;background-color:#1a1a1a;border-color:#8b211e}.btn-danger:hover{color:#d9534f;background-color:#1a1a1a;border-color:#c12e2a}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#d9534f;background-color:#1a1a1a;border-color:#c12e2a}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#d9534f;background-color:#080808;border-color:#8b211e}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#333;border-color:#d9534f}.btn-danger .badge{color:#333;background-color:#d9534f}.btn-link{color:#fbfbfb;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#d5d5d5;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:992px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#333;border:1px solid #58d9ff;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#58d9ff}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#58d9ff;border-color:#fbfbfb}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #58d9ff}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#58d9ff #58d9ff #58d9ff}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#58d9ff;background-color:#333;border:1px solid #58d9ff;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #58d9ff}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #58d9ff;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#333}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #58d9ff}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #58d9ff;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#333}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:992px){.navbar{border-radius:6px}}@media (min-width:992px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:992px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:992px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:992px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:992px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:992px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:992px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:991px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:992px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:991px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:992px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:6px;border-top-left-radius:6px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:992px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:992px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fbfbfb;border-color:#58d9ff}.navbar-default .navbar-brand{color:#58d9ff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#25cdff;background-color:transparent}.navbar-default .navbar-text{color:#58d9ff}.navbar-default .navbar-nav>li>a{color:#58d9ff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#25cdff;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#fbfbfb;background-color:#58d9ff}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#58d9ff}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#e2e2e2}.navbar-default .navbar-toggle .icon-bar{background-color:#58d9ff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#58d9ff}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#58d9ff;color:#fbfbfb}@media (max-width:991px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#58d9ff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#25cdff;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fbfbfb;background-color:#58d9ff}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#58d9ff}.navbar-default .navbar-link:hover{color:#25cdff}.navbar-default .btn-link{color:#58d9ff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#25cdff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#333;border-color:#58d9ff}.navbar-inverse .navbar-brand{color:#58d9ff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#0cc8ff;background-color:transparent}.navbar-inverse .navbar-text{color:#58d9ff}.navbar-inverse .navbar-nav>li>a{color:#58d9ff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#0cc8ff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fbfbfb;background-color:#333}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#58d9ff}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:arken(#fbfbfb, 10%)}.navbar-inverse .navbar-toggle .icon-bar{background-color:#58d9ff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#212121}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#333;color:#fbfbfb}@media (max-width:991px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#58d9ff}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#58d9ff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#58d9ff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#0cc8ff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fbfbfb;background-color:#333}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#58d9ff}.navbar-inverse .navbar-link:hover{color:#0cc8ff}.navbar-inverse .btn-link{color:#58d9ff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#0cc8ff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#fbfbfb;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#d5d5d5;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#285f8f}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#58d9ff}.label-info[href]:hover,.label-info[href]:focus{background-color:#25cdff}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#fbfbfb;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#333;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#fbfbfb}.thumbnail .caption{padding:9px;color:#58d9ff}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#58d9ff}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#333;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#333;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#58d9ff}.panel-info>.panel-heading{color:#58d9ff;background-color:#333;border-color:#58d9ff}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#58d9ff}.panel-info>.panel-heading .badge{color:#333;background-color:#58d9ff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#58d9ff}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#333;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #58d9ff}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #58d9ff}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}} \ No newline at end of file diff --git a/src/drivers/camserverWeb/public/css/cameraserver.css b/src/drivers/camserverWeb/public/css/cameraserver.css deleted file mode 100755 index 217edd1a5..000000000 --- a/src/drivers/camserverWeb/public/css/cameraserver.css +++ /dev/null @@ -1,128 +0,0 @@ -/*azul: #58D9FF - naranja: #e67e22 - blanco: #FBFBFB - carbon: #333333 -*/ - -/* -@btn-success-color #fff -@btn-success-bg @brand-success -@btn-success-border darken(@btn-success-bg, 5%) -@btn-info-color #fff -@btn-info-bg @brand-info -@btn-info-border darken(@btn-info-bg, 5%) -*/ - -#body{ width: inherit; -} - -.color-light, .input-group-addon{ -/* color:#eee;*/ - color:#58D9FF; -} -.border-light{ - border-style: solid; - border-color: #eee; - border-width: 2px; -} - -.padding0 { - padding: 0px 0px 0px 0px; -} - -.letrero{ - padding: 2px 15px; -} - -.border-carbon{ - border-color: #333; -} -.border-blue{ - border: 1px solid #58D9FF; -} - -.row{ - margin-bottom: 3px; -} - -.width100{ - width:100%; -} -.right{ - text-align: right; -} - -.row { - margin-bottom: 10px; - -} - - -/* toggle button navbar*/ -.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus, -.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus { - background-color: #58D9FF; -} - -.navbar-default .navbar-toggle:hover .icon-bar, .navbar-default .navbar-toggle:focus .icon-bar, -.navbar-inverse .navbar-toggle:hover .icon-bar, .navbar-inverse .navbar-toggle:focus .icon-bar{ - background-color: #FBFBFB; -} - -.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form { - border-color: #58D9FF; -} - -.nav-tabs li a{ - color: #58D9FF; -} -.nav-tabs li a:hover{ - color: #333; -} - -.nav-tabs li.active a{ - color: #FBFBFB; -} - -/* Buttons */ - -.btn-success:hover{ - background-color: #5cb85c; - color: #FBFBFB; - -} -.btn-info:hover{ - background-color: #58D9FF; - color: #FBFBFB; - -} -.btn-warning:hover{ - background-color: #f0ad4e; - color: #FBFBFB; - -} -.btn-danger:hover{ - background-color: #d9534f; - color: #FBFBFB; - -} -.btn-primary:hover{ - background-color: #337ab7; - color: #FBFBFB; - -} - -@media (max-width: 767px) { - -} -@media (min-width: 768px) and (max-width: 991px) { - -} - -@media (min-width: 992px) and (max-width: 1199px) { - -} - -@media (min-width: 1200px) { - -} diff --git a/src/drivers/camserverWeb/public/css/fondo.png b/src/drivers/camserverWeb/public/css/fondo.png deleted file mode 100755 index de12b6cab68e42a6616fc071ac6b256fe2b3cb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1549 zcmeAS@N?(olHy`uVBq!ia0y~yU}9omV4TbWBpI%Left1NF&8^|hH!9j+J}##rKaW;XXKZ>XWnnez`(k|)5S5QV$R#EhKvjfJO>O8 zT>4Y(e5_B6>(|$FXBZc}%4KKRaFUJTQVxT{*->gV2u4%EXhs+<3+PuI+F4{W?>AYS SQ3ov089ZJ6T-G@yGywpmvgi!} diff --git a/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.eot b/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.eot deleted file mode 100755 index b93a4953fff68df523aa7656497ee339d6026d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20127 zcma%hV{j!vx9y2-`@~L8?1^pLwlPU2wr$&<*tR|KBoo`2;LUg6eW-eW-tKDb)vH%` z^`A!Vd<6hNSRMcX|Cb;E|1qflDggj6Kmr)xA10^t-vIc3*Z+F{r%|K(GyE^?|I{=9 zNq`(c8=wS`0!RZy0g3{M(8^tv41d}oRU?8#IBFtJy*9zAN5dcxqGlMZGL>GG%R#)4J zDJ2;)4*E1pyHia%>lMv3X7Q`UoFyoB@|xvh^)kOE3)IL&0(G&i;g08s>c%~pHkN&6 z($7!kyv|A2DsV2mq-5Ku)D#$Kn$CzqD-wm5Q*OtEOEZe^&T$xIb0NUL}$)W)Ck`6oter6KcQG9Zcy>lXip)%e&!lQgtQ*N`#abOlytt!&i3fo)cKV zP0BWmLxS1gQv(r_r|?9>rR0ZeEJPx;Vi|h1!Eo*dohr&^lJgqJZns>&vexP@fs zkPv93Nyw$-kM5Mw^{@wPU47Y1dSkiHyl3dtHLwV&6Tm1iv{ve;sYA}Z&kmH802s9Z zyJEn+cfl7yFu#1^#DbtP7k&aR06|n{LnYFYEphKd@dJEq@)s#S)UA&8VJY@S2+{~> z(4?M();zvayyd^j`@4>xCqH|Au>Sfzb$mEOcD7e4z8pPVRTiMUWiw;|gXHw7LS#U< zsT(}Z5SJ)CRMXloh$qPnK77w_)ctHmgh}QAe<2S{DU^`!uwptCoq!Owz$u6bF)vnb zL`bM$%>baN7l#)vtS3y6h*2?xCk z>w+s)@`O4(4_I{L-!+b%)NZcQ&ND=2lyP+xI#9OzsiY8$c)ys-MI?TG6 zEP6f=vuLo!G>J7F4v|s#lJ+7A`^nEQScH3e?B_jC&{sj>m zYD?!1z4nDG_Afi$!J(<{>z{~Q)$SaXWjj~%ZvF152Hd^VoG14rFykR=_TO)mCn&K$ z-TfZ!vMBvnToyBoKRkD{3=&=qD|L!vb#jf1f}2338z)e)g>7#NPe!FoaY*jY{f)Bf>ohk-K z4{>fVS}ZCicCqgLuYR_fYx2;*-4k>kffuywghn?15s1dIOOYfl+XLf5w?wtU2Og*f z%X5x`H55F6g1>m~%F`655-W1wFJtY>>qNSdVT`M`1Mlh!5Q6#3j={n5#za;!X&^OJ zgq;d4UJV-F>gg?c3Y?d=kvn3eV)Jb^ zO5vg0G0yN0%}xy#(6oTDSVw8l=_*2k;zTP?+N=*18H5wp`s90K-C67q{W3d8vQGmr zhpW^>1HEQV2TG#8_P_0q91h8QgHT~8=-Ij5snJ3cj?Jn5_66uV=*pq(j}yHnf$Ft;5VVC?bz%9X31asJeQF2jEa47H#j` zk&uxf3t?g!tltVP|B#G_UfDD}`<#B#iY^i>oDd-LGF}A@Fno~dR72c&hs6bR z2F}9(i8+PR%R|~FV$;Ke^Q_E_Bc;$)xN4Ti>Lgg4vaip!%M z06oxAF_*)LH57w|gCW3SwoEHwjO{}}U=pKhjKSZ{u!K?1zm1q? zXyA6y@)}_sONiJopF}_}(~}d4FDyp|(@w}Vb;Fl5bZL%{1`}gdw#i{KMjp2@Fb9pg ziO|u7qP{$kxH$qh8%L+)AvwZNgUT6^zsZq-MRyZid{D?t`f|KzSAD~C?WT3d0rO`0 z=qQ6{)&UXXuHY{9g|P7l_nd-%eh}4%VVaK#Nik*tOu9lBM$<%FS@`NwGEbP0&;Xbo zObCq=y%a`jSJmx_uTLa{@2@}^&F4c%z6oe-TN&idjv+8E|$FHOvBqg5hT zMB=7SHq`_-E?5g=()*!V>rIa&LcX(RU}aLm*38U_V$C_g4)7GrW5$GnvTwJZdBmy6 z*X)wi3=R8L=esOhY0a&eH`^fSpUHV8h$J1|o^3fKO|9QzaiKu>yZ9wmRkW?HTkc<*v7i*ylJ#u#j zD1-n&{B`04oG>0Jn{5PKP*4Qsz{~`VVA3578gA+JUkiPc$Iq!^K|}*p_z3(-c&5z@ zKxmdNpp2&wg&%xL3xZNzG-5Xt7jnI@{?c z25=M>-VF|;an2Os$Nn%HgQz7m(ujC}Ii0Oesa(y#8>D+P*_m^X##E|h$M6tJr%#=P zWP*)Px>7z`E~U^2LNCNiy%Z7!!6RI%6fF@#ZY3z`CK91}^J$F!EB0YF1je9hJKU7!S5MnXV{+#K;y zF~s*H%p@vj&-ru7#(F2L+_;IH46X(z{~HTfcThqD%b{>~u@lSc<+f5#xgt9L7$gSK ziDJ6D*R%4&YeUB@yu@4+&70MBNTnjRyqMRd+@&lU#rV%0t3OmouhC`mkN}pL>tXin zY*p)mt=}$EGT2E<4Q>E2`6)gZ`QJhGDNpI}bZL9}m+R>q?l`OzFjW?)Y)P`fUH(_4 zCb?sm1=DD0+Q5v}BW#0n5;Nm(@RTEa3(Y17H2H67La+>ptQHJ@WMy2xRQT$|7l`8c zYHCxYw2o-rI?(fR2-%}pbs$I%w_&LPYE{4bo}vRoAW>3!SY_zH3`ofx3F1PsQ?&iq z*BRG>?<6%z=x#`NhlEq{K~&rU7Kc7Y-90aRnoj~rVoKae)L$3^z*Utppk?I`)CX&& zZ^@Go9fm&fN`b`XY zt0xE5aw4t@qTg_k=!-5LXU+_~DlW?53!afv6W(k@FPPX-`nA!FBMp7b!ODbL1zh58 z*69I}P_-?qSLKj}JW7gP!la}K@M}L>v?rDD!DY-tu+onu9kLoJz20M4urX_xf2dfZ zORd9Zp&28_ff=wdMpXi%IiTTNegC}~RLkdYjA39kWqlA?jO~o1`*B&85Hd%VPkYZT z48MPe62;TOq#c%H(`wX5(Bu>nlh4Fbd*Npasdhh?oRy8a;NB2(eb}6DgwXtx=n}fE zx67rYw=(s0r?EsPjaya}^Qc-_UT5|*@|$Q}*|>V3O~USkIe6a0_>vd~6kHuP8=m}_ zo2IGKbv;yA+TBtlCpnw)8hDn&eq?26gN$Bh;SdxaS04Fsaih_Cfb98s39xbv)=mS0 z6M<@pM2#pe32w*lYSWG>DYqB95XhgAA)*9dOxHr{t)er0Xugoy)!Vz#2C3FaUMzYl zCxy{igFB901*R2*F4>grPF}+G`;Yh zGi@nRjWyG3mR(BVOeBPOF=_&}2IWT%)pqdNAcL{eP`L*^FDv#Rzql5U&Suq_X%JfR_lC!S|y|xd5mQ0{0!G#9hV46S~A` z0B!{yI-4FZEtol5)mNWXcX(`x&Pc*&gh4k{w%0S#EI>rqqlH2xv7mR=9XNCI$V#NG z4wb-@u{PfQP;tTbzK>(DF(~bKp3;L1-A*HS!VB)Ae>Acnvde15Anb`h;I&0)aZBS6 z55ZS7mL5Wp!LCt45^{2_70YiI_Py=X{I3>$Px5Ez0ahLQ+ z9EWUWSyzA|+g-Axp*Lx-M{!ReQO07EG7r4^)K(xbj@%ZU=0tBC5shl)1a!ifM5OkF z0w2xQ-<+r-h1fi7B6waX15|*GGqfva)S)dVcgea`lQ~SQ$KXPR+(3Tn2I2R<0 z9tK`L*pa^+*n%>tZPiqt{_`%v?Bb7CR-!GhMON_Fbs0$#|H}G?rW|{q5fQhvw!FxI zs-5ZK>hAbnCS#ZQVi5K0X3PjL1JRdQO+&)*!oRCqB{wen60P6!7bGiWn@vD|+E@Xq zb!!_WiU^I|@1M}Hz6fN-m04x=>Exm{b@>UCW|c8vC`aNbtA@KCHujh^2RWZC}iYhL^<*Z93chIBJYU&w>$CGZDRcHuIgF&oyesDZ#&mA;?wxx4Cm#c0V$xYG?9OL(Smh}#fFuX(K;otJmvRP{h ze^f-qv;)HKC7geB92_@3a9@MGijS(hNNVd%-rZ;%@F_f7?Fjinbe1( zn#jQ*jKZTqE+AUTEd3y6t>*=;AO##cmdwU4gc2&rT8l`rtKW2JF<`_M#p>cj+)yCG zgKF)y8jrfxTjGO&ccm8RU>qn|HxQ7Z#sUo$q)P5H%8iBF$({0Ya51-rA@!It#NHN8MxqK zrYyl_&=}WVfQ?+ykV4*@F6)=u_~3BebR2G2>>mKaEBPmSW3(qYGGXj??m3L zHec{@jWCsSD8`xUy0pqT?Sw0oD?AUK*WxZn#D>-$`eI+IT)6ki>ic}W)t$V32^ITD zR497@LO}S|re%A+#vdv-?fXsQGVnP?QB_d0cGE+U84Q=aM=XrOwGFN3`Lpl@P0fL$ zKN1PqOwojH*($uaQFh8_)H#>Acl&UBSZ>!2W1Dinei`R4dJGX$;~60X=|SG6#jci} z&t4*dVDR*;+6Y(G{KGj1B2!qjvDYOyPC}%hnPbJ@g(4yBJrViG1#$$X75y+Ul1{%x zBAuD}Q@w?MFNqF-m39FGpq7RGI?%Bvyyig&oGv)lR>d<`Bqh=p>urib5DE;u$c|$J zwim~nPb19t?LJZsm{<(Iyyt@~H!a4yywmHKW&=1r5+oj*Fx6c89heW@(2R`i!Uiy* zp)=`Vr8sR!)KChE-6SEIyi(dvG3<1KoVt>kGV=zZiG7LGonH1+~yOK-`g0)r#+O|Q>)a`I2FVW%wr3lhO(P{ksNQuR!G_d zeTx(M!%brW_vS9?IF>bzZ2A3mWX-MEaOk^V|4d38{1D|KOlZSjBKrj7Fgf^>JyL0k zLoI$adZJ0T+8i_Idsuj}C;6jgx9LY#Ukh;!8eJ^B1N}q=Gn4onF*a2vY7~`x$r@rJ z`*hi&Z2lazgu{&nz>gjd>#eq*IFlXed(%$s5!HRXKNm zDZld+DwDI`O6hyn2uJ)F^{^;ESf9sjJ)wMSKD~R=DqPBHyP!?cGAvL<1|7K-(=?VO zGcKcF1spUa+ki<`6K#@QxOTsd847N8WSWztG~?~ z!gUJn>z0O=_)VCE|56hkT~n5xXTp}Ucx$Ii%bQ{5;-a4~I2e|{l9ur#*ghd*hSqO= z)GD@ev^w&5%k}YYB~!A%3*XbPPU-N6&3Lp1LxyP@|C<{qcn&?l54+zyMk&I3YDT|E z{lXH-e?C{huu<@~li+73lMOk&k)3s7Asn$t6!PtXJV!RkA`qdo4|OC_a?vR!kE_}k zK5R9KB%V@R7gt@9=TGL{=#r2gl!@3G;k-6sXp&E4u20DgvbY$iE**Xqj3TyxK>3AU z!b9}NXuINqt>Htt6fXIy5mj7oZ{A&$XJ&thR5ySE{mkxq_YooME#VCHm2+3D!f`{) zvR^WSjy_h4v^|!RJV-RaIT2Ctv=)UMMn@fAgjQV$2G+4?&dGA8vK35c-8r)z9Qqa=%k(FU)?iec14<^olkOU3p zF-6`zHiDKPafKK^USUU+D01>C&Wh{{q?>5m zGQp|z*+#>IIo=|ae8CtrN@@t~uLFOeT{}vX(IY*;>wAU=u1Qo4c+a&R);$^VCr>;! zv4L{`lHgc9$BeM)pQ#XA_(Q#=_iSZL4>L~8Hx}NmOC$&*Q*bq|9Aq}rWgFnMDl~d*;7c44GipcpH9PWaBy-G$*MI^F0 z?Tdxir1D<2ui+Q#^c4?uKvq=p>)lq56=Eb|N^qz~w7rsZu)@E4$;~snz+wIxi+980O6M#RmtgLYh@|2}9BiHSpTs zacjGKvwkUwR3lwTSsCHlwb&*(onU;)$yvdhikonn|B44JMgs*&Lo!jn`6AE>XvBiO z*LKNX3FVz9yLcsnmL!cRVO_qv=yIM#X|u&}#f%_?Tj0>8)8P_0r0!AjWNw;S44tst zv+NXY1{zRLf9OYMr6H-z?4CF$Y%MdbpFIN@a-LEnmkcOF>h16cH_;A|e)pJTuCJ4O zY7!4FxT4>4aFT8a92}84>q0&?46h>&0Vv0p>u~k&qd5$C1A6Q$I4V(5X~6{15;PD@ ze6!s9xh#^QI`J+%8*=^(-!P!@9%~buBmN2VSAp@TOo6}C?az+ALP8~&a0FWZk*F5N z^8P8IREnN`N0i@>O0?{i-FoFShYbUB`D7O4HB`Im2{yzXmyrg$k>cY6A@>bf7i3n0 z5y&cf2#`zctT>dz+hNF&+d3g;2)U!#vsb-%LC+pqKRTiiSn#FH#e!bVwR1nAf*TG^ z!RKcCy$P>?Sfq6n<%M{T0I8?p@HlgwC!HoWO>~mT+X<{Ylm+$Vtj9};H3$EB}P2wR$3y!TO#$iY8eO-!}+F&jMu4%E6S>m zB(N4w9O@2=<`WNJay5PwP8javDp~o~xkSbd4t4t8)9jqu@bHmJHq=MV~Pt|(TghCA}fhMS?s-{klV>~=VrT$nsp7mf{?cze~KKOD4 z_1Y!F)*7^W+BBTt1R2h4f1X4Oy2%?=IMhZU8c{qk3xI1=!na*Sg<=A$?K=Y=GUR9@ zQ(ylIm4Lgm>pt#%p`zHxok%vx_=8Fap1|?OM02|N%X-g5_#S~sT@A!x&8k#wVI2lo z1Uyj{tDQRpb*>c}mjU^gYA9{7mNhFAlM=wZkXcA#MHXWMEs^3>p9X)Oa?dx7b%N*y zLz@K^%1JaArjgri;8ptNHwz1<0y8tcURSbHsm=26^@CYJ3hwMaEvC7 z3Wi-@AaXIQ)%F6#i@%M>?Mw7$6(kW@?et@wbk-APcvMCC{>iew#vkZej8%9h0JSc? zCb~K|!9cBU+))^q*co(E^9jRl7gR4Jihyqa(Z(P&ID#TPyysVNL7(^;?Gan!OU>au zN}miBc&XX-M$mSv%3xs)bh>Jq9#aD_l|zO?I+p4_5qI0Ms*OZyyxA`sXcyiy>-{YN zA70%HmibZYcHW&YOHk6S&PQ+$rJ3(utuUra3V0~@=_~QZy&nc~)AS>v&<6$gErZC3 zcbC=eVkV4Vu0#}E*r=&{X)Kgq|8MGCh(wsH4geLj@#8EGYa})K2;n z{1~=ghoz=9TSCxgzr5x3@sQZZ0FZ+t{?klSI_IZa16pSx6*;=O%n!uXVZ@1IL;JEV zfOS&yyfE9dtS*^jmgt6>jQDOIJM5Gx#Y2eAcC3l^lmoJ{o0T>IHpECTbfYgPI4#LZq0PKqnPCD}_ zyKxz;(`fE0z~nA1s?d{X2!#ZP8wUHzFSOoTWQrk%;wCnBV_3D%3@EC|u$Ao)tO|AO z$4&aa!wbf}rbNcP{6=ajgg(`p5kTeu$ji20`zw)X1SH*x zN?T36{d9TY*S896Ijc^!35LLUByY4QO=ARCQ#MMCjudFc7s!z%P$6DESz%zZ#>H|i zw3Mc@v4~{Eke;FWs`5i@ifeYPh-Sb#vCa#qJPL|&quSKF%sp8*n#t?vIE7kFWjNFh zJC@u^bRQ^?ra|%39Ux^Dn4I}QICyDKF0mpe+Bk}!lFlqS^WpYm&xwIYxUoS-rJ)N9 z1Tz*6Rl9;x`4lwS1cgW^H_M*)Dt*DX*W?ArBf?-t|1~ge&S}xM0K;U9Ibf{okZHf~ z#4v4qc6s6Zgm8iKch5VMbQc~_V-ZviirnKCi*ouN^c_2lo&-M;YSA>W>>^5tlXObg zacX$k0=9Tf$Eg+#9k6yV(R5-&F{=DHP8!yvSQ`Y~XRnUx@{O$-bGCksk~3&qH^dqX zkf+ZZ?Nv5u>LBM@2?k%k&_aUb5Xjqf#!&7%zN#VZwmv65ezo^Y4S#(ed0yUn4tFOB zh1f1SJ6_s?a{)u6VdwUC!Hv=8`%T9(^c`2hc9nt$(q{Dm2X)dK49ba+KEheQ;7^0) ziFKw$%EHy_B1)M>=yK^=Z$U-LT36yX>EKT zvD8IAom2&2?bTmX@_PBR4W|p?6?LQ+&UMzXxqHC5VHzf@Eb1u)kwyfy+NOM8Wa2y@ zNNDL0PE$F;yFyf^jy&RGwDXQwYw6yz>OMWvJt98X@;yr!*RQDBE- zE*l*u=($Zi1}0-Y4lGaK?J$yQjgb+*ljUvNQ!;QYAoCq@>70=sJ{o{^21^?zT@r~hhf&O;Qiq+ ziGQQLG*D@5;LZ%09mwMiE4Q{IPUx-emo*;a6#DrmWr(zY27d@ezre)Z1BGZdo&pXn z+);gOFelKDmnjq#8dL7CTiVH)dHOqWi~uE|NM^QI3EqxE6+_n>IW67~UB#J==QOGF zp_S)c8TJ}uiaEiaER}MyB(grNn=2m&0yztA=!%3xUREyuG_jmadN*D&1nxvjZ6^+2 zORi7iX1iPi$tKasppaR9$a3IUmrrX)m*)fg1>H+$KpqeB*G>AQV((-G{}h=qItj|d zz~{5@{?&Dab6;0c7!!%Se>w($RmlG7Jlv_zV3Ru8b2rugY0MVPOOYGlokI7%nhIy& z-B&wE=lh2dtD!F?noD{z^O1~Tq4MhxvchzuT_oF3-t4YyA*MJ*n&+1X3~6quEN z@m~aEp=b2~mP+}TUP^FmkRS_PDMA{B zaSy(P=$T~R!yc^Ye0*pl5xcpm_JWI;@-di+nruhqZ4gy7cq-)I&s&Bt3BkgT(Zdjf zTvvv0)8xzntEtp4iXm}~cT+pi5k{w{(Z@l2XU9lHr4Vy~3ycA_T?V(QS{qwt?v|}k z_ST!s;C4!jyV5)^6xC#v!o*uS%a-jQ6< z)>o?z7=+zNNtIz1*F_HJ(w@=`E+T|9TqhC(g7kKDc8z~?RbKQ)LRMn7A1p*PcX2YR zUAr{);~c7I#3Ssv<0i-Woj0&Z4a!u|@Xt2J1>N-|ED<3$o2V?OwL4oQ%$@!zLamVz zB)K&Ik^~GOmDAa143{I4?XUk1<3-k{<%?&OID&>Ud%z*Rkt*)mko0RwC2=qFf-^OV z=d@47?tY=A;=2VAh0mF(3x;!#X!%{|vn;U2XW{(nu5b&8kOr)Kop3-5_xnK5oO_3y z!EaIb{r%D{7zwtGgFVri4_!yUIGwR(xEV3YWSI_+E}Gdl>TINWsIrfj+7DE?xp+5^ zlr3pM-Cbse*WGKOd3+*Qen^*uHk)+EpH-{u@i%y}Z!YSid<}~kA*IRSk|nf+I1N=2 zIKi+&ej%Al-M5`cP^XU>9A(m7G>58>o|}j0ZWbMg&x`*$B9j#Rnyo0#=BMLdo%=ks zLa3(2EinQLXQ(3zDe7Bce%Oszu%?8PO648TNst4SMFvj=+{b%)ELyB!0`B?9R6aO{i-63|s@|raSQGL~s)9R#J#duFaTSZ2M{X z1?YuM*a!!|jP^QJ(hAisJuPOM`8Y-Hzl~%d@latwj}t&0{DNNC+zJARnuQfiN`HQ# z?boY_2?*q;Qk)LUB)s8(Lz5elaW56p&fDH*AWAq7Zrbeq1!?FBGYHCnFgRu5y1jwD zc|yBz+UW|X`zDsc{W~8m$sh@VVnZD$lLnKlq@Hg^;ky!}ZuPdKNi2BI70;hrpvaA4+Q_+K)I@|)q1N-H zrycZU`*YUW``Qi^`bDX-j7j^&bO+-Xg$cz2#i##($uyW{Nl&{DK{=lLWV3|=<&si||2)l=8^8_z+Vho-#5LB0EqQ3v5U#*DF7 zxT)1j^`m+lW}p$>WSIG1eZ>L|YR-@Feu!YNWiw*IZYh03mq+2QVtQ}1ezRJM?0PA< z;mK(J5@N8>u@<6Y$QAHWNE};rR|)U_&bv8dsnsza7{=zD1VBcxrALqnOf-qW(zzTn zTAp|pEo#FsQ$~*$j|~Q;$Zy&Liu9OM;VF@#_&*nL!N2hH!Q6l*OeTxq!l>dEc{;Hw zCQni{iN%jHU*C;?M-VUaXxf0FEJ_G=C8)C-wD!DvhY+qQ#FT3}Th8;GgV&AV94F`D ztT6=w_Xm8)*)dBnDkZd~UWL|W=Glu!$hc|1w7_7l!3MAt95oIp4Xp{M%clu&TXehO z+L-1#{mjkpTF@?|w1P98OCky~S%@OR&o75P&ZHvC}Y=(2_{ib(-Al_7aZ^U?s34#H}= zGfFi5%KnFVCKtdO^>Htpb07#BeCXMDO8U}crpe1Gm`>Q=6qB4i=nLoLZ%p$TY=OcP z)r}Et-Ed??u~f09d3Nx3bS@ja!fV(Dfa5lXxRs#;8?Y8G+Qvz+iv7fiRkL3liip}) z&G0u8RdEC9c$$rdU53=MH`p!Jn|DHjhOxHK$tW_pw9wCTf0Eo<){HoN=zG!!Gq4z4 z7PwGh)VNPXW-cE#MtofE`-$9~nmmj}m zlzZscQ2+Jq%gaB9rMgVJkbhup0Ggpb)&L01T=%>n7-?v@I8!Q(p&+!fd+Y^Pu9l+u zek(_$^HYFVRRIFt@0Fp52g5Q#I`tC3li`;UtDLP*rA{-#Yoa5qp{cD)QYhldihWe+ zG~zuaqLY~$-1sjh2lkbXCX;lq+p~!2Z=76cvuQe*Fl>IFwpUBP+d^&E4BGc{m#l%Kuo6#{XGoRyFc%Hqhf|%nYd<;yiC>tyEyk z4I+a`(%%Ie=-*n z-{mg=j&t12)LH3R?@-B1tEb7FLMePI1HK0`Ae@#)KcS%!Qt9p4_fmBl5zhO10n401 zBSfnfJ;?_r{%R)hh}BBNSl=$BiAKbuWrNGQUZ)+0=Mt&5!X*D@yGCSaMNY&@`;^a4 z;v=%D_!K!WXV1!3%4P-M*s%V2b#2jF2bk!)#2GLVuGKd#vNpRMyg`kstw0GQ8@^k^ zuqK5uR<>FeRZ#3{%!|4X!hh7hgirQ@Mwg%%ez8pF!N$xhMNQN((yS(F2-OfduxxKE zxY#7O(VGfNuLv-ImAw5+h@gwn%!ER;*Q+001;W7W^waWT%@(T+5k!c3A-j)a8y11t zx4~rSN0s$M8HEOzkcWW4YbKK9GQez2XJ|Nq?TFy;jmGbg;`m&%U4hIiarKmdTHt#l zL=H;ZHE?fYxKQQXKnC+K!TAU}r086{4m}r()-QaFmU(qWhJlc$eas&y?=H9EYQy8N$8^bni9TpDp zkA^WRs?KgYgjxX4T6?`SMs$`s3vlut(YU~f2F+id(Rf_)$BIMibk9lACI~LA+i7xn z%-+=DHV*0TCTJp~-|$VZ@g2vmd*|2QXV;HeTzt530KyK>v&253N1l}bP_J#UjLy4) zBJili9#-ey8Kj(dxmW^ctorxd;te|xo)%46l%5qE-YhAjP`Cc03vT)vV&GAV%#Cgb zX~2}uWNvh`2<*AuxuJpq>SyNtZwzuU)r@@dqC@v=Ocd(HnnzytN+M&|Qi#f4Q8D=h ziE<3ziFW%+!yy(q{il8H44g^5{_+pH60Mx5Z*FgC_3hKxmeJ+wVuX?T#ZfOOD3E4C zRJsj#wA@3uvwZwHKKGN{{Ag+8^cs?S4N@6(Wkd$CkoCst(Z&hp+l=ffZ?2m%%ffI3 zdV7coR`R+*dPbNx=*ivWeNJK=Iy_vKd`-_Hng{l?hmp=|T3U&epbmgXXWs9ySE|=G zeQ|^ioL}tveN{s72_&h+F+W;G}?;?_s@h5>DX(rp#eaZ!E=NivgLI zWykLKev+}sHH41NCRm7W>K+_qdoJ8x9o5Cf!)|qLtF7Izxk*p|fX8UqEY)_sI_45O zL2u>x=r5xLE%s|d%MO>zU%KV6QKFiEeo12g#bhei4!Hm+`~Fo~4h|BJ)%ENxy9)Up zOxupSf1QZWun=)gF{L0YWJ<(r0?$bPFANrmphJ>kG`&7E+RgrWQi}ZS#-CQJ*i#8j zM_A0?w@4Mq@xvk^>QSvEU|VYQoVI=TaOrsLTa`RZfe8{9F~mM{L+C`9YP9?OknLw| zmkvz>cS6`pF0FYeLdY%>u&XpPj5$*iYkj=m7wMzHqzZ5SG~$i_^f@QEPEC+<2nf-{ zE7W+n%)q$!5@2pBuXMxhUSi*%F>e_g!$T-_`ovjBh(3jK9Q^~OR{)}!0}vdTE^M+m z9QWsA?xG>EW;U~5gEuKR)Ubfi&YWnXV;3H6Zt^NE725*`;lpSK4HS1sN?{~9a4JkD z%}23oAovytUKfRN87XTH2c=kq1)O5(fH_M3M-o{{@&~KD`~TRot-gqg7Q2U2o-iiF}K>m?CokhmODaLB z1p6(6JYGntNOg(s!(>ZU&lzDf+Ur)^Lirm%*}Z>T)9)fAZ9>k(kvnM;ab$ptA=hoh zVgsVaveXbMpm{|4*d<0>?l_JUFOO8A3xNLQOh%nVXjYI6X8h?a@6kDe5-m&;M0xqx z+1U$s>(P9P)f0!{z%M@E7|9nn#IWgEx6A6JNJ(7dk`%6$3@!C!l;JK-p2?gg+W|d- ziEzgk$w7k48NMqg$CM*4O~Abj3+_yUKTyK1p6GDsGEs;}=E_q>^LI-~pym$qhXPJf z2`!PJDp4l(TTm#|n@bN!j;-FFOM__eLl!6{*}z=)UAcGYloj?bv!-XY1TA6Xz;82J zLRaF{8ayzGa|}c--}|^xh)xgX>6R(sZD|Z|qX50gu=d`gEwHqC@WYU7{%<5VOnf9+ zB@FX?|UL%`8EIAe!*UdYl|6wRz6Y>(#8x92$#y}wMeE|ZM2X*c}dKJ^4NIf;Fm zNwzq%QcO?$NR-7`su!*$dlIKo2y(N;qgH@1|8QNo$0wbyyJ2^}$iZ>M{BhBjTdMjK z>gPEzgX4;g3$rU?jvDeOq`X=>)zdt|jk1Lv3u~bjHI=EGLfIR&+K3ldcc4D&Um&04 z3^F*}WaxR(ZyaB>DlmF_UP@+Q*h$&nsOB#gwLt{1#F4i-{A5J@`>B9@{^i?g_Ce&O z<<}_We-RUFU&&MHa1#t56u_oM(Ljn7djja!T|gcxSoR=)@?owC*NkDarpBj=W4}=i1@)@L|C) zQKA+o<(pMVp*Su(`zBC0l1yTa$MRfQ#uby|$mlOMs=G`4J|?apMzKei%jZql#gP@IkOaOjB7MJM=@1j(&!jNnyVkn5;4lvro1!vq ztXiV8HYj5%)r1PPpIOj)f!>pc^3#LvfZ(hz}C@-3R(Cx7R427*Fwd!XO z4~j&IkPHcBm0h_|iG;ZNrYdJ4HI!$rSyo&sibmwIgm1|J#g6%>=ML1r!kcEhm(XY& zD@mIJt;!O%WP7CE&wwE3?1-dt;RTHdm~LvP7K`ccWXkZ0kfFa2S;wGtx_a}S2lslw z$<4^Jg-n#Ypc(3t2N67Juasu=h)j&UNTPNDil4MQMTlnI81kY46uMH5B^U{~nmc6+ z9>(lGhhvRK9ITfpAD!XQ&BPphL3p8B4PVBN0NF6U49;ZA0Tr75AgGw7(S=Yio+xg_ zepZ*?V#KD;sHH+15ix&yCs0eSB-Z%D%uujlXvT#V$Rz@$+w!u#3GIo*AwMI#Bm^oO zLr1e}k5W~G0xaO!C%Mb{sarxWZ4%Dn9vG`KHmPC9GWZwOOm11XJp#o0-P-${3m4g( z6~)X9FXw%Xm~&99tj>a-ri})ZcnsfJtc10F@t9xF5vq6E)X!iUXHq-ohlO`gQdS&k zZl})3k||u)!_=nNlvMbz%AuIr89l#I$;rG}qvDGiK?xTd5HzMQkw*p$YvFLGyQM!J zNC^gD!kP{A84nGosi~@MLKqWQNacfs7O$dkZtm4-BZ~iA8xWZPkTK!HpA5zr!9Z&+icfAJ1)NWkTd!-9`NWU>9uXXUr;`Js#NbKFgrNhTcY4GNv*71}}T zFJh?>=EcbUd2<|fiL+H=wMw8hbX6?+_cl4XnCB#ddwdG>bki* zt*&6Dy&EIPluL@A3_;R%)shA-tDQA1!Tw4ffBRyy;2n)vm_JV06(4Or&QAOKNZB5f(MVC}&_!B>098R{Simr!UG}?CW1Ah+X+0#~0`X)od zLYablwmFxN21L))!_zc`IfzWi`5>MxPe(DmjjO1}HHt7TJtAW+VXHt!aKZk>y6PoMsbDXRJnov;D~Ur~2R_7(Xr)aa%wJwZhS3gr7IGgt%@;`jpL@gyc6bGCVx!9CE7NgIbUNZ!Ur1RHror0~ zr(j$^yM4j`#c2KxSP61;(Tk^pe7b~}LWj~SZC=MEpdKf;B@on9=?_n|R|0q;Y*1_@ z>nGq>)&q!;u-8H)WCwtL&7F4vbnnfSAlK1mwnRq2&gZrEr!b1MA z(3%vAbh3aU-IX`d7b@q`-WiT6eitu}ZH9x#d&qx}?CtDuAXak%5<-P!{a`V=$|XmJ zUn@4lX6#ulB@a=&-9HG)a>KkH=jE7>&S&N~0X0zD=Q=t|7w;kuh#cU=NN7gBGbQTT z;?bdSt8V&IIi}sDTzA0dkU}Z-Qvg;RDe8v>468p3*&hbGT1I3hi9hh~Z(!H}{+>eUyF)H&gdrX=k$aB%J6I;6+^^kn1mL+E+?A!A}@xV(Qa@M%HD5C@+-4Mb4lI=Xp=@9+^x+jhtOc zYgF2aVa(uSR*n(O)e6tf3JEg2xs#dJfhEmi1iOmDYWk|wXNHU?g23^IGKB&yHnsm7 zm_+;p?YpA#N*7vXCkeN2LTNG`{QDa#U3fcFz7SB)83=<8rF)|udrEbrZL$o6W?oDR zQx!178Ih9B#D9Ko$H(jD{4MME&<|6%MPu|TfOc#E0B}!j^MMpV69D#h2`vsEQ{(?c zJ3Lh!3&=yS5fWL~;1wCZ?)%nmK`Eqgcu)O6rD^3%ijcxL50^z?OI(LaVDvfL0#zjZ z2?cPvC$QCzpxpt5jMFp05OxhK0F!Q`rPhDi5)y=-0C} zIM~ku&S@pl1&0=jl+rlS<4`riV~LC-#pqNde@44MB(j%)On$0Ko(@q?4`1?4149Z_ zZi!5aU@2vM$dHR6WSZpj+VboK+>u-CbNi7*lw4K^ZxxM#24_Yc`jvb9NPVi75L+MlM^U~`;a7`4H0L|TYK>%hfEfXLsu1JGM zbh|8{wuc7ucV+`Ys1kqxsj`dajwyM;^X^`)#<+a~$WFy8b2t_RS{8yNYKKlnv+>vB zX(QTf$kqrJ;%I@EwEs{cIcH@Z3|#^S@M+5jsP<^`@8^I4_8MlBb`~cE^n+{{;qW2q z=p1=&+fUo%T{GhVX@;56kH8K_%?X=;$OTYqW1L*)hzelm^$*?_K;9JyIWhsn4SK(| zSmXLTUE8VQX{se#8#Rj*lz`xHtT<61V~fb;WZUpu(M)f#;I+2_zR+)y5Jv?l`CxAinx|EY!`IJ*x9_gf_k&Gx2alL!hK zUWj1T_pk|?iv}4EP#PZvYD_-LpzU!NfcLL%fK&r$W8O1KH9c2&GV~N#T$kaXGvAOl)|T zuF9%6(i=Y3q?X%VK-D2YIYFPH3f|g$TrXW->&^Ab`WT z7>Oo!u1u40?jAJ8Hy`bv}qbgs8)cF0&qeVjD?e+3Ggn1Im>K77ZSpbU*08 zfZkIFcv?y)!*B{|>nx@cE{KoutP+seQU?bCGE`tS0GKUO3PN~t=2u7q_6$l;uw^4c zVu^f{uaqsZ{*a-N?2B8ngrLS8E&s6}Xtv9rR9C^b`@q8*iH)pFzf1|kCfiLw6u{Z%aC z!X^5CzF6qofFJgklJV3oc|Qc2XdFl+y5M9*P8}A>Kh{ zWRgRwMSZ(?Jw;m%0etU5BsWT-Dj-5F;Q$OQJrQd+lv`i6>MhVo^p*^w6{~=fhe|bN z*37oV0kji)4an^%3ABbg5RC;CS50@PV5_hKfXjYx+(DqQdKC^JIEMo6X66$qDdLRc z!YJPSKnbY`#Ht6`g@xGzJmKzzn|abYbP+_Q(v?~~ z96%cd{E0BCsH^0HaWt{y(Cuto4VE7jhB1Z??#UaU(*R&Eo+J`UN+8mcb51F|I|n*J zJCZ3R*OdyeS9hWkc_mA7-br>3Tw=CX2bl(=TpVt#WP8Bg^vE_9bP&6ccAf3lFMgr` z{3=h@?Ftb$RTe&@IQtiJfV;O&4fzh)e1>7seG; z=%mA4@c7{aXeJnhEg2J@Bm;=)j=O=cl#^NNkQ<{r;Bm|8Hg}bJ-S^g4`|itx)~!LN zXtL}?f1Hs6UQ+f0-X6&TBCW=A4>bU0{rv8C4T!(wD-h>VCK4YJk`6C9$by!fxOYw- zV#n+0{E(0ttq_#16B} ze8$E#X9o{B!0vbq#WUwmv5Xz6{(!^~+}sBW{xctdNHL4^vDk!0E}(g|W_q;jR|ZK< z8w>H-8G{%R#%f!E7cO_^B?yFRKLOH)RT9GJsb+kAKq~}WIF)NRLwKZ^Q;>!2MNa|} z-mh?=B;*&D{Nd-mQRcfVnHkChI=DRHU4ga%xJ%+QkBd|-d9uRI76@BT(bjsjwS+r) zvx=lGNLv1?SzZ;P)Gnn>04fO7Culg*?LmbEF0fATG8S@)oJ>NT3pYAXa*vX!eUTDF ziBrp(QyDqr0ZMTr?4uG_Nqs6f%S0g?h`1vO5fo=5S&u#wI2d4+3hWiolEU!=3_oFo zfie?+4W#`;1dd#X@g9Yj<53S<6OB!TM8w8})7k-$&q5(smc%;r z(BlXkTp`C47+%4JA{2X}MIaPbVF!35P#p;u7+fR*46{T+LR8+j25oduCfDzDv6R-hU{TVVo9fz?^N3ShMt!t0NsH)pB zRK8-S{Dn*y3b|k^*?_B70<2gHt==l7c&cT>r`C#{S}J2;s#d{M)ncW(#Y$C*lByLQ z&?+{dR7*gpdT~(1;M(FfF==3z`^eW)=5a9RqvF-)2?S-(G zhS;p(u~_qBum*q}On@$#08}ynd0+spzyVco0%G6;<-i5&016cV5UKzhQ~)fX03|>L z8ej+HzzgVr6_5ZUpa4HW0Ca!=r1%*}Oo;2no&Zz8DfR)L!@r<5 z2viSZpmvo5XqXyAz{Ms7`7kX>fnr1gi4X~7KpznRT0{Xc5Cfz@43PjBMBoH@z_{~( z(Wd}IPJ9hH+%)Fc)0!hrV+(A;76rhtI|YHbEDeERV~Ya>SQg^IvlazFkSK(KG9&{q zkPIR~EeQaaBmwA<20}mBO?)N$(z1@p)5?%}rM| zGF()~Z&Kx@OIDRI$d0T8;JX@vj3^2%pd_+@l9~a4lntZ;AvUIjqIZbuNTR6@hNJoV zk4F;ut)LN4ARuyn2M6F~eg-e#UH%2P;8uPGFW^vq1vj8mdIayFOZo(tphk8C7hpT~ z1Fv8?b_LNR3QD9J+!v=p%}# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.ttf b/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.ttf deleted file mode 100755 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 zcmd?Sd0-pWwLh*qi$?oCk~i6sWlOeWJC3|4juU5JNSu9hSVACzERcmjLV&P^utNzg zIE4Kr1=5g!SxTX#Ern9_%4&01rlrW`Z!56xXTGQR4C z3vR~wXq>NDx$c~e?;ia3YjJ*$!C>69a?2$lLyhpI!CFfJsP=|`8@K0|bbMpWwVUEygg0=0x_)HeHpGSJagJNLA3c!$EuOV>j$wi! zbo{vZ(s8tl>@!?}dmNHXo)ABy7ohD7_1G-P@SdJWT8*oeyBVYVW9*vn}&VI4q++W;Z+uz=QTK}^C75!`aFYCX# zf7fC2;o`%!huaTNJAB&VWrx=szU=VLhwnbT`vc<#<`4WI6n_x@AofA~2d90o?1L3w z9!I|#P*NQ)$#9aASijuw>JRld^-t)Zhmy|i-`Iam|IWkguaMR%lhi4p~cX-9& zjfbx}yz}s`4-6>D^+6FzihR)Y!GsUy=_MWi_v7y#KmYi-{iZ+s@ekkq!@Wxz!~BQwiI&ti z>hC&iBe2m(dpNVvSbZe3DVgl(dxHt-k@{xv;&`^c8GJY%&^LpM;}7)B;5Qg5J^E${ z7z~k8eWOucjX6)7q1a%EVtmnND8cclz8R1=X4W@D8IDeUGXxEWe&p>Z*voO0u_2!! zj3dT(Ki+4E;uykKi*yr?w6!BW2FD55PD6SMj`OfBLwXL5EA-9KjpMo4*5Eqs^>4&> z8PezAcn!9jk-h-Oo!E9EjX8W6@EkTHeI<@AY{f|5fMW<-Ez-z)xCvW3()Z#x0oydB zzm4MzY^NdpIF9qMp-jU;99LjlgY@@s+=z`}_%V*xV7nRV*Kwrx-i`FzI0BZ#yOI8# z!SDeNA5b6u9!Imj89v0(g$;dT_y|Yz!3V`i{{_dez8U@##|X9A};s^7vEd!3AcdyVlhVk$v?$O442KIM1-wX^R{U7`JW&lPr3N(%kXfXT_`7w^? z=#ntx`tTF|N$UT?pELvw7T*2;=Q-x@KmDUIbLyXZ>f5=y7z1DT<7>Bp0k;eItHF?1 zErzhlD2B$Tm|^7DrxnTYm-tgg`Mt4Eivp5{r$o9e)8(fXBO4g|G^6Xy?y$SM*&V52 z6SR*%`%DZC^w(gOWQL?6DRoI*hBNT)xW9sxvmi@!vI^!mI$3kvAMmR_q#SGn3zRb_ zGe$=;Tv3dXN~9XuIHow*NEU4y&u}FcZEZoSlXb9IBOA}!@J3uovp}yerhPMaiI8|SDhvWVr z^BE&yx6e3&RYqIg;mYVZ*3#A-cDJ;#ms4txEmwm@g^s`BB}KmSr7K+ruIoKs=s|gOXP|2 zb1!)87h9?(+1^QRWb(Vo8+@G=o24gyuzF3ytfsKjTHZJ}o{YznGcTDm!s)DRnmOX} z3pPL4wExoN$kyc2>#J`k+<67sy-VsfbQ-1u+HkyFR?9G`9r6g4*8!(!c65Be-5hUg zZHY$M0k(Yd+DT1*8)G(q)1&tDl=g9H7!bZTOvEEFnBOk_K=DXF(d4JOaH zI}*A3jGmy{gR>s}EQzyJa_q_?TYPNXRU1O;fcV_&TQZhd{@*8Tgpraf~nT0BYktu*n{a~ub^UUqQPyr~yBY{k2O zgV)honv{B_CqY|*S~3up%Wn%7i*_>Lu|%5~j)}rQLT1ZN?5%QN`LTJ}vA!EE=1`So z!$$Mv?6T)xk)H8JTrZ~m)oNXxS}pwPd#);<*>zWsYoL6iK!gRSBB{JCgB28C#E{T? z5VOCMW^;h~eMke(w6vLlKvm!!TyIf;k*RtK)|Q>_@nY#J%=h%aVb)?Ni_By)XNxY)E3`|}_u}fn+Kp^3p4RbhFUBRtGsDyx9Eolg77iWN z2iH-}CiM!pfYDIn7;i#Ui1KG01{3D<{e}uWTdlX4Vr*nsb^>l0%{O?0L9tP|KGw8w z+T5F}md>3qDZQ_IVkQ|BzuN08uN?SsVt$~wcHO4pB9~ykFTJO3g<4X({-Tm1w{Ufo zI03<6KK`ZjqVyQ(>{_aMxu7Zm^ck&~)Q84MOsQ-XS~{6j>0lTl@lMtfWjj;PT{nlZ zIn0YL?kK7CYJa)(8?unZ)j8L(O}%$5S#lTcq{rr5_gqqtZ@*0Yw4}OdjL*kBv+>+@ z&*24U=y{Nl58qJyW1vTwqsvs=VRAzojm&V zEn6=WzdL1y+^}%Vg!ap>x%%nFi=V#wn# zUuheBR@*KS)5Mn0`f=3fMwR|#-rPMQJg(fW*5e`7xO&^UUH{L(U8D$JtI!ac!g(Ze89<`UiO@L+)^D zjPk2_Ie0p~4|LiI?-+pHXuRaZKG$%zVT0jn!yTvvM^jlcp`|VSHRt-G@_&~<4&qW@ z?b#zIN)G(}L|60jer*P7#KCu*Af;{mpWWvYK$@Squ|n-Vtfgr@ZOmR5Xpl;0q~VILmjk$$mgp+`<2jP z@+nW5Oap%fF4nFwnVwR7rpFaOdmnfB$-rkO6T3#w^|*rft~acgCP|ZkgA6PHD#Of| zY%E!3tXtsWS`udLsE7cSE8g@p$ceu*tI71V31uA7jwmXUCT7+Cu3uv|W>ZwD{&O4Nfjjvl43N#A$|FWxId! z%=X!HSiQ-#4nS&smww~iXRn<-`&zc)nR~js?|Ei-cei$^$KsqtxNDZvl1oavXK#Pz zT&%Wln^Y5M95w=vJxj0a-ko_iQt(LTX_5x#*QfQLtPil;kkR|kz}`*xHiLWr35ajx zHRL-QQv$|PK-$ges|NHw8k6v?&d;{A$*q15hz9{}-`e6ys1EQ1oNNKDFGQ0xA!x^( zkG*-ueZT(GukSnK&Bs=4+w|(kuWs5V_2#3`!;f}q?>xU5IgoMl^DNf+Xd<=sl2XvkqviJ>d?+G@Z5nxxd5Sqd$*ENUB_mb8Z+7CyyU zA6mDQ&e+S~w49csl*UePzY;^K)Fbs^%?7;+hFc(xz#mWoek4_&QvmT7Fe)*{h-9R4 zqyXuN5{)HdQ6yVi#tRUO#M%;pL>rQxN~6yoZ)*{{!?jU)RD*oOxDoTjVh6iNmhWNC zB5_{R=o{qvxEvi(khbRS`FOXmOO|&Dj$&~>*oo)bZz%lPhEA@ zQ;;w5eu5^%i;)w?T&*=UaK?*|U3~{0tC`rvfEsRPgR~16;~{_S2&=E{fE2=c>{+y} zx1*NTv-*zO^px5TA|B```#NetKg`19O!BK*-#~wDM@KEllk^nfQ2quy25G%)l72<> zzL$^{DDM#jKt?<>m;!?E2p0l12`j+QJjr{Lx*47Nq(v6i3M&*P{jkZB{xR?NOSPN% zU>I+~d_ny=pX??qjF*E78>}Mgts@_yn`)C`wN-He_!OyE+gRI?-a>Om>Vh~3OX5+& z6MX*d1`SkdXwvb7KH&=31RCC|&H!aA1g_=ZY0hP)-Wm6?A7SG0*|$mC7N^SSBh@MG z9?V0tv_sE>X==yV{)^LsygK2=$Mo_0N!JCOU?r}rmWdHD%$h~~G3;bt`lH& zAuOOZ=G1Mih**0>lB5x+r)X^8mz!0K{SScj4|a=s^VhUEp#2M=^#WRqe?T&H9GnWa zYOq{+gBn9Q0e0*Zu>C(BAX=I-Af9wIFhCW6_>TsIH$d>|{fIrs&BX?2G>GvFc=<8` zVJ`#^knMU~65dWGgXcht`Kb>{V2oo%<{NK|iH+R^|Gx%q+env#Js*(EBT3V0=w4F@W+oLFsA)l7Qy8mx_;6Vrk;F2RjKFvmeq} zro&>@b^(?f))OoQ#^#s)tRL>b0gzhRYRG}EU%wr9GjQ#~Rpo|RSkeik^p9x2+=rUr}vfnQoeFAlv=oX%YqbLpvyvcZ3l$B z5bo;hDd(fjT;9o7g9xUg3|#?wU2#BJ0G&W1#wn?mfNR{O7bq747tc~mM%m%t+7YN}^tMa24O4@w<|$lk@pGx!;%pKiq&mZB z?3h<&w>un8r?Xua6(@Txu~Za9tI@|C4#!dmHMzDF_-_~Jolztm=e)@vG11bZQAs!tFvd9{C;oxC7VfWq377Y(LR^X_TyX9bn$)I765l=rJ%9uXcjggX*r?u zk|0!db_*1$&i8>d&G3C}A`{Fun_1J;Vx0gk7P_}8KBZDowr*8$@X?W6v^LYmNWI)lN92yQ;tDpN zOUdS-W4JZUjwF-X#w0r;97;i(l}ZZT$DRd4u#?pf^e2yaFo zbm>I@5}#8FjsmigM8w_f#m4fEP~r~_?OWB%SGWcn$ThnJ@Y`ZI-O&Qs#Y14To( zWAl>9Gw7#}eT(!c%D0m>5D8**a@h;sLW=6_AsT5v1Sd_T-C4pgu_kvc?7+X&n_fct znkHy(_LExh=N%o3I-q#f$F4QJpy>jZBW zRF7?EhqTGk)w&Koi}QQY3sVh?@e-Z3C9)P!(hMhxmXLC zF_+ZSTQU`Gqx@o(~B$dbr zHlEUKoK&`2gl>zKXlEi8w6}`X3kh3as1~sX5@^`X_nYl}hlbpeeVlj#2sv)CIMe%b zBs7f|37f8qq}gA~Is9gj&=te^wN8ma?;vF)7gce;&sZ64!7LqpR!fy)?4cEZposQ8 zf;rZF7Q>YMF1~eQ|Z*!5j0DuA=`~VG$Gg6B?Om1 z6fM@`Ck-K*k(eJ)Kvysb8sccsFf@7~3vfnC=<$q+VNv)FyVh6ZsWw}*vs>%k3$)9| zR9ek-@pA23qswe1io)(Vz!vS1o*XEN*LhVYOq#T`;rDkgt86T@O`23xW~;W_#ZS|x zvwx-XMb7_!hIte-#JNpFxskMMpo2OYhHRr0Yn8d^(jh3-+!CNs0K2B!1dL$9UuAD= zQ%7Ae(Y@}%Cd~!`h|wAdm$2WoZ(iA1(a_-1?znZ%8h72o&Mm*4x8Ta<4++;Yr6|}u zW8$p&izhdqF=m8$)HyS2J6cKyo;Yvb>DTfx4`4R{ zPSODe9E|uflE<`xTO=r>u~u=NuyB&H!(2a8vwh!jP!yfE3N>IiO1jI>7e&3rR#RO3_}G23W?gwDHgSgekzQ^PU&G5z&}V5GO? zfg#*72*$DP1T8i`S7=P;bQ8lYF9_@8^C(|;9v8ZaK2GnWz4$Th2a0$)XTiaxNWfdq z;yNi9veH!j)ba$9pke8`y2^63BP zIyYKj^7;2don3se!P&%I2jzFf|LA&tQ=NDs{r9fIi-F{-yiG-}@2`VR^-LIFN8BC4 z&?*IvLiGHH5>NY(Z^CL_A;yISNdq58}=u~9!Ia7 zm7MkDiK~lsfLpvmPMo!0$keA$`%Tm`>Fx9JpG^EfEb(;}%5}B4Dw!O3BCkf$$W-dF z$BupUPgLpHvr<<+QcNX*w@+Rz&VQz)Uh!j4|DYeKm5IC05T$KqVV3Y|MSXom+Jn8c zgUEaFW1McGi^44xoG*b0JWE4T`vka7qTo#dcS4RauUpE{O!ZQ?r=-MlY#;VBzhHGU zS@kCaZ*H73XX6~HtHd*4qr2h}Pf0Re@!WOyvres_9l2!AhPiV$@O2sX>$21)-3i+_ z*sHO4Ika^!&2utZ@5%VbpH(m2wE3qOPn-I5Tbnt&yn9{k*eMr3^u6zG-~PSr(w$p> zw)x^a*8Ru$PE+{&)%VQUvAKKiWiwvc{`|GqK2K|ZMy^Tv3g|zENL86z7i<c zW`W>zV1u}X%P;Ajn+>A)2iXZbJ5YB_r>K-h5g^N=LkN^h0Y6dPFfSBh(L`G$D%7c` z&0RXDv$}c7#w*7!x^LUes_|V*=bd&aP+KFi((tG*gakSR+FA26%{QJdB5G1F=UuU&koU*^zQA=cEN9}Vd?OEh| zgzbFf1?@LlPkcXH$;YZe`WEJ3si6&R2MRb}LYK&zK9WRD=kY-JMPUurX-t4(Wy{%` zZ@0WM2+IqPa9D(^*+MXw2NWwSX-_WdF0nMWpEhAyotIgqu5Y$wA=zfuXJ0Y2lL3#ji26-P3Z?-&0^KBc*`T$+8+cqp`%g0WB zTH9L)FZ&t073H4?t=(U6{8B+uRW_J_n*vW|p`DugT^3xe8Tomh^d}0k^G7$3wLgP& zn)vTWiMA&=bR8lX9H=uh4G04R6>C&Zjnx_f@MMY!6HK5v$T%vaFm;E8q=`w2Y}ucJ zkz~dKGqv9$E80NTtnx|Rf_)|3wxpnY6nh3U9<)fv2-vhQ6v=WhKO@~@X57N-`7Ppc zF;I7)eL?RN23FmGh0s;Z#+p)}-TgTJE%&>{W+}C`^-sy{gTm<$>rR z-X7F%MB9Sf%6o7A%ZHReD4R;imU6<9h81{%avv}hqugeaf=~^3A=x(Om6Lku-Pn9i zC;LP%Q7Xw*0`Kg1)X~nAsUfdV%HWrpr8dZRpd-#%)c#Fu^mqo|^b{9Mam`^Zw_@j@ zR&ZdBr3?@<@%4Z-%LT&RLgDUFs4a(CTah_5x4X`xDRugi#vI-cw*^{ncwMtA4NKjByYBza)Y$hozZCpuxL{IP&=tw6ZO52WY3|iwGf&IJCn+u(>icK zZB1~bWXCmwAUz|^<&ysd#*!DSp8}DLNbl5lRFat4NkvItxy;9tpp9~|@ z;JctShv^Iq4(z+y7^j&I?GCdKMVg&jCwtCkc4*@O7HY*veGDBtAIn*JgD$QftP}8= zxFAdF=(S>Ra6(4slk#h%b?EOU-96TIX$Jbfl*_7IY-|R%H zF8u|~hYS-YwWt5+^!uGcnKL~jM;)ObZ#q68ZkA?}CzV-%6_vPIdzh_wHT_$mM%vws9lxUj;E@#1UX?WO2R^41(X!nk$+2oJGr!sgcbn1f^yl1 z#pbPB&Bf;1&2+?};Jg5qgD1{4_|%X#s48rOLE!vx3@ktstyBsDQWwDz4GYlcgu$UJ zp|z_32yN72T*oT$SF8<}>e;FN^X&vWNCz>b2W0rwK#<1#kbV)Cf`vN-F$&knLo5T& z8!sO-*^x4=kJ$L&*h%rQ@49l?7_9IG99~xJDDil00<${~D&;kiqRQqeW5*22A`8I2 z(^@`qZoF7_`CO_e;8#qF!&g>UY;wD5MxWU>azoo=E{kW(GU#pbOi%XAn%?W{b>-bTt&2?G=E&BnK9m0zs{qr$*&g8afR_x`B~o zd#dxPpaap;I=>1j8=9Oj)i}s@V}oXhP*{R|@DAQXzQJekJnmuQ;vL90_)H_nD1g6e zS1H#dzg)U&6$fz0g%|jxDdz|FQN{KJ&Yx0vfuzAFewJjv`pdMRpY-wU`-Y6WQnJ(@ zGVb!-8DRJZvHnRFiR3PG3Tu^nCn(CcZHh7hQvyd7i6Q3&ot86XI{jo%WZqCPcTR0< zMRg$ZE=PQx66ovJDvI_JChN~k@L^Pyxv#?X^<)-TS5gk`M~d<~j%!UOWG;ZMi1af< z+86U0=sm!qAVJAIqqU`Qs1uJhQJA&n@9F1PUrYuW!-~IT>l$I!#5dBaiAK}RUufjg{$#GdQBkxF1=KU2E@N=i^;xgG2Y4|{H>s` z$t`k8c-8`fS7Yfb1FM#)vPKVE4Uf(Pk&%HLe z%^4L>@Z^9Z{ZOX<^e)~adVRkKJDanJ6VBC_m@6qUq_WF@Epw>AYqf%r6qDzQ~AEJ!jtUvLp^CcqZ^G-;Kz3T;O4WG45Z zFhrluCxlY`M+OKr2SeI697btH7Kj`O>A!+2DTEQ=48cR>Gg2^5uqp(+y5Sl09MRl* zp|28!v*wvMd_~e2DdKDMMQ|({HMn3D%%ATEecGG8V9>`JeL)T0KG}=}6K8NiSN5W< z79-ZdYWRUb`T}(b{RjN8>?M~opnSRl$$^gT`B27kMym5LNHu-k;A;VF8R(HtDYJHS zU7;L{a@`>jd0svOYKbwzq+pWSC(C~SPgG~nWR3pBA8@OICK$Cy#U`kS$I;?|^-SBC zBFkoO8Z^%8Fc-@X!KebF2Ob3%`8zlVHj6H;^(m7J35(_bS;cZPd}TY~qixY{MhykQ zV&7u7s%E=?i`}Ax-7dB0ih47w*7!@GBt<*7ImM|_mYS|9_K7CH+i}?*#o~a&tF-?C zlynEu1DmiAbGurEX2Flfy$wEVk7AU;`k#=IQE*6DMWafTL|9-vT0qs{A3mmZGzOyN zcM9#Rgo7WgB_ujU+?Q@Ql?V-!E=jbypS+*chI&zA+C_3_@aJal}!Q54?qsL0In({Ly zjH;e+_SK8yi0NQB%TO+Dl77jp#2pMGtwsgaC>K!)NimXG3;m7y`W+&<(ZaV>N*K$j zLL~I+6ouPk6_(iO>61cIsinx`5}DcKSaHjYkkMuDoVl>mKO<4$F<>YJ5J9A2Vl}#BP7+u~L8C6~D zsk`pZ$9Bz3teQS1Wb|8&c2SZ;qo<#F&gS;j`!~!ADr(jJXMtcDJ9cVi>&p3~{bqaP zgo%s8i+8V{UrYTc9)HiUR_c?cfx{Yan2#%PqJ{%?Wux4J;T$#cumM0{Es3@$>}DJg zqe*c8##t;X(4$?A`ve)e@YU3d2Balcivot{1(ahlE5qg@S-h(mPNH&`pBX$_~HdG48~)$x5p z{>ghzqqn_t8~pY<5?-To>cy^6o~mifr;KWvx_oMtXOw$$d6jddXG)V@a#lL4o%N@A zNJlQAz6R8{7jax-kQsH6JU_u*En%k^NHlvBB!$JAK!cYmS)HkLAkm0*9G3!vwMIWv zo#)+EamIJHEUV|$d|<)2iJ`lqBQLx;HgD}c3mRu{iK23C>G{0Mp1K)bt6OU?xC4!_ zZLqpFzeu&+>O1F>%g-%U^~yRg(-wSp@vmD-PT#bCWy!%&H;qT7rfuRCEgw67V!Qob z&tvPU@*4*$YF#2_>M0(75QxqrJr3Tvh~iDeFhxl=MzV@(psx%G8|I{~9;tv#BBE`l z3)_98eZqFNwEF1h)uqhBmT~mSmT8k$7vSHdR97K~kM)P9PuZdS;|Op4A?O<*%!?h` zn`}r_j%xvffs46x2hCWuo0BfIQWCw9aKkH==#B(TJ%p}p-RuIVzsRlaPL_Co{&R0h zQrqn=g1PGjQg3&sc2IlKG0Io#v%@p>tFwF)RG0ahYs@Zng6}M*d}Xua)+h&?$`%rb z;>M=iMh5eIHuJ5c$aC`y@CYjbFsJnSPH&}LQz4}za9YjDuao>Z^EdL@%saRm&LGQWXs*;FzwN#pH&j~SLhDZ+QzhplV_ij(NyMl z;v|}amvxRddO81LJFa~2QFUs z+Lk zZck)}9uK^buJNMo4G(rSdX{57(7&n=Q6$QZ@lIO9#<3pA2ceDpO_340B*pHlh_y{>i&c1?vdpN1j>3UN-;;Yq?P+V5oY`4Z(|P8SwWq<)n`W@AwcQ?E9 zd5j8>FT^m=MHEWfN9jS}UHHsU`&SScib$qd0i=ky0>4dz5ADy70AeIuSzw#gHhQ_c zOp1!v6qU)@8MY+ zMNIID?(CysRc2uZQ$l*QZVY)$X?@4$VT^>djbugLQJdm^P>?51#lXBkdXglYm|4{L zL%Sr?2f`J+xrcN@=0tiJt(<-=+v>tHy{XaGj7^cA6felUn_KPa?V4ebfq7~4i~GKE zpm)e@1=E;PP%?`vK6KVPKXjUXyLS1^NbnQ&?z>epHCd+J$ktT1G&L~T)nQeExe;0Z zlei}<_ni ztFo}j7nBl$)s_3odmdafVieFxc)m!wM+U`2u%yhJ90giFcU1`dR6BBTKc2cQ*d zm-{?M&%(={xYHy?VCx!ogr|4g5;V{2q(L?QzJGsirn~kWHU`l`rHiIrc-Nan!hR7zaLsPr4uR zG{En&gaRK&B@lyWV@yfFpD_^&z>84~_0Rd!v(Nr%PJhFF_ci3D#ixf|(r@$igZiWw za*qbXIJ_Hm4)TaQ=zW^g)FC6uvyO~Hg-#Z5Vsrybz6uOTF>Rq1($JS`imyNB7myWWpxYL(t7`H8*voI3Qz6mvm z$JxtArLJ(1wlCO_te?L{>8YPzQ})xJlvc5wv8p7Z=HviPYB#^#_vGO#*`<0r%MR#u zN_mV4vaBb2RwtoOYCw)X^>r{2a0kK|WyEYoBjGxcObFl&P*??)WEWKU*V~zG5o=s@ z;rc~uuQQf9wf)MYWsWgPR!wKGt6q;^8!cD_vxrG8GMoFGOVV=(J3w6Xk;}i)9(7*U zwR4VkP_5Zx7wqn8%M8uDj4f1aP+vh1Wue&ry@h|wuN(D2W;v6b1^ z`)7XBZ385zg;}&Pt@?dunQ=RduGRJn^9HLU&HaeUE_cA1{+oSIjmj3z+1YiOGiu-H zf8u-oVnG%KfhB8H?cg%@#V5n+L$MO2F4>XoBjBeX>css^h}Omu#)ExTfUE^07KOQS znMfQY2wz?!7!{*C^)aZ^UhMZf=TJNDv8VrrW;JJ9`=|L0`w9DE8MS>+o{f#{7}B4P z{I34>342vLsP}o=ny1eZkEabr@niT5J2AhByUz&i3Ck0H*H`LRHz;>3C_ru!X+EhJ z6(+(lI#4c`2{`q0o9aZhI|jRjBZOV~IA_km7ItNtUa(Wsr*Hmb;b4=;R(gF@GmsRI`pF+0tmq0zy~wnoJD(LSEwHjTOt4xb0XB-+ z&4RO{Snw4G%gS9w#uSUK$Zbb#=jxEl;}6&!b-rSY$0M4pftat-$Q)*y!bpx)R%P>8 zrB&`YEX2%+s#lFCIV;cUFUTIR$Gn2%F(3yLeiG8eG8&)+cpBlzx4)sK?>uIlH+$?2 z9q9wk5zY-xr_fzFSGxYp^KSY0s%1BhsI>ai2VAc8&JiwQ>3RRk?ITx!t~r45qsMnj zkX4bl06ojFCMq<9l*4NHMAtIxDJOX)H=K*$NkkNG<^nl46 zHWH1GXb?Og1f0S+8-((5yaeegCT62&4N*pNQY;%asz9r9Lfr;@Bl${1@a4QAvMLbV6JDp>8SO^q1)#(o%k!QiRSd0eTmzC< zNIFWY5?)+JTl1Roi=nS4%@5iF+%XztpR^BSuM~DX9q`;Mv=+$M+GgE$_>o+~$#?*y zAcD4nd~L~EsAjXV-+li6Lua4;(EFdi|M2qV53`^4|7gR8AJI;0Xb6QGLaYl1zr&eu zH_vFUt+Ouf4SXA~ z&Hh8K@ms^`(hJfdicecj>J^Aqd00^ccqN!-f-!=N7C1?`4J+`_f^nV!B3Q^|fuU)7 z1NDNT04hd4QqE+qBP+>ZE7{v;n3OGN`->|lHjNL5w40pePJ?^Y6bFk@^k%^5CXZ<+4qbOplxpe)l7c6m%o-l1oWmCx%c6@rx85hi(F=v(2 zJ$jN>?yPgU#DnbDXPkHLeQwED5)W5sH#-eS z%#^4dxiVs{+q(Yd^ShMN3GH)!h!@W&N`$L!SbElXCuvnqh{U7lcCvHI#{ZjwnKvu~ zAeo7Pqot+Ohm{8|RJsTr3J4GjCy5UTo_u_~p)MS&Z5UrUc|+;Mc(YS+ju|m3Y_Dvt zonVtpBWlM718YwaN3a3wUNqX;7TqvAFnVUoD5v5WTh~}r)KoLUDw%8Rrqso~bJqd> z_T!&Rmr6ebpV^4|knJZ%qmzL;OvG3~A*loGY7?YS%hS{2R0%NQ@fRoEK52Aiu%gj( z_7~a}eQUh8PnyI^J!>pxB(x7FeINHHC4zLDT`&C*XUpp@s0_B^!k5Uu)^j_uuu^T> z8WW!QK0SgwFHTA%M!L`bl3hHjPp)|wL5Var_*A1-H8LV?uY5&ou{hRjj>#X@rxV>5%-9hbP+v?$4}3EfoRH;l_wSiz{&1<+`Y5%o%q~4rdpRF0jOsCoLnWY5x?V)0ga>CDo`NpqS) z@x`mh1QGkx;f)p-n^*g5M^zRTHz%b2IkLBY{F+HsjrFC9_H(=9Z5W&Eymh~A_FUJ} znhTc9KG((OnjFO=+q>JQZJbeOoUM77M{)$)qQMcxK9f;=L;IOv_J>*~w^YOW744QZ zoG;!b9VD3ww}OX<8sZ0F##8hvfDP{hpa3HjaLsKbLJ8 z0WpY2E!w?&cWi7&N%bOMZD~o7QT*$xCRJ@{t31~qx~+0yYrLXubXh2{_L699Nl_pn z6)9eu+uUTUdjHXYs#pX^L)AIb!FjjNsTp7C399w&B{Q4q%yKfmy}T2uQdU|1EpNcY zDk~(h#AdxybjfzB+mg6rdU9mDZ^V>|U13Dl$Gj+pAL}lR2a1u!SJXU_YqP9N{ose4 zk+$v}BIHX60WSGVWv;S%zvHOWdDP(-ceo(<8`y@Goy%4wDu>57QZNJc)f>Ls+}9h7 z^N=#3q3|l?aG8K#HwiW2^PJu{v|x5;awYfahC?>_af3$LmMc4%N~JwVlRZa4c+eW2 zE!zosAjOv&UeCeu;Bn5OQUC=jtZjF;NDk9$fGbxf3d29SUBekX1!a$Vmq_VK*MHQ4)eB!dQrHH)LVYNF%-t8!d`@!cb z2CsKs3|!}T^7fSZm?0dJ^JE`ZGxA&a!jC<>6_y67On0M)hd$m*RAzo_qM?aeqkm`* zXpDYcc_>TFZYaC3JV>{>mp(5H^efu!Waa7hGTAts29jjuVd1vI*fEeB?A&uG<8dLZ z(j6;-%vJ7R0U9}XkH)1g>&uptXPHBEA*7PSO2TZ+dbhVxspNW~ZQT3fApz}2 z_@0-lZODcd>dLrYp!mHn4k>>7kibI!Em+Vh*;z}l?0qro=aJt68joCr5Jo(Vk<@i) z5BCKb4p6Gdr9=JSf(2Mgr=_6}%4?SwhV+JZj3Ox^_^OrQk$B^v?eNz}d^xRaz&~ zKVnlLnK#8^y=If2f1zmb~^5lPLe?%l}>?~wN4IN((2~U{e9fKhLMtYFj)I$(y zgnKv?R+ZpxA$f)Q2l=aqE6EPTK=i0sY&MDFJp!vQayyvzh4wee<}kybNthRlX>SHh z7S}9he^EBOqzBCww^duHu!u+dnf9veG{HjW!}aT7aJqzze9K6-Z~8pZAgdm1n~aDs z8_s7?WXMPJ3EPJHi}NL&d;lZP8hDhAXf5Hd!x|^kEHu`6QukXrVdLnq5zbI~oPo?7 z2Cbu8U?$K!Z4_yNM1a(bL!GRe!@{Qom+DxjrJ!B99qu5b*Ma%^&-=6UEbC+S2zX&= zQ!%bgJTvmv^2}hhvNQg!l=kbapAgM^hruE3k@jTxsG(B6d=4thBC*4tzVpCYXFc$a zeqgVB^zua)y-YjpiibCCdU%txXYeNFnXcbNj*D?~)5AGjL+!!ij_4{5EWKGav0^={~M^q}baAFOPzxfUM>`KPf|G z&hsaR*7(M6KzTj8Z?;45zX@L#xU{4n$9Q_<-ac(y4g~S|Hyp^-<*d8+P4NHe?~vfm z@y309=`lGdvN8*jw-CL<;o#DKc-%lb0i9a3%{v&2X($|Qxv(_*()&=xD=5oBg=$B0 zU?41h9)JKvP0yR{KsHoC>&`(Uz>?_`tlLjw1&5tPH3FoB%}j;yffm$$s$C=RHi`I3*m@%CPqWnP@B~%DEe;7ZT{9!IMTo1hT3Q347HJ&!)BM2 z3~aClf>aFh0_9||4G}(Npu`9xYY1*SD|M~9!CCFn{-J$u2&Dg*=5$_nozpoD2nxqq zB!--eA8UWZlcEDp4r#vhZ6|vq^9sFvRnA9HpHch5Mq4*T)oGbruj!U8Lx_G%Lby}o zTQ-_4A7b)5A42vA0U}hUJq6&wQ0J%$`w#ph!EGmW96)@{AUx>q6E>-r^Emk!iCR+X zdIaNH`$}7%57D1FyTccs3}Aq0<0Ei{`=S7*>pyg=Kv3nrqblqZcpsCWSQl^uMSsdj zYzh73?6th$c~CI0>%5@!Ej`o)Xm38u0fp9=HE@Sa6l2oX9^^4|Aq%GA z3(AbFR9gA_2T2i%Ck5V2Q2WW-(a&(j#@l6wE4Z`xg#S za#-UWUpU2U!TmIo`CN0JwG^>{+V#9;zvx;ztc$}@NlcyJr?q(Y`UdW6qhq!aWyB5xV1#Jb{I-ghFNO0 zFU~+QgPs{FY1AbiU&S$QSix>*rqYVma<-~s%ALhFyVhAYepId1 zs!gOB&weC18yhE-v6ltKZMV|>JwTX+X)Y_EI(Ff^3$WTD|Ea-1HlP;6L~&40Q&5{0 z$e$2KhUgH8ucMJxJV#M%cs!d~#hR^nRwk|uuCSf6irJCkSyI<%CR==tftx6d%;?ef zYIcjZrP@APzbtOeUe>m-TW}c-ugh+U*RbL1eIY{?>@8aW9bb1NGRy@MTse@>= za%;5=U}X%K2tKTYe9gjMcBvX%qrC&uZ`d(t)g)X8snf?vBe3H%dG=bl^rv8Z@YN$gd9yveHY0@Wt0$s zh^7jCp(q+6XDoekb;=%y=Wr8%6;z0ANH5dDR_VudDG|&_lYykJaiR+(y{zpR=qL3|2e${8 z2V;?jgHj7}Kl(d8C9xWRjhpf_)KOXl+@c4wrHy zL3#9U(`=N59og2KqVh>nK~g9>fX*PI0`>i;;b6KF|8zg+k2hViCt}4dfMdvb1NJ-Rfa7vL2;lPK{Lq*u`JT>S zoM_bZ_?UY6oV6Ja14X^;LqJPl+w?vf*C!nGK;uU^0GRN|UeFF@;H(Hgp8x^|;ygh? zIZx3DuO(lD01ksanR@Mn#lti=p28RTNYY6yK={RMFiVd~k8!@a&^jicZ&rxD3CCI! zVb=fI?;c#f{K4Pp2lnb8iF2mig)|6JEmU86Y%l}m>(VnI*Bj`a6qk8QL&~PFDxI8b z2mcsQBe9$q`Q$LfG2wdvK`M1}7?SwLAV&)nO;kAk`SAz%x9CDVHVbUd$O(*aI@D|s zLxJW7W(QeGpQY<$dSD6U$ja(;Hb3{Zx@)*fIQaW{8<$KJ&fS0caI2Py^clOq9@Irt z7th7F?7W`j{&UmM==Lo~T&^R7A?G=K_e-zfTX|)i`pLitlNE(~tq*}sS1x2}Jlul6 z5+r#4SpQu8h{ntIv#qCVH`uG~+I8l+7ZG&d`Dm!+(rZQDV*1LS^WfH%-!5aTAxry~ z4xl&rot5ct{xQ$w$MtVTUi6tBFSJWq2Rj@?HAX1H$eL*fk{Hq;E`x|hghRkipYNyt zKCO=*KSziiVk|+)qQCGrTYH9X!Z0$k{Nde~0Wl`P{}ca%nv<6fnYw^~9dYxTnTZB&&962jX0DM&wy&8fdxX8xeHSe=UU&Mq zRTaUKnQO|A>E#|PUo+F=Q@dMdt`P*6e92za(TH{5C*2I2S~p?~O@hYiT>1(n^Lqqn zqewq3ctAA%0E)r53*P-a8Ak32mGtUG`L^WVcm`QovX`ecB4E9X60wrA(6NZ7z~*_DV_e z8$I*eZ8m=WtChE{#QzeyHpZ%7GwFHlwo2*tAuloI-j2exx3#x7EL^&D;Re|Kj-XT- zt908^soV2`7s+Hha!d^#J+B)0-`{qIF_x=B811SZlbUe%kvPce^xu7?LY|C z@f1gRPha1jq|=f}Se)}v-7MWH9)YAs*FJ&v3ZT9TSi?e#jarin0tjPNmxZNU_JFJG z+tZi!q)JP|4pQ)?l8$hRaPeoKf!3>MM-bp06RodLa*wD=g3)@pYJ^*YrwSIO!SaZo zDTb!G9d!hb%Y0QdYxqNSCT5o0I!GDD$Z@N!8J3eI@@0AiJmD7brkvF!pJGg_AiJ1I zO^^cKe`w$DsO|1#^_|`6XTfw6E3SJ(agG*G9qj?JiqFSL|6tSD6vUwK?Cwr~gg)Do zp@$D~7~66-=p4`!!UzJDKAymb!!R(}%O?Uel|rMH>OpRGINALtg%gpg`=}M^Q#V5( zMgJY&gF)+;`e38QHI*c%B}m94o&tOfae;og&!J2;6ENW}QeL73jatbI1*9X~y=$Dm%6FwDcnCyMRL}zo`0=y7=}*Uw zo3!qZncAL{HCgY!+}eKr{P8o27ye+;qJP;kOB%RpSesGoHLT6tcYp*6v~Z9NCyb6m zP#qds0jyqXX46qMNhXDn3pyIxw2f_z;L_X9EIB}AhyC`FYI}G3$WnW>#NMy{0aw}nB%1=Z4&*(FaCn5QG(zvdG^pQRU25;{wwG4h z@kuLO0F->{@g2!;NNd!PfqM-;@F0;&wK}0fT9UrH}(8A5I zt33(+&U;CLN|8+71@g z(s!f-kZZZILUG$QXm9iYiE*>2w;gpM>lgM{R9vT3q>qI{ELO2hJHVi`)*jzOk$r)9 zq}$VrE0$GUCm6A3H5J-=Z9i*biw8ng zi<1nM0lo^KqRY@Asucc#DMmWsnCS;5uPR)GL3pL=-IqSd>4&D&NKSGHH?pG;=Xo`w zw~VV9ddkwbp~m>9G0*b?j7-0fOwR?*U#BE#n7A=_fDS>`fwatxQ+`FzhBGQUAyIRZ??eJt46vHBlR>9m!vfb6I)8!v6TmtZ%G6&E|1e zOtx5xy%yOSu+<9Ul5w5N=&~4Oph?I=ZKLX5DXO(*&Po>5KjbY7s@tp$8(fO|`Xy}Y z;NmMypLoG7r#Xz4aHz7n)MYZ7Z1v;DFHLNV{)to;(;TJ=bbMgud96xRMME#0d$z-S z-r1ROBbW^&YdQWA>U|Y>{whex#~K!ZgEEk=LYG8Wqo28NFv)!t!~}quaAt}I^y-m| z8~E{9H2VnyVxb_wCZ7v%y(B@VrM6lzk~|ywCi3HeiSV`TF>j+Ijd|p*kyn;=mqtf8&DK^|*f+y$38+9!sis9N=S)nINm9=CJ<;Y z!t&C>MIeyou4XLM*ywT_JuOXR>VkpFwuT9j5>667A=CU*{TBrMTgb4HuW&!%Yt`;#md7-`R`ouOi$rEd!ErI zo#>qggAcx?C7`rQ2;)~PYCw%CkS(@EJHZ|!!lhi@Dp$*n^mgrrImsS~(ioGak>3)w zvop0lq@IISuA0Ou*#1JkG{U>xSQV1e}c)!d$L1plFX5XDXX5N7Ns{kT{y5|6MfhBD+esT)e7&CgSW8FxsXTAY=}?0A!j_V9 zJ;IJ~d%av<@=fNPJ9)T3qE78kaz64E>dJaYab5uaU`n~Zdp2h{8DV%SKE5G^$LfuOTRRjB;TnT(Jk$r{Pfe4CO!SM_7d)I zquW~FVCpSycJ~c*B*V8?Qqo=GwU8CkmmLFugfHQ7;A{yCy1OL-+X=twLYg9|H=~8H znnN@|tCs^ZLlCBl5wHvYF}2vo>a6%mUWpTds_mt*@wMN4-r`%NTA%+$(`m6{MNpi@ zMx)8f>U4hd!row@gM&PVo&Hx+lV@$j9yWTjTue zG9n0DP<*HUmJ7ZZWwI2x+{t3QEfr6?T}2iXl=6e0b~)J>X3`!fXd9+2wc1%cj&F@Z zgYR|r5Xd5jy9;YW&=4{-0rJ*L5CgDPj9^3%bp-`HkyBs`j1iTUGD4?WilZ6RO8mIE z+~Joc?GID6K96dyuv(dWREK9Os~%?$$FxswxQsoOi8M?RnL%B~Lyk&(-09D0M?^Jy zWjP)n(b)TF<-|CG%!Vz?8Fu&6iU<>oG#kGcrcrrBlfZMVl0wOJvsq%RL9To%iCW@)#& zZAJWhgzYAq)#NTNb~3GBcD%ZZOc43!YWSyA7TD6xkk)n^FaRAz73b}%9d&YisBic(?mv=Iq^r%Ug zzHq-rRrhfOOF+yR=AN!a9*Rd#sM9ONt5h~w)yMP7Dl9lfpi$H0%GPW^lS4~~?vI8Z z%^ToK#NOe0ExmUsb`lLO$W*}yXNOxPe@zD*90uTDULnH6C?InP3J=jYEO2d)&e|mP z1DSd0QOZeuLWo*NqZzopA+LXy9)fJC00NSX=_4Mi1Z)YyZVC>C!g}cY(Amaj%QN+bev|Xxd2OPD zk!dfkY6k!(sDBvsFC2r^?}hb81(WG5Lt9|riT`2?P;B%jaf5UX<~OJ;uAL$=Ien+V zC!V8u0v?CUa)4*Q+Q_u zkx{q;NjLcvyMuU*{+uDsCQ4U{JLowYby-tn@hatL zy}X>9y08#}oytdn^qfFesF)Tt(2!XGw#r%?7&zzFFh2U;#U9XBO8W--#gOpfbJ`Ey z|M8FCKlWQrOJwE;@Sm02l9OBr7N}go4V8ur)}M@m2uWjggb)DC4s`I4d7_8O&E(j; z?3$9~R$QDxNM^rNh9Y;6P7w+bo2q}NEd6f&_raor-v`UCaTM3TT8HK2-$|n{N@U>_ zL-`P7EXoEU5JRMa)?tNUEe8XFis+w8g9k(QQ)%?&Oac}S`2V$b?%`DwXBgja&&fR@ zH_XidF$p1wA)J|Wk1;?lCl?fgc)=TB3>Y8;BoMqHwJqhL)Tgydv9(?(TBX)fq%=~C zmLj!iX-kn7QA(9snzk0LRf<%SzO&~IhLor6A3f*U^UcoAygRe!H#@UCv$JUP&vPxs zeDj$1%#<2T1!e|!7xI+~_VXLl5|jHqvOhU7ZDUGee;HnkcPP=_k_FFxPjXg*9KyI+ zIh0@+s)1JDSuKMeaDZ3|<_*J8{TUFDLl|mXmY8B>Wj_?4mC#=XjsCKPEO=p0c&t&Z zd1%kHxR#o9S*C?du*}tEHfAC7WetnvS}`<%j=o7YVna)6pw(xzkUi7f#$|^y4WQ{7 zu@@lu=j6xr*11VEIY+`B{tgd(c3zO8%nGk0U^%ec6h)G_`ki|XQXr!?NsQkxzV6Bn1ea9L+@ z(Zr7CU_oXaW>VOdfzENm+FlFQ7Se0ROrNdw(QLvb6{f}HRQ{$Je>(c&rws#{dFI^r zZ4^(`J*G0~Pu_+p5AAh>RRpkcbaS2a?Fe&JqxDTp`dIW9;DL%0wxX5;`KxyA4F{(~_`93>NF@bj4LF!NC&D6Zm+Di$Q-tb2*Q z&csGmXyqA%Z9s(AxNO3@Ij=WGt=UG6J7F;r*uqdQa z?7j!nV{8eQE-cwY7L(3AEXF3&V*9{DpSYdyCjRhv#&2johwf{r+k`QB81%!aRVN<& z@b*N^xiw_lU>H~@4MWzgHxSOGVfnD|iC7=hf0%CPm_@@4^t-nj#GHMug&S|FJtr?i z^JVrobltd(-?Ll>)6>jwgX=dUy+^n_ifzM>3)an3iOzpG9Tu;+96TP<0Jm_PIqof3 zMn=~M!#Ky{CTN_2f7Y-i#|gW~32RCWKA4-J9sS&>kYpTOx#xVNLCo)A$LUme^fVNH z@^S7VU^UJ0YR8?Oy$^IYuG*bm|g;@aX~i60%`7XLy*AYpYvZ^F^U(!|RW z*C!rJ@+7TGdL=nNd1gv^%B+;Fcr$y)i0!GRsZXRHPs>QVGVR{9r_#&Qd(wL|5;H;> zD>HUw=4CF++&{7$<8G@j*nGjhEO%BQYfjeItp4mPvY*JYb1HKd!{HJ9*)(3%BR%{Pp?AM&*yHAJsW({ivOzj*qS!-7|XEn6@zo z3L*tBT%<4RxoAh>q{0n_JBmgW6&8hx?kL(_^k%VL>?xjAyrKBmSl`$=V|SK}ELl}@ zd|d0eo#RfG`bw9SK3%r4Y+rdvc}w}~ixV%tqawbdqvE-WcgE+BUpxMT%F@btm76MG zn=oQRWWuTm+a{dy)Oc2V4yX(@M{QAkx>(QB59*`dLT`Pz3Lsj9iB=HSHAiCq()ns|Cr)1*c605Cx}3V&x}Lg?b+6Q?)z7Kl zQh&1Hx`y6JY-Cwvd*ozeps}a1xAA0CR+Da;+O(i)P1C;SjOI}Dtmf6tPqo-Bl`U78 zv$kYgPntPp@G)n1an9tEoL*Vumu9`>_@I(;+5+fBa-*?fEx=mTEjZ7wq}#@Gd5_cW z!mP{N=yqEntDo)|>oy6{9cu+-3*GTnmb^`O0^FzRPO^&aG`f@F_R*aQ_e{F+_9%NW z4KG_B`@X3EVV9L>?_RNDMddA>w=e0KfAiw5?#i1NFT%Zz#nuv(&!yIU>lVxmzYKQ` zzJ*0w9<&L4aJ6A;0j|_~i>+y(q-=;2Xxhx2v%CYY^{} z^J@LO()eLo|7!{ghQ+(u$wxO*xY#)cL(|miH2_ck2yN{mu4O9=hBW*pM_()-_YdH#Ru{JtwJ^R2}3?!>>m1pohh zrn(!xCjE0Q&EH1QK?zA%sxVh&H99cObJUY$veZhQ)MLu-h%`!*G)s$2k;~+A z)Kk->Ri?`oGDEJEtI*wijm(s5f$W78FH{+qBxiU{~kq((J3uK{m z$|C8K#j-?hm8H@x%VfFqpnvu@xn1s%J7uNZC9C99a<_b1J|mx%)$%!6gPU|~<@2&m zz99GDp`|a%m*iggvfL;4%X;~WY>)@!tMWB@P`)k?$;0x9JSrRI8?s3rlgH(o@`OAo zn{f*gZ#t2u6K??hx|aElOM`Xd0t+SAIUEHvFw%?Wsm$s zUXq{6UU?a>Nc@@Xlb_2k9M1Ctr<#+O?yd}rv z_wu&=_t$!Yngd@N_AUj}T; z#*Ce|%XZr_sQcsWcsl{pCnnj+c8ZNIMmx<;w=-g$Q>BU;9k;w|zQ;4!W32Xg2Cd?{ zvmO3kuKQ^Hv;o>6ZHP8ZJ2`4~Bx?N;cf<0fi=!*G^^WzbTF3e$b&d^qqB{>nqLG81 zs94bBh%|Vj+hLu=!8(b9brJ>ZBns9^6s(gdSVyP9qnu2_I{Sg8j-rloG6{d`De5We zDe5WeY3ga}Y3ga}Y3ga}Y3ga}Y3ga}d8y~6o|k%F>UpW>rJk31Ug~+N=cS&HdOqs; zsOO`ek9t1p`Kafko{xGy>iMbXr=FjBxZMYc8a#gL`Kjlpo}YSt>iMY`pk9DF0qO*( z6QE9jIsxhgs1u-0kUBx8D@eT{^@7w3QZGooAoYUO3sNscy%6<6)C*BBM7L`dk$Xk%6}eZQXgo#!75P`>Uy*-B{uTLGUy*-B{uTLGUy*-B{uTLG))v8{5gt_uj9!t5)^yb-JtjRGrhi zYInOUNJxNyf_yKX01)K=WP|Si>HqEj|B{eUl?MR<)%<1&{(~)D+NPwKxWqT-@~snp zg9KCz1VTZDiS?UH`PRk1VPM{29cgT9=D?!Wc_@}qzggFv;gb@2cJQAYWWtpEZ7?y@jSVqjx${B5UV@SO|wH<<0; z{><1KdVI%Ki}>~<`46C0AggwUwx-|QcU;iiZ{NZu`ur>hd*|Hb(|6veERqxu=b@5Bab=rqptGxd{QJg!4*-i_$sES~)AB46}Fjg|ea#e@?J}z%CUJ zOsLWRQR1#ng^sD)A4FDuY!iUhzlgfJh(J@BRqd&P#v2B`+saBx>m+M&q7vk-75$NH%T5pi%m z5FX?`2-5l53=a&GkC9^NZCLpN5(DMKMwwab$FDIs?q>4!!xBS}75gX_5;(luk;3Vl zLCLd5a_8`Iyz}K}+#RMwu6DVk3O_-}n>aE!4NaD*sQn`GxY?cHe!Bl9n?u&g6?aKm z-P8z&;Q3gr;h`YIxX%z^o&GZZg1=>_+hP2$$-DnL_?7?3^!WAsY4I7|@K;aL<>OTK zByfjl2PA$T83*LM9(;espx-qB%wv7H2i6CFsfAg<9V>Pj*OpwX)l?^mQfr$*OPPS$ z=`mzTYs{*(UW^ij1U8UfXjNoY7GK*+YHht(2oKE&tfZuvAyoN(;_OF>-J6AMmS5fB z^sY6wea&&${+!}@R1f$5oC-2J>J-A${@r(dRzc`wnK>a7~8{Y-scc|ETOI8 zjtNY%Y2!PI;8-@a=O}+{ap1Ewk0@T`C`q!|=KceX9gK8wtOtIC96}-^7)v23Mu;MH zhKyLGOQMujfRG$p(s`(2*nP4EH7*J57^=|%t(#PwCcW7U%e=8Jb>p6~>RAlY4a*ts=pl}_J{->@kKzxH|8XQ5{t=E zV&o`$D#ZHdv&iZWFa)(~oBh-Osl{~CS0hfM7?PyWUWsr5oYlsyC1cwULoQ4|Y5RHA2*rN+EnFPnu z`Y_&Yz*#550YJwDy@brZU>0pWV^RxRjL221@2ABq)AtA%Cz?+FG(}Yh?^v)1Lnh%D zeM{{3&-4#F9rZhS@DT0E(WRkrG!jC#5?OFjZv*xQjUP~XsaxL2rqRKvPW$zHqHr8Urp2Z)L z+)EvQeoeJ8c6A#Iy9>3lxiH3=@86uiTbnnJJJoypZ7gco_*HvKOH97B? zWiwp>+r}*Zf9b3ImxwvjL~h~j<<3shN8$k-$V1p|96I!=N6VBqmb==Bec|*;HUg?) z4!5#R*(#Fe)w%+RH#y{8&%%!|fQ5JcFzUE;-yVYR^&Ek55AXb{^w|@j|&G z|6C-+*On%j;W|f8mj?;679?!qY86c{(s1-PI2Wahoclf%1*8%JAvRh1(0)5Vu37Iz z`JY?RW@qKr+FMmBC{TC7k@}fv-k8t6iO}4K-i3WkF!Lc=D`nuD)v#Na zA|R*no51fkUN3^rmI;tty#IK284*2Zu!kG13!$OlxJAt@zLU`kvsazO25TpJLbK&;M8kw*0)*14kpf*)3;GiDh;C(F}$- z1;!=OBkW#ctacN=je*Pr)lnGzX=OwgNZjTpVbFxqb;8kTc@X&L2XR0A7oc!Mf2?u9 zcctQLCCr+tYipa_k=;1ETIpHt!Jeo;iy^xqBES^Ct6-+wHi%2g&)?7N^Yy zUrMIu){Jk)luDa@7We5U!$$3XFNbyRT!YPIbMKj5$IEpTX1IOtVP~(UPO2-+9ZFi6 z-$3<|{Xb#@tABt0M0s1TVCWKwveDy^S!!@4$s|DAqhsEv--Z}Dl)t%0G>U#ycJ7cy z^8%;|pg32=7~MJmqlC-x07Sd!2YX^|2D`?y;-$a!rZ3R5ia{v1QI_^>gi(HSS_e%2 zUbdg^zjMBBiLr8eSI^BqXM6HKKg#@-w`a**w(}RMe%XWl3MipvBODo*hi?+ykYq)z ziqy4goZw0@VIUY65+L7DaM5q=KWFd$;W3S!Zi>sOzpEF#(*3V-27N;^pDRoMh~(ZD zJLZXIam0lM7U#)119Hm947W)p3$%V`0Tv+*n=&ybF&}h~FA}7hEpA&1Y!BiYIb~~D z$TSo9#3ee02e^%*@4|*+=Nq6&JG5>zX4k5f?)z*#pI-G(+j|jye%13CUdcSP;rNlY z#Q!X%zHf|V)GWIcEz-=fW6AahfxI~y7w7i|PK6H@@twdgH>D_R@>&OtKl}%MuAQ7I zcpFmV^~w~8$4@zzh~P~+?B~%L@EM3x(^KXJSgc6I=;)B6 zpRco2LKIlURPE*XUmZ^|1vb?w*ZfF}EXvY13I4af+()bAI5V?BRbFp`Sb{8GRJHd* z4S2s%4A)6Uc=PK%4@PbJ<{1R6+2THMk0c+kif**#ZGE)w6WsqH z`r^DL&r8|OEAumm^qyrryd(HQ9olv$ltnVGB{aY?_76Uk%6p;e)2DTvF(;t=Q+|8b zqfT(u5@BP);6;jmRAEV057E*2d^wx@*aL1GqWU|$6h5%O@cQtVtC^isd%gD7PZ_Io z_BDP5w(2*)Mu&JxS@X%%ByH_@+l>y07jIc~!@;Raw)q_;9oy@*U#mCnc7%t85qa4? z%_Vr5tkN^}(^>`EFhag;!MpRh!&bKnveQZAJ4)gEJo1@wHtT$Gs6IpznN$Lk-$NcM z3ReVC&qcXvfGX$I0nfkS$a|Pm%x+lq{WweNc;K>a1M@EAVWs2IBcQPiEJNt}+Ea8~WiapASoMvo(&PdUO}AfC~>ZGzqWjd)4no( ziLi#e3lOU~sI*XPH&n&J0cWfoh*}eWEEZW%vX?YK!$?w}htY|GALx3;YZoo=JCF4@ zdiaA-uq!*L5;Yg)z-_`MciiIwDAAR3-snC4V+KA>&V%Ak;p{1u>{Lw$NFj)Yn0Ms2*kxUZ)OTddbiJM}PK!DM}Ot zczn?EZXhx3wyu6i{QMz_Ht%b?K&-@5r;8b076YDir`KXF0&2i9NQ~#JYaq*}Ylb}^ z<{{6xy&;dQ;|@k_(31PDr!}}W$zF7Jv@f%um0M$#=8ygpu%j(VU-d5JtQwT714#f0z+Cm$F9JjGr_G!~NS@L9P;C1? z;Ij2YVYuv}tzU+HugU=f9b1Wbx3418+xj$RKD;$gf$0j_A&c;-OhoF*z@DhEW@d9o zbQBjqEQnn2aG?N9{bmD^A#Um6SDKsm0g{g_<4^dJjg_l_HXdDMk!p`oFv8+@_v_9> zq;#WkQ!GNGfLT7f8m60H@$tu?p;o_It#TApmE`xnZr|_|cb3XXE)N^buLE`9R=Qbg zXJu}6r07me2HU<)S7m?@GzrQDTE3UH?FXM7V+-lT#l}P(U>Fvnyw8T7RTeP`R579m zj=Y>qDw1h-;|mX-)cSXCc$?hr;43LQt)7z$1QG^pyclQ1Bd!jbzsVEgIg~u9b38;> zfsRa%U`l%did6HzPRd;TK{_EW;n^Ivp-%pu0%9G-z@Au{Ry+EqEcqW=z-#6;-!{WA z;l+xC6Zke>dl+(R1q7B^Hu~HmrG~Kt575mzve>x*cL-shl+zqp6yuGX)DDGm`cid! znlnZY=+a5*xQ=$qM}5$N+o!^(TqTFHDdyCcL8NM4VY@2gnNXF|D?5a558Lb*Yfm4) z_;0%2EF7k{)i(tTvS`l5he^KvW%l&-suPwpIlWB_Za1Hfa$@J!emrcyPpTKKM@NqL z?X_SqHt#DucWm<3Lp}W|&YyQE27zbGP55=HtZmB(k*WZA79f##?TweCt{%5yuc+Kx zgfSrIZI*Y57FOD9l@H0nzqOu|Bhrm&^m_RK6^Z<^N($=DDxyyPLA z+J)E(gs9AfaO`5qk$IGGY+_*tEk0n_wrM}n4G#So>8Dw6#K7tx@g;U`8hN_R;^Uw9JLRUgOQ?PTMr4YD5H7=ryv)bPtl=<&4&% z*w6k|D-%Tg*F~sh0Ns(h&mOQ_Qf{`#_XU44(VDY8b})RFpLykg10uxUztD>gswTH} z&&xgt>zc(+=GdM2gIQ%3V4AGxPFW0*l0YsbA|nFZpN~ih4u-P!{39d@_MN)DC%d1w z7>SaUs-g@Hp7xqZ3Tn)e z7x^sC`xJ{V<3YrmbB{h9i5rdancCEyL=9ZOJXoVHo@$$-%ZaNm-75Z-Ry9Z%!^+STWyv~To>{^T&MW0-;$3yc9L2mhq z;ZbQ5LGNM+aN628)Cs16>p55^T^*8$Dw&ss_~4G5Go63gW^CY+0+Z07f2WB4Dh0^q z-|6QgV8__5>~&z1gq0FxDWr`OzmR}3aJmCA^d_eufde7;d|OCrKdnaM>4(M%4V`PxpCJc~UhEuddx9)@)9qe_|i z)0EA%&P@_&9&o#9eqZCUCbh?`j!zgih5sJ%c4(7_#|Xt#r7MVL&Q+^PQEg3MBW;4T zG^4-*8L%s|A}R%*eGdx&i}B1He(mLygTmIAc^G(9Si zK7e{Ngoq>r-r-zhyygK)*9cj8_%g z)`>ANlipCdzw(raeqP-+ldhyUv_VOht+!w*>Sh+Z7(7(l=9~_Vk ztsM|g1xW`?)?|@m2jyAgC_IB`Mtz(O`mwgP15`lPb2V+VihV#29>y=H6ujE#rdnK` zH`EaHzABs~teIrh`ScxMz}FC**_Ii?^EbL(n90b(F0r0PMQ70UkL}tv;*4~bKCiYm zqngRuGy`^c_*M6{*_~%7FmOMquOEZXAg1^kM`)0ZrFqgC>C%RJvQSo_OAA(WF3{euE}GaeA?tu5kF@#62mM$a051I zNhE>u>!gFE8g#Jj95BqHQS%|>DOj71MZ?EYfM+MiJcX?>*}vKfGaBfQFZ3f^Q-R1# znhyK1*RvO@nHb|^i4Ep_0s{lZwCNa;Ix<{E5cUReguJf+72QRZIc%`9-Vy)D zWKhb?FbluyDTgT^naN%l2|rm}oO6D0=3kfXO2L{tqj(kDqjbl(pYz9DykeZlk4iW5 zER`)vqJxx(NOa;so@buE!389-YLbEi@6rZG0#GBsC+Z0fzT6+d7deYVU;dy!rPXiE zmu73@Jr&~K{-9MVQD}&`)e>yLNWr>Yh8CXae9XqfvVQ&eC_;#zpoaMxZ0GpZz7xjx z`t_Q-F?u=vrRPaj3r<9&t6K=+egimiJ8D4gh-rUYvaVy zG($v+3zk5sMuOhjxkH7bQ}(5{PD3Mg?!@8PkK&w>n7tO8FmAmoF30_#^B~c(Q_`4L zYWOoDVSnK|1=p{+@`Fk^Qb81Xf89_S`RSTzv(a4ID%71nll%{Wad$!CKfeTKkyC?n zCkMKHU#*nz_(tO$M)UP&ZfJ#*q(0Gr!E(l5(ce<3xut+_i8XrK8?Xr7_oeHz(bZ?~8q5q~$Rah{5@@7SMN zx9PnJ-5?^xeW2m?yC_7A#WK*B@oIy*Y@iC1n7lYKj&m7vV;KP4TVll=II)$39dOJ^czLRU>L> z68P*PFMN+WXxdAu=Hyt3g$l(GTeTVOZYw3KY|W0Fk-$S_`@9`K=60)bEy?Z%tT+Iq z7f>%M9P)FGg3EY$ood+v$pdsXvG? zd2q3abeu-}LfAQWY@=*+#`CX8RChoA`=1!hS1x5dOF)rGjX4KFg!iPHZE2E=rv|A} zro(8h38LLFljl^>?nJkc+wdY&MOOlVa@6>vBki#gKhNVv+%Add{g6#-@Z$k*ps}0Y zQ=8$)+Nm||)mVz^aa4b-Vpg=1daRaOU)8@BY4jS>=5n#6abG@(F2`=k-eQ9@u# zxfNFHv=z2w@{p1dzSOgHokX1AUGT0DY4jQI@YMw)EWQ~q5wmR$KQ}Y;(HPMSQCwzu zdli|G?bj(>++CP)yQ4s6YfpDc3KqPmquQSxg%*EnTWumWugbDW5ef%8j-rT#3rJu? z)5n;4b2c*;2LIW%LmvUu6t1~di~}0&Svy}QX#ER|hDFZwl!~zUP&}B1oKAxIzt~so zb!GaJYOb#&qRUjEI1xe_`@7qv_-LggQ$JE8+{ryT4%ldwC5ete+{G3C#g@^oxfY3#F zcLlj(l2G8>tC<5XWV|6_DZQZ7ow?MD8EZ9mM2oV~WoV-uoExmbwpzc6eMV}%J_{3l zW(4t2a-o}XRlU|NSiYn!*nR(Sc>*@TuU*(S77gfCi7+WR%2b;4#RiyxWR3(u5BIdf zo@#g4wQjtG3T$PqdX$2z8Zi|QP~I^*9iC+(!;?qkyk&Q7v>DLJGjS44q|%yBz}}>i z&Ve%^6>xY<=Pi9WlwpWB%K10Iz`*#gS^YqMeV9$4qFchMFO}(%y}xs2Hn_E}s4=*3 z+lAeCKtS}9E{l(P=PBI;rsYVG-gw}-_x;KwUefIB@V%RLA&}WU2XCL_?hZHoR<7ED zY}4#P_MmX(_G_lqfp=+iX|!*)RdLCr-1w`4rB_@bI&Uz# z!>9C3&LdoB$r+O#n);WTPi;V52OhNeKfW6_NLnw zpFTuLC^@aPy~ZGUPZr;)=-p|b$-R8htO)JXy{ecE5a|b{{&0O%H2rN&9(VHxmvNly zbY?sVk}@^{aw)%#J}|UW=ucLWs%%j)^n7S%8D1Woi$UT}VuU6@Sd6zc2+t_2IMBxd zb4R#ykMr8s5gKy=v+opw6;4R&&46$V+OOpDZwp3iR0Osqpjx))joB*iX+diVl?E~Q zc|$qmb#T#7Kcal042LUNAoPTPUxF-iGFw>ZFnUqU@y$&s8%h-HGD`EoNBbe#S>Y-4 zlkeAP>62k~-N zHQqXXyN67hGD6CxQIq_zoepU&j0 zYO&}<4cS^2sp!;5))(aAD!KmUED#QGr48DVlwbyft31WlS2yU<1>#VMp?>D1BCFfB z_JJ-kxTB{OLI}5XcPHXUo}x~->VP%of!G_N-(3Snvq`*gX3u0GR&}*fFwHo3-vIw0 zeiWskq3ZT9hTg^je{sC^@+z3FAd}KNhbpE5RO+lsLgv$;1igG7pRwI|;BO7o($2>mS(E z$CO@qYf5i=Zh6-xB=U8@mR7Yjk%OUp;_MMBfe_v1A(Hqk6!D})x%JNl838^ZA13Xu zz}LyD@X2;5o1P61Rc$%jcUnJ>`;6r{h5yrEbnbM$$ntA@P2IS1PyW^RyG0$S2tUlh z8?E(McS?7}X3nAAJs2u_n{^05)*D7 zW{Y>o99!I9&KQdzgtG(k@BT|J*;{Pt*b|?A_})e98pXCbMWbhBZ$t&YbNQOwN^=F) z_yIb_az2Pyya2530n@Y@s>s>n?L79;U-O9oPY$==~f1gXro5Y z*3~JaenSl_I}1*&dpYD?i8s<7w%~sEojqq~iFnaYyLgM#so%_ZZ^WTV0`R*H@{m2+ zja4MX^|#>xS9YQo{@F1I)!%RhM{4ZUapHTKgLZLcn$ehRq(emb8 z9<&Nx*RLcS#)SdTxcURrJhxPM2IBP%I zf1bWu&uRf{60-?Gclb5(IFI*!%tU*7d`i!l@>TaHzYQqH4_Y*6!Wy0d-B#Lz7Rg3l zqKsvXUk9@6iKV6#!bDy5n&j9MYpcKm!vG7z*2&4G*Yl}iccl*@WqKZWQSJCgQSj+d ze&}E1mAs^hP}>`{BJ6lv*>0-ft<;P@`u&VFI~P3qRtufE11+|#Y6|RJccqo27Wzr}Tp|DH z`G4^v)_8}R24X3}=6X&@Uqu;hKEQV^-)VKnBzI*|Iskecw~l?+R|WKO*~(1LrpdJ? z0!JKnCe<|m*WR>m+Qm+NKNH<_yefIml z+x32qzkNRrhR^IhT#yCiYU{3oq196nC3ePkB)f%7X1G^Ibog$ZnYu4(HyHUiFB`6x zo$ty-8pknmO|B9|(5TzoHG|%>s#7)CM(i=M7Nl=@GyDi-*ng6ahK(&-_4h(lyUN-oOa$` zo+P;C4d@m^p9J4c~rbi$rq9nhGxayFjhg+Rqa{l#`Y z!(P6K7fK3T;y!VZhGiC#)|pl$QX?a)a9$(4l(usVSH>2&5pIu5ALn*CqBt)9$yAl; z-{fOmgu><7YJ5k>*0Q~>lq72!XFX6P5Z{vW&zLsraKq5H%Z26}$OKDMv=sim;K?vsoVs(JNbgTU8-M%+ zN(+7Xl}`BDl=KDkUHM9fLlV)gN&PqbyX)$86!Wv!y+r*~kAyjFUKPDWL3A)m$@ir9 zjJ;uQV9#3$*`Dqo1Cy5*;^8DQcid^Td=CivAP+D;gl4b7*xa9IQ-R|lY5tIpiM~9- z%Hm9*vDV@_1FfiR|Kqh_5Ml0sm?abD>@peo(cnhiSWs$uy&$RYcd+m`6%X9FN%?w}s~Q=3!pJzbN~iJ}bbM*PPi@!E0eN zhKcuT=kAsz8TQo76CMO+FW#hr6da({mqpGK2K4T|xv9SNIXZ}a=4_K5pbz1HE6T}9 zbApW~m0C`q)S^F}B9Kw5!eT)Bj_h9vlCX8%VRvMOg8PJ*>PU>%yt-hyGOhjg!2pZR4{ z=VR_*?Hw|aai##~+^H>3p$W@6Zi`o4^iO2Iy=FPdEAI58Ebc~*%1#sh8KzUKOVHs( z<3$LMSCFP|!>fmF^oESZR|c|2JI3|gucuLq4R(||_!8L@gHU8hUQZKn2S#z@EVf3? zTroZd&}JK(mJLe>#x8xL)jfx$6`okcHP?8i%dW?F%nZh=VJ)32CmY;^y5C1^?V0;M z<3!e8GZcPej-h&-Osc>6PU2f4x=XhA*<_K*D6U6R)4xbEx~{3*ldB#N+7QEXD^v=I z+i^L+V7_2ld}O2b-(#bmv*PyZI4|U#Q5|22a(-VLOTZc3!9ns1RI-? zA<~h|tPH0y*bO1#EMrsWN>4yJM7vqFZr?uw$H8*PhiHRQg1U9YoscX-G|gck+SSRX!(e7@~eeUEw+POsT;=W9J&=EV`cUc{PIg_#TQVGnZsQbCs7#Q-)v#BicxLw#Fb?#)8TYbu zN)5R=MI1i7FHhF|X}xEl=sW~`-kf;fOR^h1yjthSw?%#F{HqrY2$q>7!nbw~nZ8q9 zh{vY! z%i=H!!P&wh z7_E%pB7l5)*VU>_O-S~d5Z!+;f{pQ4e86*&);?G<9*Q$JEJ!ZxY;Oj5&@^eg0Zs!iLCAR`2K?MSFzjX;kHD6)^`&=EZOIdW>L#O`J zf~$M4}JiV}v6B-e{NUBGFgj-*H%NG zfY0X(@|S8?V)drF;2OQcpDl2LV=~=%gGx?_$fbSsi@%J~taHcMTLLpjNF8FkjnjyM zW;4sSf6RHaa~LijL#EJ0W2m!BmQP(f=%Km_N@hsBFw%q#7{Er?y1V~UEPEih87B`~ zv$jE%>Ug9&=o+sZVZL7^+sp)PSrS;ZIJac4S-M>#V;T--4FXZ*>CI7w%583<{>tb6 zOZ8gZ#B0jplyTbzto2VOs)s9U%trre`m=RlKf{I_Nwdxn(xNG%zaVNurEYiMV3*g| z``3;{j7`UyfFrjlEbIJN{0db|r>|LA@=vX9CHFZYiexnkn$b%8Rvw0TZOQIXa;oTI zv@j;ZP+#~|!J(aBz9S{wL7W%Dr1H)G-XUNt9-lP?ijJ-XEj1e*CI~-Xz@4(Xg;UoG z{uzBf-U+(SHe}6oG%;A*93Zb=oE>uTb^%qsL>|bQf?7_6=KIiPU`I|r;YcZ!YG7y~ zQu@UldAwz$^|uoz3mz1;An-WVBtefSh-pv<`n&TU3oM!hrEI?l@v8A4#^$4t&~T32 zl*J=1q~h+60sNc43>0aVvhzyfjshgPYZoQ(OOh>LbUIoblb@1z~zp?))n?^)q6WGuDh}gMUaA9|X z3qq-XlcNldy5==T4rq*~g@XVY!9sYZjo#R7 zr{n)r5^S{9+$+8l7IVB*3_k5%-TBY@C%`P@&tZf>82sm#nfw7L%92>nN$663yW!yt zhS>EfLcE_Z)gv-Y^h1;xj(<4nD4GY{C-nWUgQc9cMmH{qpa!uEznrGF^?bbJHApScQ$j>$JZHAX80DdXu z--AMgrA0$Otdd#N9#!cg2Z~N8&lj1d+wDh+^ZObWJ$J)_h(&2#msu>q0B$DEERy{1 zCJN{7M@%#E@8pda`@u!v@{gcT3bA*>g*xYLXlbb&o@1vX*x+l}Voys6o~^_7>#GB| z*r!R%kA9k%J`?m>1tMHB9x$ZRe0$r~ui}X}jOC)9LH=Po*2SLdtf3^4?VKnu2ox&mV~0oDgi` z;9d}P$g~9%ThTK8s}5ow2V4?(-lU*ed8ro|}mU}pk% z;bqB0bx3AOk<0Joeh}Vl@_7Po&C`Cg>>gff>e7fu41U3Ic{JQu1W%+!Gvz3GDO2ixKd;KF6UEw8F_cDAh08gB>@ zaRH2Q96sBJ>`4aXvrF0xPtIWoA1pPsRQtU~xDtnEfTJnl{A9u5pR^K8=UdNq%T8F$)FbN> zgK+_(BF#D>R>kK!M#OT~=@@}3yAYqm33?{Bv?2iBr|-aRK0@uapzuXI)wE0=R@m^7 zQ`wLBn(M*wg!mgmQT1d!@3<2z>~rmDW)KG0*B4>_R6LjiI0^9QT8gtDDT|Lclxppm z+OeL6H3QpearJAB%1ellZ6d*)wBQ(hPbE=%?y6i^uf%`RXm*JW*WQ%>&J+=V(=qf{ zri~yItvTZbII+7S0>4Q0U9@>HnMP$X>8TqAfD(vAh};2P{QK)ik`a6$W$nG<{bR2Ufd!^iE z#1K58$gW!xpeYHeehuhQCXZ9p%N8m zB+l~T_u-Ycr!U>!?xu!!*6rNxq37{`DhMMfY6NpD3Jw zkYQDstvt30Hc_SaZuuMP2YrdW@HsPMbf^Y9lI<9$bnMil2X7`Ba-DGLbzgqP>mxwe zf1&JkDH54D3nLar2KjJ3z`*R+rUABq4;>>4Kjc2iQEj7pVLcZYZ~pteAG4rm1{>PQy=!QiV5G|tVk)53 zP?Azw+N)Yq3zZ`dW7Q9Bq@Y*jSK0<1f`HM;_>GH57pf_S%Ounz_yhTY8lplQSM`xx zU{r-Deqs+*I~sLI$Oq`>i`J1kJ(+yNOYy$_>R3Jfi680<|^u#J@aY%Q>O zqfI~sCbk#3--^zMkV&Yj0D(R^rK}+_npgPr_4^kYuG=pO%$C_7v{s@-{M-P@RL3^<`kO@b=YdKMuccfO1ZW# zeRYE%D~CMAgPlo?T!O6?b|pOZv{iMWb;sN=jF%=?$Iz_5zH?K;aFGU^8l7u%zHgiy z%)~y|k;Es-7YX69AMj^epGX#&^c@pp+lc}kKc`5CjPN4Z$$e58$Yn*J?81%`0~A)D zPg-db*pj-t4-G9>ImW4IMi*v#9z^9VD9h@9t;3jMAUVxt=oor+16yHf{lT|G4 zya6{4#BxFw!!~UTRwXXawKU4iz$$GMY6=Z8VM{2@0{=5A0+A#p6$aT3ubRyWMWPq9 zCEH5(Il0v4e4=Yxg(tDglfYAy!UpC>&^4=x7#6_S&Ktds)a8^`^tp6RnRd{KImB^o z2n=t#>iKx<*evmvoE{+fH#@WXGWs$)Uxrtf?r>AaxV0?kf0o@oDboJ6z0cgP@A$;k>SK1UqC?Q_ zk_I?j74;}uNXhOf_5ZxQSgB4otDEb9JJrX1kq`-o%T>g%M5~xXf!2_4P~K64tKgXq z&KHZ0@!cPvUJG4kw-0;tPo$zJrU-Nop>Uo65Pm|yaNvKjhi7V1g98;^N1~V3% zTR>yWa+X2FJ_wpPwz3i^6AGwOa_VMS-&`*KoKgF2&oR10Jn6{!pvVG@n=Jk@vjNuY zL~P7aDGhg~O9G^!bHi$8?G9v9Gp0cmekYkK;(q=47;~gI>h-kx-ceM{ml$#8KI$4ltyjaqP zki^cyDERloAb)dcDBU4na9C(pfD{P@eBGA}0|Rb)p{ISqi60=^FUEdF!ok{Gs;vb) zfj9(#1QA64w*ud^YsN5&PeiI>c`VioE8h)e}W%S9NMA55Gs zrWL6l+@3CKd@8(UQLTwe12SGWMqRn+j)QZRj*g)Xua)%ayzpqs{pD(WWESJYL3{M$ z%qkpM`jFoqLYVv6{IbCkL?fEiJj$VG=$taup&RL9e{s(Sgse2xVJlw0h74EXJKt2eX|dxz{->0)3W`JN7Bv!rLvRZc z0tAOZ2yVe4g9iq826qXAg`f!*+}(o1;1FDb>kKexumFS40KvK0yH1_@Z=LgWZ+}(Y zwYsa;OLz6tTA%gS=>8$=Z7pLh>|K2QElL)E=Q*(n*H`8R`8={-@4mTD-SWBOYRxV? zmF(-rJB8^Wlp?319rTrh^?QEP?|Msxrv?WbJ-+id+V#F2Y4(JPJ6U9bv+U1cIIH^W z)lg$_=g^Ma>2~Pyd_YOAv29Cb-U6DJO?NxnW7~QP*SmYi*vdUVuW#LWQ_u0`hymZi zaQS3Nb^4`ro$>0G%zbXmr5|D|iq0R<;S@?kr0j5Ruq87-Z1>crx%EzVZ9#U;{?}ti zW2W%*9MQg3Nbh%Ti6LhDd|-aFSgXoPG`mHlUU1iCHr>ru>DX?W_#13(`u*!Plu2OP z6jk=2>BC0l)aw;HCmxoYD1i4b%m$1`DYC_^L~ zIEAnFcHvad=-aO3(_MI=9#`z6-9*_!&$?<%meb5;jGd5Qp=MGf z6BD{%`L#TAOq%z%@*ib95Ey7NbUF=BlszVk3Iu3imD&*91N-ij%hW?W@~2TtdHTfP z#n0@Xd7X8Dyu36n{k#PwQ~T~X7mAO^cNV+z<HO@3X-# z_@rAn$k~(l@kciCC;&Qd*fWRI>=;fL{UPlciNDWyj$bX<#r^(r;EE8wwUVQm&7~QY zCXRj!**r^xybAEPq>h3W$uvI1j=yNIyzkE_D7fpGw)OV{U*Uwm{xB;mEg2(|y|ICd zMdQVqzMb-=XM6|E-a9kNh)^9lY`-DjhhHD1w5lufRcy+QLgJ47!fFne86#F; zX{ufroVBEZJOY?rDo!;Te6aOZ^1SO!dYRxQ*2njyA~dCWawn)>!*k7~>8Ikt&e*0>>V5ZbO|*1+2LFOqVe zXHb!aMk03^h%&9L8GMy7UDI2Kev>V@(R}*Iu6x+!Hn4~D@wj`P%#Hdbf(lK{+DD7f zJ&(v*mhn_e(R$^5L#bM^^Q@-!*b!l|+Xrb(q*MRFJYnrE7*xko!SJOy9LngR2|q5k zY`Ioiu+YBfzF{Labszk-E#*BYQk>$()=xWEGZRKwY)*UxP}0dGuPLZOkNJDI9Hy zFjfwiK6RjhH#rHW#B0(MW}i%V`943<6@Z*Nd^JEP5uZonXm=u%AM>{H^U@&Jy*i0s za_Da^xI6pMtXzHc{e~_ZcnKP*;=YL2Z^RmzDl{dJTk7*}E_h*NvgnhnxVKB59Duh~ zqouS_WoOR*{UvUw_K#OWz;gMracr%8>QQ&V*jv!8)ho;U8}9~8EU{N<=Z_gR%IpMT zbkePUG_afm=#|iIfFmdqkpLMGxY5D$`?I}&T7>TexU@v zkBx09kG)O;09ckj#(_Uov6vv{{HOcr-%H#DUQ@*GzF8Zh{iSM13%fuB%>wjdU@3Nf zlnYE!GTyNrqes|;nLFXfWU*Wg-9wmr=NBd$nCk+H?iwNvcd0Wab^3CT9a`>3V~oWI z9=_H+N-Q=MQ(io4u4mpdQ;k&5FXnKV5M7R`@WJ9h(GrAirO#XXOU{qQpk^B^Vd=Dt{wiqT zg-#j9J~@o%H2;W9mg)o6@*Vo;BSs2*4HAHpDk02mndAsov08R_48zJZ@J)s7+hyCo zy*0L#y)?AqZt-wX%+_Vx`8*A95OLHvs1$k~{h-_N_vov_gHJE=`X>L?5K+ zD?u59=mjtImMvd1GsDytuYp{IyUkW&?h zF>$#`n$~bZ)KN0B$XGeMYh&`;g8 zo_2-koaO6+8O!+L>SpIQbG(i;QW9UJi{Ecewlo?s&D!^>i$|#jaW}#HJuxt|W48=? zb^Y&O$a1s5ddr8DIt!sD!t=y1g(d4GR(s;s-HfV$GXl&m;+sAAxB^rk(3_NjE$p#L z*t4em?tA0d+XwRxN^OQwzbDZMuSE0J1)Ky{mq)^t4bnSl*)s>zNM@mMdtd78&ebHN z`!(|lE5q-p+TsRaNnMXwALaN5QIZ2IUi^Z22tsN5>nvIO+YU}Q*xh6}ee6@rR~<&1 z(PB4z>9ZBUMXZwSMmd9-aKKsmJeJq^G|#JclOh*xf0?^e0(`40nsg1z)(48;4}B_( zGwPI)yo|{oX{dVDL-5-aMGr;~vU1cPtJP5JM(sswz&Q`e<@0?y{YhsO9YK8EYJA;L z>7oG_Mts+(wCBC*Md82#XdKw&J*IizR?9k^rf1r{Ot-&>V^ke{9nI9zavlcNkIJtN z7T>?o|4rENk-?|lewZ(EfdR;%BUrzKJ^UkCpsM)EA9QHBVV8trT&*O(9?FO{MLTFL z=5P0H+T6C^jAuX0k4U;~GM!x`!X2N~3_n?qXY$HI>x@(DHEy&Q3ucT1R6fj28wX!I zC=&d$@bJ_v^%?W2Ngl}e8ww`b%BrN-PzGH;$@B2Ky1?%GMkm#~Okj(-Admyy;qya| zOi73kr_pwt?5Nj3p=&H>81!w#>Agj z(QXx{j0r=pTl>micAI_5vUw<3`Sht?Z}-j2Wx~F8DKCUQrsXl2?W8hur42(F_ zsSJ)_36&x6A|YkY6c<2a94SXbv~d>4CC4nkDPvf9Z5Fys^6^5r0j5=E>Cgy_Dk@tS z%?c}9!qB?t6t8(XMH%le8UeNWp@Nsma~Ql+^3Bo%_npMryeQJz4V=BAqE~T?dejng z3ge{fjCHoNAfYBvsfq;G%VL|j7t z`X0sy1EEgpyD;)tS1x+fnv-?C@glP0{RCW}Ma?3qpoq_&IJAYOy3G#s`rsh5=3>`K zkj``=;|*x5HSjZC zXNvPLh372q;=+6ja|SC!R-`JcL}}wwskajjTUGTpL(1zkN-p?BA2lmf+J3WsB7!k`0Brx8^cLTF9h)r+LZ$vsZo}`OpOs)?c6$hclR!R#MAeh|_DY|9r zy+_3c%IO9h9X?ksp?an&>Lw;QeQ`T-Ku6HaK~H?E9-Z5$cZu{YU;1+-6B$|JD;%!^ zt(4l>F8}a-UkC4YtOxFHckhl4VKr6P$P_O*U!)IDory%}Wz`YeFx6TO{y2Y${SBm?H9cTWV=WWJ z`_*CGso!ZN>l@~_jkeXtV}fczfA{TUkyeD>)i3|NFGcCsBmK3HXp&ol_@GVs7PIpfULy!hi zs+%KYgS%(n7_z_}6)hblk~W#LZ@&2)fwm6xkFP%&Ju|MFWbNiTwy{{g-pV1RK`L&=RE2D z4|g;~vd8xd|teYS%w!IlT4W$&FTrk-hcTADX!P?*f1YWEIRwq$Ys%^(Z9w&HT$>} zsMD#6Df=uJrX!JHP7<>Or;e_Cf=}`!`qR=i8fBj)$6Lxx{HRzd8Tnzd0p>kSps{OG zKJkml>bUj8$u|F=``l(-aMxWBC@CGZ#FXClQZ<4|&%jN}Tkg#q8z)=>Ly{$i0`rjU zvt|QddO&i=91e?h3>s~i;+6{ z8X4i6a1wDLrSuE#W(zhan+U*Zq+8p3a))JFVF4ffaV51K^YgTso~3;Y*NmM; zx8T?y-N0uyWY(8=me-HUC9xtABvX5~%yg+Cp&XF$Bq=OcK6T*D7eZ2EmIoCFWm{$S z1PNw8HDpe5hHeCusN8kdeb&f2#=3M^A~7YwJ7FRrhq*)PG9x?JIAaC{MV}5}g#7R$-Ly%)4=IUkRCGOR|XTMjn&okRmFjaO^YF5^* z@)#MCBOBezD)*xQNxydlUyN?dW{fS(s-T`gv*0BEnk}`BdmrbmPO8q8y(X$AA}*RH%I7Av!~84pudHb&%Q5-j zt?=6x(iR?<^_7X0v6Ys#VAL}dKk^hcjI=|EY;kPcZ_w<*H`_*|N7SacaM1ERD@6ab zg`!iTm7$URV+lpW_{V$ruR&A>jrX68k4x2wo$45}&wf7o<|o(@B!u-L@bKyQBAGwy z4#}UrRAu>^>Vb6k2-th^>WjvP;Nl|i3WrjWv3ISkj{m{eAcQIW^_ndxSX@|8T(ASJ z?_$fcP2u*6uOBk-{d>^ z0vWlfGQMvysI%R=iE|A+!!Nw?C917EU*_$`;;)px?s83CRd3i_jBN)k#nR5t$dJ(+ z_sP;wG@Ad)^(3LRj7q}0b2O(b`|i0~5SYb%Sjk^*5ISZ-Ab+}DGu$-X1n^TF1Ndw_ zF|e*1)cI2%`TR&AW~XpqpFb!=3cHbS>np9hYD_Mr5}y5Y`SY^r7isA2Q4(z zazRQEqWDKT2zIEbjSYdCPi1ZOGz80Nsl}gxO^DWMY0AV<2K&OL{&^6#@L1?lXu#6xSMh%3^5c*}oM6DQGY#(a^@z<&D zF(43I9e&5`h|A$5!+UFuOH0>F3$shBV4`0#M4RSB8=6F0ZgIbq<2LQ$Hh^(kAJu=! zt8ZGXTacD{(3W{V1$j_{Jc)Ka7t6u}ho`4kF+4@t_0!mCBn z)}o%eA}L)_L?=jw6BIfll7tb3n}?*yLt&XADa=rW>qz=_6s9ziOd5sXjil>FVFx3r zf>Feewk0v#W9>Gp4GacTRr>Sd2T6dWi-{YX`v!D)kCWzG5xQB=?es5ON(%nkwUhNl zV>@xkWWWv*N+{e$(SrExvN6BXzU(Hxlx27{VYHf+LpIbTO+Yu(ltMk<;)3A(LU@ytVYFkYvTa79idMtUFhfxx?P!)2F`prNWW#Fub#l>N2s@nh&n_ zA4{#}|AIs9|A4P0ZF%fy=hDN!t#ifH<)4u2kirK~JUpjQ-J+~cXOZI&dIts;P}UeXslP6zKvpEKSN-$y>kJ^nw2tC9bv zo(|lT@?vZ!{_l|d^8Yh)eEBh*5ABh+Lzjw+?V)o z#P-W7361>E(Y4;@`sv;VKn G`u_lkUM?>H diff --git a/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.woff2 b/src/drivers/camserverWeb/public/fonts/glyphicons-halflings-regular.woff2 deleted file mode 100755 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 zcmV(~K+nH-Pew8T0RR9107h&84*&oF0I^&E07eM_0Rl|`00000000000000000000 z0000#Mn+Uk92y`7U;vDA2m}!b3WBL5f#qcZHUcCAhI9*rFaQJ~1&1OBl~F%;WnyLq z8)b|&?3j;$^FW}&KmNW53flIFARDZ7_Wz%hpoWaWlgHTHEHf()GI0&dMi#DFPaEt6 zCO)z0v0~C~q&0zBj^;=tv8q{$8JxX)>_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0? zKe|5r<_7CD z=eO3*x!r$aX2iFh3;}xNfx0v;SwBfGG+@Z;->HhvqfF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9 z&kjG^P~0f46i13(w!hEDJga;*Eb z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo) z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFtYBUY#g-Vv?5AEBj1 z`$T^tRKca*sn7gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@ zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU zJK^Pptnn0Rc~egGIAK}uv99VZm2WLPezQQ5K<`f zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i zQ>6U_8}Ay~r4li;jzG+$&?S12{)+<*k9 z<^SX#xY|jvlvTxt(m~C7{y{3g>7TX#o2q$xQO|fc<%8rE@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66 znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9) z`LVP?3f;o}sz*7g5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3 zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v z)Bw133RMUM%wu_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51% zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hIltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{FkO;p>_&njI> zyBHh_72bW;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kfk*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3) zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS- zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrsY)aI=9b4nPy3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;? zebEZYouRv}-0r;Dq&z9>s#Rt1HL`0p4bB)A&sMyn|rE_9nh z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na< zQ&Ni*1Qel&Xq{Z?=%f0SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL- zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^ zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&SN}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e| zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0 zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29 zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa zJ&j7%Ef3w*XWf?V*nR)|IOMrX;$*$e23m?QN` zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e zrrc>bzX^6yFV!^v7;>J9>j;`qHDQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^utT=I zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L!W;$57NjN%4 z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t zkwoGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4 z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz z@FT4cm^I&#Fu_9IX(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2{r;2E!oy$k5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD| zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9< z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ z*L06f2~BX9qX}u)nrpmHPG#La#tiZ23<>`R@u8k;ueM6 znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&EGO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm zFa^H5oBDL3uLkaFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H< zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr; z#L52S6*aM-_$P9xFuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41 zoDEUpX-g&Hh&GP3koF4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT zisRz-xDBYoYxt6--g2M1yh{#QWFCISux}4==r|7+fYdS$%DZ zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb zPPb+4&j?a!6ZnPTB>$t`(XSf-}`&+#rI#`GB> zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d! z>gv^xx<0jXOz;7HIQS z4RBIFD?7{o^IQ=sNQ-k!ao*+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H) zKt)YMZ*RkbU!GPHzJltmW-=6zqO=5;S)jz{ zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq zz!NlRY2ZLno0&6bA|KHPYOMY;;LZG&_lzuLy{@i$&B(}_*~Zk2 z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!! z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7CCF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5 zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(?Z_Dk6oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3 z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa= z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2* z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB* zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S? zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^ z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSuk{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l* z1FRzJ#yQbTHO}}wt0!y8Eh-0*|Um3vjX-nWH>`JN5tWB_gnW%; zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@* zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff* zkrIo|pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A& z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B z4X7ac=0&58j^@2EBZCs}YPe3rqgLAA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{ zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8 zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g zL3(0dP>%Oj&vm5Re%>*4x|h1J2X*mK5BH1?Nx_#7( zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR zK`f5SD2|;=BhU#AmaTKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B> zPDMT0D&08dC4x@cTD$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K? zuwSyDke~7KuB2?*#DV8YzJw z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7} zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~ z1Q;y5Z^MF<=Hr}rdoz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2 zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7 zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5| zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJPq zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S? zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZDE z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRhGl>Ny-Q#JAq-+qtI@B@&w z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%^qRB%KLaqMnG|6xKAm}sx!Qwo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K zlYAm1eY**HZOj($)xfKIQFtIVw$4&yvz9>(Crs>Gh{ zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740< zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_* z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbzgDn07*he}G&w7m!;|E(L-?+cz@0<9ZI~LqYQE7>HnPA436}oeN2Y(VfG6 zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUyXus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ z24h570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@efO3>fkRMcM>J?AeVP& zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!} z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq* z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{( z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4 zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2 zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj zg@FjEaKoolrF8%c;49|`IT&25?O$dq8kp3#la9&6aH z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$ zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+@~is?Fi+jrr@l3XwD|uG zr26jUWiv>Ju48Y^#qn7r9mwIH-Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978 zp8z!v9~8Zx8qB@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9 zC=^*!{`7={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6 z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u zo`P!~vBT$YOT~gU9#PB)%JZ zcd_u=m^LYzC!pH#W`yA1!(fA;D~b zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9b3pv-GF$elX7ib9!uILM_$ke zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u zS3goV@Dic7vc5`?!pCN44Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2 zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2 z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oVlf&F*lz+#avb4)3P1c^Mf#olQheVvZ|Z5 z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2kCOV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6 zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl{X9oJ{sRC2(cs?- diff --git a/src/drivers/camserverWeb/public/index.html b/src/drivers/camserverWeb/public/index.html deleted file mode 100755 index fc1b704c1..000000000 --- a/src/drivers/camserverWeb/public/index.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - CamServerWeb - - - - - - - - - - - - -
-
-
-

-

- -

-
-
- - -
- - - - - - - - - - - - diff --git a/src/drivers/camserverWeb/public/js/CamServer.js b/src/drivers/camserverWeb/public/js/CamServer.js deleted file mode 100755 index 4c4b6c49c..000000000 --- a/src/drivers/camserverWeb/public/js/CamServer.js +++ /dev/null @@ -1,20 +0,0 @@ -function CameraServer (conf) { - var server = undefined; - this.config = conf; - - this.start= function(){ - if (server == undefined){ - server = new API.CameraServer(this.config); - server.connect(); - } - server.startStreaming(); - } - - this.restart = function(){ - server.restart(); - server = undefined; - server = new API.CameraServer(this.config); - server.connect(); - server.startStreaming(); - } -} diff --git a/src/drivers/camserverWeb/public/js/apiCamServer.js b/src/drivers/camserverWeb/public/js/apiCamServer.js deleted file mode 100755 index 65106efb5..000000000 --- a/src/drivers/camserverWeb/public/js/apiCamServer.js +++ /dev/null @@ -1,121 +0,0 @@ -var API = API || {}; -API.CameraServer = function (conf){ - var config = conf || {}; - var videoSource; - var cameraTimer; - this.imageTopic = undefined; - this.cameraInfor = undefined; - this.ros = undefined; - this.server = conf.serv; - - var self = this; - - this.connect = function (){ - - // This function is called upon the rosbridge connection event - self.ros = new ROSLIB.Ros(); - - self.ros.on('connection', function() { - // Write appropriate message to #feedback div when successfully connected to rosbridge - console.log("Connect websocket") - }); - // This function is called when there is an error attempting to connect to rosbridge - self.ros.on('error', function(error) { - // Write appropriate message to #feedback div upon error when attempting to connect to rosbridge - console.log("Error to connect websocket") - }); - - self.imageTopic = new ROSLIB.Topic({ - ros : self.ros, - name : config.topic, - messageType : config.msgs - }); - - self.cameraInfo = new ROSLIB.Topic({ - ros: self.ros, - name : "/usb_cam/camera_info", - messageType: "sensor_msgs/CameraInfo" - }) - }; - - var hasRunOnce = false, - video = document.querySelector('#video'), - canvas = document.querySelector('#canvas'), - width = 640, - height, // calculated once video stream size is known - cameraStream; - - - function cameraOn(){ - videoSource = $("#videoSource").val(); - var constraints = {}; - if (videoSource == null) { - constraints = {audio: false, video: true}; - } else{ - constraints = { audio: false, video: { deviceId: {exact: videoSource}}}; - } - navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { - video.srcObject = stream; - video.onloadedmetadata = function(e) { - video.play(); - }; - }).catch(function(err) { - alert(err.name + ": " + err.message); - }); - } - - function cameraOff(){ - let stream = video.srcObject; - let tracks = stream.getTracks(); - tracks.forEach(function(track) { - track.stop(); - }); - video.srcObject = null; - } - - video.addEventListener('canplay', function(ev){ - if (!hasRunOnce) { - height = video.videoHeight / (video.videoWidth/width); - video.setAttribute('width', width); - video.setAttribute('height', height); - canvas.setAttribute('width', width); - canvas.setAttribute('height', height); - hasRunOnce = true; - } - }, false); - - - this.startStreaming = function () { - if(cameraTimer == null) { - self.ros.connect("ws://" + config.serv.dir + ":" + config.serv.port); - document.getElementById("activeCam").innerHTML = "CamServer active in address " + config.serv.dir + " and port " + config.serv.port; - cameraOn(); - cameraTimer = setInterval(function(){ - canvas.width = width; - canvas.height = height; - canvas.getContext('2d').drawImage(video, 0, 0, canvas.width, canvas.height); - var data = canvas.toDataURL('image/jpeg'); - var imageMessage = new ROSLIB.Message({ - format : "jpeg", - data : data.replace("data:image/jpeg;base64,", "") - }); - - var infoMessage = new ROSLIB.Message({ - height: canvas.height, - width: canvas.width - }) - self.imageTopic.publish(imageMessage); - self.cameraInfo.publish(infoMessage); - }, (1000/config.fps)); - } else { - ros.close(); - clearInterval(cameraTimer); - cameraTimer = null; - } - } - - this.restart = function() { - cameraOff(); - self.ros.close(); - } -} diff --git a/src/drivers/camserverWeb/public/js/bootstrap.min.js b/src/drivers/camserverWeb/public/js/bootstrap.min.js deleted file mode 100755 index 133aeecb9..000000000 --- a/src/drivers/camserverWeb/public/js/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/src/drivers/camserverWeb/public/js/camserverWeb.js b/src/drivers/camserverWeb/public/js/camserverWeb.js deleted file mode 100755 index 079d9154c..000000000 --- a/src/drivers/camserverWeb/public/js/camserverWeb.js +++ /dev/null @@ -1,62 +0,0 @@ -var config={}; -var camera; -var videoSelect = document.querySelector('select#videoSource'); -//avoid browser error -try { - const yaml = require('js-yaml'); - const fs = require('fs'); - config = yaml.safeLoad(fs.readFileSync('public/config.yml', 'utf8')); - $('#dir').val(config.serv.dir); - $('#port').val(config.serv.port); - $('#topic').val(config.topic); - $('#messageType').val(config.msgs); - $('#fps').val(config.fps); - localStorage["cameraserverconfig"]=JSON.stringify(config); - //in case of error, get the configuration of Configure menu - } catch (e) { - if (localStorage.getItem("cameraserverconfig")) { - config = JSON.parse(localStorage.getItem("cameraserverconfig")); - $('#dir').val(config.serv.dir); - $('#port').val(config.serv.port); - $('#topic').val(config.topic); - $('#messageType').val(config.msgs); - } else { - config.serv={}; - config.serv.dir= $('#dir').val(); - config.serv.port= $('#port').val(); - config.topic = $('#topic').val(); - config.msgs = $('#messageType').val(); - config.fps = $('#fps').val(); - } - } - - - navigator.mediaDevices.enumerateDevices() - .then(function (devices) { - for (var i = 0; i !== devices.length; ++i) { - var deviceInfo = devices[i]; - var option = document.createElement('option'); - option.value = deviceInfo.deviceId; - if (deviceInfo.kind === 'videoinput') { - option.text = deviceInfo.label || 'Camera ' + - (videoSelect.length + 1); - videoSelect.appendChild(option); - } - }}); - -$(document).ready(function() { - //Load configure parametres - camServer = new CameraServer(config); - camServer.start(); - - $('#save').on('click', function(){ - config.serv.dir = $('#dir').val(); - config.serv.port = $('#port').val(); - config.topic = $('#topic').val(); - config.msgs = $('#messageType').val(); - config.fps = $('#fps').val(); - camServer.restart(); - localStorage["cameraserverconfig"]=JSON.stringify(config); - }); - -}); diff --git a/src/drivers/camserverWeb/public/js/jquery.min.js b/src/drivers/camserverWeb/public/js/jquery.min.js deleted file mode 100755 index 0f60b7bd0..000000000 --- a/src/drivers/camserverWeb/public/js/jquery.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; - -return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("